-> Hier kostenlos registrieren
Hallo Leute,
ich beschäftige mich derzeit mit der Kommunikation zwischen einer 750-8102 via RS485 Modbus RTU mit einer Kompressorsteuerung der Firma Almig. Dabei ist die Wago der Master und die "Air Control P" der Slave.<br>Zum testen habe ich felgendes Programm auf der Wago (PLC_PRG intervall 10ms) laufen:
PROGRAM PLC_PRG
VAR
FbKompressorVariable70: FbMbMasterSerial;
afbFrequenzumrichter: ARRAY[0..49] OF FbMbMasterSerial;
xConnect, xIsConnected, xError, xTrigger: BOOL;
tTimeOut: TIME := T#2S;
utQuery: typMbQuery;
utResponse: typMbResponse;
xMessage: BOOL;
sMessage: STRING;
timBlink: ton;
END_VAR
utQuery.bUnitId := 1;
utQuery.bFunctionCode := 3;
utQuery.uiReadAddress := 0;
utQuery.uiReadQuantity := 10;
FbKompressorVariable70(
xConnect := xConnect,
I_Port := COM1,
udiBaudrate := 19200,
usiDataBits := 8,
eParity := eTTYParity.None,
eStopBits := eTTYStopBits.One,
eHandshake := eTTYHandshake.None,
ePhysical := eTTYPhysicalLayer.RS485_HalfDuplex,
xIsConnected => xIsConnected,
xError => xError,
oStatus => ,
eFrameType := eMbFrameType.RTU,
tTimeOut := tTimeOut,
utQuery := utQuery,
xTrigger := xTrigger,
utResponse := utResponse);
timBlink(IN := NOT timBlink.Q, PT := T#500MS);
IF timBlink.Q THEN
xTrigger := NOT xTrigger;
END_IF;
Aktuell bekomme ich vom Slave keine Antwort. Sobald ich die Kommunikation (xConnect:=true) setze wird IsConnected ebenfalls true . Im Fb unter oStatus.m_pResultItem.text bekomme ich aber nach Ablauf der Zeit die Meldung Timeout. Ich habe bereits verschiedene Funktionscodes Registeradressen und Anzahl zu lesender Register getestet, mit dem gleichen Ergebnis. Die Verbindungsparameter stimmen soweit (8/NONE/1). Auch die Triggerzeiten der Query´s und die Timeout Zeit habe ich bereits variiert. Wenn ich die Kompressorsteuerung via Adapter direkt mit dem Laptop verbinde und mittels Modbustester und den gleichen Parametern Anfragen sende bekomme ich Antwort und die Kommunikation steht. Den Modbus Konfigurator in e!Cockpit habe ich ebenfalls bereits getestet, mit dem gleichen Ergebnis, keine Antwort vom Slave. Die Kompressorsteuerung unterstütz die FC´s 03_hex Datenregister lesen und 10_hex Datenregister schreiben. Die Register (lesen) beginnen bei 40001 Adresse 0000h und gehen bis 40117 Adresse 0074h. Vielleicht kann mir jemand helfen der ein ähnliches Problem hatte oder mir Tipps gehen wie ich weiter vorgehen kann. Da ich erst seit einigen Monaten im Bereich der Steuerungstechnik tätig bin, lasst milde walten wenn grobe Schnitzer auftauchen
. Gibt es eventuell ein Möglichkeit die Sendedaten und Empfangsdaten sichtbar zu machen? Im query sehe ich ja Adressen usw, im Response taucht davon nichts auf. Der Modbustester bietet beispielsweise die Möglichkeit "Spy Communication". Darin sieht man das Mastertelegramm (zb. 01 03 00 15 00 02 D5 CF). Meine Vermutung liegt aktuell darin, dass keine gültige Anfrage an der Slave erfolgt. Auszug aus der Spezifikation der Steuerung:
"Falls der Slave keinen gültigen Befehl empfangen hat ( z.B. wegen einer falschen CRC Checksumme ), dann sendet er keine Antwort zurück !!!"
Ich würde mich freuen wenn mir jemand Tipps geben könnte.
Gruß
ich beschäftige mich derzeit mit der Kommunikation zwischen einer 750-8102 via RS485 Modbus RTU mit einer Kompressorsteuerung der Firma Almig. Dabei ist die Wago der Master und die "Air Control P" der Slave.<br>Zum testen habe ich felgendes Programm auf der Wago (PLC_PRG intervall 10ms) laufen:
PROGRAM PLC_PRG
VAR
FbKompressorVariable70: FbMbMasterSerial;
afbFrequenzumrichter: ARRAY[0..49] OF FbMbMasterSerial;
xConnect, xIsConnected, xError, xTrigger: BOOL;
tTimeOut: TIME := T#2S;
utQuery: typMbQuery;
utResponse: typMbResponse;
xMessage: BOOL;
sMessage: STRING;
timBlink: ton;
END_VAR
utQuery.bUnitId := 1;
utQuery.bFunctionCode := 3;
utQuery.uiReadAddress := 0;
utQuery.uiReadQuantity := 10;
FbKompressorVariable70(
xConnect := xConnect,
I_Port := COM1,
udiBaudrate := 19200,
usiDataBits := 8,
eParity := eTTYParity.None,
eStopBits := eTTYStopBits.One,
eHandshake := eTTYHandshake.None,
ePhysical := eTTYPhysicalLayer.RS485_HalfDuplex,
xIsConnected => xIsConnected,
xError => xError,
oStatus => ,
eFrameType := eMbFrameType.RTU,
tTimeOut := tTimeOut,
utQuery := utQuery,
xTrigger := xTrigger,
utResponse := utResponse);
timBlink(IN := NOT timBlink.Q, PT := T#500MS);
IF timBlink.Q THEN
xTrigger := NOT xTrigger;
END_IF;
Aktuell bekomme ich vom Slave keine Antwort. Sobald ich die Kommunikation (xConnect:=true) setze wird IsConnected ebenfalls true . Im Fb unter oStatus.m_pResultItem.text bekomme ich aber nach Ablauf der Zeit die Meldung Timeout. Ich habe bereits verschiedene Funktionscodes Registeradressen und Anzahl zu lesender Register getestet, mit dem gleichen Ergebnis. Die Verbindungsparameter stimmen soweit (8/NONE/1). Auch die Triggerzeiten der Query´s und die Timeout Zeit habe ich bereits variiert. Wenn ich die Kompressorsteuerung via Adapter direkt mit dem Laptop verbinde und mittels Modbustester und den gleichen Parametern Anfragen sende bekomme ich Antwort und die Kommunikation steht. Den Modbus Konfigurator in e!Cockpit habe ich ebenfalls bereits getestet, mit dem gleichen Ergebnis, keine Antwort vom Slave. Die Kompressorsteuerung unterstütz die FC´s 03_hex Datenregister lesen und 10_hex Datenregister schreiben. Die Register (lesen) beginnen bei 40001 Adresse 0000h und gehen bis 40117 Adresse 0074h. Vielleicht kann mir jemand helfen der ein ähnliches Problem hatte oder mir Tipps gehen wie ich weiter vorgehen kann. Da ich erst seit einigen Monaten im Bereich der Steuerungstechnik tätig bin, lasst milde walten wenn grobe Schnitzer auftauchen

"Falls der Slave keinen gültigen Befehl empfangen hat ( z.B. wegen einer falschen CRC Checksumme ), dann sendet er keine Antwort zurück !!!"
Ich würde mich freuen wenn mir jemand Tipps geben könnte.
Gruß