Read Coils (FC1)Read Discrete Inputs (FC2)Read Holding Registers (FC3)Read Input Registers (FC4)Write Single Coil (FC5)Write Single Register (FC6)Write Multiple Coils (FC15)Write Multiple Registers (FC16)Read/Write Multiple Registers (FC23)
TCP/IP Modbus Channel配置表
| 网关SN | channelType | config | 网关名称 | 轮询间隔 | connectTimeout | 是否启用 | 连接状态 | 备注 | Datetime |
|---|---|---|---|---|---|---|---|---|---|
| ModbusTCP_33333FF | TCP RTU TCPRelay |
一楼水机网关 | 5s | 0: Offline 1: Online |
|||||
| ModbusTCP_RREE889 | 二楼水机网关 | 5s |
网关SN自动生成,也可以收入输入。 对于TCP/IP Modbus协议只需要输入IP、Port;
读写配置
| ConfigID | 网关SN | ConfigName | DO/DI/AO/AI | ChannelType | TID 传输标识符 | PID 协议标识符 | 子站地址(单元标识符) | 起始地址 | 数据 类型 |
读取多少路数据 | 字节顺序 |
Tag前缀 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| DO:RW DI: R AO:RW AI:R |
TCP RTU TCPRelay |
默认0 | 默认0 | 默认0 | 16进制 | Boolean UInt6 Int16 UInt32 Int32 Float32 Hex(32) |
N/A AB BA ABCD BADC CDBA DCBA |
|||||
点位表
| 点位ID | ConfigID | 网关SN | 起始地址 | DI/DO/AI/AO | modbus数据类型 | modbus Tag | 第几路数据 |
|---|---|---|---|---|---|---|---|
| SN993333 | 33333FF | 0 | |||||
| VF888888 | 33333FF | 1 |
逻辑关系
- 创建TCP/IP 驱动,输入网关IP,Port,自动生成网关SN或者可输入,网关名称。
- 网关建立成功后,配置读写对应的协议内容:寄存器类型、起始地址、读取多少路等;
- 读写协议定义成功后,为每路创建一个点位;
- 驱动点位表中的别名,点位名称,点位类型,点位单位,点位精度 可由用户自由输入
```csharp
bool[] ReadCoils(byte slaveAddress, ushort startAddress, ushort numberOfPoints);
Task
ReadCoilsAsync(byte slaveAddress, ushort startAddress, ushort numberOfPoints); bool[] ReadInputs(byte slaveAddress, ushort startAddress, ushort numberOfPoints); Task ReadInputsAsync(byte slaveAddress, ushort startAddress, ushort numberOfPoints); ushort[] ReadHoldingRegisters(byte slaveAddress, ushort startAddress, ushort numberOfPoints); ushort[] ReadInputRegisters(byte slaveAddress, ushort startAddress, ushort numberOfPoints); void WriteSingleCoil(byte slaveAddress, ushort coilAddress, bool value); void WriteSingleRegister(byte slaveAddress, ushort registerAddress, ushort value); void WriteMultipleRegisters(byte slaveAddress, ushort startAddress, ushort[] data); void WriteMultipleCoils(byte slaveAddress, ushort startAddress, bool[] data); ushort[] ReadWriteMultipleRegisters(byte slaveAddress, ushort startReadAddress,ushort numberOfPointsToRead,ushort startWriteAddress,ushort[] writeData);
```cfloat getFloat(quint16 value1, quint16 value2){float fTemp;uint *pTemp=(uint *)&fTemp;unsigned int chTemp[4];//a,b,c,dchTemp[0]=value1&0xff;chTemp[1]=(value1>>8)&0xff;chTemp[2]=value2&0xff;chTemp[3]=(value2>>8)&0xff;//这是ABCD*pTemp=((chTemp[1]<<24)&0xff000000)|((chTemp[0]<<16)&0xff0000)|((chTemp[3]<<8)&0xff00)|(chTemp[2]&0xff);//这是CDAB//*pTemp=((chTemp[3]<<24)&0xff000000)|((chTemp[2]<<16)&0xff0000)|((chTemp[1]<<8)&0xff00)|(chTemp[0]&0xff);//这是BADC//*pTemp=((chTemp[0]<<24)&0xff000000)|((chTemp[1]<<16)&0xff0000)|((chTemp[2]<<8)&0xff00)|(chTemp[3]&0xff);//这是DCBA//*pTemp=((chTemp[2]<<24)&0xff000000)|((chTemp[3]<<16)&0xff0000)|((chTemp[0]<<8)&0xff00)|(chTemp[1]&0xff);return fTemp;}
namespace Modbus.Device{using System;using System.Threading.Tasks;using IO;/// <summary>/// Modbus master device./// </summary>public interface IModbusMaster : IDisposable{/// <summary>/// Transport used by this master./// </summary>ModbusTransport Transport { get; }/// <summary>/// Reads from 1 to 2000 contiguous coils status./// </summary>/// <param name="slaveAddress">Address of device to read values from.</param>/// <param name="startAddress">Address to begin reading.</param>/// <param name="numberOfPoints">Number of coils to read.</param>/// <returns>Coils status.</returns>bool[] ReadCoils(byte slaveAddress, ushort startAddress, ushort numberOfPoints);/// <summary>/// Asynchronously reads from 1 to 2000 contiguous coils status./// </summary>/// <param name="slaveAddress">Address of device to read values from.</param>/// <param name="startAddress">Address to begin reading.</param>/// <param name="numberOfPoints">Number of coils to read.</param>/// <returns>A task that represents the asynchronous read operation.</returns>Task<bool[]> ReadCoilsAsync(byte slaveAddress, ushort startAddress, ushort numberOfPoints);/// <summary>/// Reads from 1 to 2000 contiguous discrete input status./// </summary>/// <param name="slaveAddress">Address of device to read values from.</param>/// <param name="startAddress">Address to begin reading.</param>/// <param name="numberOfPoints">Number of discrete inputs to read.</param>/// <returns>Discrete inputs status.</returns>bool[] ReadInputs(byte slaveAddress, ushort startAddress, ushort numberOfPoints);/// <summary>/// Asynchronously reads from 1 to 2000 contiguous discrete input status./// </summary>/// <param name="slaveAddress">Address of device to read values from.</param>/// <param name="startAddress">Address to begin reading.</param>/// <param name="numberOfPoints">Number of discrete inputs to read.</param>/// <returns>A task that represents the asynchronous read operation.</returns>Task<bool[]> ReadInputsAsync(byte slaveAddress, ushort startAddress, ushort numberOfPoints);/// <summary>/// Reads contiguous block of holding registers./// </summary>/// <param name="slaveAddress">Address of device to read values from.</param>/// <param name="startAddress">Address to begin reading.</param>/// <param name="numberOfPoints">Number of holding registers to read.</param>/// <returns>Holding registers status.</returns>ushort[] ReadHoldingRegisters(byte slaveAddress, ushort startAddress, ushort numberOfPoints);/// <summary>/// Asynchronously reads contiguous block of holding registers./// </summary>/// <param name="slaveAddress">Address of device to read values from.</param>/// <param name="startAddress">Address to begin reading.</param>/// <param name="numberOfPoints">Number of holding registers to read.</param>/// <returns>A task that represents the asynchronous read operation.</returns>Task<ushort[]> ReadHoldingRegistersAsync(byte slaveAddress, ushort startAddress, ushort numberOfPoints);/// <summary>/// Reads contiguous block of input registers./// </summary>/// <param name="slaveAddress">Address of device to read values from.</param>/// <param name="startAddress">Address to begin reading.</param>/// <param name="numberOfPoints">Number of holding registers to read.</param>/// <returns>Input registers status.</returns>ushort[] ReadInputRegisters(byte slaveAddress, ushort startAddress, ushort numberOfPoints);/// <summary>/// Asynchronously reads contiguous block of input registers./// </summary>/// <param name="slaveAddress">Address of device to read values from.</param>/// <param name="startAddress">Address to begin reading.</param>/// <param name="numberOfPoints">Number of holding registers to read.</param>/// <returns>A task that represents the asynchronous read operation.</returns>Task<ushort[]> ReadInputRegistersAsync(byte slaveAddress, ushort startAddress, ushort numberOfPoints);/// <summary>/// Writes a single coil value./// </summary>/// <param name="slaveAddress">Address of the device to write to.</param>/// <param name="coilAddress">Address to write value to.</param>/// <param name="value">Value to write.</param>void WriteSingleCoil(byte slaveAddress, ushort coilAddress, bool value);/// <summary>/// Asynchronously writes a single coil value./// </summary>/// <param name="slaveAddress">Address of the device to write to.</param>/// <param name="coilAddress">Address to write value to.</param>/// <param name="value">Value to write.</param>/// <returns>A task that represents the asynchronous write operation.</returns>Task WriteSingleCoilAsync(byte slaveAddress, ushort coilAddress, bool value);/// <summary>/// Writes a single holding register./// </summary>/// <param name="slaveAddress">Address of the device to write to.</param>/// <param name="registerAddress">Address to write.</param>/// <param name="value">Value to write.</param>void WriteSingleRegister(byte slaveAddress, ushort registerAddress, ushort value);/// <summary>/// Asynchronously writes a single holding register./// </summary>/// <param name="slaveAddress">Address of the device to write to.</param>/// <param name="registerAddress">Address to write.</param>/// <param name="value">Value to write.</param>/// <returns>A task that represents the asynchronous write operation.</returns>Task WriteSingleRegisterAsync(byte slaveAddress, ushort registerAddress, ushort value);/// <summary>/// Writes a block of 1 to 123 contiguous registers./// </summary>/// <param name="slaveAddress">Address of the device to write to.</param>/// <param name="startAddress">Address to begin writing values.</param>/// <param name="data">Values to write.</param>void WriteMultipleRegisters(byte slaveAddress, ushort startAddress, ushort[] data);/// <summary>/// Asynchronously writes a block of 1 to 123 contiguous registers./// </summary>/// <param name="slaveAddress">Address of the device to write to.</param>/// <param name="startAddress">Address to begin writing values.</param>/// <param name="data">Values to write.</param>/// <returns>A task that represents the asynchronous write operation.</returns>Task WriteMultipleRegistersAsync(byte slaveAddress, ushort startAddress, ushort[] data);/// <summary>/// Writes a sequence of coils./// </summary>/// <param name="slaveAddress">Address of the device to write to.</param>/// <param name="startAddress">Address to begin writing values.</param>/// <param name="data">Values to write.</param>void WriteMultipleCoils(byte slaveAddress, ushort startAddress, bool[] data);/// <summary>/// Asynchronously writes a sequence of coils./// </summary>/// <param name="slaveAddress">Address of the device to write to.</param>/// <param name="startAddress">Address to begin writing values.</param>/// <param name="data">Values to write.</param>/// <returns>A task that represents the asynchronous write operation.</returns>Task WriteMultipleCoilsAsync(byte slaveAddress, ushort startAddress, bool[] data);/// <summary>/// Performs a combination of one read operation and one write operation in a single Modbus transaction./// The write operation is performed before the read./// </summary>/// <param name="slaveAddress">Address of device to read values from.</param>/// <param name="startReadAddress">Address to begin reading (Holding registers are addressed starting at 0).</param>/// <param name="numberOfPointsToRead">Number of registers to read.</param>/// <param name="startWriteAddress">Address to begin writing (Holding registers are addressed starting at 0).</param>/// <param name="writeData">Register values to write.</param>ushort[] ReadWriteMultipleRegisters(byte slaveAddress,ushort startReadAddress,ushort numberOfPointsToRead,ushort startWriteAddress,ushort[] writeData);/// <summary>/// Asynchronously performs a combination of one read operation and one write operation in a single Modbus transaction./// The write operation is performed before the read./// </summary>/// <param name="slaveAddress">Address of device to read values from.</param>/// <param name="startReadAddress">Address to begin reading (Holding registers are addressed starting at 0).</param>/// <param name="numberOfPointsToRead">Number of registers to read.</param>/// <param name="startWriteAddress">Address to begin writing (Holding registers are addressed starting at 0).</param>/// <param name="writeData">Register values to write.</param>/// <returns>A task that represents the asynchronous operation</returns>Task<ushort[]> ReadWriteMultipleRegistersAsync(byte slaveAddress,ushort startReadAddress,ushort numberOfPointsToRead,ushort startWriteAddress,ushort[] writeData);}}



