kliebisch.m
Level-1
- Beiträge
- 120
- Reaktionspunkte
- 5
-> 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
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