这是串口通信,测试成功。
using (SerialPort port = new SerialPort("COM1"))
{
// configure serial port
port.BaudRate = 9600;
port.DataBits = 8;
port.Parity = Parity.None;
port.StopBits = StopBits.One;
port.Open();
// create modbus master
IModbusSerialMaster master = ModbusSerialMaster.CreateAscii(port);
byte slaveID = 1;
ushort startAddress = 1;
ushort numRegisters = 1;
ushort[] temp = master.ReadHoldingRegisters(1, 1, 1);
textBox2.Text = temp[0];
}
这是tcp通信部分,测试成功:
TcpClient tcpClient = new TcpClient(); //Create a new TcpClient object.
tcpClient.BeginConnect("xxx.xxx.xxx.xxx", 502, null, null);
ModbusIpMaster master = ModbusIpMaster.CreateIp(tcpClient);
ushort[] temp = master.ReadHoldingRegisters(1, 1, 1);
textBox2.Text = temp[0];
换成GPRS方式就不行了:
IPAddress ipAddress = IPAddress.Any;
tcpListener = new TcpListener(ipAddress, 502);
tcpListener.Start();//
//开启接收线程
var listenThread = new Thread(ListenConnect);
listenThread.Start();
/// <summary>
/// 监听器
/// </summary>
private void ListenConnect()
{
while (true)
{
TcpClient tcpClient = tcpListener.AcceptTcpClient();
//……此处略过部分中间过程
ModbusIpMaster master = ModbusIpMaster.CreateIp(tcpClient);
//IModbusSerialMaster master = ModbusSerialMaster.CreateAscii(client);试过这个方法也不行
jfwd = master.ReadHoldingRegisters( 1,0, 1)[0];//这里一直处于阻塞状态无法返回数据
}
}
2 个解决方案
#1
楼主使用的是C/S架构 测试一下设置成sever模式是否能够成功
#2
已经通讯成功了,原来错误的地方因为引用dll里面的一个死循环,不过还是非常感谢你的回答
#1
楼主使用的是C/S架构 测试一下设置成sever模式是否能够成功
#2
已经通讯成功了,原来错误的地方因为引用dll里面的一个死循环,不过还是非常感谢你的回答