Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 36

Thema: TIA - Softwarestruktur

  1. #21
    Registriert seit
    05.04.2012
    Beiträge
    952
    Danke
    94
    Erhielt 216 Danke für 191 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Ralle Beitrag anzeigen
    @zako Oder man nutzt Array mit Index, kann dann aber keine so schönen symbolischen Namen mehr nutzen und hat ein Problem, wenn man den DB wechseln will, weil man z.Bsp. Rezeprgruppen in DB verwaltet. Da fehlt mit irgendwie noch ein ganz kleines Stück, aber villeicht fällt uns noch etwas ein.
    IndirekterFeldzugriff.jpg

    Schaut doch ganz hübsch aus .
    Wenn man es über mehrdimensionale Arrays macht, dann ist man auch recht flexibel.

  2. #22
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.746
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Aufgrund der späteren Erweiterbarkeit wollen wir aber einfach nicht alles in einem DB mit einem riesigen Array! Wenn man dann später mal erweitern muss, hatt man wahrscheinlich die Bausteinreserve aufgebraucht, und muss den Baustein überschreiben. Das geht bei einer großen Förderanlage einfach nicht! Die kann Ich nicht einfach so mal leerfahren!
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  3. #23
    Registriert seit
    05.10.2006
    Beiträge
    324
    Danke
    11
    Erhielt 8 Danke für 7 Beiträge

    Standard

    Wenn man dann später mal erweitern muss, hatt man wahrscheinlich die Bausteinreserve aufgebraucht, und muss den Baustein überschreiben.
    Dachte bei der 1500 gehen die Werte beim überschreiben nicht mehr verloren bzw. bleiben sicher erhalten.....

    Geht das eigentlich alles in die Richtung keine DB mehr zu verwenden? Beckhoff bzw. Codesys etc. kennen ja auch keine Datenbausteine ala Siemens?
    Geändert von Pico1184 (10.03.2015 um 15:07 Uhr)

  4. #24
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.746
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Zitat Zitat von Pico1184 Beitrag anzeigen
    Dachte bei der 1500 gehen die Werte beim überschreiben nicht mehr verloren bzw. bleiben sicher erhalten.....

    Geht das eigentlich alles in die Richtung keine DB mehr zu verwenden? Beckhoff bzw. Codesys etc. kennen ja auch keine Datenbausteine ala Siemens?
    ja, aber nur wenn man die bausteinreserve gross genug macht, d.h dann kannst du auch gleich einfach 100dert weitere array elmente anlegen... und ab und an kommts dann trotzdem vor das tia meint der db wäre inkosistent...
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  5. #25
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.746
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Wenns fürs indirekte db öffnen nichts gibt, dann bleib ich erstmal bei awl und indirekter adressierung, nur das ich die adressen einzelner elemente per any pointer adressiere, mal schaun wie perfomant das auf ner 1500er läuft! nur das debuggen ist halt beschissen, da man die adress und db register nicht mehr beim beobachten sieht...
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  6. #26
    Registriert seit
    29.03.2004
    Beiträge
    5.741
    Danke
    143
    Erhielt 1.687 Danke für 1.226 Beiträge

    Standard

    Zitat Zitat von Jochen Kühner Beitrag anzeigen
    Wenns fürs indirekte db öffnen nichts gibt, dann bleib ich erstmal bei awl und indirekter adressierung, nur das ich die adressen einzelner elemente per any pointer adressiere, mal schaun wie perfomant das auf ner 1500er läuft! nur das debuggen ist halt beschissen, da man die adress und db register nicht mehr beim beobachten sieht...
    Da wäre ein Vergleich mit der Variante wie von Siemens vorgeschlagen interessant, bei dem jedes mal der komplette Datensatz kopiert wird.

    Also z.B. ein UDT von 512 Bytes Größe. In einer Schleife soll auf eine Anzahl x (z.B. 100) unstrukturierte Instanzen dieser UDT auf ein Element wie ein Integer zugegriffen werden.

    Bei Variante a) wird wie von Siemens vorgeschlagen mit einer Funktion gearbeitet welche bei jeder Instanz kompletten UDT auf eine lokale Instanz umkopiert.

    Variante b) benutzt "nicht optimierte" DBs mit AWL und indirekter Adressierung wie es bei S7-Classic möglich war.

  7. #27
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.746
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Da wäre ein Vergleich mit der Variante wie von Siemens vorgeschlagen interessant, bei dem jedes mal der komplette Datensatz kopiert wird.

    Also z.B. ein UDT von 512 Bytes Größe. In einer Schleife soll auf eine Anzahl x (z.B. 100) unstrukturierte Instanzen dieser UDT auf ein Element wie ein Integer zugegriffen werden.

    Bei Variante a) wird wie von Siemens vorgeschlagen mit einer Funktion gearbeitet welche bei jeder Instanz kompletten UDT auf eine lokale Instanz umkopiert.

    Variante b) benutzt "nicht optimierte" DBs mit AWL und indirekter Adressierung wie es bei S7-Classic möglich war.
    ich probier da mal ein bischen rum und poste dann etwas über das zeitverhalten!

    problem ist, ich hab nur ne 1518 zur hand und daher kein plan wies später mit kleinen cpus aussieht!
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  8. #28
    Registriert seit
    24.04.2013
    Beiträge
    309
    Danke
    23
    Erhielt 160 Danke für 88 Beiträge

    Standard

    Hi all

    S. hat keine Möglichkeit für uns optimierte Datenbausteine so flexibel zu verwenden wie es mit ANY, AUF DI, AR2 und AWL bei standard Datenbausteinen geht.
    -- Ärger --

    Ich habe mich schon ein paar mal mit Variant versucht. Und mit den neuen Funktionen VariantPut und VariantGet kann man einiges von dem was mit ANY, AUF DI, AR2 und AWL geht auch in SCL, FUP und KOP bei Optimierten machen.
    Das ist manchmal schneller als mit AR2, wenn die Strukturen klein sind und manchmal langsamer, wenn die Strukturen groß sind.
    Jetzt kommt es drauf an wieviel des Programms mit diesen seltsamen Zeigern arbeitet.

    Ein Variant an der Schnittstelle ist eine Referenz, an kann ihn versorgen womit immer man will. D.h. da wird nix kopiert. Das ist schnell. Die beiden Variant-Funktionen kopieren die Daten aber dann doch in eine lokale Variable, die genau den Typen haben muss, mit dem man 4 Aufrufe drüber den Variant versorgt hat.

    Bei dem einen Altprogramm aus Step7 V5 Zeiten das ich hatte, konnte ich die Kopieraktion an vier Stellen bündeln. D.h. 99% des Programms arbeiten mit der Kopie und 1% arbeitet mit den Orginaldaten in verschiedenen DB. Das Programm läuft jetzt auf einer 1516. Es hat in der migrierten AWL-ANY-Version 136ms Zykluszeit. In der nachgearbeiteten SCL-FUP-Variant-Version hat es eine Zykluszeit von 44ms. Aus der 319 hatte es eien Zykluszeit von ein bischen über 200ms.

    Bei einem anderen Altprogramm werden auf einer großen Struktur in den verschiedensten Bausteine Zugriffe gemacht. AWL-ANY benötigt zwischen 85 und 95ms. Die nachgearbeitet Version hat 24 VariantGet und 6 VariantPut und braucht 140ms. Mist.

    Dann gibt es noch einen Trick, der aber auch nicht wirklich weit kommt. Es gibt sogenannte ArrayDB. Das sind DB, die aus einem Array of UDT bestehen. Auf diese kann man mit ReadFromArrayDB und WriteToArrayDB zugreifen. Der DB wird mittels eines Inputs von Typ ANY_DB ausgewählt und dann gibt man noch einen index für den Zugriff auf das Array mit.

    Um genau das zu bekommen, was Jochen machen will kann man nun folgendes machen. Man erzeugt sich viele ArrayDB of myUDT. Wobei aber immer nur ein Element im Array ist. Dann macht man sich in einem DB ein Array of ANY_DB. Und in einem anderen DB egt man sich einen myUDT an. Dann kann man in einer Funktion mittels Index aus dem Array den DB auswählen und erhält mittel ReadFromArrayDB( db := ArrayOfANY_DB[ index ], index := 0, dest => "Arbeitskopie".myUDTvar ) eine Kopie des Inhalt aus dem Array DB. Die Gegenrichtung klappt ganz ähnlich. Es ist auch nicht nötig myUDTvar in einem andern Db zu haben, geht auch in der Temp.

    Alles in allem ein rechter Krampf, aber jetzt hat man eine Multiplexer der optimierten Inhalt über die DB-Nummer, denn nichts andres ist im ANY_DB, auswählt.
    Nachteil 1: Jeder ANY_DB hat einen Overhead von 48 Byte. Für kleine Strukturen ist eine Struktur pro ArrayDB sehr unwirtschaftlich. Aber man kann ja dann 100 davon reinlegen.
    Nachteil 2: Die Funktionen kopieren die Daten, d.h. für große Strukturen wird es wieder unwirtschaftlich.
    Nachteil 3: Wie bekommt man die DB-Namen in das Array of DB_ANY. Bisher klappt das nur über die DB-Nummer ... Was soll das?

    Es ist zum aus der Haut fahren. Man erkennt die Ansätze, aber irgenwie ist das alles unfertig. Es fehlen die Möglichkeit einen Variant im DB zu speichern und auf den Variant ohne eine Kopie zuzugreifen.

    Was die 1516 allerdings deutlich schneller kann als die 319 ist der Zugriff auf viele DB. Eines meiner migrierten Programme greift in einem FC auf viele DB zu, 36 DB werden verwendet. Der Baustein besteht im wesentlichen aus AUF DBa, L b, AUF DBc, T d. Zykluszeit auf der 319 33 ms. Davon die Hälfte in dieser unsäglichen Kopierorgie. Das bekommt man raus, wenn man mal den einen Call per M-Bit überspringt. Da läuft das Programm zwar nicht mehr richtig, aber der Rest verbrät immernoh die gleiche Zeit. Zykluszeit auf der 1516 16 ms, das Kopieren verbraucht irgendwie nur 1ms oder sogar weniger.


    'n schön' Tach auch
    HB

  9. Folgende 4 Benutzer sagen Danke zu HelleBarde für den nützlichen Beitrag:

    Andi_ (11.03.2015),Jochen Kühner (10.03.2015),rostiger Nagel (11.03.2015),Thomas_v2.1 (10.03.2015)

  10. #29
    Registriert seit
    29.03.2004
    Beiträge
    5.741
    Danke
    143
    Erhielt 1.687 Danke für 1.226 Beiträge

    Standard

    Das hört sich ja alles sehr kompliziert an...
    Bei diesem Variant Parametertypen sehe ich noch als Nachteil, dass es bei der Beschaltung des Aufrufs keine Typprüfung gibt.

    Wenn ich mir was wünschen durfte, dann einen Datentypen wie:
    data : reference to myUDT;

    Pointerarithmetik oder sonstige Zaubereien sind nicht erlaubt. Damit hätte man eine Typsicherheit, und könnte mindestens 10 halbgare Funktionen aus dem Befehlsatz entfernen.

  11. #30
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.746
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Das laufende umkopieren ist ja auch nicht wirklich eine Lösung für mich, dadurch wird die Wahrscheinlichkeit das meine Visu irgendwelche Bits im DB korrigieren kann immer geringer.
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

Ähnliche Themen

  1. Antworten: 22
    Letzter Beitrag: 10.08.2017, 09:48
  2. [TIA-V11] Rechnet TIA falsch bei SCL
    Von BlackLizzard im Forum Simatic
    Antworten: 43
    Letzter Beitrag: 09.02.2016, 02:59
  3. TIA Kompatibilität TIA Professional <--> TIA Basic
    Von TimeOUT im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 21.08.2015, 19:28
  4. Antworten: 0
    Letzter Beitrag: 06.04.2012, 08:37
  5. Antworten: 0
    Letzter Beitrag: 22.01.2012, 18:59

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •