Difference between revisions of "Component: Modbus Master (SCADA) (Comms: System)"

From Flowcode Help
Jump to navigationJump to search
(XML import)
 
 
(15 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
+
{| style="width:50%"
 
 
{| width="50%"
 
 
|-
 
|-
| width="20%" style="color: gray;" | Author
+
| width="20%" style="color:gray;" | Author
 
| Matrix TSL
 
| Matrix TSL
 
|-
 
|-
| width="20%" style="color: gray;" | Version
+
| width="20%" style="color:gray;" | Version
| 2.1 (Release)
+
| 2.1
 
|-
 
|-
| width="20%" style="color: gray;" | Category
+
| width="20%" style="color:gray;" | Category
 
| Comms: System
 
| Comms: System
 
|}
 
|}
  
  
 
+
==Modbus Master (SCADA) component==
==[[File:Component Icon 97647329_1e06_46dc_ba11_9d721038294d.png|Image]] Modbus Master (SCADA) component==
 
 
Modbus component for talking to Modbus compatible hardware via RS232 or RS485.  
 
Modbus component for talking to Modbus compatible hardware via RS232 or RS485.  
  
==Examples==
+
==Component Source Code==
''<span style="color:red;">No additional examples</span>''
 
  
 +
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]
  
==Downloadable macro reference==
+
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]
  
===<span style="font-weight: normal;"><u><tt>ReadHoldingRegister</tt></u></span>===
+
==Detailed description==
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.
 
  
'''Parameters'''
 
  
:[[Variable Types|UINT]] ''SlaveID''
 
::The ID of the MODBUS slave
 
  
:[[Variable Types|UINT]] ''RegAddress''
 
::Address: 0=40001, 1=40002, ...
 
  
:[[Variable Types|UINT]] ''RegCount''
 
::Number of consecutive registers to read, starting from RegAddress
 
  
  
'''Return value'''
 
  
:[[Variable Types|BYTE]]
 
  
  
===<span style="font-weight: normal;"><u><tt>ForceMultipleCoils</tt></u></span>===
 
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.
 
  
'''Parameters'''
 
  
:[[Variable Types|UINT]] ''SlaveID''
 
::The ID of the MODBUS slave
 
  
:[[Variable Types|UINT]] ''CoilAddress''
 
::Coil Address: 0=Coil1, 1=Coil2, 2=Coil3, ...
 
  
:[[Variable Types|UINT]] ''CoilCount''
 
::Number of consecutive coils to try and read
 
  
:[[Variable Types|BYTE]] ''CoilData''
 
::An array of bytes each containing 8 1-bit coil values
 
  
  
'''Return value'''
 
  
:[[Variable Types|BYTE]]
 
  
  
===<span style="font-weight: normal;"><u><tt>ForceSingleCoil</tt></u></span>===
 
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.
 
  
'''Parameters'''
+
''No detailed description exists yet for this component''
  
:[[Variable Types|UINT]] ''SlaveID''
+
==Examples==
::The ID of the MODBUS slave
 
  
:[[Variable Types|UINT]] ''CoilAddress''
 
::Coil Address: 0=Coil1, 1=Coil2, 2=Coil3, ...
 
  
:[[Variable Types|BYTE]] ''CoilState''
 
::0=Off, 1=On
 
  
  
'''Return value'''
 
  
:[[Variable Types|BYTE]]
 
  
  
===<span style="font-weight: normal;"><u><tt>GetResponse</tt></u></span>===
 
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
 
  
'''Parameters'''
 
  
:''This macro has no parameters''
 
  
  
'''Return value'''
 
  
:[[Variable Types|BYTE]]
 
  
  
===<span style="font-weight: normal;"><u><tt>ReadCoilStatus</tt></u></span>===
 
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.
 
  
'''Parameters'''
 
  
:[[Variable Types|UINT]] ''SlaveID''
 
::The ID of the MODBUS slave
 
  
:[[Variable Types|UINT]] ''CoilAddress''
 
::Coil Address: 0=Coil1, 1=Coil2, 2=Coil3, ...
 
  
:[[Variable Types|UINT]] ''CoilCount''
 
::Number of consecutive coils to try and read
 
  
  
'''Return value'''
 
  
:[[Variable Types|BYTE]]
 
  
 +
''<span style="color:red;">No additional examples</span>''
  
===<span style="font-weight: normal;"><u><tt>GetResponseByte</tt></u></span>===
 
Reads a byte from the last received response. The Index parametes specifies which byte to read back.
 
  
'''Parameters'''
 
  
:[[Variable Types|BYTE]] ''Index''
 
::0=NumBytes, 1=SlaveAddress, 2=FunctionCode/ExceptionCode, .....
 
  
  
'''Return value'''
 
  
:[[Variable Types|BYTE]]
 
  
  
===<span style="font-weight: normal;"><u><tt>ReadInputStatus</tt></u></span>===
 
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.
 
  
'''Parameters'''
 
  
:[[Variable Types|UINT]] ''SlaveID''
 
::The ID of the MODBUS slave
 
  
:[[Variable Types|UINT]] ''DataAddress''
+
==Macro reference==
::Input Address: 0=10001, 1=10002, 2=10003, ...
 
  
:[[Variable Types|UINT]] ''DataCount''
+
===ChangeFrameType===
::Number of consecutive inputs to read, starting from RegAddress
+
{| class="wikitable" style="width:60%; background-color:#FFFFFF;"
 +
|-
 +
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]]
 +
| width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''ChangeFrameType'''
 +
|-
 +
| colspan="2" | Default frame type is the type set in the component properties.&nbsp;
 +
|-
 +
|-
 +
| width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE
 +
| width="90%" | Type
 +
|-
 +
| colspan="2" | 0 = Modbus RTU / 1 = Modbus ASCII&nbsp;
 +
|-
 +
| 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''
 +
|}
  
  
'''Return value'''
+
===GetResponse===
 +
{| class="wikitable" style="width:60%; background-color:#FFFFFF;"
 +
|-
 +
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]]
 +
| width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''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&nbsp;
 +
|-
 +
|-
 +
| width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-u8-icon.png]] - BYTE
 +
| width="90%" style="border-top: 2px solid #000;" | ''Return''
 +
|}
  
:[[Variable Types|BYTE]]
 
  
 +
===GetResponseByte===
 +
{| class="wikitable" style="width:60%; background-color:#FFFFFF;"
 +
|-
 +
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]]
 +
| width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''GetResponseByte'''
 +
|-
 +
| colspan="2" | Reads a byte from the last received response. The Index parametes specifies which byte to read back. &nbsp;
 +
|-
 +
|-
 +
| width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE
 +
| width="90%" | Index
 +
|-
 +
| colspan="2" | 0=NumBytes, 1=SlaveAddress, 2=FunctionCode/ExceptionCode, 3=DataBytes, 4=data0, 5=data1, ..&nbsp;
 +
|-
 +
| width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-u8-icon.png]] - BYTE
 +
| width="90%" style="border-top: 2px solid #000;" | ''Return''
 +
|}
  
===<span style="font-weight: normal;"><u><tt>ChangeFrameType</tt></u></span>===
 
Default frame type is the type set in the component properties.
 
  
'''Parameters'''
+
===GetResponseInt===
 +
{| class="wikitable" style="width:60%; background-color:#FFFFFF;"
 +
|-
 +
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]]
 +
| width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''GetResponseInt'''
 +
|-
 +
| 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. &nbsp;
 +
|-
 +
|-
 +
| width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE
 +
| width="90%" | Index
 +
|-
 +
| colspan="2" | 4=data0, 6=data1, 8=data2, ..&nbsp;
 +
|-
 +
| width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-u16-icon.png]] - UINT
 +
| width="90%" style="border-top: 2px solid #000;" | ''Return''
 +
|}
  
:[[Variable Types|BYTE]] ''Type''
 
::0 = Modbus RTU / 1 = Modbus ASCII
 
  
 +
===Initialise===
 +
{| class="wikitable" style="width:60%; background-color:#FFFFFF;"
 +
|-
 +
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]]
 +
| width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''Initialise'''
 +
|-
 +
| colspan="2" | Starts up the UART to allow communications&nbsp;
 +
|-
 +
|-
 +
| 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''
 +
|}
  
'''Return value'''
 
  
:''This call does not return a value''
+
===ReadAnalogInput===
 +
{| class="wikitable" style="width:60%; background-color:#FFFFFF;"
 +
|-
 +
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]]
 +
| width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''ReadAnalogInput'''
 +
|-
 +
| 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.&nbsp;
 +
|-
 +
|-
 +
| width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT
 +
| width="90%" | SlaveID
 +
|-
 +
| colspan="2" | The ID of the MODBUS slave&nbsp;
 +
|-
 +
| width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT
 +
| width="90%" | RegAddress
 +
|-
 +
| colspan="2" | Input Address: 0=10001, 1=10002, 2=10003, ...&nbsp;
 +
|-
 +
| width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT
 +
| width="90%" | RegCount
 +
|-
 +
| colspan="2" | Number of consecutive inputs to read, starting from RegAddress&nbsp;
 +
|-
 +
| width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-u8-icon.png]] - BYTE
 +
| width="90%" style="border-top: 2px solid #000;" | ''Return''
 +
|}
  
  
===<span style="font-weight: normal;"><u><tt>PresetSingleRegister</tt></u></span>===
+
===ReadCoil===
This command writes the contents of a analogue output holding registerl at the location RegAddress.
+
{| class="wikitable" style="width:60%; background-color:#FFFFFF;"
 +
|-
 +
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]]
 +
| width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''ReadCoil'''
 +
|-
 +
| 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.&nbsp;
 +
|-
 +
|-
 +
| width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT
 +
| width="90%" | SlaveID
 +
|-
 +
| colspan="2" | The ID of the MODBUS slave&nbsp;
 +
|-
 +
| width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT
 +
| width="90%" | CoilAddress
 +
|-
 +
| colspan="2" | Coil Address: 0=Coil1, 1=Coil2, 2=Coil3, ...&nbsp;
 +
|-
 +
| width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT
 +
| width="90%" | CoilCount
 +
|-
 +
| colspan="2" | Number of consecutive coils to try and read&nbsp;
 +
|-
 +
| width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-u8-icon.png]] - BYTE
 +
| width="90%" style="border-top: 2px solid #000;" | ''Return''
 +
|}
  
Returns 0 for success, 1 for CRC fail and 255 for no reply.
 
  
'''Parameters'''
+
===ReadDigitalInput===
 +
{| class="wikitable" style="width:60%; background-color:#FFFFFF;"
 +
|-
 +
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]]
 +
| width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''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.&nbsp;
 +
|-
 +
|-
 +
| width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT
 +
| width="90%" | SlaveID
 +
|-
 +
| colspan="2" | The ID of the MODBUS slave&nbsp;
 +
|-
 +
| width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT
 +
| width="90%" | DataAddress
 +
|-
 +
| colspan="2" | Input Address: 0=10001, 1=10002, 2=10003, ...&nbsp;
 +
|-
 +
| width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT
 +
| width="90%" | DataCount
 +
|-
 +
| colspan="2" | Number of consecutive inputs to read, starting from RegAddress&nbsp;
 +
|-
 +
| width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-u8-icon.png]] - BYTE
 +
| width="90%" style="border-top: 2px solid #000;" | ''Return''
 +
|}
  
:[[Variable Types|UINT]] ''SlaveID''
 
::The ID of the MODBUS slave
 
  
:[[Variable Types|UINT]] ''RegAddress''
+
===ReadHoldingRegister===
::Address: 0=40001, 1=40002, ...
+
{| class="wikitable" style="width:60%; background-color:#FFFFFF;"
 +
|-
 +
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]]
 +
| width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''ReadHoldingRegister'''
 +
|-
 +
| 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.&nbsp;
 +
|-
 +
|-
 +
| width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT
 +
| width="90%" | SlaveID
 +
|-
 +
| colspan="2" | The ID of the MODBUS slave&nbsp;
 +
|-
 +
| width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT
 +
| width="90%" | RegAddress
 +
|-
 +
| colspan="2" | Address: 0=40001, 1=40002, ...&nbsp;
 +
|-
 +
| width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT
 +
| width="90%" | RegCount
 +
|-
 +
| colspan="2" | Number of consecutive registers to read, starting from RegAddress&nbsp;
 +
|-
 +
| width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-u8-icon.png]] - BYTE
 +
| width="90%" style="border-top: 2px solid #000;" | ''Return''
 +
|}
  
:[[Variable Types|UINT]] ''RegValue''
 
::Value to send to the selected register
 
  
 +
===SetCoil===
 +
{| class="wikitable" style="width:60%; background-color:#FFFFFF;"
 +
|-
 +
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]]
 +
| width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''SetCoil'''
 +
