FB_MBWriteCoils (Modbus-Funktion 15)
Diese Funktion wird zum Beschreiben von 1 bis 2048 digitaler Ausgänge (Coils) benutzt. Ein digitaler Ausgang entspricht einem Bit der geschriebenen Datenbytes.
VAR_INPUT
VAR_INPUT
sIPAddr : STRING(15);
nTCPPort : UINT:= MODBUS_TCP_PORT;
nUnitID : BYTE:=16#FF;
nQuantity : WORD;
nMBAddr : WORD;
cbLength : UDINT;
pSrcAddr : UDINT;
bExecute : BOOL;
tTimeout : TIME;
END_VAR
sIPAddr: Ist ein String, der die IP-Adresse des Zielgerätes enthält.
nTCPPort: Portnummer des Zielgerätes.
nUnitID: Identifizierungsnummer eines Gerätes eines seriellen Sub-Netzwerkes. Wenn ein Gerät direkt über TCP/IP angesprochen wird, muss dieser Wert 16#FF entsprechen.
nQuantity: Anzahl der digitalen Ausgänge, die beschrieben werden sollen (Datenbits). Der Wert Null ist unzulässig.
nMBAddr: Startadresse der digitalen Ausgänge, die beschrieben werden sollen (Bitoffset).
cbLength: Enthält die max. verfügbare Bytegröße des Quellpuffers, der die zu schreibenden Daten enthält. Der Puffer muss mindestens die Bytegröße: (nQuantity + 7 ) / 8 besitzen.
pSrcAddr: Enthält die Adresse des Quellpuffers, der die zu schreibenden Daten enthält. Der Puffer kann eine Einzelvariable, ein Array oder eine Struktur sein, dessen Adresse mit dem ADR - Operator ermittelt werden kann.
bExecute: Durch eine steigende Flanke an diesem Eingang wird der Funktionsbaustein aktiviert.
tTimeout: Gibt die Timeout-Zeit an, die bei der Ausführung des ADS-Kommandos nicht überschritten werden darf.
VAR_OUTPUT
VAR_OUTPUT
bBUSY : BOOL;
bError : BOOL;
nErrId : UDINT;
END_VAR
bBusy: Bei der Aktivierung des Funktionsbausteins wird dieser Ausgang gesetzt und bleibt gesetzt, bis eine Rückmeldung erfolgt.
bError: Sollte ein ADS-Fehler bei der Übertragung des Kommandos erfolgen, dann wird dieser Ausgang gesetzt, nachdem der bBusy-Ausgang zurückgesetzt wurde.
nErrId: Liefert bei einem gesetzten bError-Ausgang die ADS-Fehlernummer.
Function specific ADS error code | Possible reason |
---|---|
0x8001 | Nicht implementierte Modbus-Funktion |
0x8002 | Ungültige Adresse oder Länge |
0x8003 | Ungültige Parameter: - falsche Registeranzahl |
0x8004 | Fehler im Modbus-Server |
Beispiel für den Aufruf des Bausteins in FBD:
PROGRAM Test
VAR
fbWriteCoils : FB_MBWriteCoils;
bWriteCoils : BOOL;
bWriteCoilsBusy : BOOL;
bWriteCoilsError : BOOL;
nWriteCoilsErrorId : UDINT;
nWriteCoilsCount : UDINT;
nQuantity : WORD := 10;
nMBAddr : WORD := 14;
arrData : ARRAY [1..2] OF BYTE := 16#75,16#03;
END_VAR
Nach steigender Flanke von "bExecute" und erfolgreicher Ausführung des ReadCoils-Befehls, wird der Inhalt des Arrays arrData in die Ausgänge 15-24 geschrieben:
Bit | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Output | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | X | X | X | X | X | X | 24 | 23 |
Voraussetzungen
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken |
---|---|---|
TwinCAT v2.8.0 | PC (i386) | TcModbusSrv.Lib |