Component: Modbus TCP Slave (Comms: System): Difference between revisions
m Text replacement - "class="wikitable" style="width:60%; background-color:#FFFFFF;"" to "class="mtx-class-macrotable wikitable"" |
|||
| Line 100: | Line 100: | ||
===CheckForIncoming=== | ===CheckForIncoming=== | ||
{| class="wikitable | {| class="mtx-class-macrotable wikitable" | ||
|- | |- | ||
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]] | | width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]] | ||
| Line 114: | Line 114: | ||
===GetLastIncoming=== | ===GetLastIncoming=== | ||
{| class="wikitable | {| class="mtx-class-macrotable wikitable" | ||
|- | |- | ||
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]] | | width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]] | ||
| Line 133: | Line 133: | ||
===Initialise=== | ===Initialise=== | ||
{| class="wikitable | {| class="mtx-class-macrotable wikitable" | ||
|- | |- | ||
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]] | | width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]] | ||
| Line 147: | Line 147: | ||
===ReadAnalogInput=== | ===ReadAnalogInput=== | ||
{| class="wikitable | {| class="mtx-class-macrotable wikitable" | ||
|- | |- | ||
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]] | | width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]] | ||
| Line 166: | Line 166: | ||
===ReadCoils=== | ===ReadCoils=== | ||
{| class="wikitable | {| class="mtx-class-macrotable wikitable" | ||
|- | |- | ||
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]] | | width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]] | ||
| Line 190: | Line 190: | ||
===ReadDigitalInputs=== | ===ReadDigitalInputs=== | ||
{| class="wikitable | {| class="mtx-class-macrotable wikitable" | ||
|- | |- | ||
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]] | | width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]] | ||
| Line 214: | Line 214: | ||
===ReadHoldingRegister=== | ===ReadHoldingRegister=== | ||
{| class="wikitable | {| class="mtx-class-macrotable wikitable" | ||
|- | |- | ||
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]] | | width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]] | ||
| Line 233: | Line 233: | ||
===SetAnalogInput=== | ===SetAnalogInput=== | ||
{| class="wikitable | {| class="mtx-class-macrotable wikitable" | ||
|- | |- | ||
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]] | | width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]] | ||
| Line 257: | Line 257: | ||
===SetCoil=== | ===SetCoil=== | ||
{| class="wikitable | {| class="mtx-class-macrotable wikitable" | ||
|- | |- | ||
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]] | | width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]] | ||
| Line 281: | Line 281: | ||
===SetDigitalInput=== | ===SetDigitalInput=== | ||
{| class="wikitable | {| class="mtx-class-macrotable wikitable" | ||
|- | |- | ||
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]] | | width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]] | ||
| Line 305: | Line 305: | ||
===SetHoldingRegister=== | ===SetHoldingRegister=== | ||
{| class="wikitable | {| class="mtx-class-macrotable wikitable" | ||
|- | |- | ||
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]] | | width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]] | ||
| Line 329: | Line 329: | ||
===SetSlaveAddress=== | ===SetSlaveAddress=== | ||
{| class="wikitable | {| class="mtx-class-macrotable wikitable" | ||
|- | |- | ||
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]] | | width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]] | ||
| Line 349: | Line 349: | ||
==Property reference== | ==Property reference== | ||
{| class="wikitable | {| class="mtx-class-macrotable wikitable" | ||
|- | |- | ||
| width="10%" align="center" style="background-color:#D8C9D8;" | [[File:Fc9-prop-icon.png]] | | width="10%" align="center" style="background-color:#D8C9D8;" | [[File:Fc9-prop-icon.png]] | ||
Revision as of 14:15, 13 July 2026
| Author | Matrix Ltd. |
| Version | 2.1 |
| Category | Comms: System |
Modbus TCP Slave component
Modbus component for creating Modbus compatible slave hardware via Ethernet or WIFI. Ensure TCP/IP or WIFI component is initialised and connected to a network before calling the ModbusSlaveTCP component macros.
Component Source Code
Please click here to download the component source project: FC_Comp_Source_ModbusSlaveTCP.fcfx
Please click here to view the component source code (Beta): FC_Comp_Source_ModbusSlaveTCP.fcfx
Detailed description
No detailed description exists yet for this component
Examples
Example master program to control the slave. The example sets coil address 0, clears coil address 0, reads an input register and outputs to the LCD. Be sure to set the IP address of the slave device at the top of the program. If you are simulating then use the IP address of the PC running the Slave simulation. Both programs can be simulated on the same PC using two instances of Flowcode.
Example slave program to react to the signals from the master. The example listens for Modbus commands from the master and outputs the current coils 0 state to an LED connected to PortA. The input register is loaded with a value which is incremented on each Modbus transaction.
Addressing
In Modbus the addressing protocol looks like this.
| Data Type | Common name | Starting address | Ending Address | Flowcode Start Address | Flowcode End Address |
| Modbus Coils | Bits, binary values, flags | 00001 | 10000 | 0 | 9999 |
| Digital Inputs | Binary inputs | 10001 | 30000 | 0 | 19999 |
| Analog Inputs | Binary inputs | 30001 | 40000 | 0 | 9999 |
| Modbus Registers | Analog values, variables | 40001 | 60000 | 0 | 19999 |
In Flowcode each section starts from 0 so the address range is as shown.
Macro reference
CheckForIncoming
GetLastIncoming
Initialise
| Initialise | |
| Starts up the UART to allow communications and initialises the states of the various Modbus Coils, Inputs and Registers to 0. | |
| Return | |
ReadAnalogInput
| ReadAnalogInput | |
| Reads the value of a single analogue input. | |
| Address | |
| Coil Address | |
| Return | |
ReadCoils
ReadDigitalInputs
ReadHoldingRegister
| ReadHoldingRegister | |
| Reads the value of a single holding register. | |
| Address | |
| Coil Address | |
| Return | |
SetAnalogInput
| SetAnalogInput | |
| Sets the state of a single analogue input. | |
| Address | |
| Coil Address | |
| Value | |
| Analogue Value range 0 - 65535 | |
| Return | |
SetCoil
| SetCoil | |
| Sets the state of a single digital coil. | |
| Address | |
| Coil Address | |
| State | |
| 0=off, 1=on | |
| Return | |
SetDigitalInput
| SetDigitalInput | |
| Sets the state of a single digital input. | |
| Address | |
| Coil Address | |
| State | |
| 0=off, 1=on | |
| Return | |
SetHoldingRegister
| SetHoldingRegister | |
| Sets the state of a single holding register. | |
| Address | |
| Coil Address | |
| Value | |
| Analogue Value range 0 - 65535 | |
| Return | |
SetSlaveAddress