FB_MBReadInputRegs (Modbus function 4)
This function is used for reading 1 to 128 input registers (16 bit). Observe the byte-order little endian.
VAR_INPUT
VAR_INPUT
sIPAddr : STRING(15);
nTCPPort : UINT:= MODBUS_TCP_PORT;
nUnitID : BYTE:=16#FF;
nQuantity : WORD;
nMBAddr : WORD;
cbLength : UDINT;
pDestAddr : POINTER OF BYTE;
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 input registers (data words) to be read. The value of nQuantity must be > 0.
nMBAddr: Start address of the input register to be read (word offset).
cbLength: Contains the max. byte size of the destination buffer. The minimum buffer byte size must be: nQuantity * 2.
pDestAddr: Contains the address of the destination buffer into which the data are to be read. 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;
cbRead : 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.
cbRead: Contains the number of bytes currently read.
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
fbReadRegs : FB_MBReadRegs;
bReadRegs : BOOL;
bReadRegsBusy : BOOL;
bReadRegsError : BOOL;
nReadRegsErrorId : UDINT;
nReadRegsCount : UDINT;
nQuantity : WORD := 3;
nMBAddr : WORD:= 2;
arrData : ARRAY [1..3] OF WORD;
END_VAR
After a rising edge of "bExecute" and successful execution of the ReadRegs command, the content of registers 3-5 is located in the arrData array:
Register | Array offset | Status |
---|---|---|
3 | 1 | 0x4543 ( as byte 0x43 0x45) |
4 | 2 | 0x5234 ( as byte 0x34 0x52) |
5 | 2 | 0x1235 ( as byte 0x35 0x12) |
Requirements
Development environment |
Target system type |
PLC libraries to be linked |
---|---|---|
TwinCAT v3.0.0 |
PC or CX (x86) |
Tc2_ModbusSrv |