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

Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 30 von 30

Thema: TIA S7-1500 Kopieren einer Struktur nach Array of Byte

  1. #21
    Registriert seit
    15.03.2013
    Beiträge
    180
    Danke
    6
    Erhielt 31 Danke für 28 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von RONIN Beitrag anzeigen
    @Mediator: OK, das mit Serialize auf "Im IDB" werd ich bei Gelegenheit mal probieren. Wenn es geht wäre es ein weiteres Indiz für die möglicherweise "seltsam optimierte" (ein vierter Begriff ) IDB-Option.

    ... aber dieses "im IDB setzen"wurde noch nirgends wirklich erklärt und erscheint mir so "dazwischen".
    Daher eben meine Frage ob jemand Details zum Mechanismus kennt. Und ja, es ist irre.
    @Ronin: halt das Forum bitte auf dem Laufenden!
    Der eigentliche Sinn von "im IDB setzen" ist Dir aber schon klar, oder? Damit kann man die Entscheidung pro Instanz entscheiden, ob die entsprechend markierten Variablen remanent sind oder nicht, ähnlich wie man das vielleicht in alten Projekten gehandhabt hat. Alles andere sind meines Erachtens Nebenwirkungen der Lösung (solche potentiell remanenten Daten separat halten), manchmal vielleicht sogar sinnvoll nutzbare.

    Persönlich würde ich das nur verwenden, wenn mir keine andere Alternative mehr einfällt. Das Serialisieren / Deserialisieren in / von Byte-Arrays müsste meines Erachtens auch ohne "im IDB setzen" funktionieren, auch wenn das momentan offensichtlich nicht der Fall ist.

  2. #22
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.214
    Danke
    430
    Erhielt 650 Danke für 490 Beiträge

    Standard

    Was es tun soll ist mir schon klar, wofür man es haben muss allerdings nicht. Die Remanenzeinstellung sollte ja logischerweise beim Bausteinersteller liegen und nicht beim Anwender...
    Mir fällt kein Anwendungsfall ein wo es mir bedeutend nutzen würde wenn der Bausteinanwender die Remanenz einstellen lasse.

    Zurück zum Thema.
    Ich hab hier jetzt auf einer 1512 beide Varianten ausprobiert. Das Serialize auf das Array mit "im IDB setzen" geht, das dürfte also eine Lösung für den TE sein.

    Dann hab ich noch einen Vergleich zwischen AT und Serialize probiert.
    Eine Teststruktur mit Größe 1000Byte (5x String[198]) auf jeweils ein Array[1..1000] of Byte.
    Der Baustein für das Serialze bekommt den 1000-Byte-Struct über denn IN übergeben, hat im OUT ein Array[1..1000] mit "im IDB setzen" auf dass die Daten per Serialize draufgeladen werden.
    Der Baustein mit AT hat ebenfalls den 1000-Byte-Struct am IN, allerdings schon dort mit "im IDB setzen", dann gibt es jeweils ein Array[1..1000] im IN (für das AT) und eines im OUT.
    Der einzige Code in dem FB ist das Umkopieren des AT-Arrays auf das OUT-Array. Alles mit optimierten Zugriff.
    Von jedem Baustein hab ich 5 Instanzen aufgerufen und dann dazwischen die Runtime gemessen.

    Hier der Screenshot dazu.
    Compare_SerializetoAT.jpg

    Laut dem Runtime dauert das Serialize länger. Das AT ist meistens in den hohen 10^-4s währen das Serialze eher in den niedrigen 10^-3s ist.
    Hab jetzt aber nicht viel probiert, vielleicht ist es sogar ein Laufzeitunterschied ob nun das "im IDB setzen" im IN oder im OUT deklariert wird.
    Vielleicht ist das Serialize wirklich langsamer als das einfache Umkopieren beim AT. Wer weiß, zum genauer anzuschauen fehlt mir heute die Muse.

    Hier das Testprojekt das ich verwendet hab, falls es jemand selber probieren will.
    CompATtoSERIAL.zip

    Komisch ist aber schon das ein Serialize welches laut Hilfe ausdrücklich einen "Standardzugriff" erfordert mit einem "optimierten - im IDB setzen" klar kommt.
    Langsam kommt mir der Verdacht dass die Teile die man "IDB setzen" markiert einfach ganz klassisch "nicht optimiert" gespeichert werden. Falls das überhaupt möglich ist.
    Geändert von RONIN (22.09.2016 um 18:58 Uhr)
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  3. #23
    shiks ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    05.03.2014
    Beiträge
    16
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ich habe jetzt auch mal bei Siemens nachgefragt und will euch natürlich diese Info nicht vorenthalten


    Antwort Siemens:
    momentan besteht noch keine Möglichkeit ein Array in ein Struct bzw. ein Struct in ein Array in einem optimierten Baustein direkt umzukopieren.

    Eine Alternative wäre es die Bausteine Serialize und Deserialize zu verwenden. Dies ist aber nur mit nicht optimierten Bausteinen bzw. mit der Remanenz "Im IDB setzen" möglich.

    Nähere Informationen zu diesen Bausteinen finden Sie unter folgendem FAQ beschrieben.

    https://support.industry.siemens.com.../view/42603881

    Eine weitere Alternative wäre es ein AT-Konstrukt zu verwenden. Dies können Sie auch in optimierten Bausteinen mit der Remanenz "Im IDB setzen" verwenden. Sie könnten die Struct z.B. mit einem Array überlagern und anschließend zwischen den Arrays umkopieren.

    Nähere Informationen zum AT-Konstrukt finden Sie unter folgendem FAQ beschrieben.

    https://support.industry.siemens.com.../view/57132240

  4. #24
    Registriert seit
    15.03.2013
    Beiträge
    180
    Danke
    6
    Erhielt 31 Danke für 28 Beiträge

    Standard

    Zitat Zitat von RONIN Beitrag anzeigen
    Dann hab ich noch einen Vergleich zwischen AT und Serialize probiert.
    ...

    Laut dem Runtime dauert das Serialize länger. Das AT ist meistens in den hohen 10^-4s währen das Serialze eher in den niedrigen 10^-3s ist.
    ...

    Komisch ist aber schon das ein Serialize welches laut Hilfe ausdrücklich einen "Standardzugriff" erfordert mit einem "optimierten - im IDB setzen" klar kommt.
    Langsam kommt mir der Verdacht dass die Teile die man "IDB setzen" markiert einfach ganz klassisch "nicht optimiert" gespeichert werden. Falls das überhaupt möglich ist.
    Ich gehe davon aus, dass Dein Beispiel eher für die Verwendung von Serialize spricht. Warum? Deine Struktur enthält Strings und außer dem Kopieren / Serialisieren gibt es keine Zugriffe.
    Angenommen Du hättest eine Struktur mit Bool, Integer, Real, usw. und Du würdest im Programm relativ oft auf die Strukturelemente zugreifen und etwas berechnen, dann würde das Programm relativ stark von der Einstellung "optimiert" profitieren bzw. relative stark verlangsamt, wenn Du diese Struktur mit Set in IDB "verbiegen" würdest. Bei so einem Programm würde ich erwarten, dass der Ansatz mit Serialize besser ist, wenn Du diese Struktur aus welchen Gründen auch immer in ein Byte - Array serialisieren müsstest.

    Ich denke, Du liegst mit Deinem Verdacht schon richtig, dass mit "Set in IDB" markierte Daten "nicht optimiert" gespeichert werden. Bei einem Byte-Array ist das allerdings kein Laufzeitnachteil. Trotzdem würde ich mit Set in IDB nur arbeiten, wenn mir keine Alternative mehr einfallen würde.

  5. #25
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.038
    Danke
    239
    Erhielt 862 Danke für 616 Beiträge

    Standard

    Was für ein Quatsch mit dem "optimierten" und "nicht optimierten" Zugriff um die Geschwindigkeit zu erhöhen.
    He Leute das sind Steuerungen der neusten Generation, die sollten ordentlich Power unter dem Plastikhäusle haben,
    ohne das sich der Programmierer Gedanken darüber machen muss um Zykluszeit zu sparen.
    Oder machen wir jetzt wieder ein Schritt Richtung S5 Zeiten.
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  6. #26
    Registriert seit
    09.08.2006
    Beiträge
    3.398
    Danke
    849
    Erhielt 614 Danke für 511 Beiträge

    Standard

    Zitat Zitat von Paule Beitrag anzeigen
    Was für ein Quatsch mit dem "optimierten" und "nicht optimierten" Zugriff um die Geschwindigkeit zu erhöhen.
    He Leute das sind Steuerungen der neusten Generation, die sollten ordentlich Power unter dem Plastikhäusle haben,
    ohne das sich der Programmierer Gedanken darüber machen muss um Zykluszeit zu sparen.
    Oder machen wir jetzt wieder ein Schritt Richtung S5 Zeiten.
    Sehe ich genauso!!!
    Meiner Meinung nach hat Siemens die "optimierten" DBs nur eingeführt, um den Zugriff von Fremdsytemen ala libnodave zu erschweren...
    Werd mein nächstes 1500er Projekt mal komplett nichtoptimiert durchziehen... Mal schaun was da rauskommt. Gibts da schon wieder Siemens Funktionen, die bei nichtoptimiert nicht funktionieren?

  7. #27
    Registriert seit
    23.07.2015
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hi,
    ich war vergangene Woche bei Siemens wegen V14.
    Ab dieser Version können die Bausteine "Serialize" und "Deserialize" auch auf optimierte Speicherbereiche zugreifen!
    Habe es auch in der Pilotversion testen können.
    Wenn man ein Projekt hochrüstet muss man in der Bibliothek zwingend die Bausteine auf Version 2.0 stellen!
    Außerdem ist Firmware 2.0 auf den CPUs notwendig.

    Grüße
    DarthMaddin

  8. #28
    shiks ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    05.03.2014
    Beiträge
    16
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von Paule Beitrag anzeigen
    Was für ein Quatsch mit dem "optimierten" und "nicht optimierten" Zugriff um die Geschwindigkeit zu erhöhen.
    He Leute das sind Steuerungen der neusten Generation, die sollten ordentlich Power unter dem Plastikhäusle haben,
    ohne das sich der Programmierer Gedanken darüber machen muss um Zykluszeit zu sparen.
    Oder machen wir jetzt wieder ein Schritt Richtung S5 Zeiten.
    Meiner kurzen Erfahrung nach macht es einen großen unterschied ob man optimiert arbeitet oder nicht.
    In meinem aktuellen (und ersten) 1500er Projekt habe ich meine Standardbausteine aufrund von bequemlichkeit,Zeitersparniss und weil ich wusste das die Bausteine funktionieren einfach migriert.
    Die neu hinzugekommen Funktionen habe ich dann optimiert angelegt.

    Die Zykluszeit war erschreckend hoch bei 50ms also habe ich alles bis auf 1-2 austehende Standardbausteine optimiert und siehe da die Zykluszeit ist aktuell bei ca 7-10ms.

    Es gab auch schon einen Beitrag hier im Forum der das Thema durchgekaut hat und bei dem ist so ganz grob raugekommen:
    alles optimert = kürzest mögliche Zykluszeit
    nur Standardzugriff = bis zu 3x mal langsamer
    Mischbetrieb = bis zu 6x mal langsamer

  9. #29
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.017
    Danke
    511
    Erhielt 2.648 Danke für 1.910 Beiträge

    Standard

    Also kann man ja imerhin die Bausteine, bei denen man spezielle Zugriffe (HMI; Libnodave, Any) nutzen will nicht optimiert machen. "Normale" FB lasse ich auch auf "optimiert" stehen.
    Man muß nicht Alles "optimiert" machen. Hinzu kommt, dass ach nicht optimierte Bausteine schnell sen können, auf die Datenstruktur kommt es an, denn das ist es, was Siemens da eingentlich optimiert, Zugriffe durch die CPU sollen möglicht mit wenigen Schreib/Lesezyklen erfolgen.

    Für mich ist das ein typischen Siemens-Debakel. Man bürdet den Programmiereren die Last auf zu entscheiden und umzusetzen. Das im Lichte dessen, dass man mit "optimierten" Bausteinen nciht alles machen kann. Man denke hier nur mal an Bitmeldungen für die HMI, die man im DB schön Bitweise mit Nummer im Variablennamen sehen möchte. Das geht nicht "optimiert". Ein Hoch auf guten Code. Bei Codesys muß ich mich um so etwas wirklich kaum mal kümmern, was also macht Suemens da?
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  10. #30
    Registriert seit
    09.08.2006
    Beiträge
    3.398
    Danke
    849
    Erhielt 614 Danke für 511 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Schneller oder langsamer ist halt immer relativ... Fuer mich stellt 10mal langsamer kein Problem dar, wenn die Zykluszeit dann bei 50ms liegt. In der Prozessautomatisierung reicht das in der Regel dicke aus.

Ähnliche Themen

  1. Antworten: 5
    Letzter Beitrag: 15.04.2016, 11:42
  2. TIA Struktur (16-Bit) nach WORD kopieren ?
    Von zephyr im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 22.06.2015, 12:56
  3. Struktur in Array von Typ DWORD kopieren
    Von bernd81 im Forum CODESYS und IEC61131
    Antworten: 1
    Letzter Beitrag: 07.10.2014, 07:33
  4. Array of Byte in Struktur kopieren
    Von thomas187 im Forum CODESYS und IEC61131
    Antworten: 4
    Letzter Beitrag: 29.01.2014, 09:21
  5. TIA Struktur in Array of Bytes kopieren
    Von gargantua im Forum Simatic
    Antworten: 13
    Letzter Beitrag: 08.12.2013, 19:52

Lesezeichen

Berechtigungen

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