TIA PEEK POKE umstellung auf S7-1500, Problem mit Valve

kliebisch.m

Level-1
Beiträge
120
Reaktionspunkte
5
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, ich habe einen SCL Baustein von der S7-300 auf S7-1500 versucht.

S7-300:
#TMP_Arbeitsdaten:= #Arbeitsdaten;
#TMP_Werkzeugdaten:= #Werkzeugdaten_0;
#INT_Adresse_AD:= DWORD_TO_INT(#TMP_AT_AD.Adressse); // Adresse von DWord in Int wandeln
#INT_Adresse_WD:= DWORD_TO_INT(#TMP_AT_WD.Adressse); // Adresse von DWord in Int wandeln
#INT_DB_Nummer:= DWORD_TO_INT(#TMP_AT_WD.Baustein); // DB Nummer von DWord in Int wandeln
#INT_Startadresse_AD:= (#INT_Adresse_AD/8); // Adresse durch 8 teilen da auf Bytes zugegriffen wird
#INT_Startadresse_WD:= (#INT_Adresse_WD/8); // Adresse durch 8 teilen da auf Bytes zugegrifffen wird

IF #Daten_laden = True AND #Daten_speichern= false AND #TMP_AT_AD.Anzahl = #TMP_AT_WD.Anzahl THEN // Daten aus Werkzeug DB laden

FOR #ByteOffset_laden := 0 TO (#TMP_AT_AD.Anzahl-1) DO // Schleifenzähler von 0 bis je nach länge des Structes

WORD_TO_BLOCK_DB(#TMP_AT_AD.Baustein). DB ( #INT_Startadresse_AD+#ByteOffset_laden):=
WORD_TO_BLOCK_DB(INT_TO_WORD(#Werkzeugnummer+#INT_DB_Nummer)).DB( #INT_Startadresse_WD+#ByteOffset_laden);

END_FOR;
END_IF;


S7-1500:
#TMP_Arbeitsdaten:= #Arbeitsdaten;
#TMP_Werkzeugdaten:= #Werkzeugdaten_0;
#INT_Adresse_AD:= DWORD_TO_INT(#TMP_AT_AD.Adressse); // Adresse von DWord in Int wandeln
#INT_Adresse_WD:= DWORD_TO_INT(#TMP_AT_WD.Adressse); // Adresse von DWord in Int wandeln
#INT_DB_Nummer:= DWORD_TO_INT(#TMP_AT_WD.Baustein); // DB Nummer von DWord in Int wandeln
#INT_Startadresse_AD:= (#INT_Adresse_AD/8); // Adresse durch 8 teilen da auf Bytes zugegriffen wird
#INT_Startadresse_WD:= (#INT_Adresse_WD/8); // Adresse durch 8 teilen da auf Bytes zugegrifffen wird

IF #Daten_laden = True AND #Daten_speichern= false AND #TMP_AT_AD.Anzahl = #TMP_AT_WD.Anzahl THEN // Daten aus Werkzeug DB laden

FOR #ByteOffset_laden := 0 TO (#TMP_AT_AD.Anzahl-1) DO // Schleifenzähler von 0 bis je nach länge des Structes

POKE(area:=16#84, dbNumber:=(#TMP_AT_AD.Baustein), byteOffset:=(#INT_Startadresse_AD+#ByteOffset_laden),value:=(_in_)):=
PEEK(area:=16#84, dbNumber:=(INT_TO_WORD(#Werkzeugnummer+#INT_DB_Nummer)), byteOffset:=(#INT_Startadresse_WD+#ByteOffset_laden));

END_FOR;
END_IF;



Ich weiß nicht, was ich in Valve=(_in_) in der Zeile POKE schreiben soll in dem Fall???

Vielleicht weiß jemand eine Antwort darauf, wie hier die Lösung aussieht.

Danke
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Da müsste der Rückgabewert vom PEEK hin, etwa so (nicht getestet):
Code:
#temp_Byte := PEEK(area:=16#84, dbNumber:=INT_TO_WORD(#Werkzeugnummer+#INT_DB_Nummer), byteOffset:=#INT_Startadresse_WD+#ByteOffset_laden);
POKE(area:=16#84, dbNumber:=#TMP_AT_AD.Baustein, byteOffset:=#INT_Startadresse_AD+#ByteOffset_laden, value:=#temp_Byte);

Hinweise:
- PEEK + POKE gehen nur mit Speicherbereichen mit "Standard"-Zugriff.
- Kann es sein, daß da eine Struktur kopiert wird? Dann sollte besser versucht werden, das Programm so zu ändern, daß die Struktur symbolisch kopiert wird, anstatt den alten umständlichen Code weitgehend 1:1 umzusetzen.

Harald
 
Zurück
Oben