|-
 +
| 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.&nbsp;
 +
|-
 +
|-
 +
| width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT
 +
| width="90%" | SlaveID
 +
|-
 +
| colspan="2" | The ID of the MODBUS slave&nbsp;
 +
|-
 +
| width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT
 +
| width="90%" | CoilAddress
 +
|-
 +
| colspan="2" | Coil Address: 0=Coil1, 1=Coil2, 2=Coil3, ...&nbsp;
 +
|-
 +
| width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE
 +
| width="90%" | CoilState
 +
|-
 +
| colspan="2" | 0=Off, 1=On&nbsp;
 +
|-
 +
| width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-u8-icon.png]] - BYTE
 +
| width="90%" style="border-top: 2px solid #000;" | ''Return''
 +
|}
  
'''Return value'''
 
  
:[[Variable Types|BYTE]]
+
===SetCoils===
 +
{| class="wikitable" style="width:60%; background-color:#FFFFFF;"
 +
|-
 +
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]]
 +
| width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''SetCoils'''
 +
|-
 +
| 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.&nbsp;
 +
|-
 +
|-
 +
| width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT
 +
| width="90%" | SlaveID
 +
|-
 +
| colspan="2" | The ID of the MODBUS slave&nbsp;
 +
|-
 +
| width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT
 +
| width="90%" | CoilAddress
 +
|-
 +
| colspan="2" | Coil Address: 0=Coil1, 1=Coil2, 2=Coil3, ...&nbsp;
 +
|-
 +
| width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT
 +
| width="90%" | CoilCount
 +
|-
 +
| colspan="2" | Number of consecutive coils to try and read&nbsp;
 +
|-
 +
| width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE
 +
| width="90%" | CoilData
 +
|-
 +
| colspan="2" | An array of bytes each containing 8 1-bit coil values&nbsp;
 +
|-
 +
| width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-u8-icon.png]] - BYTE
 +
| width="90%" style="border-top: 2px solid #000;" | ''Return''
 +
|}
  
  
===<span style="font-weight: normal;"><u><tt>GetResponseInt</tt></u></span>===
+
===SetHoldingRegister===
Reads a 16-bit value from the last received response.  
+
{| class="wikitable" style="width:60%; background-color:#FFFFFF;"
 +
|-
 +
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]]
 +
| width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''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.&nbsp;
 +
|-
 +
|-
 +
| width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT
 +
| width="90%" | SlaveID
 +
|-
 +
| colspan="2" | The ID of the MODBUS slave&nbsp;
 +
|-
 +
| width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT
 +
| width="90%" | RegAddress
 +
|-
 +
| colspan="2" | Address: 0=40001, 1=40002, ...&nbsp;
 +
|-
 +
| width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT
 +
| width="90%" | RegValue
 +
|-
 +
| colspan="2" | Value to send to the selected register&nbsp;
 +
|-
 +
| width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-u8-icon.png]] - BYTE
 +
| width="90%" style="border-top: 2px solid #000;" | ''Return''
 +
|}
  
The Index parametes specifies the byte index of the value to read back.
 
  
'''Parameters'''
+
===SetHoldingRegisters===
 
+
{| class="wikitable" style="width:60%; background-color:#FFFFFF;"
:[[Variable Types|BYTE]] ''Index''
+
|-
::0=NumBytes, 1=SlaveAddress, 2=FunctionCode/ExceptionCode, .....
+
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]]
 
+
| width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''SetHoldingRegisters'''
 
+
|-
'''Return value'''
+
| 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.&nbsp;
 
+
|-
:[[Variable Types|UINT]]
+
|-
 
+
| width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT
 
+
| width="90%" | SlaveID
===<span style="font-weight: normal;"><u><tt>ReadInputRegister</tt></u></span>===
+
|-
This command requests the analogue input register values starting from the start RegAddress and going through to RegAddress plus RegCount.
+
| colspan="2" | The ID of the MODBUS slave&nbsp;
 
+
|-
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%" | RegAddress
'''Parameters'''
+
|-
 
+
| colspan="2" | Address: 0=40001, 1=40002, ...&nbsp;
:[[Variable Types|UINT]] ''SlaveID''
+
|-
::The ID of the MODBUS slave
+
| width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT
 
+
| width="90%" | RegCount
:[[Variable Types|UINT]] ''RegAddress''
+
|-
::Input Address: 0=10001, 1=10002, 2=10003, ...
+
| colspan="2" | Number of consecutive registers to write, starting from RegAddress&nbsp;
 
+
|-
:[[Variable Types|UINT]] ''RegCount''
+
| width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT
::Number of consecutive inputs to read, starting from RegAddress
+
| width="90%" | RegValue
 
+
|-
 
+
| colspan="2" | Array of values to send to the registers&nbsp;
'''Return value'''
+
|-
 
+
| width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-u8-icon.png]] - BYTE
:[[Variable Types|BYTE]]
+
| width="90%" style="border-top: 2px solid #000;" | ''Return''
 
+
|}
 
 
===<span style="font-weight: normal;"><u><tt>PresetMultipleRegisters</tt></u></span>===
 
This command writes the contents of several analogue output 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.
 
 
 
'''Parameters'''
 
 
 
:[[Variable Types|UINT]] ''SlaveID''
 
::The ID of the MODBUS slave
 
 
 
:[[Variable Types|UINT]] ''RegAddress''
 
::Address: 0=40001, 1=40002, ...
 
 
 
:[[Variable Types|UINT]] ''RegCount''
 
::Number of consecutive registers to write, starting from RegAddress
 
 
 
:[[Variable Types|UINT]] ''RegValue''
 
::Array of values to send to the registers
 
 
 
 
 
'''Return value'''
 
 
 
:[[Variable Types|BYTE]]
 
 
 
 
 
===<span style="font-weight: normal;"><u><tt>Initialise</tt></u></span>===
 
Starts up the UART to allow communications
 
 
 
'''Parameters'''
 
 
 
:''This macro has no parameters''
 
 
 
 
 
'''Return value'''
 
 
 
:''This call does not return a value''
 
 
 
 
 
 
 
==Simulation macro reference==
 
 
 
''This component does not contain any simulation macros''
 
  
  
 
==Property reference==
 
