读取Modbus Mbslave中的数据
首先创建COM1和COM2端口
然后
using System.IO.Ports;
namespace 通信
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
SerialPort serialPort = new SerialPort("COM1",9600,Parity.None,8,StopBits.One);
serialPort.Open();
Modbus.Device.ModbusMaster master = Modbus.Device.ModbusSerialMaster.CreateRtu(serialPort);
ushort[] ushorts = master.ReadHoldingRegisters(1, 0, 2);
}
}
}
结果如下
Modbus.Device.ModbusMaster介绍
Modbus.Device.ModbusMaster
是 NModbus4 库中的一个类,它提供了对 Modbus 主站(Master)功能的实现,允许你通过 Modbus 协议与 Modbus 从站(Slave)设备进行通信。Modbus 是一种工业标准通信协议,广泛用于电子设备和工业自动化系统中。
以下是使用 ModbusMaster
类进行 Modbus 通信的基本步骤:
-
创建 ModbusMaster 实例:根据你的通信方式(例如,RTU 或 TCP),创建
ModbusMaster
的一个实例。 -
连接到从站:使用
Connect
方法建立与 Modbus 从站的连接。 -
执行 Modbus 功能:使用
ModbusMaster
类的方法执行 Modbus 功能,例如读取线圈、读取寄存器等。 -
断开连接:使用
Disconnect
方法断开与 Modbus 从站的连接。
ReadHoldingRegisters介绍
ReadHoldingRegisters
是 NModbus4 库中 ModbusMaster
类的一个方法,用于从 Modbus 从站读取保持寄存器(Holding Registers)。保持寄存器是 Modbus 协议中用于存储数字数据的寄存器,它们在断电后仍然可以保持其值。
参数说明
-
slaveId
: Modbus 从站的地址(1-247)。 -
startAddress
: 要读取的起始寄存器地址。 -
numberOfPoints
: 要读取的寄存器数量。
返回值
ReadHoldingRegisters
方法返回一个 ushort[]
数组,包含从 Modbus 从站读取的寄存器值。
注意事项
-
确保在调用
ReadHoldingRegisters
之前,串行端口已正确打开,并且 Modbus 主站已成功连接到从站。 -
读取操作可能会因为多种原因失败,例如串行通信错误、从站未响应或地址错误。在实际应用中,应该添加异常处理逻辑来处理这些情况。
-
Modbus 协议定义了保持寄存器的地址范围通常是从0开始,但具体取决于从站设备的实现。
Modbus RTU 协议报文格式
1、读寄存器消息帧格式 -0x03、0x04
请求:
响应:
2、写单寄存器消息帧格式 – 0x06
请求、响应:
3、写多寄存器消息帧格式 – 0x10
请求:
响应: