HarryH
Level-1
- Beiträge
- 142
- Reaktionspunkte
- 4
-> Hier kostenlos registrieren
Hallo zusammen,
Ich habe einen DB mit 16160Byte. Das ist ein DB mit Parametersätzen für 99 verschiedene Produkte. Ein Parametersatz hat 160Byte. Der Aufbau ist folgender:
Byte 0- 159 Arbeitsfach
Byte 160- 319 Parametersatz 1
Byte 320- 479 Parametersatz 2
...
Byte 15840-15998 Parametersatz 99
Byte 16000-16158 Sicherungsfach
In meinem S7-Programm habe habe ich nur die Parameter im Arbeitsfach verarbeitet. Wird das Produkt gewechselt, kopiere ich mit dem SFC20 den jeweiligen Parametersatz in das Arbeitsfach. Das mache ich dynamisch, indem ich mir den ANY-Pointer abhängig vom angewählten Produkt auf den entsprechenden Parametersatz berechne. Das sieht so aus:
Nun habe ich festgestellt, das ab Parametersatz 53 (Byte 8480) der Datensatz nicht mehr kopiert wird. Weiß jemand woran das liegen kann? Gibt es irgendwo einen Überlauf? Oder wie kann ich das Netzwerk 2 in welchem ich den ANY-Pointer zusammenstelle anders aufbauen? Bin für jeden Hinweis dankbar!
Gruß HarryH
Ich habe einen DB mit 16160Byte. Das ist ein DB mit Parametersätzen für 99 verschiedene Produkte. Ein Parametersatz hat 160Byte. Der Aufbau ist folgender:
Byte 0- 159 Arbeitsfach
Byte 160- 319 Parametersatz 1
Byte 320- 479 Parametersatz 2
...
Byte 15840-15998 Parametersatz 99
Byte 16000-16158 Sicherungsfach
In meinem S7-Programm habe habe ich nur die Parameter im Arbeitsfach verarbeitet. Wird das Produkt gewechselt, kopiere ich mit dem SFC20 den jeweiligen Parametersatz in das Arbeitsfach. Das mache ich dynamisch, indem ich mir den ANY-Pointer abhängig vom angewählten Produkt auf den entsprechenden Parametersatz berechne. Das sieht so aus:
Code:
// Netzwerk 1
L #Produkt // Aus aktuellem Produkt und ...
L 160 // der Datensatzlänge ...
*I
T #QuellDW // die QUELL-Startadresse berechnen.
// Netzwerk 2
LAR1 P##Quelle // Anfangsadresse des ANY-Pointers in AR1 laden
L B#(16, 2) // Syntax-ID und Typ: Byte laden
T LW [AR1,P#0.0]
L 160 // zu kopierende Länge (in Byte)
T LW [AR1,P#2.0]
L 300 // Quelle-DB
T LW [AR1,P#4.0]
L P#DBX 0.0 // Anfangs-Adresse im Quell-DB
L #QuellDW
SLW 3
+D
T LD [AR1,P#6.0]
// Netzwerk 3
CALL SFC 20
SRCBLK :=#Quelle
RET_VAL:=#RET_value
DSTBLK :=P#DB300.DBX0.0 BYTE 160
Gruß HarryH