UsernameS7
Level-1
- Beiträge
- 11
- Reaktionspunkte
- 0
-> Hier kostenlos registrieren
Guten Tag liebe Member,
ich bin schon länger stiller Mitleser und konnte mir hier immer gute Lösungsansätze holen, nun komme ich nicht weiter und benötige Hilfe.
Zu meinem Vorhabenn:
In einem FB x rufe ich FB y auf dieser besitzt auch einen DB y.
Im FB y habe ich eine IN-Variable als Daten mit dem Datentyp ANY deklariert.
Im FB x (FUP) gebe ich an der Variable Daten ein Array aus einem anderen DB an, Form: DB z.dbx 202.0 BYTE 12
Dieser Eingang wird dann von Step 7 zu: "DB_z".S[2].A1.Read.DATEN.Datenteile.teilenummer umgeformt. Soweit ist alles gut.
Jetzt will ich aber die Daten mit der Länge von 12 Bytes im FB y über ein Blockmove in den DB y schreiben/kopieren.
Im FB y habe ich schon die Eingangswerte von E 0.0 bis E100.0 über ein ANY-Zeiger in den DB y geschrieben und genauso wieder raus. Sinn und Zweck der Verwendung des Anyzeiger war, das die Bausteine immer wieder verwendet werden können und sich selbst über die Variablen die Adresse holen. Das funktioniert auch, nur bei meinem vorhaben mit dem Array nicht.
Mein Programm sieht folgender Maßen aus:
Der Fehler an Ret_Val lautet 8124 entspricht "Bereichsfehler beim lesen eines Parameters"
Jedoch kann ich mit dem Fehler nicht viel anfangen, ich vermute es liegt an der Angabe im Speicherbereich des ANY-Zeigers.
Nur was gebe ich an wenn meine Adresse eine ANY Variable (Datenholen) ist?
Ich hoffe mir kann hier einer auf die Sprünge helfen und danke im Voraus!
ich bin schon länger stiller Mitleser und konnte mir hier immer gute Lösungsansätze holen, nun komme ich nicht weiter und benötige Hilfe.
Zu meinem Vorhabenn:
In einem FB x rufe ich FB y auf dieser besitzt auch einen DB y.
Im FB y habe ich eine IN-Variable als Daten mit dem Datentyp ANY deklariert.
Im FB x (FUP) gebe ich an der Variable Daten ein Array aus einem anderen DB an, Form: DB z.dbx 202.0 BYTE 12
Dieser Eingang wird dann von Step 7 zu: "DB_z".S[2].A1.Read.DATEN.Datenteile.teilenummer umgeformt. Soweit ist alles gut.
Jetzt will ich aber die Daten mit der Länge von 12 Bytes im FB y über ein Blockmove in den DB y schreiben/kopieren.
Im FB y habe ich schon die Eingangswerte von E 0.0 bis E100.0 über ein ANY-Zeiger in den DB y geschrieben und genauso wieder raus. Sinn und Zweck der Verwendung des Anyzeiger war, das die Bausteine immer wieder verwendet werden können und sich selbst über die Variablen die Adresse holen. Das funktioniert auch, nur bei meinem vorhaben mit dem Array nicht.
Mein Programm sieht folgender Maßen aus:
Code:
// Erstellung des Quell-Pointers
LAR1 P##Quelle //Lade die Anfangsadresse des ANY-Pointers in AR1
L B#16#10 //S7-code immer b#16#10 = 10hex
T LB [AR1,P#0.0]
L B#16#2 //Datentyp: 02 = Byte
T LB [AR1,P#1.0]
L 12 //Anzahl/Wiederholfaktor
T LW [AR1,P#2.0]
L 0
T LW [AR1,P#4.0]
L B#16#0 //Auswahl Eingänge bzw Speicherbereich
T LB [AR1,P#6.0]
L B#16#0 //Adressbelegung: 0 = 000
T LB [AR1,P#7.0] //Adressformat: Byte.Bit wobei Byte aufgeteilt in Bit0-2 von 7. Byte
L P##Datenholen //Adressanfang (Zeiger)
SLD 3
L #Offset_Quelle //Laden des Offsets
+D // Addieren
T LW [AR1,P#8.0] //Adressformat: Byte.Bit wobei Byte in Bit0-7 von 8.Byte
CALL "BLKMOV"
SRCBLK :=#Quelle
RET_VAL:=#RET_VAL_Block
DSTBLK :=#Ziel
NOP 0
Der Fehler an Ret_Val lautet 8124 entspricht "Bereichsfehler beim lesen eines Parameters"
Jedoch kann ich mit dem Fehler nicht viel anfangen, ich vermute es liegt an der Angabe im Speicherbereich des ANY-Zeigers.
Nur was gebe ich an wenn meine Adresse eine ANY Variable (Datenholen) ist?
Ich hoffe mir kann hier einer auf die Sprünge helfen und danke im Voraus!
Zuletzt bearbeitet: