[CSharpTips]C# 使用NModbus库创建Modbus从站
使用NModbus库创建Modbus从站
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | using NModbus; using System; using System.Net; using System.Net.Sockets; namespace ModbusSlaveTest { internal class Program { static void Main( string [] args) { //设置从站ID和端口 byte slaveId = 1; int port = 502; //创建并配置监听TCP客户端的TcpListener var listener = new TcpListener( new IPAddress( new byte [] { 127, 0, 0, 1 }), port); listener.Start(); //创建从站并开启监听 var factory = new ModbusFactory(); var modbusTcpSlaveNetwork = factory.CreateSlaveNetwork(listener); var slave = factory.CreateSlave(slaveId); modbusTcpSlaveNetwork.AddSlave(slave); modbusTcpSlaveNetwork.ListenAsync(); //输入寄存器 slave.DataStore.InputRegisters.WritePoints(0, new ushort [] { 1, 2, 3 }); //保持寄存器 slave.DataStore.HoldingRegisters.WritePoints(0, new ushort [] { 3, 2, 1 }); //线圈 slave.DataStore.CoilDiscretes.WritePoints(0, new bool [] { true , false , true }); //离散输入 slave.DataStore.CoilInputs.WritePoints(0, new bool [] { true , true , true }); Console.ReadKey(); } } } |
使用NModbus库验证从站数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | using NModbus; using System; using System.Net.Sockets; namespace ModbusMasterTest { internal class Program { static void Main( string [] args) { using (TcpClient client = new TcpClient( "127.0.0.1" , 502)) { var factory = new ModbusFactory(); IModbusMaster master = factory.CreateMaster(client); //线圈 Console.WriteLine( "Coils: " + string .Join( "," , master.ReadCoils(1, 0, 3))); //离散输入 Console.WriteLine( "Discrete Inputs: " + string .Join( "," , master.ReadInputs(1, 0, 3))); //保持寄存器 Console.WriteLine( "Holding Registers: " + string .Join( "," , master.ReadHoldingRegisters(1, 0, 3))); //输入寄存器 Console.WriteLine( "Input Registers: " + string .Join( "," , master.ReadInputRegisters(1, 0, 3))); Console.ReadKey(); } } } } |
输出结果:
Coils: True,False,True
Discrete Inputs: True,True,True
Holding Registers: 3,2,1
Input Registers: 1,2,3
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
2022-09-23 [CSharpTips]C# 判断一个点是否在线段上