Component: Modbus Master (SCADA) (Comms: System): Difference between revisions
Appearance
No edit summary |
m Text replacement - "style="background-color:#EAE1EA;"" to "class="mtx-class-propfolder"" |
||
| (15 intermediate revisions by 2 users not shown) | |||
| Line 17: | Line 17: | ||
==Component Source Code== | ==Component Source Code== | ||
Please click here | Please click here to download the component source project: [https://www.flowcode.co.uk/wiki/componentsource/FC_Comp_Source_Modbus_SCADA.fcsx FC_Comp_Source_Modbus_SCADA.fcsx] | ||
Please click here to view the component source code (Beta): [https://www.flowcode.co.uk/FlowchartView/?wfile=componentsource/FC_Comp_Source_Modbus_SCADA.fcsx FC_Comp_Source_Modbus_SCADA.fcsx] | |||
==Detailed description== | ==Detailed description== | ||
| Line 34: | Line 48: | ||
==Examples== | ==Examples== | ||
| Line 49: | Line 75: | ||
{| class="wikitable | |||
==Macro reference== | |||
===ChangeFrameType=== | |||
{| class="mtx-class-macrotable wikitable" | |||
|- | |- | ||
| width="10%" align="center" | | width="10%" align="center" class="mtx-class-macrohead" | [[File:Fc9-comp-macro.png]] | ||
| width="90%" | | width="90%" class="mtx-class-macrohead" | '''ChangeFrameType''' | ||
|- | |- | ||
| colspan="2" | | | colspan="2" | Default frame type is the type set in the component properties. | ||
|- | |- | ||
|- | |- | ||
| width="10%" align="center" | [[File:Fc9- | | width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE | ||
| width="90%" | | | width="90%" | Type | ||
|- | |- | ||
| colspan="2" | | | colspan="2" | 0 = Modbus RTU / 1 = Modbus ASCII | ||
|- | |- | ||
| width="10%" align="center" | [[File:Fc9- | | width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-void-icon.png]] - VOID | ||
| width="90%" | | | width="90%" style="border-top: 2px solid #000;" | ''Return'' | ||
|} | |||
===GetResponse=== | |||
{| class="mtx-class-macrotable wikitable" | |||
|- | |- | ||
| | | width="10%" align="center" class="mtx-class-macrohead" | [[File:Fc9-comp-macro.png]] | ||
| width="90%" class="mtx-class-macrohead" | '''GetResponse''' | |||
|- | |- | ||
| | | colspan="2" | Collects as much incoming data as possible and stored into the response buffer. The number of bytes received will be stored into location 0 of the response buffer. Return value indicates validity of incoming CRC. 0 = OK, 1 = CRC fail, 255 = No Data | ||
|- | |- | ||
|- | |- | ||
| width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-u8-icon.png]] - BYTE | | width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-u8-icon.png]] - BYTE | ||
| Line 79: | Line 120: | ||
{| class="wikitable | ===GetResponseByte=== | ||
{| class="mtx-class-macrotable wikitable" | |||
|- | |- | ||
| width="10%" align="center" | | width="10%" align="center" class="mtx-class-macrohead" | [[File:Fc9-comp-macro.png]] | ||
| width="90%" | | width="90%" class="mtx-class-macrohead" | '''GetResponseByte''' | ||
|- | |- | ||
| colspan="2" | | | colspan="2" | Reads a byte from the last received response. The Index parametes specifies which byte to read back. | ||
|- | |- | ||
|- | |- | ||
| width="10%" align="center" | [[File:Fc9- | | width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE | ||
| width="90%" | | | width="90%" | Index | ||
|- | |- | ||
| colspan="2" | | | colspan="2" | 0=NumBytes, 1=SlaveAddress, 2=FunctionCode/ExceptionCode, 3=DataBytes, 4=data0, 5=data1, .. | ||
|- | |- | ||
| width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-u8-icon.png]] - BYTE | | width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-u8-icon.png]] - BYTE | ||
| Line 107: | Line 139: | ||
{| class="wikitable | ===GetResponseInt=== | ||
{| class="mtx-class-macrotable wikitable" | |||
|- | |- | ||
| width="10%" align="center" | | width="10%" align="center" class="mtx-class-macrohead" | [[File:Fc9-comp-macro.png]] | ||
| width="90%" | | width="90%" class="mtx-class-macrohead" | '''GetResponseInt''' | ||
|- | |- | ||
| colspan="2" | | | colspan="2" | Reads a 16-bit value from the last received response. The Index parametes specifies the byte index of the value to read back. | ||
|- | |- | ||
|- | |- | ||
| width="10%" align="center" | [[File:Fc9- | | width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE | ||
| width="90%" | | | width="90%" | Index | ||
|- | |- | ||
| colspan="2" | | | colspan="2" | 4=data0, 6=data1, 8=data2, .. | ||
|- | |- | ||
| width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT | | width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-u16-icon.png]] - UINT | ||
| width="90%" | | | width="90%" style="border-top: 2px solid #000;" | ''Return'' | ||
|} | |||
===Initialise=== | |||
{| class="mtx-class-macrotable wikitable" | |||
|- | |- | ||
| | | width="10%" align="center" class="mtx-class-macrohead" | [[File:Fc9-comp-macro.png]] | ||
| width="90%" class="mtx-class-macrohead" | '''Initialise''' | |||
|- | |- | ||
| | | colspan="2" | Starts up the UART to allow communications | ||
|- | |- | ||
|- | |- | ||
| width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9- | | width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-void-icon.png]] - VOID | ||
| width="90%" style="border-top: 2px solid #000;" | ''Return'' | | width="90%" style="border-top: 2px solid #000;" | ''Return'' | ||
|} | |} | ||
{| class="wikitable | ===ReadAnalogInput=== | ||
{| class="mtx-class-macrotable wikitable" | |||
|- | |- | ||
| width="10%" align="center" | | width="10%" align="center" class="mtx-class-macrohead" | [[File:Fc9-comp-macro.png]] | ||
| width="90%" | | width="90%" class="mtx-class-macrohead" | '''ReadAnalogInput''' | ||
|- | |- | ||
| colspan="2" | | | colspan="2" | This command requests the analogue input register values starting from the start RegAddress and going through to RegAddress plus RegCount. Returns 0 for success, 1 for CRC fail and 255 for no reply. | ||
|- | |||
|- | |||
| width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT | |||
| width="90%" | SlaveID | |||
|- | |||
| colspan="2" | The ID of the MODBUS slave | |||
|- | |||
| width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT | |||
| width="90%" | RegAddress | |||
|- | |||
| colspan="2" | Input Address: 0=10001, 1=10002, 2=10003, ... | |||
|- | |- | ||
| width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT | |||
| width="90%" | RegCount | |||
|- | |||
| colspan="2" | Number of consecutive inputs to read, starting from RegAddress | |||
|- | |- | ||
| width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-u8-icon.png]] - BYTE | | width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-u8-icon.png]] - BYTE | ||
| Line 148: | Line 201: | ||
{| class="wikitable | ===ReadCoil=== | ||
{| class="mtx-class-macrotable wikitable" | |||
|- | |- | ||
| width="10%" align="center" | | width="10%" align="center" class="mtx-class-macrohead" | [[File:Fc9-comp-macro.png]] | ||
| width="90%" | | width="90%" class="mtx-class-macrohead" | '''ReadCoil''' | ||
|- | |- | ||
| colspan="2" | This command | | colspan="2" | This command requests the ON/OFF status of discrete coils starting from the start CoilAddress and going through to CoilAddress plus CoilCount. Returns 0 for success, 1 for CRC fail and 255 for no reply. | ||
|- | |- | ||
|- | |- | ||
| Line 170: | Line 224: | ||
|- | |- | ||
| colspan="2" | Number of consecutive coils to try and read | | colspan="2" | Number of consecutive coils to try and read | ||
|- | |- | ||
| width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-u8-icon.png]] - BYTE | | width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-u8-icon.png]] - BYTE | ||
| Line 181: | Line 230: | ||
{| class="wikitable" | ===ReadDigitalInput=== | ||
{| class="mtx-class-macrotable wikitable" | |||
|- | |||
| width="10%" align="center" class="mtx-class-macrohead" | [[File:Fc9-comp-macro.png]] | |||
| width="90%" class="mtx-class-macrohead" | '''ReadDigitalInput''' | |||
|- | |||
| colspan="2" | This command requests the ON/OFF status of discrete inputs starting from the start DataAddress and going through to DataAddress plus DataCount. Returns 0 for success, 1 for CRC fail and 255 for no reply. | |||
|- | |||
|- | |||
| width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT | |||
| width="90%" | SlaveID | |||
|- | |- | ||
| | | colspan="2" | The ID of the MODBUS slave | ||
|- | |- | ||
| | | width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT | ||
| width="90%" | DataAddress | |||
|- | |- | ||
| colspan="2" | Input Address: 0=10001, 1=10002, 2=10003, ... | |||
|- | |- | ||
| width="10%" align="center" | [[File:Fc9- | | width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT | ||
| width="90%" | | | width="90%" | DataCount | ||
|- | |- | ||
| colspan="2" | | | colspan="2" | Number of consecutive inputs to read, starting from RegAddress | ||
|- | |- | ||
| width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-u8-icon.png]] - BYTE | | width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-u8-icon.png]] - BYTE | ||
| Line 199: | Line 259: | ||
{| class="wikitable | ===ReadHoldingRegister=== | ||
{| class="mtx-class-macrotable wikitable" | |||
|- | |- | ||
| width="10%" align="center" | | width="10%" align="center" class="mtx-class-macrohead" | [[File:Fc9-comp-macro.png]] | ||
| width="90%" | | width="90%" class="mtx-class-macrohead" | '''ReadHoldingRegister''' | ||
|- | |- | ||
| colspan="2" | | | colspan="2" | This command requests the analogue holding register values starting from the start RegAddress and going through to RegAddress plus RegCount. Returns 0 for success, 1 for CRC fail and 255 for no reply. | ||
|- | |- | ||
|- | |- | ||
| width="10%" align="center" | [[File:Fc9- | | width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT | ||
| width="90%" | | | width="90%" | SlaveID | ||
|- | |- | ||
| colspan="2" | | | colspan="2" | The ID of the MODBUS slave | ||
|- | |- | ||
| width="10%" align="center | | width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT | ||
| width="90% | | width="90%" | RegAddress | ||
|- | |- | ||
| | | colspan="2" | Address: 0=40001, 1=40002, ... | ||
|- | |- | ||
| | | width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT | ||
| width="90%" | RegCount | |||
|- | |- | ||
| colspan="2" | Number of consecutive registers to read, starting from RegAddress | |||
|- | |- | ||
| width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-u8-icon.png]] - BYTE | |||
| width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9- | |||
| width="90%" style="border-top: 2px solid #000;" | ''Return'' | | width="90%" style="border-top: 2px solid #000;" | ''Return'' | ||
|} | |} | ||
{| class="wikitable | ===SetCoil=== | ||
{| class="mtx-class-macrotable wikitable" | |||
|- | |- | ||
| width="10%" align="center" | | width="10%" align="center" class="mtx-class-macrohead" | [[File:Fc9-comp-macro.png]] | ||
| width="90%" | | width="90%" class="mtx-class-macrohead" | '''SetCoil''' | ||
|- | |- | ||
| colspan="2" | This command writes the contents of | | colspan="2" | This command writes the contents of a discrete coil at the location CoilAddress. Returns 0 for success, 1 for CRC fail and 255 for no reply. | ||
|- | |- | ||
|- | |- | ||
| Line 249: | Line 303: | ||
|- | |- | ||
| width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT | | width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT | ||
| width="90%" | | | width="90%" | CoilAddress | ||
|- | |- | ||
| colspan="2" | Address: 0= | | colspan="2" | Coil Address: 0=Coil1, 1=Coil2, 2=Coil3, ... | ||
|- | |- | ||
| width="10%" align="center" | [[File:Fc9- | | width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE | ||
| width="90%" | | | width="90%" | CoilState | ||
|- | |- | ||
| colspan="2" | | | colspan="2" | 0=Off, 1=On | ||
|- | |- | ||
| width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-u8-icon.png]] - BYTE | | width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-u8-icon.png]] - BYTE | ||
| Line 268: | Line 317: | ||
{| class="wikitable | ===SetCoils=== | ||
{| class="mtx-class-macrotable wikitable" | |||
|- | |- | ||
| width="10%" align="center" | | width="10%" align="center" class="mtx-class-macrohead" | [[File:Fc9-comp-macro.png]] | ||
| width="90%" | | width="90%" class="mtx-class-macrohead" | '''SetCoils''' | ||
|- | |- | ||
| colspan="2" | This command | | colspan="2" | This command writes the contents of a series of discrete coils at the location starting at CoilAddress through to CoilAddress + CoilCount. Returns 0 for success, 1 for CRC fail and 255 for no reply. | ||
|- | |- | ||
|- | |- | ||
| Line 282: | Line 332: | ||
|- | |- | ||
| width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT | | width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT | ||
| width="90%" | | | width="90%" | CoilAddress | ||
|- | |- | ||
| colspan="2" | | | colspan="2" | Coil Address: 0=Coil1, 1=Coil2, 2=Coil3, ... | ||
|- | |- | ||
| width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT | | width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT | ||
| width="90%" | | | width="90%" | CoilCount | ||
|- | |||
| colspan="2" | Number of consecutive coils to try and read | |||
|- | |||
| width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE | |||
| width="90%" | CoilData | |||
|- | |- | ||
| colspan="2" | | | colspan="2" | An array of bytes each containing 8 1-bit coil values | ||
|- | |- | ||
| width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-u8-icon.png]] - BYTE | | width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-u8-icon.png]] - BYTE | ||
| Line 296: | Line 351: | ||
{| class="wikitable | ===SetHoldingRegister=== | ||
{| class="mtx-class-macrotable wikitable" | |||
|- | |- | ||
| width="10%" align="center" | | width="10%" align="center" class="mtx-class-macrohead" | [[File:Fc9-comp-macro.png]] | ||
| width="90%" | | width="90%" class="mtx-class-macrohead" | '''SetHoldingRegister''' | ||
|- | |- | ||
| colspan="2" | This command writes the contents of a holding register at the location RegAddress. Returns 0 for success, 1 for CRC fail and 255 for no reply. | | colspan="2" | This command writes the contents of a holding register at the location RegAddress. Returns 0 for success, 1 for CRC fail and 255 for no reply. | ||
| Line 324: | Line 380: | ||
{| class="wikitable | ===SetHoldingRegisters=== | ||
{| class="mtx-class-macrotable wikitable" | |||
|- | |- | ||
| width="10%" align="center" | | width="10%" align="center" class="mtx-class-macrohead" | [[File:Fc9-comp-macro.png]] | ||
| width="90%" | | width="90%" class="mtx-class-macrohead" | '''SetHoldingRegisters''' | ||
|- | |- | ||
| colspan="2" | This command | | colspan="2" | This command writes the contents of several holding registers starting at the location RegAddress through to location RegAddress + RegCount . Returns 0 for success, 1 for CRC fail and 255 for no reply. | ||
|- | |- | ||
|- | |- | ||
| Line 338: | Line 395: | ||
|- | |- | ||
| width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT | | width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT | ||
| width="90%" | | | width="90%" | RegAddress | ||
|- | |- | ||
| colspan="2" | | | colspan="2" | Address: 0=40001, 1=40002, ... | ||
|- | |- | ||
| width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT | | width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT | ||
| width="90%" | | | width="90%" | RegCount | ||
|- | |- | ||
| colspan="2" | Number of consecutive | | colspan="2" | Number of consecutive registers to write, starting from RegAddress | ||
|- | |- | ||
| width="10%" align="center | | width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT | ||
| width="90% | | width="90%" | RegValue | ||
|- | |- | ||
| | | colspan="2" | Array of values to send to the registers | ||
|- | |- | ||
| width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-u8-icon.png]] - BYTE | |||
| width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9- | |||
| width="90%" style="border-top: 2px solid #000;" | ''Return'' | | width="90%" style="border-top: 2px solid #000;" | ''Return'' | ||
|} | |} | ||
==Property reference== | ==Property reference== | ||
{| class="wikitable | {| class="mtx-class-macrotable wikitable" | ||
|- | |- | ||
| width="10%" align="center" | | width="10%" align="center" class="mtx-class-macrohead" | [[File:Fc9-prop-icon.png]] | ||
| width="90%" | | width="90%" class="mtx-class-macrohead" | '''Properties''' | ||
|- | |- | ||
|- | |- | ||
| width="10%" align="center" | | width="10%" align="center" class="mtx-class-propfolder" | [[File:Fc9-conn-icon.png]] | ||
| width="90%" | | width="90%" class="mtx-class-propfolder" | Modbus Properties | ||
|- | |- | ||
|- | |- | ||
| Line 409: | Line 456: | ||
| colspan="2" | Number of timeouts in a row to wait for until we decide the slave is not responding or finished responding to a message. Range: 0 - 255 0 = First Timeout Only 1 = First Timeout + 1 2 = First Timeout + 2 | | colspan="2" | Number of timeouts in a row to wait for until we decide the slave is not responding or finished responding to a message. Range: 0 - 255 0 = First Timeout Only 1 = First Timeout + 1 2 = First Timeout + 2 | ||
|- | |- | ||
| width="10%" align="center" | | width="10%" align="center" class="mtx-class-propfolder" | [[File:Fc9-conn-icon.png]] | ||
| width="90%" | | width="90%" class="mtx-class-propfolder" | Runtime Properties | ||
|- | |- | ||
|- | |- | ||
Latest revision as of 14:36, 13 July 2026
| Author | Matrix TSL |
| Version | 2.1 |
| Category | Comms: System |
Modbus Master (SCADA) component
Modbus component for talking to Modbus compatible hardware via RS232 or RS485.
Component Source Code
Please click here to download the component source project: FC_Comp_Source_Modbus_SCADA.fcsx
Please click here to view the component source code (Beta): FC_Comp_Source_Modbus_SCADA.fcsx
Detailed description
No detailed description exists yet for this component
Examples
No additional examples
Macro reference
ChangeFrameType
| ChangeFrameType | |
| Default frame type is the type set in the component properties. | |
| Type | |
| 0 = Modbus RTU / 1 = Modbus ASCII | |
| Return | |
GetResponse
GetResponseByte
GetResponseInt
| GetResponseInt | |
| Reads a 16-bit value from the last received response. The Index parametes specifies the byte index of the value to read back. | |
| Index | |
| 4=data0, 6=data1, 8=data2, .. | |
| Return | |
Initialise
| Initialise | |
| Starts up the UART to allow communications | |
| Return | |
ReadAnalogInput
ReadCoil
ReadDigitalInput
ReadHoldingRegister
SetCoil
SetCoils
SetHoldingRegister
SetHoldingRegisters