-> Hier kostenlos registrieren
Ich möchte eine Modbus RTU Verbindung mit meiner 750-8212, 750-652 und einem Modbus-Slave aufbauen (in dem Fall das Programm Modbus Slave). Der Aufbau ist folgender:
8212 + 652 (Ausgänge 1&2 und 5&6 gebrückt) und einem CH340 RS485 auf USB Adapter sowie die Modbus Slave Software.
Ich habe alle Verbindungen unabhängig voneinander geprüft, A und B schon gedreht, mit und ohne 120Ohm Widerstand probiert, die Adressen geändert, die Funktion geändert (FC3, FC4) und auch andere RS485 Teilnehmer auf dem Bus gehabt. Es muss meiner Meinung nach also an der Karte oder meinem Programm liegen.
Ich verwende eigentlich die einfachste Variante von WagoAppPlcModbus, aber irgendwie bekomme ich es nicht hin, Daten auszulesen. Als Fehler bekomme ich immer einen Timeout in osStatus. Bei der Klemme blinkt alle 2 s die Tx LED, die Recieve habe ich noch nie blinken sehen.
PROGRAM PLC_PRG_Mb_Master
VAR
(*Interface parameters*)
FbMbMasterSerial_1: FbMbMasterSerial:=( xConnect := TRUE,
udiBaudrate := 9600,
usiDataBits := 8,
eParity := WagoTypesCom.eTTYParity.None,
eStopBits := WagoTypesCom.eTTYStopBits.One,
eHandshake := WagoTypesCom.eTTYHandshake.None,
ePhysical := WagoTypescom.eTTYPhysicalLayer.RS485_HalfDuplex,
eFrameType := eMbFrameType.RTU,
tTimeOut := T#2000MS);
//-------------------------------------------------------------------------------------------------
utQuery: typMbQuery:=( bUnitId := 1, // Slaveaddress
bFunctionCode := 16#04, // read input registers
uiReadAddress := 16#7531, // Startaddress
//uiReadAddress := 16#0000, // Startaddress
uiReadQuantity := 16#0009, // Quantity of wanted registers
uiWriteAddress := 0, // nicht benötigt für FC3
uiWriteQuantity := 0, // nicht benötigt für FC3
awWriteData := [124(0)] // nicht benötigt für FC3
);
xTxTrigger: BOOL;
utResponse: typMbResponse;
tonDelay: TON := (PT := T#20MS);
END_VAR
------------------------------------------------------------------------------------------------------------------------------
tonDelay( IN := (NOT tonDelay.Q) AND (NOT xTxTrigger));
xTxTrigger S= tonDelay.Q;
FbMbMasterSerial_1( I_Port := RS485, //serial port
utQuery := utQuery,
xTrigger := xTxTrigger,
utResponse := utResponse);
Hat jemand eine Idee, was ich falsch mache?
8212 + 652 (Ausgänge 1&2 und 5&6 gebrückt) und einem CH340 RS485 auf USB Adapter sowie die Modbus Slave Software.
Ich habe alle Verbindungen unabhängig voneinander geprüft, A und B schon gedreht, mit und ohne 120Ohm Widerstand probiert, die Adressen geändert, die Funktion geändert (FC3, FC4) und auch andere RS485 Teilnehmer auf dem Bus gehabt. Es muss meiner Meinung nach also an der Karte oder meinem Programm liegen.
Ich verwende eigentlich die einfachste Variante von WagoAppPlcModbus, aber irgendwie bekomme ich es nicht hin, Daten auszulesen. Als Fehler bekomme ich immer einen Timeout in osStatus. Bei der Klemme blinkt alle 2 s die Tx LED, die Recieve habe ich noch nie blinken sehen.
PROGRAM PLC_PRG_Mb_Master
VAR
(*Interface parameters*)
FbMbMasterSerial_1: FbMbMasterSerial:=( xConnect := TRUE,
udiBaudrate := 9600,
usiDataBits := 8,
eParity := WagoTypesCom.eTTYParity.None,
eStopBits := WagoTypesCom.eTTYStopBits.One,
eHandshake := WagoTypesCom.eTTYHandshake.None,
ePhysical := WagoTypescom.eTTYPhysicalLayer.RS485_HalfDuplex,
eFrameType := eMbFrameType.RTU,
tTimeOut := T#2000MS);
//-------------------------------------------------------------------------------------------------
utQuery: typMbQuery:=( bUnitId := 1, // Slaveaddress
bFunctionCode := 16#04, // read input registers
uiReadAddress := 16#7531, // Startaddress
//uiReadAddress := 16#0000, // Startaddress
uiReadQuantity := 16#0009, // Quantity of wanted registers
uiWriteAddress := 0, // nicht benötigt für FC3
uiWriteQuantity := 0, // nicht benötigt für FC3
awWriteData := [124(0)] // nicht benötigt für FC3
);
xTxTrigger: BOOL;
utResponse: typMbResponse;
tonDelay: TON := (PT := T#20MS);
END_VAR
------------------------------------------------------------------------------------------------------------------------------
tonDelay( IN := (NOT tonDelay.Q) AND (NOT xTxTrigger));
xTxTrigger S= tonDelay.Q;
FbMbMasterSerial_1( I_Port := RS485, //serial port
utQuery := utQuery,
xTrigger := xTxTrigger,
utResponse := utResponse);
Hat jemand eine Idee, was ich falsch mache?
Anhänge
Zuletzt bearbeitet: