C#使用EasyModbus进行通讯的实现示例
EasyModbus是一个流行的.NET库用于实现Modbus TCP、RTU和UDP协议通信。一 安装EasyModbus二 ModbusRTU-串口连接1234567// 创建Modbus RTU客户端ModbusClient modbusClient newModbusClient(COM10);// 串口号modbusClient.Baudrate 9600;// 波特率modbusClient.Parity System.IO.Ports.Parity.None;// 校验位modbusClient.StopBits System.IO.Ports.StopBits.One;// 停止位modbusClient.Connect();三 ModbusTCP-网口连接1234// 创建Modbus客户端实例ModbusClient modbusClient newModbusClient(127.0.0.1, 502);// IP地址和端口// 连接到Modbus服务器modbusClient.Connect();四 读取多个输出线圈12// 读取线圈状态 (功能码01)bool[] coilStatus modbusClient.ReadCoils(0, 5);// 从地址0开始读取5个线圈五 写入单个线圈12// 写入单个线圈 (功能码05)modbusClient.WriteSingleCoil(0,true);// 向地址0写入true六 读取保持寄存器12// 读取保持寄存器 (功能码03)int[] holdingRegisters modbusClient.ReadHoldingRegisters(0, 10);// 从地址0开始读取10个寄存器七 读取输入寄存器1int[] inputRegisters modbusClient.ReadInputRegisters(0, 5);八 写入单个输出寄存器1modbusClient.WriteSingleRegister(0, 1234);九 写入多个输出寄存器123// 写入多个寄存器 (功能码16)int[] valuesToWrite { 100, 200, 300 };modbusClient.WriteMultipleRegisters(0, valuesToWrite);// 从地址0开始写入基本用法1. Modbus TCP客户端1234567891011121314151617181920212223242526272829303132333435usingEasyModbus;// 创建Modbus客户端实例ModbusClient modbusClient newModbusClient(127.0.0.1, 502);// IP地址和端口try{// 连接到Modbus服务器modbusClient.Connect();// 读取保持寄存器 (功能码03)int[] holdingRegisters modbusClient.ReadHoldingRegisters(0, 10);// 从地址0开始读取10个寄存器// 写入单个寄存器 (功能码06)modbusClient.WriteSingleRegister(0, 1234);// 向地址0写入值1234// 写入多个寄存器 (功能码16)int[] valuesToWrite { 100, 200, 300 };modbusClient.WriteMultipleRegisters(10, valuesToWrite);// 从地址10开始写入// 读取线圈状态 (功能码01)bool[] coilStatus modbusClient.ReadCoils(0, 5);// 从地址0开始读取5个线圈// 写入单个线圈 (功能码05)modbusClient.WriteSingleCoil(0,true);// 向地址0写入true}catch(Exception ex){Console.WriteLine($发生错误: {ex.Message});}finally{// 断开连接modbusClient.Disconnect();}2. Modbus RTU客户端 (串口通信)123456789101112131415161718192021222324usingEasyModbus;// 创建Modbus RTU客户端ModbusClient modbusClient newModbusClient(COM1);// 串口号modbusClient.Baudrate 9600;// 波特率modbusClient.Parity System.IO.Ports.Parity.None;// 校验位modbusClient.StopBits System.IO.Ports.StopBits.One;// 停止位try{modbusClient.Connect();// 与TCP类似的操作int[] inputRegisters modbusClient.ReadInputRegisters(0, 5);// ...其他操作}catch(Exception ex){Console.WriteLine($发生错误: {ex.Message});}finally{modbusClient.Disconnect();}3. Modbus服务器EasyModbus也支持创建Modbus服务器123456789101112131415161718usingEasyModbus;// 创建Modbus TCP服务器ModbusServer modbusServer newModbusServer();modbusServer.Port 502;// 设置端口// 设置寄存器值服务器模拟modbusServer.HoldingRegisters[0] 100;modbusServer.HoldingRegisters[1] 200;// 启动服务器modbusServer.Listen();Console.WriteLine(Modbus服务器已启动按任意键停止...);Console.ReadKey();// 停止服务器modbusServer.StopListening();高级功能异步操作12// 异步读取保持寄存器int[] registers await Task.Run(() modbusClient.ReadHoldingRegisters(0, 10));事件处理1234modbusClient.DataReceived (sender, e) {Console.WriteLine($接收到数据: {BitConverter.ToString(e.Data)});};超时设置1modbusClient.ConnectionTimeout 5000;// 5秒连接超时注意事项确保防火墙允许Modbus通信默认端口502对于RTU模式确保串口配置与设备匹配处理异常情况如连接失败、超时等寄存器地址从0开始但某些设备文档可能从1开始计数需要注意偏移完整示例1234567891011121314151617181920212223242526272829303132333435363738394041usingSystem;usingEasyModbus;classProgram{staticvoidMain(string[] args){ModbusClient modbusClient newModbusClient(192.168.1.100, 502);try{Console.WriteLine(正在连接Modbus服务器...);modbusClient.Connect();// 读取保持寄存器Console.WriteLine(读取保持寄存器...);int[] registers modbusClient.ReadHoldingRegisters(0, 5);for(inti 0; i registers.Length; i){Console.WriteLine($寄存器 {i}: {registers[i]});}// 写入寄存器Console.WriteLine(写入寄存器...);modbusClient.WriteSingleRegister(10, 1234);// 验证写入intvalue modbusClient.ReadHoldingRegisters(10, 1)[0];Console.WriteLine($寄存器10的新值: {value});}catch(Exception ex){Console.WriteLine($错误: {ex.Message});}finally{modbusClient.Disconnect();Console.WriteLine(连接已关闭);}}}复制讲解通过以上示例你应该能够开始在C#项目中使用EasyModbus库进行Modbus通信了。