TIA Bereich kopieren von ARRAY nach Struct

stepper7

Level-2
Beiträge
261
Reaktionspunkte
11
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich muss Bereiche aus einem DB umkopieren in einen anderen DB und bekomm das irgendwie nicht hin. (TIA V15)
Das Problem ist, das ich aus einem DB mit Array Elemente (28x) in einen anderen DB der kein Array hat reinkopieren muss in ein bestimmten Bereich (Struct). Beide Datentyp Char.
Mit move_blk geht es gar nicht, der kann nur array nach array kopieren.
Und mit move_blk_variant bekomm ich einen Fehler mit RET_VAL = -32127
Wie könnte man das lösen ? In SCL hat es auch nicht geklappt mit einer FOR Schleife da ja kein ARRAY im Ziel DB.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich nehme an es ist eine S7-1500, da MOVE_BLK_VARIANT nur für die S7-1500 gibts.
Für MOVE_BLK_VARIANT, anstatt eine INT Variabel eine WORD Variabel für den RET_VAL.
INT = -32127 Decimal entspricht WORD = 8281 Hexadecimal = "The COUNT parameter has an invalid value"
 
Was spricht dagegen es einzeln zu machen? sind ja nur lächerliche 28 Zeilen in SCL und geht schneller und sicherer.

Man könnte es auch in eine Funktion packen, aber da kann man auch gleich die paar Zeilen in SCL tippen.
 
Was spricht dagegen es einzeln zu machen? sind ja nur lächerliche 28 Zeilen in SCL und geht schneller und sicherer.

Man könnte es auch in eine Funktion packen, aber da kann man auch gleich die paar Zeilen in SCL tippen.

Und wenn es beim nächsten mal 1024 Elemente sind?
Was wenn die Array´s geändert wird von 28 auf 30, dann muss man dort immer händisch nachtippen...
 
Probier mal den Verfahren in Beispiel 2:
https://support.industry.siemens.com/cs/ww/de/view/42603881

Bemerk die Voraussetzungen:
Voraussetzung 1: Deaktivieren des optimierten Bausteinzugriffs
  1. Machen Sie in der Projektnavigation einen Rechtsklick auf die Funktion "Copy"
  2. Klicken Sie auf "Eigenschaften"
  3. Wählen Sie in der rechten Spalte "Attribute" aus
  4. Entfernen Sie das Häkchen bei "Optimierter Bausteinzugriff"
Voraussetzung 2: Unter Remanenz "Im IDB setzen" auswählen

  1. Nehmen Sie anstelle eines FCs einen FB
  2. Speichern Sie das Array ("tempStore") als statische Variable ab
  3. Wählen Sie bei bei dem Array ("tempStore") in der Spalte "Remanenz" "Im IDB setzen" aus

Oder..
AT-Sicht verwenden um die nicht-Array Daten als Array zu betrachten.
In den Fall gibt es dieselbe Voraussetzungen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin stepper7,

es geht mit den beiden Funktionen serialize und deserialize.
Das benutze ich bei Telegrammverkehr (Rohtelegramm in Telegrammart (Auftrag, Status, etc.) umkopieren).

Also serialize überträgt aus einem Datenbereich in ein Array[0..n] of Byte und deserialize überträgt aus einem Array[0..n] of Byte in einen beliebigen Datenbereich.

Das Array[0..n] of Byte könnte man z.B. temporär anlegen. Ich hatte mir mal eine kleine Funktion geschrieben:

POOL_copy.PNG

Diese setze ich ständig ein. Ja: sie ist nicht gut kommentiert und ja: man muss ja kein Array mit 6000 Byte anlegen. Aber es funktioniert prinzipiell und hat mir schon gute Dienste geleistet.

VG

MFreiberger

P.S.: Außerdem könnte man die Returnvalues der Bausteine noch nach Außen legen usw. usw...
 
Zurück
Oben