在 Modbus 协议中,主从设备(Master-Slave)的区分是基于它们在通信中的角色和行为。主设备负责发起请求,而从设备负责响应请求。
主设备负责发起请求,所以说主设备是client, 而从设备负责响应请求,从设备就是server
以下是区分主从设备的关键点:
1. 通信模式
-
主设备(Master:client):
-
-
主动发起通信请求。
-
向从设备发送读取或写入数据的命令。
-
等待从设备的响应。
-
通常是一个控制器、PLC 或上位机。
-
-
从设备(Slave:server):
-
-
被动等待主设备的请求。
-
根据主设备的命令执行操作(如读取或写入数据)。
-
向主设备发送响应数据。
-
通常是一个传感器、执行器或其他终端设备。
-
我们使用的串口网关设备比如塔石串口服务器转以太网网口通信modbus通讯模块rs485转tcp/ip模块,如果工作在tcpserver模式,Nmodbus可以用:
using (TcpClient client = new TcpClient("127.0.0.1", 39500))
{
var factory = new ModbusFactory();
var _tcpClientAdapter = new TcpClientAdapter(client);
//IModbusMaster master = factory.CreateRtuMaster(_tcpClientAdapter);
IModbusMaster master = factory.CreateMaster(client);
// read five input values
ushort startAddress = 20;
ushort numInputs = 40;
//bool[] inputs = master.ReadInputs(1, startAddress, numInputs);
ushort[] hr = master.ReadHoldingRegisters(1, startAddress, numInputs);
}
但是如果因为nat原因,塔石工作在tcpclient模式,nmodbus就不能直接使用了,需要自己写tcplistener来等待塔石接入,并且自己手工解析modbus报文。
如果希望继续使用nmodbus,就需要一个背靠背的tcp server<->tcp server 转发器,可以用socat,也可以自己实现一个:
accept multi tcp clients,when receive msg from a client, forward to all other clients
https://github.com/vpmuu1/tcpServer_MultiClient