• C# 串口通信(modbus),自动重连


    (1)C#串口通信的例子,需要在线程里面执行。

    private void Com2Ups40()
            {
                try
                {
                    Logger.Info("执行函数Com2Ups40()------开始!!!");

                    //UpsMaiDiSi = new SerialPortManager();
                    serialPort = new SerialPort(_nameValueCollection["UPSMaiDiSi"], int.Parse(_nameValueCollection["UPSMaiDiSi_Rate"]), Parity.None, int.Parse(_nameValueCollection["UPSMaiDiSi_DataBit"]));

                    Logger.Debug("MainWinViewModel()->Com2Ups40()->" + "00000000000000000000");
                    serialPort.ReadTimeout = 2000;

                    if (!serialPort.IsOpen)
                    {
                        serialPort.Open();
                    }

                    Logger.Debug("MainWinViewModel()->Com2Ups40()->" + "444444444444444444444444444444");
                    master40 = ModbusSerialMaster.CreateRtu(serialPort);

                    //参数(分别为站号,起始地址,长度)
                    byte slaveAddress = 1;
                    ushort startAddress = 0;
                    ushort numberOfPoints = 70;

                    while (true)
                    {

                        ushort[] registerBuffer = null;
                        try
                        {
                            registerBuffer = master40.ReadInputRegisters(slaveAddress, startAddress, numberOfPoints);
                        }
                        catch (Exception ex)
                        {
                            Logger.Debug("MainWinViewModel()->Com2Ups40()->ReadInputRegisters()" + ex);
                            continue;
                        }


                        //解析
                        for (int i = 0; i < registerBuffer.Length; i++)
                        {
                            if(registerBuffer[20].ToString().Length > 1)
                                srES = (registerBuffer[20].ToString()).Substring(0, (registerBuffer[20].ToString()).Length - 1);

                            if (registerBuffer[24].ToString().Length > 1)
                                srST = (registerBuffer[24].ToString()).Substring(0, (registerBuffer[24].ToString()).Length - 1);

                            if (registerBuffer[16].ToString().Length > 1)
                                srTR = (registerBuffer[16].ToString()).Substring(0, (registerBuffer[16].ToString()).Length - 1);

                            if (registerBuffer[34].ToString().Length > 1)
                                scE  = (registerBuffer[34].ToString()).Substring(0, (registerBuffer[34].ToString()).Length - 1);

                            if (registerBuffer[38].ToString().Length > 1)
                                scS = (registerBuffer[38].ToString()).Substring(0, (registerBuffer[38].ToString()).Length - 1);

                            if (registerBuffer[30].ToString().Length > 1)
                                scT = (registerBuffer[30].ToString()).Substring(0, (registerBuffer[30].ToString()).Length - 1);

                        }
       
                        Thread.Sleep(5000);
                    }

     
                }
                catch (Exception ex)
                {
                    Logger.Debug("MainWinViewModel()->Com2Ups40()->" + ex);
                }
            }

  • 相关阅读:
    Flutter折腾学习成长记(25)
    小白学安全-KunLun-M静态白盒扫描工具
    创建多个 conda 环境和 jupyter 切换使用环境
    golang 通过案列感受下内存分析
    Talk | UCSB博士生赵宣栋:生成式AI时代的水印技术
    责任链模式
    V神说以太坊的Token系统
    2022最新版-李宏毅机器学习深度学习课程-P26 Recurrent Neural Network
    Karatsuba大数乘法的Verilog实现
    flutter3-winchat桌面端聊天实例|Flutter3+Dart3+Getx仿微信Exe程序
  • 原文地址:https://blog.csdn.net/qq_14874791/article/details/128110606