Modbus入门
- Modbus
- Modbus模拟工具
- 模拟工具使用
- 配置Slave
- 配置Poll
- C#使用ModBus通讯
Modbus
modbus使用范围广泛,广泛应用于各类仪表,PLC等。它属于应用层协议,底层硬件基于485/以太网。
Modbus的存储区有:输入线圈(布尔,只读,代号1区),输入寄存器(寄存器,只读,代号3区),输出线圈(读写,布尔,代号0区),输出寄存器(寄存器,读写,代号4区)
Modbus是典型的半双工模式,有且只有一个master,请求由master发出,slave响应。slave之间不能通讯,只能通过master转达。相当于master是客户端,slave都是服务器。
Modbus模拟工具
模拟工具使用Modbus Slave 以及 Modbus Poll 。其中 Slave相当于服务器(Modbus Slave),Poll相当于客户端(Modbus Master)。
模拟工具使用
配置Slave
配置Slave
基本配置,配置完选择ok,接下来只要配置要使用的接口方式(网卡,串口等)
选择接口方式,选择串口,初始化波特率、数据位、校验位、停止位,然后选择ok即可打开链接。
配置Poll
打开Poll选择需要进行的操作
选择写入可以寄存器,会发现Slave这边对应的已经改变了
C#使用ModBus通讯
使用NuGet中的NModbus4
通讯库,进行ModBus RTU(串口)通讯
internal class Program{static void Main(string[] args){ModuleHandle moduleHandle = new ModuleHandle(); // NuGet 安装 NModbus4 库// 确定通讯方式 这边是串口SerialPort port = new SerialPort("COM2");// 波特率port.BaudRate = 9600;// 数据位port.DataBits= 8;// 停止位port.StopBits = StopBits.One;// 校验位port.Parity = Parity.None;port.Open();var master = ModbusSerialMaster.CreateRtu(port);// 读取保持型寄存器 slaveid 寄存器起始位置 读取个数ushort [] values = master.ReadHoldingRegisters(1,10,2);Console.WriteLine($"index 10:{values[0]},index 11:{values[1]}");// 写入保持型寄存器 slaveid 在18号寄存器 写入 133master.WriteSingleRegister(1, 18, 133);// 读写线圈型寄存器 bool [] coils = master.ReadCoils(1, 0, 3);Console.WriteLine($"index 0:{coils[0]},index 2:{coils[2]}");// 写入线圈状态 将2号线圈寄存器值改为falsemaster.WriteSingleCoil(1, 2, false);Console.ReadLine();port.Close();}}