joergflorian
Level-1
- Beiträge
- 19
- Reaktionspunkte
- 0
-> Hier kostenlos registrieren
Hallo zusammen,
Ich habe seit kurzem eine S7-1200. Nun wollte ich das lesen und schreiben der Daten auf die Pheripherie ähnlich wie bisher bei der 315 umsetzen. D.h. am Bausteineingang die E-/A-Adressen der Module des Geräts als INT angeben und dann entsprechend mit PEW, PAW, bzw. SFC14 /SFC15 die Daten lesen bzw. schreiben.
Das sah bisher etwa so aus:
Lesen
Schreiben
Nun habe ich ja bei der 1200 die Funktionen PEEK und POKE, um auf z.B. ein Word/DWord etc. zuzugreifen, wenn ich die E-/A-Adresse weiss.
Lesen
Schreiben
Zum Lesen und Schreiben von Modulen >= 4 Worte verwende ich immer noch die DPRW_DAT und DPRD_DAT, aber die verlangen als LADDR nun eine HW_IO_Adresse, welche ja automatisch beim projektieren angelegt wird. Funktioniert natürlich auch.
Meine Frage nun:
Gibt es eine Möglichkeit entweder alles per HW_IO_Adressen oder alles per E-/A-Adressen zu lesen/schreiben?
Irgendwie gefällt mir das nicht für Module mit einem Wort die E-/A-Adresse zu verwenden und für >=4 Worte die HW_IO_Adresse.
Ich hoffe ich habe mich verständlich ausgedrückt.
Vielen Dank für eure Inputs
Florian
Ich habe seit kurzem eine S7-1200. Nun wollte ich das lesen und schreiben der Daten auf die Pheripherie ähnlich wie bisher bei der 315 umsetzen. D.h. am Bausteineingang die E-/A-Adressen der Module des Geräts als INT angeben und dann entsprechend mit PEW, PAW, bzw. SFC14 /SFC15 die Daten lesen bzw. schreiben.
Das sah bisher etwa so aus:
Lesen
Code:
// 1 Wort lesen
L #AdrStatusWord //Check address >0, else skip
L 0
>I
SPBN Ne1a
L #AdrStatusWord
SLD 3
LAR1
L PEW [AR1,P#0.0]
T #Axis.ComData_IN.StatusWord
// 4 Worte konsistent lesen
L #AdrParameterChannel //Check address >0, else skip
L 0
>I
SPBN Ne2a
L #AdrParameterChannel
T #Adr_Temp
CALL "DPRD_DAT"
LADDR :=#Adr_Temp
RET_VAL:=#Temp_Ret_Val
RECORD :=#ConfigData_IN
NOP 0
Schreiben
Code:
// 1 Wort schreiben
L #AdrControlWord
SLD 3
LAR1
L #Adr_Temp
T PAW [AR1,P#0.0]
// 4 Worte konsistent schreiben
L #AdrParameterChannel
T #Adr_Temp
CALL "DPWR_DAT"
LADDR :=#Adr_Temp
RECORD :=#ConfigData_OUT
RET_VAL:=#Temp_Ret_Val
NOP 0
Nun habe ich ja bei der 1200 die Funktionen PEEK und POKE, um auf z.B. ein Word/DWord etc. zuzugreifen, wenn ich die E-/A-Adresse weiss.
Lesen
Code:
// 1 Wort lesen
IF NOT (#AdrStatusWord = 0) THEN
#Axis.DrvToPlc.StatusWord := PEEK_WORD(area:=16#81, dbNumber:=0, byteOffset:=#AdrStatusWord);
END_IF;
Schreiben
Code:
// 1 Wort schreiben
IF #AdrControlWord <> 0 THEN
POKE(area:=16#82,
dbNumber:=0,
byteOffset:=#AdrControlWord,
value:=#Axis.PlcToDrv.ControlWord);
END_IF;
Zum Lesen und Schreiben von Modulen >= 4 Worte verwende ich immer noch die DPRW_DAT und DPRD_DAT, aber die verlangen als LADDR nun eine HW_IO_Adresse, welche ja automatisch beim projektieren angelegt wird. Funktioniert natürlich auch.
Meine Frage nun:
Gibt es eine Möglichkeit entweder alles per HW_IO_Adressen oder alles per E-/A-Adressen zu lesen/schreiben?
Irgendwie gefällt mir das nicht für Module mit einem Wort die E-/A-Adresse zu verwenden und für >=4 Worte die HW_IO_Adresse.
Ich hoffe ich habe mich verständlich ausgedrückt.
Vielen Dank für eure Inputs
Florian