.NET 串口数据接收问题

C#中自带的串口类 

SerialPort

需要添加引用:

using System.IO.Ports;

在数据接收过程中,由于这样或那样的问题,导致从串口发来的数据并不是同时达到的。

因此接收到的数据就不是完整的。为了让数据接收具有完整性,需要在接收数据的方法中进行判断可用数据字节的长度

private void SerialPortOnDataReceived(object sender, SerialDataReceivedEventArgs serialDataReceivedEventArgs)
{
    //假设每次接收的数据长度为60个字节,在此进行判断可用字节的大小,如果小于60不在读取,等到下次在进行读取
    if (_serialPort.BytesToRead < 60)
    {
         return;
    }
    recvSerialPortBytes = new byte[_serialPort.BytesToRead];
    _serialPort.Read(recvSerialPortBytes, 0, recvSerialPortBytes.Length);
}

串口属性 

名称说明
BaseStream获取SerialPort对象的基础Stream对象
BaudRate获取或设置串行波特率
BreakState获取或设置终端信号状态
BtyesToRead获取接收缓冲区中数据的字节数
BtyesToWrite获取发送缓冲区中数据的字节数
CDHolding获取端口的载波检测行的状态
CtsHolding获取“可以发送”行的状态
DataBits获取或设置每个字节的标准数据位长度
DiscardNull获取或设置一个值,该值指示Null字节在端口或接收缓冲区之间传输时是否被忽略
DsrHolding获取数据设置就绪(DSR)信号的状态
DtrEnable获取或设置一个值,该值在串行通信过程中启用数据终端就绪(DTR)信号
Encoding获取或设置传输前后问呗转换的字节编码
Handshake获取或设置串行端口数据传输的握手协议
IsOpen获取一个值,该值指示SerialPort对象的打开或关闭状态
NewLine获取或设置用户解释ReadLine()和WriteLine()方法调用结束的值
Parity获取或设置奇偶校验检查协议
ParityReplace获取或设置一个字节,该字节在发生奇偶校验错误是替换数据流中的无效字节
PortName获取或设置通信端口,包括但不限于所有可用的COM端口
ReadBufferSize获取或设置SerialPort输入缓冲区的大小
ReadTimeout获取或设置读取操作未完成时发生超时之前的毫秒数
ReceivedBytesThreshold获取或设置DateReceived事件发生前内部输入缓冲区中的字节数
RtsEnable获取或设置一个值,该值指示在串行通信中是否启用请求发送(RTS)信号
StopBits获取或设置每个字节的标准停止位数
WriteBufferSize获取或设置串行端口输出缓冲区的大小
WriteTimeout获取或设置写入操作未完成时发生超时之前的毫秒数

 串口方法

方法名称说明
Close关闭端口连接,将IsOpen属性设置为False,并释放内部Stream对象
Open打开一个新的串行端口连接
Read从SerialPort输入缓冲区中读取
ReadByte从SerialPort输入缓冲区中同步读取一个字节
ReadChar从SerialPort输入缓冲区中同步读取一个字符
ReadLine一直读取到输入缓冲区中的NewLine值
ReadTo一直读取到输入缓冲区中指定value的字符串
Write已重载,将数据写入串行端口输出缓冲区
WriteLine将指定的字符串和NewLine值写入输出缓冲区

读取电脑中可用的串口:

//定义一个下拉列表
private System.Windows.Forms.ComboBox CmbPortName;

//! 添加相关串口到下拉列表中
CmbPortName.Items.Clear();
foreach (var name in SerialPort.GetPortNames())
{
    CmbPortName.Items.Add(name);
}
if (CmbPortName.Items.Count > 0)
{
    CmbPortName.SelectedIndex = 0;
}

自定义的Enum

    public enum Databits
    {
        FiveBits = 5,
        SixBits = 6,
        SeventBits = 7,
        EightBits = 8
    }

    public enum BaudRates
    {
        BaudRate75 = 75,
        BaudRate110 = 110,
        BaudRate150 = 150,
        BaudRate300 = 300,
        BaudRate600 = 600,
        BaudRate1200 = 1200,
        BaudRate2400 = 2400,
        BaudRate4800 = 4800,
        BaudRate9600 = 9600,
        BaudRate14400 = 14400,
        BaudRate19200 = 19200,
        BaudRate28800 = 28800,
        BaudRate38400 = 38400,
        BaudRate56000 = 56000,
        BaudRate57600 = 57600,
        BaudRate115200 = 115200,
        BaudRate128000 = 128000,
        BaudRate230400 = 230400,
        BaudRate256000 = 256000
    }

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值