FB_MBReadInputs (Modbus function 2)

This function is used for reading 1 to 2048 digital inputs. One digital input corresponds to one bit of the read data bytes.
Inputs
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
Name | Type | Description |
---|---|---|
sIPAddr | STRING (15) | Is a string containing the IP address of the target device. |
nTCPPort | UINT | Port number of the target device. |
nUnitID | BYTE | Identification number of a serial sub-network device. If a device is addressed directly via TCP/IP, this value must be 16#FF. |
nQuantity | WORD | Number of digital inputs (data bits) to be read. The value zero is not permitted. |
nMBAddr | WORD | Start address of the digital inputs to be read (bit offset). |
cbLength | UDINT | Contains the maximum available byte size of the destination buffer into which the data are to be read. The buffer must have at least the byte size: (nQuantity + 7) / 8. |
pDestAdd | POINTER OF BYTE | 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 determined with the ADR operator. |
bExecute | BOOL | The function block is enabled by a rising edge at this input. |
tTimeout | TIME | States the length of the timeout that may not be exceeded by execution of the ADS command. |
Outputs
VAR_OUTPUT
bBUSY : BOOL;
bError : BOOL;
nErrId : UDINT;
cbRead : UDINT;
END_VAR
Name | Type | Description |
---|---|---|
bBusy | BOOL | When the function block is enabled, this output is set and remains set until a feedback is received. |
bError | BOOL | If an ADS error should occur during the transfer of the command, then this output is set once the bBusy output is reset. |
nErrId | UDINT | Returns the ADS error number when the bError output is set. |
cbRead | UDINT | Contains the number of bytes currently read. |
Sample of calling the function block in FBD
PROGRAM Test
VAR
fbReadInputs : FB_MBReadInputs;
bReadInputs : BOOL;
bReadInputsBusy : BOOL;
bReadInputsError : BOOL;
nReadInputsErrorId : UDINT;
nReadInputsCount : UDINT;
nQuantity : WORD := 20;
nMBAddr : WORD := 29;
arrData : ARRAY [1..3] OF BYTE;
END_VAR

After a rising edge of “bExecute” and successful execution of the ReadInputs command, the content of the digital inputs 30 - 49 is written to the arrData array:
Digital outputs | Array offset | Status |
---|---|---|
29-36 | 1 | 0x34 Status of input 36 is the MSB of this byte (far left) |
37-44 | 2 | 0x56 Status of input 44 is the MSB of this byte (far left) |
45-49 | 3 | 0x07 as only 20 inputs are to be read, the remaining bits (5-8) are set to 0. |
Requirements
Development environment |
Target system type |
PLC libraries to be linked |
---|---|---|
TwinCAT v3.0.0 |
PC or CX (x86) |
Tc2_ModbusSrv |