==Property reference==
<span style="font-weight: normal;"><u>Frame Type</u></span>
 
  
This property is of type ''Fixed list of ints'' and can be referenced with the variable name ''FrameType''.
+
{| class="wikitable" style="width:60%; background-color:#FFFFFF;"
 
+
|-
Switches between RTU and ASCII forms of Modbus
+
| width="10%" align="center" style="background-color:#D8C9D8;" | [[File:Fc9-prop-icon.png]]
 
+
| width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''Properties'''  
<span style="font-weight: normal;"><u>Receive Buffer Size</u></span>
+
|-
 
+
|-
This property is of type ''Unsigned integer'' and can be referenced with the variable name ''ReceiveBufferSize''.
+
| width="10%" align="center" style="background-color:#EAE1EA;" | [[File:Fc9-conn-icon.png]]
 
+
| width="90%" style="background-color:#EAE1EA; color:#4B008D;" | Modbus Properties
Maximum number of bytes the receive buffer can hold
+
|-
 
+
|-
<span style="font-weight: normal;"><u>Slave ID Bytes</u></span>
+
| width="10%" align="center" | [[File:Fc9-type-16-icon.png]]
 
+
| width="90%" | Frame Type
This property is of type ''Unsigned integer'' and can be referenced with the variable name ''AddressBytes''.
+
|-
 
+
| colspan="2" | Switches between RTU and ASCII forms of Modbus&nbsp;
Number of bytes used when passing a slave ID, usually 1 but sometimes 2
+
|-
 
+
| width="10%" align="center" | [[File:Fc9-type-21-icon.png]]
<span style="font-weight: normal;"><u>Silent Interval</u></span>
+
| width="90%" | Receive Buffer Size
 
+
|-
This property is of type ''Unsigned integer'' and can be referenced with the variable name ''SilentInterval''.
+
| colspan="2" | Maximum number of bytes the receive buffer can hold&nbsp;
 
+
|-
Configures how much time to wait after each master modbus command before another command can be sent.
+
| width="10%" align="center" | [[File:Fc9-type-21-icon.png]]
 
+
| width="90%" | Slave ID Bytes
A silent interval of 60ms minimum is required in order to guarentee successful reception of the next transmission.
+
|-
 
+
| colspan="2" | Number of bytes used when passing a slave ID, usually 1 but sometimes 2&nbsp;
0=No Delay  
+
|-
 
+
| width="10%" align="center" | [[File:Fc9-type-21-icon.png]]
60 = 60mS - Default
+
| width="90%" | Silent Interval
 
+
|-
Range : 0 - 65535
+
| colspan="2" | Configures how much time to wait after each master modbus command before another command can be sent. A silent interval of 60ms minimum is required in order to guarentee successful reception of the next transmission. 0=No Delay 60 = 60mS - Default Range : 0 - 65535&nbsp;
 
+
|-
<span style="font-weight: normal;"><u>UART Receive Timeout</u></span>
+
| width="10%" align="center" | [[File:Fc9-type-21-icon.png]]
 
+
| width="90%" | UART Receive Timeout
This property is of type ''Unsigned integer'' and can be referenced with the variable name ''RXTOUT''.
+
|-
 
+
| colspan="2" | Amount of time to wait before timing out when listening for a slave's response. Range: 0 - 255. 0 = Don't Wait 1 - 254 = X ms 255 = Wait Forever&nbsp;
Amount of time to wait before timing out when listening for a slave's response.
+
|-
 
+
| width="10%" align="center" | [[File:Fc9-type-21-icon.png]]
Range: 0 - 255.
+
| width="90%" | Receive Timeout Count
 
+
|-
0 = Don't Wait
+
| 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&nbsp;
 
+
|-
1 - 254 = X ms
+
| width="10%" align="center" style="background-color:#EAE1EA;" | [[File:Fc9-conn-icon.png]]
 
+
| width="90%" style="background-color:#EAE1EA; color:#4B008D;" | Runtime Properties
255 = Wait Forever
+
|-
 
+
|-
<span style="font-weight: normal;"><u>Receive Timeout Count</u></span>
+
| width="10%" align="center" | [[File:Fc9-type-10-icon.png]]
 
+
| width="90%" | Label
This property is of type ''Unsigned integer'' and can be referenced with the variable name ''TOUTCNT''.
+
|-
 
+
| colspan="2" | A text label to appear on the Modbus panel object.&nbsp;
Number of timeouts in a row to wait for until we decide the slave is not responding or finished responding
+
|-
 
+
| width="10%" align="center" | [[File:Fc9-type-7-icon.png]]
to a message.
+
| width="90%" | Console Data
 
+
|-
Range: 0 - 255
+
| colspan="2" | Selects if the console data is automatically generated or not&nbsp;
 
+
|-
0 = First Timeout Only
+
| width="10%" align="center" | [[File:Fc9-type-21-icon.png]]
 
+
| width="90%" | Console Columns
1 = First Timeout + 1
+
|-
 
+
| colspan="2" | Number of characters that can be displayed on a single line of the console.&nbsp;
2 = First Timeout + 2
+
|-
 
+
| width="10%" align="center" | [[File:Fc9-type-16-icon.png]]
<span style="font-weight: normal;"><u>Label</u></span>
+
| width="90%" | Data Source
 
+
|-
This property is of type ''Line of text'' and can be referenced with the variable name ''label''.
+
| colspan="2" | Simulation data source used to allow the component to connect to various remote devices    Nothing - Simulation data is ignored    COM port - Routes the communication data to and from a physical or virtual COM port     Injector - Routes the communication data via a data injector component on the Panel.&nbsp;
 
+
|-
A text label to appear on the Modbus panel object.
+
| width="10%" align="center" | [[File:Fc9-type-16-icon.png]]
 
+
| width="90%" | COM Port
<span style="font-weight: normal;"><u>Console Data</u></span>
+
|-
 
+
| colspan="2" | Lists all the current available COM port hardware on your PC.&nbsp;
This property is of type ''True or false'' and can be referenced with the variable name ''scada_uart1::ConsoleData''.
+
|-
 
+
| width="10%" align="center" | [[File:Fc9-type-7-icon.png]]
Selects if the console data is automatically generated or not
+
| width="90%" | Refresh Ports
 
+
|-
<span style="font-weight: normal;"><u>Console Columns</u></span>
+
| colspan="2" | &nbsp;
 
+
|-
This property is of type ''Unsigned integer'' and can be referenced with the variable name ''scada_uart1::ConsoleColumns''.
+
| width="10%" align="center" | [[File:Fc9-type-21-icon.png]]
 
+
| width="90%" | Baud Rate
Number of characters that can be displayed on a single line of the console.
+
|-
 
+
| colspan="2" | COM port data rate in bits per second&nbsp;
<span style="font-weight: normal;"><u>Data Source</u></span>
+
|}
 
 
This property is of type ''Fixed list of ints'' and can be referenced with the variable name ''scada_uart1::DataSource''.
 
 
 
Simulation data source used to allow the component to connect to various remote devices
 
 
 
     Nothing - Simulation data is ignored
 
 
 
     COM port - Routes the communication data to and from a physical or virtual COM port  
 
 
 
    Injector - Routes the communication data via a data injector component on the Panel.
 
 
 
<span style="font-weight: normal;"><u>COM Port</u></span>
 
 
 
This property is of type ''Fixed list of ints'' and can be referenced with the variable name ''scada_uart1::com_port''.
 
 
 
Lists all the current available COM port hardware on your PC.
 
 
 
<span style="font-weight: normal;"><u>Baud Rate</u></span>
 
 
 
This property is of type ''Unsigned integer'' and can be referenced with the variable name ''scada_uart1::baud''.
 
 
 
COM port data rate in bits per second
 

Latest revision as of 13:12, 7 February 2023

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

Fc9-comp-macro.png ChangeFrameType
Default frame type is the type set in the component properties. 
Fc9-u8-icon.png - BYTE Type
0 = Modbus RTU / 1 = Modbus ASCII 
Fc9-void-icon.png - VOID Return


GetResponse

Fc9-comp-macro.png GetResponse
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 
Fc9-u8-icon.png - BYTE Return


GetResponseByte

Fc9-comp-macro.png GetResponseByte
Reads a byte from the last received response. The Index parametes specifies which byte to read back.  
Fc9-u8-icon.png - BYTE Index
0=NumBytes, 1=SlaveAddress, 2=FunctionCode/ExceptionCode, 3=DataBytes, 4=data0, 5=data1, .. 
Fc9-u8-icon.png - BYTE Return


GetResponseInt

Fc9-comp-macro.png GetResponseInt
Reads a 16-bit value from the last received response. The Index parametes specifies the byte index of the value to read back.  
Fc9-u8-icon.png - BYTE Index
4=data0, 6=data1, 8=data2, .. 
Fc9-u16-icon.png - UINT Return


Initialise

Fc9-comp-macro.png Initialise
Starts up the UART to allow communications 
Fc9-void-icon.png - VOID Return


ReadAnalogInput

Fc9-comp-macro.png ReadAnalogInput
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. 
Fc9-u16-icon.png - UINT SlaveID
The ID of the MODBUS slave 
Fc9-u16-icon.png - UINT RegAddress
Input Address: 0=10001, 1=10002, 2=10003, ... 
Fc9-u16-icon.png - UINT RegCount
Number of consecutive inputs to read, starting from RegAddress 
Fc9-u8-icon.png - BYTE Return


ReadCoil

Fc9-comp-macro.png ReadCoil
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. 
Fc9-u16-icon.png - UINT SlaveID
The ID of the MODBUS slave 
Fc9-u16-icon.png - UINT CoilAddress
Coil Address: 0=Coil1, 1=Coil2, 2=Coil3, ... 
Fc9-u16-icon.png - UINT CoilCount
Number of consecutive coils to try and read 
Fc9-u8-icon.png - BYTE Return


ReadDigitalInput

Fc9-comp-macro.png ReadDigitalInput
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. 
Fc9-u16-icon.png - UINT SlaveID
The ID of the MODBUS slave 
Fc9-u16-icon.png - UINT DataAddress
Input Address: 0=10001, 1=10002, 2=10003, ... 
Fc9-u16-icon.png - UINT DataCount
Number of consecutive inputs to read, starting from RegAddress 
Fc9-u8-icon.png - BYTE Return


ReadHoldingRegister

Fc9-comp-macro.png ReadHoldingRegister
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. 
Fc9-u16-icon.png - UINT SlaveID
The ID of the MODBUS slave 
Fc9-u16-icon.png - UINT RegAddress
Address: 0=40001, 1=40002, ... 
Fc9-u16-icon.png - UINT RegCount
Number of consecutive registers to read, starting from RegAddress 
Fc9-u8-icon.png - BYTE Return


SetCoil

Fc9-comp-macro.png SetCoil
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. 
Fc9-u16-icon.png - UINT SlaveID
The ID of the MODBUS slave 
Fc9-u16-icon.png - UINT CoilAddress
Coil Address: 0=Coil1, 1=Coil2, 2=Coil3, ... 
Fc9-u8-icon.png - BYTE CoilState
0=Off, 1=On 
Fc9-u8-icon.png - BYTE Return


SetCoils

Fc9-comp-macro.png SetCoils
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. 
Fc9-u16-icon.png - UINT SlaveID
The ID of the MODBUS slave 
Fc9-u16-icon.png - UINT CoilAddress
Coil Address: 0=Coil1, 1=Coil2, 2=Coil3, ... 
Fc9-u16-icon.png - UINT CoilCount
Number of consecutive coils to try and read 
Fc9-u8-icon.png - BYTE CoilData
An array of bytes each containing 8 1-bit coil values 
Fc9-u8-icon.png - BYTE Return


SetHoldingRegister

Fc9-comp-macro.png SetHoldingRegister
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. 
Fc9-u16-icon.png - UINT SlaveID
The ID of the MODBUS slave 
Fc9-u16-icon.png - UINT RegAddress
Address: 0=40001, 1=40002, ... 
Fc9-u16-icon.png - UINT RegValue
Value to send to the selected register 
Fc9-u8-icon.png - BYTE Return


SetHoldingRegisters

Fc9-comp-macro.png SetHoldingRegisters
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. 
Fc9-u16-icon.png - UINT SlaveID
The ID of the MODBUS slave 
Fc9-u16-icon.png - UINT RegAddress
Address: 0=40001, 1=40002, ... 
Fc9-u16-icon.png - UINT RegCount
Number of consecutive registers to write, starting from RegAddress 
Fc9-u16-icon.png - UINT RegValue
Array of values to send to the registers 
Fc9-u8-icon.png - BYTE Return


Property reference

Fc9-prop-icon.png Properties
Fc9-conn-icon.png Modbus Properties
Fc9-type-16-icon.png Frame Type
Switches between RTU and ASCII forms of Modbus 
Fc9-type-21-icon.png Receive Buffer Size
Maximum number of bytes the receive buffer can hold 
Fc9-type-21-icon.png Slave ID Bytes
Number of bytes used when passing a slave ID, usually 1 but sometimes 2 
Fc9-type-21-icon.png Silent Interval
Configures how much time to wait after each master modbus command before another command can be sent. A silent interval of 60ms minimum is required in order to guarentee successful reception of the next transmission. 0=No Delay 60 = 60mS - Default Range : 0 - 65535 
Fc9-type-21-icon.png UART Receive Timeout
Amount of time to wait before timing out when listening for a slave's response. Range: 0 - 255. 0 = Don't Wait 1 - 254 = X ms 255 = Wait Forever 
Fc9-type-21-icon.png Receive Timeout Count
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 
Fc9-conn-icon.png Runtime Properties
Fc9-type-10-icon.png Label
A text label to appear on the Modbus panel object. 
Fc9-type-7-icon.png Console Data
Selects if the console data is automatically generated or not 
Fc9-type-21-icon.png Console Columns
Number of characters that can be displayed on a single line of the console. 
Fc9-type-16-icon.png Data Source
Simulation data source used to allow the component to connect to various remote devices Nothing - Simulation data is ignored COM port - Routes the communication data to and from a physical or virtual COM port Injector - Routes the communication data via a data injector component on the Panel. 
Fc9-type-16-icon.png COM Port
Lists all the current available COM port hardware on your PC. 
Fc9-type-7-icon.png Refresh Ports
 
Fc9-type-21-icon.png Baud Rate
COM port data rate in bits per second