【发布时间】:2020-11-07 01:10:26
【问题描述】:
我正在尝试与我网络中 ip 192.168.1.76 的 modbus 设备通信。我的主机地址是192.168.1.132。我无法连接或收听设备 ip。
基本上我使用的是 NModbus4 库。我创建了一个 ModbusTCPSlave 并将 tcp 侦听器附加到它。然后我将ModbusSlaveRequestReceived 事件分配给该从站。但是当我尝试直接从 Modscan 软件更改寄存器值时,它没有任何回报。
Main()
{
var masterEndpoint = new IPEndPoint(IPAddress.Parse("192.168.1.132"), 502);
var listener = new TcpListener(IPAddress.Any, 502);
listener.Start();
var slave = ModbusTcpSlave.CreateTcp(255, new TcpListener(masterEndpoint), 10);
slave.ModbusSlaveRequestReceived += Modbus_Request_Event;
slave.Listen();
}
private static void Modbus_Request_Event(object sender, Modbus.Device.ModbusSlaveRequestEventArgs e)
{
//disassemble packet from master
byte fc = e.Message.FunctionCode;
byte[] data = e.Message.MessageFrame;
byte[] byteStartAddress = new byte[] { data[3], data[2] };
byte[] byteNum = new byte[] { data[5], data[4] };
Int16 StartAddress = BitConverter.ToInt16(byteStartAddress, 0);
Int16 NumOfPoint = BitConverter.ToInt16(byteNum, 0);
Console.WriteLine(fc.ToString() + "," + StartAddress.ToString() + "," + NumOfPoint.ToString());
}
我希望在更改任何寄存器值时在控制台应用程序中获取功能代码、起始地址和点数
【问题讨论】:
-
使用 cmd.exe 和 > PING IP 启动。尝试计算机名称和 IP 地址。当两台电脑配置相同的IP地址时,有时会出现此错误。
-
@jdweng 我已经尝试了两个 IP。机器以及设备的 IP。 ping 正确。也用过 Telenet,但一无所获,一切都很好。提供 IP 地址时我做错了什么吗?
-
监听器/服务器需要首先使用: var listener = new TcpListener(IPAddress.Any, 502);然后客户端应该使用服务器名称或 IP 连接到服务器。服务器应该只有监听代码,客户端只有客户端代码。
-
我认为你不应该自己创建
TcpListener。ModbusTcpSlave在后台创建TcpListener(source)。因此,您的第一个侦听器可能会阻止从属设备使用相同的端口。此外,您的控制台应用程序会立即完成。在 Main 方法的末尾添加Console.Readline()以确保它继续侦听。 -
@JessedeWit 好的,我会试试的。
标签: c# tcpclient tcplistener modbus-tcp