Need4Speed
Level-2
- Beiträge
- 32
- Reaktionspunkte
- 0
-> Hier kostenlos registrieren
Hallo zusammen,
(TIA V17, S7-1500; wenn möglich auch V15 noch)
ich versuche gerade den Inhalt eines DB (kann für meine Zwecke sowohl Instanz- als auch GlobalDB sein; ist recht groß/lang (1344 Bytes)) auf den Ausgangsbereich zu kopieren. SERIALIZE klingt ja wie gemacht dafür, habe aber nur Beispiele dafür mit Datenbausteinen gefunden. Kennt ihr eine Möglichkeit, wie man SERIALIZE (bzw. DESERIALZE) dazu bringen könnte, "statStore" auf den Ausgangsbereich zu kopieren? Vielleicht indem man den ein Struct/UDT verwendet?
Hier im Forum habe ich https://www.sps-forum.de/threads/ti...r-nach-array-of-byte.84169/page-2#post-633238 gefunden; dort wird auf https://support.industry.siemens.com/cs/document/57132240/wie-programmieren-sie-in-step-7-(tia-portal)-die-überlagerung-von-variablen-mit-dem-schlüsselwort-at-?dti=0&lc=de-DE verlinkt. Dort:
Mal so versucht und es geht auch (man muss nur wirklich im Deklarationsteil des FB das "retain" im "idb" aktivieren).
Klingt augenscheinlich vielversprechend, aber jetzt fehlt mir noch der Schritt, "#LocalStaticArrayRetainInIDB" auf den Ausgangsbereich zu kopieren. (Wirkt aber irgendwie alles zu kompliziert; früher (S7 Classic) war alles noch so einfach
)
Eine Idee wäre noch, einen Array-DB anzulegen mit derselben Länge (also z.B. Array 0..1343 OF Byte) anzulegen, und dann mit einer FOR Schleife zu kopieren. Dieser naive Ansatz geht leider nicht (klingt auch nicht sinnvoll, da manuell mit einer Schleife drüber zu gehen):
Wäre es mit MOVE_BLK oder MOVE_BLK_VARIANT vielleicht möglich? Hat jemand noch Ideen? Vielen Dank vorab!!
Viele Grüße, Jürgen
(TIA V17, S7-1500; wenn möglich auch V15 noch)
ich versuche gerade den Inhalt eines DB (kann für meine Zwecke sowohl Instanz- als auch GlobalDB sein; ist recht groß/lang (1344 Bytes)) auf den Ausgangsbereich zu kopieren. SERIALIZE klingt ja wie gemacht dafür, habe aber nur Beispiele dafür mit Datenbausteinen gefunden. Kennt ihr eine Möglichkeit, wie man SERIALIZE (bzw. DESERIALZE) dazu bringen könnte, "statStore" auf den Ausgangsbereich zu kopieren? Vielleicht indem man den ein Struct/UDT verwendet?
Hier im Forum habe ich https://www.sps-forum.de/threads/ti...r-nach-array-of-byte.84169/page-2#post-633238 gefunden; dort wird auf https://support.industry.siemens.com/cs/document/57132240/wie-programmieren-sie-in-step-7-(tia-portal)-die-überlagerung-von-variablen-mit-dem-schlüsselwort-at-?dti=0&lc=de-DE verlinkt. Dort:
Die Überlagerung von Variablen ist für Codebausteine mitStandardzugriff und für Codebausteine mit optimiertem Zugriff möglich, wobeiSie bei Codebausteinen mit optimiertem Zugriff die Remanenzeinstellung “Im IDBsetzen“ wählen müssen.
Mal so versucht und es geht auch (man muss nur wirklich im Deklarationsteil des FB das "retain" im "idb" aktivieren).
Code:
#RetVal := Serialize(SRC_VARIABLE:="DB_Array_1344", DEST_ARRAY=>#LocalStaticArrayRetainInIDB, POS:=#SerPos);
Klingt augenscheinlich vielversprechend, aber jetzt fehlt mir noch der Schritt, "#LocalStaticArrayRetainInIDB" auf den Ausgangsbereich zu kopieren. (Wirkt aber irgendwie alles zu kompliziert; früher (S7 Classic) war alles noch so einfach

Eine Idee wäre noch, einen Array-DB anzulegen mit derselben Länge (also z.B. Array 0..1343 OF Byte) anzulegen, und dann mit einer FOR Schleife zu kopieren. Dieser naive Ansatz geht leider nicht (klingt auch nicht sinnvoll, da manuell mit einer Schleife drüber zu gehen):
Code:
#offset_ausgang := 444;
FOR #i := 0 TO 1343 DO
%QB[#offset_ausgang + #i] := MeinArrayDB.data[#i];
END_FOR;
Wäre es mit MOVE_BLK oder MOVE_BLK_VARIANT vielleicht möglich? Hat jemand noch Ideen? Vielen Dank vorab!!
Viele Grüße, Jürgen