WAGO Modbus Master über serielle Schnittstelle: Aussetzer bei der Kommunikation

Ossi

Level-1
Beiträge
4
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
WAGO Modbus Master über serielle Schnittstelle: Häufige CRC-Fehler

Hallo,

ich habe ein Problem mit dem Zugriff auf einen Modbus-Slave über die Serielle Schnittstelle eines WAGO Controllers.
Hier mal der Code:

Request.SlaveAddress:=4;
Request.FunctionCode:=3;
CASE state OF

0: (*Read analog data*)
Request.Read_Quantity:=17;
Request.Read_StartAddress:=30101;
Start:=TRUE;
JobActive:=Start;

1: (*Read digitital Data*)
Request.Read_StartAddress:=30001;
Request.Read_Quantity:=1;
Start:=TRUE;
JobActive:=Start;

2: (*Read Error Data*)
Request.Read_StartAddress:=30301;
Request.Read_Quantity:=7;
Start:=TRUE;
JobActive:=Start;
3: (*Software Version*)
Request.Read_StartAddress:=30201;
Request.Read_Quantity:=6;
Start:=TRUE;
JobActive:=Start;
END_CASE

Modbus_RTU( ENABLE := Enable,
ASCII_Mode := ASCII_Mode,
bCOM_PORT := bCOM_PORT,
cbCOM_BAUDRATE := BAUD_19200,
cbsCOM_BYTESIZE := BS_8,
cpCOM_PARITY := PARITY_EVEN,
csCOM_STOPBITS := STOPBITS_1,
cfCOM_FLOW_CONTROL := HALFDUPLEX,
tTIME_OUT := TimeOut,
StartFunction := Start,
ExtQuery := Request,
Response := Response);


IF NOT Start AND JobActive=TRUE THEN
JobActive:=FALSE;
IF Response.SlaveAddress = 4 AND Modbus_RTU.MB_Error=MB_NO_ERROR THEN
IF state=0 THEN
FOR i:=0 TO 16 DO
AnalogData:=Response.Data;
END_FOR
i:=0;
readCount:=readCount+1;
state:=1;
IF readCount=1000 THEN readCount:=1; END_IF
ELSIF state=1 THEN
DigitalData:=Response.Data[0];
state:=0;
StateDelay:=StateDelay+1;
IF StateDelay=1 THEN
state:=2;
END_IF
ELSIF state=2 THEN
FOR i:=0 TO 6 DO
ErrorData:=Response.Data;
END_FOR
i:=0;
StateDelay:=0;
(*state:=3;*)
state:=0;
ELSIF state=3 THEN
FOR i:=0 TO 5 DO
SystemData:=Response.Data;
END_FOR
i:=0;
state:=0;
END_IF

END_IF
END_IF

Die Kommunikation läuft nicht richtig ab. Es gibt "Aussetzer". Hat jemand eine Idee? Der Baustein wird von Außen über Enable aktiviert. Dann sollen die 4 Zustände abgearbeitet und die Adressbereiche ausgelesen werden.
Es kommt zu vermehrten CRC-Fehler.
Wie kann man die vermeiden. Muss ich bei der Speicherzuweisung etwas beachten?

Vielen Dank und Gruß,

Ossi
 
Zuletzt bearbeitet:
Zurück
Oben