wpf SerialPortStream 循环串口进行连接仪器

using CommunityToolkit.Mvvm.Messaging;
using RJCP.IO.Ports;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;

namespace 项目名称
{
    public class SerialPortHelper
    {
        /// <summary>
        /// 串口连接工具
        /// </summary>
        public static SerialPortStream Serial { get; set; } = null;

        static int ByteCount { get; set; }

        static List<byte> readBuffer = new();

        public static string Port = "COM1";

        static System.Timers.Timer ctimer = new System.Timers.Timer { Interval = 1000 };
        static int tm = 0;

        static int successCount = 0;// 记录成功连接的串口数量
        static int allCount = 0;// 记录串口数量
        static int failCount = 0;// 记录失败连接的串口数量
        private static System.Threading.Timer timeoutTimer;
        static List<string> PnameList { get; set; } = new List<string>();

        /// <summary>
        /// 连接
        /// </summary>
        public static async void Connect()
        {
            try
            {
                // 获取可用的串口列表
                var portNames = SerialPortStream.GetPortNames().ToList();

                    allCount = portNames.Count;
                    successCount = 0;
                    failCount = 0;
                // 输出串口列表
                if (allCount > 0)
                {
                    PnameList?.Clear();
                    foreach (string portName in portNames)
                    {
                        var serialPort = new SerialPortStream(portName, 115200);
                        try
                        {
                            byte[] sendBuffer = new byte[15];
                            sendBuffer[0] = 0X5a;
                            sendBuffer[1] = 0Xa5;
                            sendBuffer[2] = 0X01;
                            sendBuffer[3] = 0;
                            sendBuffer[4] = 0;
                            sendBuffer[5] = 0;
                            sendBuffer[6] = 4;
                            sendBuffer[7] = 0;
                            sendBuffer[8] = 0;
                            sendBuffer[9] = 0;
                            sendBuffer[10] = 0;
                            var checkhumB = CRC16(sendBuffer, 15);
                            sendBuffer[11] = byte.Parse(checkhumB[0].ToString());
                            sendBuffer[12] = byte.Parse(checkhumB[1].ToString());
                            sendBuffer[13] = 0X3e;
                            sendBuffer[14] = 0Xe3;
                            serialPort.Open();
                            serialPort.DataReceived += SearchDateaReceived;
                            serialPort.Write(sendBuffer, 0, sendBuffer.Length);

                            // 设置超时机制
                            timeoutTimer = new Timer(CheckTimeout, serialPort, 1000, Timeout.Infinite);
                            await Task.Delay(1000);
                        }
                        catch (Exception)
                        {
                            failCount++;
                            if (serialPort != null)
                            {
                                serialPort.DataReceived -= SearchDateaReceived;
                                serialPort.Close();
                                if (serialPort != null && serialPort.IsDisposed == false) { serialPort?.Dispose(); }
                            }
                            CheckConnectionCompletion();
                            continue;
                        }
                    }
                }
                else
                {

                    没有串口做的操作
                    //Application.Current.Dispatcher.Invoke(() =>
                    //{
                        //WeakReferenceMessenger.Default.Send("Close");
                        //var m = new MessageWin("Nspf") { Owner = MainWindow._This };
                        //m.ShowDialog();
                        //if (m.DialogResult != null)
                        //{
                            //MainWindow._This.Vm.SelfCollapsed();
                            //new LoginMainWin() { Owner = MainWindow._This }.Show();
                        //}
                    //});
                    return;
                }
            }
            catch (Exception ex)
            {
                LogHelper.GetSingleObj().WriteLog(ex);
            }
        }

        public static void Disconnect()
        {
            try
&
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值