首页 > 编程语言 >C# 实现串口通信

C# 实现串口通信

时间:2024-10-15 15:46:21浏览次数:7  
标签:bComOpenDal false C# sp 通信 SerialPort 串口 true public

using System;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading;

namespace DAL
{
    public class AsySerialDal
    {
        private static readonly object syncRoot = new object();
        const int COMDAL_RECVBUF_SIZE = 512;
        bool _isReceivingdal = false;
        private string m_portdal = "COMX";
        bool bComOpenDal = false;//标志
        SerialPort SerialPort = new SerialPort();
        byte[] ComRecvBuf = new byte[COMDAL_RECVBUF_SIZE + 1];

        public delegate void ReturnRecStr(byte[] RecveiveInfo, int datalen,string portName);                
        public event ReturnRecStr ReturnRecStrEvent;

        //打开串口的方法
        public bool OpenPort(string PortName, int baurate)
        {
            m_portdal = PortName;
            bool ret = false;
            try
            {
                if (bComOpenDal == false)
                {
                    SerialPort.PortName = PortName;//端口号
                    SerialPort.BaudRate = baurate;//波特率
                    SerialPort.Parity = Parity.Odd;//偶校验位
                    SerialPort.DataBits = 8;//数据位为8
                    SerialPort.StopBits = StopBits.One;//1个停止位
                    SerialPort.ReadTimeout = 500;
                    SerialPort.RtsEnable = true;
                    SerialPort.Handshake = Handshake.None;//控制协议
                    SerialPort.ReceivedBytesThreshold = 1;
                    SerialPort.DataReceived += new SerialDataReceivedEventHandler(SerialPort_DataReceived);
                    SerialPort.Open();
                    bComOpenDal = true;
                }
            }
            catch (Exception ex)
            {
              
            }
            if (SerialPort.IsOpen)
            {
                ret = true;
            }
            return ret;
        }

        //关闭串口的方法
        public void ClosePort()
        {
            if (bComOpenDal == true)
            {
                SerialPort.DataReceived -= SerialPort_DataReceived;
                SerialPort.Close();
                if (!SerialPort.IsOpen)
                {
                }
                bComOpenDal = false;
            }
        }

        private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            lock (syncRoot)
            {
                _isReceivingdal = true;
                if (ComRecvBuf != null && bComOpenDal == true)
                {
                    SerialPort sp = (SerialPort)sender;

                    while (sp.IsOpen && sp.BytesToRead > 0)
                    {
                        int len = sp.BytesToRead > COMDAL_RECVBUF_SIZE ? COMDAL_RECVBUF_SIZE : sp.BytesToRead;
                        sp.Read(ComRecvBuf, 0, len);
                        if (ReturnRecStrEvent != null)
                        {
                            ReturnRecStrEvent(ComRecvBuf, len, m_portdal);//推送到上一层。
                        }
                    }
                }
                _isReceivingdal = false;
            }
        }

        //向串口发送数据
        public void SendCommandByte(byte[] WriteBuffer)
        {
            try
            {
                if (bComOpenDal == true && SerialPort.IsOpen == true)
                {
                    SerialPort.Write(WriteBuffer, 0, WriteBuffer.Length);
                }
            }
            catch (Exception ex)
            {

            }
        }

    }
}

标签:bComOpenDal,false,C#,sp,通信,SerialPort,串口,true,public
From: https://blog.csdn.net/h2004118/article/details/142939419

相关文章

  • linux抓取docker内部服务网络包
    docker内应用抓包分析1、获取docker的网络信息dockernetworkls2、查看docker网络的网段dockernetworkinspectxxx3、找到docker的虚拟网卡ifconfig对网卡的端口进行抓包处理tcpdump-ibr-0c8b954bbb83port9962-w./test1.captcpdump-ieth0port9401-w./......
  • CVPR 2024论文与代码汇总:计算机视觉领域最新研究进展
    CVPR2024论文与代码汇总:计算机视觉领域最新研究进展计算机视觉与模式识别会议(CVPR)作为计算机视觉领域最具影响力的学术会议之一,每年都会吸引全球顶尖研究机构和企业提交大量高质量论文。CVPR2024即将于今年6月在美国西雅图举行,目前已经公布了部分接收论文名单。本文将对CV......
  • 智能CRM系统排名2024:AI技术如何提升客户管理
    在数字化时代,人工智能(AI)技术正逐渐成为企业提升客户管理能力的关键因素。智能CRM系统通过集成AI技术,不仅能够自动化日常任务,还能提供深入的客户洞察,从而帮助企业实现更高效的销售和更个性化的客户服务。一.AI技术如何赋能客户管理AI技术在CRM系统中的应用,正在改变企业与客户互......
  • 「题解」Educational Codeforces Round 170 (Rated for Div. 2)
    before我不想写作业呜呜。A.TwoScreensProblemA.TwoScreensSol&Code理解题意后发现使用复制的方法完成最长公共前缀即可。#include<bits/stdc++.h>typedeflonglongll;typedefstd::pair<int,int>pii;intT;std::strings1,s2;intmain(){scanf("%d"......
  • 自制Hackintosh黑苹果启动盘经验分享
    想升级安装macOSSonoma14.7,无奈mediy还没有发布现成的dmg合集,于是就有了本篇准备工作:1,VMware16pro2,macOSSonoma14.7原版ISO镜像3,Unlocker4.2.7[https://github.com/DrDonk/unlocker]4,Diskgenius5,EFI引导文件 关于EFI:EFI文件请根据自己的机型提前下载完成,也可......
  • CF1955G GCD on a grid 题解
    洛谷链接我们暴力枚举可能的答案\(k\),然后跑一边dp。设\(f_{i,j}\)表示在格子\((i,j)\)是否可以满足有一条路径可以到达该格子且该格子是否为\(k\)的倍数,递推式即为\(f_{i,j}=(k\mida_{i,j}\operatorname{and}(f_{i-1,j}\operatorname{or}f_{i,j-1}))\)最后的答......
  • Educational Codeforces Round 170 (Rated for Div. 2) D.Attribute Checks (没有完全
    算法显然为dp状态设计\(dp_{i,j}\)表示在第\(i\)个获得能力点的地方,之前智慧能力值为\(j\),时的最大分数状态转移显然需要从\(dp_{i-1,j}\)转移而来枚举\(j\in[0,i)\)则有(注意取\(\max\)操作要与自己相比较)设第\(i-1\)个能力点到第\(i\)个能......
  • PDF编辑软件:Adobe Acrobat Pro 中文注册版
    AdobeAcrobatPro是一款PDF编辑软件。该版本已注册,可以使用全部功能。使用说明:1、将压缩文件解压到固定位置,不要随意移动。2、解压后,双击start_Acrobat.bat来运行软件下载地址:https://www.mediafire.com/file/g8wpc08g324xqkh/Acrobat-Pro-DC-2024.7z/file解压密码:1......
  • CTF杂项——[安徽省赛 2021]misc签到
    kali分离出一个压缩包 需要密码010打开flag.png文件头是FFD8FFE0  说明是jpeg文件  但题目给的文件后缀是.png  把后缀修改成.jpg查看属性  找到密码  this_is_password得到flag......
  • TypeScript语法总结
    1.Typescript概述融合了后端面向对象思想的超级版的JavaScript语言。​TypeScript是JavaScript的超集,扩展了JavaScript的语法。特点:(1)TypeScript:【静态类型检查器】可在编译时检查错误(2)TypeScript为JS的超集(3)TS===JS+【类型】js有的ts都有(4)TS规范了JS......