自己整理的串口工具类

整理自己很久以前代码的时候发现的,那时的我没有写笔记的习惯,看着以前代码不好看,改了一下,也不知道能不能用了,好久没搞了

 

复制代码
using System;
using System.Threading;
using System.IO.Ports;

public class Serial
{
    //默认
    private SerialPort serialPort;
    private Thread portThread;

    public delegate void CallBack();
    private CallBack callBack;

    /// <summary>
    /// 构造器 要是获取不到串口,用后面这句代码看下计算机上有没有串口了  string[] aaa = System.IO.Ports.SerialPort.GetPortNames();
    /// </summary>
    public Serial(string portName = "COM1", int baudRate = 9600, int dataBits = 8, StopBits stopBits = StopBits.One, Parity parity = Parity.None)
    {
        serialPort = new SerialPort();
        serialPort.PortName = portName;
        serialPort.BaudRate = baudRate;
        serialPort.DataBits = dataBits;
        serialPort.StopBits = stopBits;
        serialPort.Parity = parity;
    }


    /// <summary>
    /// 开始串口
    /// </summary>
    public void BeginSerialPort(CallBack callBack)
    {
        try
        {
            if (serialPort == null)
            {
                return;
            }
            //链接端口
            serialPort.Open();
            this.callBack = callBack;
            portThread = new Thread(ThreadPort);
            portThread.Start();
        }
        catch (Exception)
        {
            throw;
        }
    }


    /// <summary>
    /// 端口线程
    /// </summary>
    private void ThreadPort()
    {
        while (serialPort != null && serialPort.IsOpen)
        {
            if (serialPort.BytesToRead <= 0)
            {
                continue;
            }

            if (callBack != null)
            {
                callBack();
            }
        }
    }

    /// <summary>
    /// 获取byteArr
    /// </summary>
    /// <returns></returns>
    public byte[] GetByteArry()
    {
        if (serialPort == null || !serialPort.IsOpen)
        {
            return null;
        }

        int readLength = serialPort.BytesToRead;
        byte[] readBuf = new byte[readLength];
        //读取命令并放到readBuf字节数组里
        serialPort.Read(readBuf, 0, readLength);
        return readBuf;
    }

    /// <summary>
    /// 发送数据
    /// </summary>
    /// <param name="bytes"></param>
    public void SendMessage(byte[] args)
    {
        if (serialPort == null || !serialPort.IsOpen)
        {
            return;
        }
        serialPort.Write(args, 0, args.Length);//发送命令
    }

    /// <summary>
    /// 发送数据
    /// </summary>
    /// <param name="args"></param>
    public void SendMessage(string args)
    {
        if (serialPort == null || !serialPort.IsOpen)
        {
            return;
        }
        serialPort.Write(args);//发送命令
    }


    /// <summary>
    /// 退出串口
    /// </summary>
    public void ExitPort()
    {
        if (portThread != null)
        {
            portThread.Abort();
        }

        if (serialPort != null)
        {
            serialPort.Close();
        }
    }
}
复制代码

 

 

 

posted on   炼金师  阅读(121)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· Qt个人项目总结 —— MySQL数据库查询与断言

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示