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 }