FB_MBWriteCoils (Modbus function 15)
 
This function is used for writing 1 to 2048 digital outputs (coils). One digital output corresponds to one bit of the write data bytes.
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: Is a string containing the IP address of the target device.
nTCPPort: Port number of the target device.
nUnitID: Identification number of a serial sub-network device. If a device is addressed directly via TCP/IP, this value must be 16#FF.
nQuantity: Number of digital outputs to be written (data bits). nQuantity must be > 0.
nMBAddr: Start address of the digital outputs to be written (bit offset).
cbLength: Contains the max. byte size of the source buffer containing the data to be written. The minimum buffer byte size must be: (nQuantity + 7) / 8.
pSrcAddr: Contains the address of the source buffer containing the data to be written. The buffer can be a single variable, an array or a structure, whose address can be found with the ADR operator.
bExecute: The function block is activated by a rising edge at this input.
tTimeout: States the length of the timeout that may not be exceeded by execution of the ADS command.
VAR_OUTPUT
VAR_OUTPUT
bBUSY : BOOL;
bError : BOOL;
nErrId : UDINT;
END_VAR
bBusy : When the function block is activated this output is set. It remains set until an acknowledgement is received.
bError : If an ADS error should occur during the transfer of the command, then this output is set once the bBusy output is reset.
nErrId : Supplies the ADS error number when the bError output is set.
Function specific ADS error code  | Possible reason  | 
|---|---|
0x8001  | Modbus function not implemented  | 
0x8002  | Invalid address or length  | 
0x8003  | Invalid parameters: - wrong number of registers  | 
0x8004  | Modbus server error  | 
Example of calling the block 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
 
After a rising edge of "bExecute" and successful execution of the ReadCoils command, the content of the arrData array is written to digital outputs 15 - 24:
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  | 
Requirements
Development environment  | Target system type  | PLC libraries to be linked  | 
|---|---|---|
TwinCAT v2.8.0  | PC (i386)  | TcModbusSrv.Lib  |