C# 如何在同一网络中具有不同ip的设备和计算机上使用tcplistener和tcpclient?
我正在尝试与ip 192.168.1.76的网络中的modbus设备通信。我的主机地址是192.168.1.132。我无法连接或侦听设备ip 基本上我使用的是NModbus4库。我已经创建了一个ModbusTCPSlave并将tcp侦听器连接到它。然后我将C# 如何在同一网络中具有不同ip的设备和计算机上使用tcplistener和tcpclient?,c#,tcpclient,tcplistener,modbus-tcp,C#,Tcpclient,Tcplistener,Modbus Tcp,我正在尝试与ip 192.168.1.76的网络中的modbus设备通信。我的主机地址是192.168.1.132。我无法连接或侦听设备ip 基本上我使用的是NModbus4库。我已经创建了一个ModbusTCPSlave并将tcp侦听器连接到它。然后我将ModbusSlaveRequestReceived事件分配给该从机。但当我试图直接从Modscan软件更改寄存器值时,它并没有给出任何回报 Main() { var masterEndpoint = new IPEndPoint(IP
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());
}
当任何寄存器值更改时,我希望在控制台应用程序中获得函数代码、起始地址和点数我复制了您的代码。将IP地址更改为我的“服务器”,它就工作了。 因此,您遇到的问题要么是在“服务器”的设置中,要么是在PLC程序中 我想我必须在我的路由器上做一些端口转发。我没有。这没什么区别 服务器设置: 您的“服务器”的IP地址必须是静态的。无论您的“服务器”是否是您的开发系统。不要忘记在部署时。。。服务器的IP地址也必须是静态的(并不是说它不会…只是说) 添加入站防火墙规则以允许连接到端口,在本例中为502,否则每次启动/启动测试时都必须允许访问 PLC程序 我正在使用高雄的Click PLC。不确定这是否是所有PLC的规则;但是,我们必须添加一行代码来“写入”我们想要从TCP流中获取的值。如果没有写入,PLC不会发出加入TcpListener的请求 最后一个: 启动侦听器的代码只需如下所示:
var listener = new TcpListener(IPAddress.Parse("192.168.1.244"), 502);
listener.Start();
var slave = ModbusTcpSlave.CreateTcp(255, listener, 10);
slave.ModbusSlaveRequestReceived += Modbus_Request_Event;
slave.Listen();
首先使用cmd.exe和>PING IP。请同时尝试计算机名和IP地址。有时,当两台电脑配置了相同的IP地址时,会发生此错误。@jdweng我两个IP都试过了。机器以及设备的IP。ping正确。也用过telenet,但没用,里面一切都很好。在提供IP地址时我是否做错了什么?侦听器/服务器需要首先使用:var listener=new TcpListener(IPAddress.Any,502);然后,客户端应使用服务器名称或IP连接到服务器。服务器应该只有侦听器代码,客户端应该只有客户端代码。我认为您不应该自己创建
TcpListener
ModbusTcpSlave
在发动机罩下创建一个TcpListener
)。因此,您的第一个侦听器可能会阻止从机使用相同的端口。此外,您的控制台应用程序会立即完成。在Main方法的末尾添加一个Console.Readline()
,以确保它一直在侦听。@JessedeWit好的,我试试看。