- Beiträge
- 5.695
- Reaktionspunkte
- 1.628
-> Hier kostenlos registrieren
Hi zusammen
Ich versuche mich das erste mal an den ET200sp CM für Freeport und R3964.
Erstmal wollte ich es mit ET200sp und Modbus RTU probieren.
Ich hab mal ein kleines Beispielprogramm zusammengestiefelt. Aber laufen tut es leider noch überhaupt nicht.
https://www.dropbox.com/sh/cvgv46rnp71k1x0/AAA7SThEDro2aajZcybGrfnha?dl=0
Ich Initialisiere den Load im OB100. Und sobald dieser den COM_RST zurücksetzt wird der Req des Load aktiviert und bleibt gesetzt.
Soweit alles okay.
Wenn ich jetzt aber den Req des Modbus Masters setze. Geht die CPU in Stop und zwar mit einer nicht wirklich nachvollziehbaren begründung.
Jemand ne Idee was das sein kann? Ich wüsste gerne woher dieser Zugriff auf 65535 kommen kann? übergebe ich da irgendeinen Scheiss?
FB613 ist der Send_P2P den die Siemensbibliothek einbindet wenn man die Modbus Bildbibliothek nutzt.
mfG René
Ich versuche mich das erste mal an den ET200sp CM für Freeport und R3964.
Erstmal wollte ich es mit ET200sp und Modbus RTU probieren.
Ich hab mal ein kleines Beispielprogramm zusammengestiefelt. Aber laufen tut es leider noch überhaupt nicht.
https://www.dropbox.com/sh/cvgv46rnp71k1x0/AAA7SThEDro2aajZcybGrfnha?dl=0
Code:
FUNCTION_BLOCK "Modbus_Serial"{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.1
VAR_INPUT
ID : Word;
Port : Int;
END_VAR
VAR
Req : Bool;
Disconnect : Bool;
Reset { S7_HMI_Accessible := 'False'; S7_HMI_Visible := 'False'} : Bool;
ResetTimer {OriginalPartName := 'TON'; LibVersion := '1.0'} : TON; // Resettimer wenn Req zu lange ansteht, wird dieser Resetiert
Zaehler : Int;
R_TRIG_error : "Trigger";
R_TRIG_Done : "Trigger";
AktuellerLDB : Int;
Status_Save : Word;
ReqTrigger : "Trigger";
Daten : Array[0..50] of Int;
ErrTimer {OriginalPartName := 'TON'; LibVersion := '1.0'} : TON; // Wenn Error länger als 3s ansteht werden Werte auf 0 gesetzt.
Modbus_Master {OriginalPartName := 'Modbus_Master'; LibVersion := '2.3'} : Modbus_Master;
Modbus_Comm_Load_Instance {OriginalPartName := 'Modbus_Comm_Load'; LibVersion := '3.0'} : Modbus_Comm_Load;
Requestcount : Int;
END_VAR
VAR_TEMP
index : Int;
RET_val : Int;
END_VAR
VAR CONSTANT
Datenlaenge : Int := 20;
END_VAR
BEGIN
#Modbus_Comm_Load_Instance.RETRIES := 4;
#Modbus_Comm_Load_Instance.MODE := 4; // 4 für Halbduplex RS485 Zweidraht
#Modbus_Comm_Load_Instance.BAUD := 9; // 9 für 57600
#Modbus_Comm_Load_Instance.LINE_PRE := 0; // Keine Vorbelegung
#Modbus_Comm_Load_Instance.PARITY := 2; // Gerade
#Modbus_Comm_Load_Instance.FLOW_CTRL := 0; // keine
#Modbus_Comm_Load_Instance.STOP_BITS := 1; // 1 Stopbit
#Modbus_Comm_Load_Instance.RTS_OFF_DLY := 10; // 10ms
#Modbus_Comm_Load_Instance.RTS_ON_DLY := 10; // 10ms
#Modbus_Comm_Load_Instance.RESP_TO := 3000; // 3s auf Antwort warten
#Modbus_Comm_Load_Instance."PORT" := INT_TO_WORD(#Port); // Port w#16#100 im Test
"Tag_2" := NOT #Modbus_Comm_Load_Instance.COM_RST;
#Modbus_Comm_Load_Instance(REQ:="Tag_2",
MB_DB:=#Modbus_Master.MB_DB);
#Modbus_Master(REQ:="Tag_3", // Hier #Req anschliessen wenn nicht im Test
MB_ADDR:=#ID,
MODE:=0,
DATA_ADDR:=40001,
DATA_LEN:=5,
DATA_PTR:=#Daten);
#ErrTimer(IN:=#Modbus_Master.ERROR,
PT:=t#3s);
#Req := (#Modbus_Master.ERROR OR #Modbus_Master.DONE) AND NOT (#Modbus_Master.BUSY OR #Reset);
#ResetTimer(IN:=#Req,
PT:=t#10s,
Q=>#Reset);
IF #Modbus_Master.ERROR THEN
#Status_Save := #Modbus_Master.STATUS;
END_IF;
END_FUNCTION_BLOCK
Ich Initialisiere den Load im OB100. Und sobald dieser den COM_RST zurücksetzt wird der Req des Load aktiviert und bleibt gesetzt.
Soweit alles okay.
Wenn ich jetzt aber den Req des Modbus Masters setze. Geht die CPU in Stop und zwar mit einer nicht wirklich nachvollziehbaren begründung.
4 von 10; Ereignis-ID: 16# 4562
STOP durch Programmierfehler (OB nicht geladen oder nicht möglich, bzw. kein FRB vorhanden )
FB-Nummer: 613
Bausteinadresse: 210
Bisheriger Betriebszustand: RUN
Angeforderter Betriebszustand: STOP (intern)
02.05.2016 14:04:05.664
5 von 10;
Ereignis-ID: 16# 2522
Bereichslängenfehler beim Lesen
P-Bereich , Doppelwortzugriff, Zugriffsadresse: 65535
Angeforderter OB: Programmierfehler-OB (OB 121)
OB nicht vorhanden oder gesperrt oder nicht startbar im aktuellen Betriebszustand
02.05.2016 14:04:05.660
Jemand ne Idee was das sein kann? Ich wüsste gerne woher dieser Zugriff auf 65535 kommen kann? übergebe ich da irgendeinen Scheiss?
FB613 ist der Send_P2P den die Siemensbibliothek einbindet wenn man die Modbus Bildbibliothek nutzt.
mfG René