C#上位机软件———串口

导入命名空间

using System.IO.Ports; //串口类 SerialPort 属于该命名空间
string[] portStr = SerialPort.GetPortNames(); //搜索当前设备下的串口
//该方法为串口类的静态方法,调用方法 类名+函数名

类实例与参数初始化

public SerialPort sp = new SerialPort();

DataBits:读写 每个字节的标准数据位长度。 数据位值是小于 5 或大于 8。[DefaultValue(8)]
IsOpen :只读 如果串行端口已打开,则为 true;否则为 false。 默认值为 false。
DsrHolding :只读 如果“数据设置就绪”信号已发送到端口,则为 true;否则为 false。
ReadBufferSize :读写 缓冲区大小(以字节为单位)。 默认值为 4096;最大值为正整数,即 2147483647。
ParityReplace :获取或设置一个字节,该字节在发生奇偶校验错误时替换数据流中的无效字节。 返回结果: 替换无效字节的字节。
PortName : 摘要: 获取或设置通信端口,包括但不限于所有可用的 COM 端口。
// 返回结果: 通信端口。 默认值为 COM1。
ReadTimeout:获取或设置 读取操作未完成时发生超时之前的毫秒数。读取操作可能因为其他进程被阻塞而超时
ReceivedBytesThreshold : 获取或设置 System.IO.Ports.SerialPort.DataReceived 事件发生前内部输入缓冲区中的字节数,可以控制输入缓存的初始位置。
RtsEnable :在485单双工通讯时用于控制RTS。
StopBits :枚举 定义停止位 StopBits.None
WriteBufferSize : 获取或设置串行端口输出缓冲区的大小。 默认值为 2048。
WriteTimeout : 获取或设置写入操作未完成时发生超时之前的毫秒数。写到端口超时
Parity : 获取或设置奇偶校验检查协议。Parity.None;
BytesToRead : 获取接收缓冲区中数据的字节数。
BaudRate :获取或设置串行波特率。
BytesToWrite :获取发送缓冲区中数据的字节数。
更详细介绍需要自己去看 SerialPort 类中的注释了

初始化:

 public void PortInit(string serialName, Int32 iBaudRate, Int32 iDateBits, StopBits sbit, Parity parity)
        {
            //串口名
            sp.PortName = serialName;
            //波特率
            sp.BaudRate = iBaudRate;
            //数据位
            sp.DataBits = iDateBits;
            sp.StopBits = sbit;
            sp.Parity = parity;
            /*
            comReg.t_byte_us = 1000000 / sp.BaudRate * 11;
            comReg.rxStart = 0;
            comReg.RxIndex = 0;
            */
            //准备就绪              
            sp.DtrEnable = true;
            sp.RtsEnable = true;
            //设置数据读取超时为1秒
            sp.ReadTimeout = 80;
            sp.ReceivedBytesThreshold = 1;
        }

打开、接收、发送与关闭

打开

public void OpenPort()
    {
        try
        {
            sp.Open(); 
        }
        catch (Exception e)
        {
            return;
        }
    }

接收

public class SerialPortService
    {
        public SerialPort sp = new SerialPort();
        public SerialPortService()
        {
            sp.DataReceived += new SerialDataReceivedEventHandler(Sp_DataReceived);
            //在构造函数中注册一个处理接收事件的函数
        }
        /*接收函数*/
		void Sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            if (sp.IsOpen == false) return;
            int dataLength = sp.BytesToRead; //看一下收到多少字节
            if (dataLength <= 0) return;
            Byte[] receivedData = new Byte[dataLength];
            //读取数据
            sp.Read(receivedData, 0, receivedData.Length);//放到二级缓存中
            //1.缓存数据
            buffer.AddRange(receivedData);
            DateBuf.PushDateBuf(buffer, dataLength);//按照自己定义的协议再处理一下
            buffer.RemoveRange(0, dataLength);//
        }
   }

发送:

public void TxData(byte[] byteBuffer, int length)
 {
     if (sp.IsOpen == false)
     {
         return;
     }
     try
     {
         sp.Write(byteBuffer, 0, length);
     }
     catch (Exception e)
     {
         Console.WriteLine(e.Message);
     }
 }

关闭:

 public void ClosePort()
    {
        sp.Close();
    }
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页