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

news/2024/11/25 21:20:51/

(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);
            }
        }


http://www.ppmy.cn/news/82471.html

相关文章

2023上海市大学生网络安全大赛—ssql题解

Part1前言 上海市大学生网络安全大赛的一道 pwn 题目&#xff0c;题目用了双向链表&#xff08;猜到是 Unlink 漏洞&#xff09;。 还算比较简单&#xff0c;主要是分析代码比较复杂。分析完后漏洞限制条件少&#xff0c;题目给了 libc2.31&#xff0c;利用比较灵活。 这题白天…

Flutter的异步UI初始化FutureBuilder

FutureBuilder的作用 FutureBuilder是Flutter中的一个Widget&#xff0c;用于在异步操作完成后构建UI。它接收一个Future对象&#xff0c;并根据异步操作的状态来构建UI&#xff0c;可以显示加载指示器、错误信息或异步操作完成后的数据。 FutureBuilder构造函数定义 Future…

面试:如何避免重绘或者重排

集中改变样式&#xff0c;不要一条一条地修改 DOM 的样式。 不要把 DOM 结点的属性值放在循环里当成循环里的变量。 为动画的 HTML 元件使用 fixed 或 absoult 的 position&#xff0c;那么修改他们的 CSS 是不会 reflow 的。 不使用 table 布局。因为可能很小的一个小改动会…

Typescript ?问号的几种不同用法

1、作为Typescript 接口属性数量不确定时的定义方法 如果使用接口来限定了变量或者形参, 那么在给变量或者形参赋值的时候, 赋予的值就必须和接口限定的一模一样才可以, 多一个或者少一个都不行。 但是开发中我们往往可能会遇到少一个或者多一个的场景。 &#xff08;1&#…

C++ |和|| ,和等字符常用运算

以下是对C中常用的字符运算符&#xff08;包括位运算和逻辑运算符&#xff09;的详细介绍&#xff0c;并附上示例代码&#xff1a; 位运算符 1.1 按位与(&)&#xff1a;如果相应的两个二进制位都为1&#xff0c;则该位的结果为1&#xff0c;否则为0。 int a 10; // …

c# 动态表达式

准备&#xff1a; 创建一个空项目&#xff0c;nuget查找并安装ExpressionEvaluator 示例&#xff1a; using ExpressionEvaluator; using System; 一、计算简单表达式 public string Test1() { return SimpleEval("0.1*(Math.Pow(10,2)20)"); …

Spring 中 @NotEmpty、@NotBlank、@NotNull,傻傻分不清楚!

1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.0.5.RELEASE</version> </dependency>NotEmpty、NotBlank、NotNull 包的位置&#xff1…

超声波雷达介绍 ———— 分类介绍

文章目录 介绍安装位置UPAAPA 传感器种类等方性传感器超声波雷达异方性传感器超声波雷达 技术方案模拟式四线式数位二线式数位三线式主动数位 其他密闭式超声波传感器开放式超声波传感器 介绍 超声波的定义 —— 波长短于2cm的机械波称为“超声波”。 超声波属于机械波&#xf…