FB_ModbusTcpRequest

FB_ModbusTcpRequest 1:

Mit dem FB_ModbusTcpRequest-Funktionsbaustein kann ein MODBUS-Request an einen Remote-Partner gesendet werden. Die Verbindung muss dafür zuerst mit dem FB_ModbusTcpOpen-Funktionsbaustein geöffnet worden sein. Die bei dem Verbindungsaufbau zurückgelieferte, dynamische Portnummer, wird als Eingangsparameter an die iMyPortNo-Variable übergeben. Die nicht benutzten Verbindungen werden nach ca. 10 Sekunden automatisch geschlossen oder können auch von dem Remote-Partner geschlossen worden sein. Bei einer fehlenden Verbindung wird z.B. an dem iErrorId-Ausgang der Fehlercode 0x8305 zurückgegeben. Mit dem FB_ModbusTcpRequest-Funktionsbaustein wird der gesamte MODBUS-Frame beginnend mit den UNIT ID übertragen. Der TCP-Anteil wird von dem BC9xxx-Bus-Controller vorangestellt.

VAR_INPUT

VAR_INPUT
    bStart       : BOOL;
    sRemoteIPAddr: STRING(15);
    iMyPortNo    : WORD;
    pReqBuff     : DWORD;
    cbReqLen     : WORD;
    pResBuff     : DWORD;
    cbResLen     : WORD;
END_VAR

bStart: Durch eine steigende Flanke an diesem Eingang wird der Funktionsbaustein aktiviert.

sRemoteIPAddr: Die Variable ist ein String mit der Netzwerkadresse (IP-Adresse) des Remote-Partners.

iMyPortNo: Hier wird die zur Verbindung zugehörige Portnummer als Parameter übergeben. Die Portnummer wird bei jedem Verbindungsaufbau mit dem FB_ModbusTcpOpen-Funktionsbaustein jedes Mal neu (dynamisch) erzeugt.

pReqBuff : Enthält die Adresse des Puffers mit den MODBUS-Request-Daten. Der Programmierer ist selbst dafür verantwortlich, den Puffer in der Größe so zu dimensionieren, dass cbReqLen- Bytes daraus entnommen werden können. Der Puffer kann eine Einzelvariable, ein Array oder eine Struktur sein, dessen Adresse man mit dem ADR - Operator ermitteln kann.

cbReqLen : Bytelänge der MODBUS-Request Daten im pReqBuff-Puffer.

pResBuff : Enthält die Adresse des Puffers für die MODBUS-Response-Daten. Der Programmierer ist selbst dafür verantwortlich den Puffer in der Größe so zu dimensionieren, dass er cbResLen- Bytes aufnehmen kann. Der Puffer kann eine Einzelvariable, ein Array oder eine Struktur sein, dessen Adresse man mit dem ADR - Operator ermitteln kann.

cbResLen : Bytelänge des MODBUS-Response Puffers. Der Programmierer ist selbst dafür verantwortlich den Puffer in der Größe so zu dimensionieren, dass alle Response-Daten aufgenommen werden können.

VAR_OUTPUT

VAR_OUTPUT
    bBusy       : BOOL;
    bError      : BOOL;
    iErrorId    : WORD;
    cbResponse  : WORD;
END_VAR

bBusy: Bei der Aktivierung des Funktionsbausteins wird dieser Ausgang gesetzt und bleibt gesetzt, bis eine Rückmeldung erfolgt.

bError: Sollte ein Fehler bei der Ausführung des Befehls auftreten, dann wird dieser Ausgang gesetzt, nachdem der bBusy-Ausgang zurückgesetzt wurde.

iErrorId: Liefert bei einem gesetzten bError-Ausgang den Befehlsspezifischen Fehlercode (Tabelle) oder den gerätespezifischen Fehlercode.

cbResponse : Die Bytelänge der tatsächlich im Response-Puffer zurückgelieferten Response-Daten.

Fehlercodes

Beschreibung

0x8300

Tx error. Timeout error.

0x8301

Tx error. Remote shutdown.

0x8302

Tx error. Internal error.

0x8303

Tx error. Resource error.

0x8305

Tx error. No remote connection.

0x8100

Rx error. Wrong transaction ID.

0x8101

Rx error. Wrong protocol ID.

0x8102

Rx error. Wrong length.

0x8103

Rx error. Exceeding length.

0x8104

Rx error. Wrong unit ID.

 

Beispiel für den Aufruf des Bausteins in FUP:

PROGRAM MAIN
VAR
    fbModbusRequest : FB_ModbusTcpRequest;
    bExecute        : BOOL;
    bExecute        : nConnectionPort;
    SendBuffer      : ARRAY[0..5] OF BYTE := 1,6,64,64,0,0;
    ReceiveBuffer   : ARRAY[0..255] OF BYTE;
    bBusy           : BOOL;
    bError          : BOOL;
    nErrId          : WORD;
    cbReceived      : WORD;
END_VAR

FB_ModbusTcpRequest 2:

Im Beispiel wird bei einer steigenden Flanke am bExecute-Eingang ein Request zu dem Remote-Teilnehmer mit der Netzwerkadresse: '172.16.2.209' gesendet.

Voraussetzungen

Entwicklungsumgebung

Zielplattform

Einzubindende SPS Bibliotheken

TwinCAT v2.7.0 und abwärts

BC9xxx (165) firmware version >= 0xB6

TcModbusTCPBC.Lb6