Block that performs a writing of up to 128 binary data (via Write Single Coil or Write Multiple Coils) in a slave on the Modbus RTU network.
Ladder Representation

Block Structure
Variable Type |
Name |
Data Type |
Description |
VAR_INPUT |
Execute |
BOOL |
Block enabling |
SlaveAddress |
BYTE |
Slave address |
|
Function# |
BYTE |
Writing function code |
|
InitialDataAddress |
WORD |
Initial bit address where the data will be written |
|
NumberOfData |
BYTE |
Number of bits to be written (1 to 128) |
|
Timeout# |
WORD |
Maximum waiting time for the slave response [ms] |
|
Offset# |
BOOL |
Offset Indication in InitialDataAddress, i.e., need to subtract 1 from this number |
|
Value |
BOOL |
Variable that stores the data to be written |
|
VAR_OUTPUT |
Done |
BOOL |
Output enabling |
Active |
BOOL |
Awaiting response flag |
|
Busy |
BOOL |
Flag indicating the RS485 interface is busy with another request |
|
Error |
BOOL |
Error in the execution flag |
|
ErrorID |
BYTE |
Identifier of the occurred error |
|
VAR |
MB_WRITEBINARY _INST_0 |
MB_WRITEBINARY |
Instance of access to block structure |
Operation
When this block detects a leading edge on Execute, it checks whether the Modbus RTU slave in specified address in SlaveAddress is free to send data (Busy variable at FALSE level). If so, it sends the writing request of a number of bits indicated by NumberOfData in InitialDataAddress address using chosen function in Function# and sets the Active output, resetting it when receiving the response from the slave. If the slave is not free, the block waits Busy go to FALSE level to resubmit the request.
|
NOTE! If Execute goes to FALSE level and Busy is still at TRUE level, the request is canceled. |
|
NOTE! Value is an array of size equal to NumberOfData. It is important to check this compatibility not to generate errors in the block. |
When Execute has FALSE value, Done remains FALSE. The Done output is only activated when the block finishes executing successfully, remaining at TRUE level until Execute receives FALSE.
If there is any error in the execution, the Error output is enabled and ErrorID displays an error code according to the table below.
Code |
Description |
0 |
Executed successfully |
1 |
Invalid input data |
2 |
Master not enabled |
4 |
Timeout in slave response |
5 |
Slave returned error |
Block Flowchart

Example in Ladder

The example above requests written data contained in VALUE, with size described by DATA_COUNT, at addresses positioned from INIT on Modbus RTU slave at address SLAVE using the function Write Single Coil. The block ends successfully, Done output is activated.
Example in ST
The example below displays the instructions for applying the example above in the ST language.
VAR SLAVE : BYTE := 1; INIT : WORD; VALUE : ARRAY [0..4] OF BOOL; MB_WRITEBINARY_INST_0 : FB_MB_WriteBinary; END_VAR
MB_WRITEBINARY_INST_0.Execute := DI1; MB_WRITEBINARY_INST_0( SlaveAddress:=SLAVE, Function:=5, InitialDataAddress:=INIT, NumberOfData:=4, Timeout:=30, Offset:=1, Value:=VALUE); DO1 := MB_WRITEBINARY_INST_0.Done;
|
|---|