代码运行到读取代码的时候就会突然卡死也不报错,也不显示数据
问题相关代码,请勿粘贴截图
modbusFactory = new ModbusFactory();
TcpClient tcp = new TcpClient();
try
{
tcp.Connect(item.gatewayIp,502);
}
catch (Exception ex)
{
Invoke(m_AddMessage, item.gatewayIp + "无法连接");
continue;
}
TCPmaster = modbusFactory.CreateMaster(new TcpClient(item.gatewayIp,502));
TCPmaster.Transport.ReadTimeout = 2000;
TCPmaster.Transport.Retries = 2000;
List<string> dioutData = new List<string>();
List<string> aioutData = new List<string>();
List<string> dioutTime = new List<string>();
List<string> aioutTime = new List<string>();
foreach (Ai_listItem item_ai in item.signal_list.ai_list)
{
registerBuffer = TCPmaster.ReadHoldingRegisters(byte.Parse("1"), ushort.Parse(item_ai.addr_offset), ushort.Parse("1"));
switch (item_ai.type)
{
case "1":
for (int i = 0; i < registerBuffer.Length; i += 2)
{
Invoke(m_AddMessage, registerBuffer[i] + " ");
aioutData.Add(registerBuffer[i].ToString());
aioutTime.Add(DateTime.Now.ToString());
}
break;
case "2":
for (int i = 0; i < registerBuffer.Length; i++)
{
Invoke(m_AddMessage, registerBuffer[i] + " ");
aioutData.Add(registerBuffer[i].ToString());
aioutTime.Add(DateTime.Now.ToString());
}
break;
case "3":
registerBuffer = TCPmaster.ReadHoldingRegisters(byte.Parse("1"), ushort.Parse(item_ai.addr_offset), ushort.Parse("2"));
byte[] bytes_2 = new byte[8];
for (int i = 0; i < registerBuffer.Length; i++)
{
bytes_2[2 - i * 2] = (byte)(registerBuffer[i] & 0xFF);
bytes_2[3 - i * 2] = (byte)(registerBuffer[i] >> 8);
}
long final = BitConverter.ToInt64(bytes_2, 0);
aioutData.Add(final.ToString());
aioutTime.Add(DateTime.Now.ToString());
break;
default:
break;
}
}
foreach (Di_listItem item_di in item.signal_list.di_list)//dilist获取
{
registerBuffer = TCPmaster.ReadHoldingRegisters(byte.Parse("1"), ushort.Parse(item_di.addr_offset), ushort.Parse("1"));
for (int i = 0; i < registerBuffer.Length; i += 2)
{
byte[] bytes = new byte[4];
bytes[2] = (byte)(registerBuffer[i] & 0xFF);
bytes[3] = (byte)(registerBuffer[i] >> 8);
bytes[0] = (byte)(registerBuffer[i + 1] & 0xFF);
bytes[1] = (byte)(registerBuffer[i + 1] >> 8);
float value = BitConverter.ToSingle(bytes, 0);
dioutData.Add(value.ToString());
dioutTime.Add(DateTime.Now.ToString());
}
}
outdata = new OutRoot();
outdata.para_ai = new List<Para_aiItem>();
outdata.para_di = new List<Para_diItem>();
outdata.para_ai.Add(new Para_aiItem() { id = item.id, data = aioutData, time = aioutTime });
Invoke(m_AddMessage, "\r\n");
outdata.para_di.Add(new Para_diItem() { id = item.id, data = dioutData, time = dioutTime });
Invoke(m_AddMessage, "\r\n");
我的解答思路和尝试过的方法
我这边有主从站测试工具,在本机上用主站测试工具生成一个从站,从站测试工具和我的代码都试过了,读取正常,但到了现场就只有测试工具能读取,我代码就不行了