馄饨馄饨馄饨 2021-12-29 09:19
浏览 6
已结题

关于#网络协议#的问题:我这边有主从站测试工具,在本机上用主站测试工具生成一个从站,从站测试工具和我的代码都试过了,但到了现场就只有测试工具能读取

代码运行到读取代码的时候就会突然卡死也不报错,也不显示数据
问题相关代码,请勿粘贴截图

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");
我的解答思路和尝试过的方法

我这边有主从站测试工具,在本机上用主站测试工具生成一个从站,从站测试工具和我的代码都试过了,读取正常,但到了现场就只有测试工具能读取,我代码就不行了

我想要达到的结果
  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 1月6日
    • 创建了问题 12月29日

    悬赏问题

    • ¥15 公交车和无人机协同运输
    • ¥15 stm32代码移植没反应
    • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
    • ¥100 连续两帧图像高速减法
    • ¥15 组策略中的计算机配置策略无法下发
    • ¥15 如何绘制动力学系统的相图
    • ¥15 对接wps接口实现获取元数据
    • ¥20 给自己本科IT专业毕业的妹m找个实习工作
    • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
    • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)