NModbus4 方法说明
-
传输协议
Modbus TCP: 基于 TCP/IP 网络
Modbus RTU: 基于串口通信
Modbus ASCII: 基于 ASCII 编码的串口通信 -
主要接口
IModbusMaster // 主站接口
IModbusSerialMaster // 串口主站接口
IModbusSlave // 从站接口
IModbusSerialSlave // 串口从站接口
快速开始
Modbus TCP 主站示例
csharp
using Modbus.Device;
using System.Net.Sockets;
// 创建 TCP 客户端连接
TcpClient tcpClient = new TcpClient("127.0.0.1", 502);
IModbusMaster master = ModbusIpMaster.CreateIp(tcpClient);
// 读取保持寄存器
ushort[] registers = master.ReadHoldingRegisters(1, 0, 10);
// 写入单个寄存器
master.WriteSingleRegister(1, 0, 4000);
// 读取线圈状态
bool[] coils = master.ReadCoils(1, 0, 8);
// 写入多个线圈
master.WriteMultipleCoils(1, 0, new bool[] { true, false, true, false });
Modbus RTU 主站示例
csharp
using Modbus.Device;
using System.IO.Ports;
// 配置串口
SerialPort serialPort = new SerialPort("COM1");
serialPort.BaudRate = 9600;
serialPort.DataBits = 8;
serialPort.Parity = Parity.None;
serialPort.StopBits = StopBits.One;
serialPort.Open();
// 创建 RTU 主站
IModbusSerialMaster master = ModbusSerialMaster.CreateRtu(serialPort);
// 设置从站地址
byte slaveId = 1;
// 读取输入寄存器
ushort[] inputRegisters = master.ReadInputRegisters(slaveId, 0, 5);
Modbus TCP 从站示例
csharp
using Modbus.Device;
using System.Net;
using System.Net.Sockets;
// 创建 TCP 监听
TcpListener listener = new TcpListener(IPAddress.Any, 502);
listener.Start();
TcpClient client = listener.AcceptTcpClient();
// 创建从站实例
ModbusSlave slave = ModbusTcpSlave.CreateTcp(1, client);
// 设置数据存储
slave.DataStore = DataStoreFactory.CreateDefaultDataStore();
// 启动从站
slave.Listen();
API 参考
主站常用方法
读取操作
// 读取线圈(功能码 0x01)
bool[] ReadCoils(byte slaveAddress, ushort startAddress, ushort numberOfPoints);
// 读取离散输入(功能码 0x02)
bool[] ReadInputs(byte slaveAddress, ushort startAddress, ushort numberOfPoints);
// 读取保持寄存器(功能码 0x03)
ushort[] ReadHoldingRegisters(byte slaveAddress, ushort startAddress, ushort numberOfPoints);
// 读取输入寄存器(功能码 0x04)
ushort[] ReadInputRegisters(byte slaveAddress, ushort startAddress, ushort numberOfPoints);
写入操作
// 写入单个线圈(功能码 0x05)
void WriteSingleCoil(byte slaveAddress, ushort coilAddress, bool value);
// 写入单个寄存器(功能码 0x06)
void WriteSingleRegister(byte slaveAddress, ushort registerAddress, ushort value);
// 写入多个线圈(功能码 0x0F)
void WriteMultipleCoils(byte slaveAddress, ushort startAddress, bool[] data);
// 写入多个寄存器(功能码 0x10)
void WriteMultipleRegisters(byte slaveAddress, ushort startAddress, ushort[] data);

浙公网安备 33010602011771号