串口是串行接口的缩写,是电子设备之间通信常用的全双工扩展接口。 RS-232 标准通常用于计算机和外部设备(带有 25 针或 9 针连接器)之间的数据传输。 如今,我们基本上已经看不到电脑中的串口了,我们可以使用USB适配器将COM口转换为USB接口进行连接。 今天我们就来一探究竟。.NET 如何用 C 编写实现与这些设备的通信。 串行通信包括通信时序、通信速率和数据传输。 常用的通信速率有2400bps、4800bps、9600bps、19200bps、38400bps和115200bps。 我们通过下图对串口的通信时序有一个简单的了解,它由起始位、数据位、校验位和停止位组成。
下表描述了计时组件。 NET Framework 库提供了 SerialPort 类,该类可用于配置和管理串口的属性,串口可用于发送和接收数据。 SerialPort 类的常见属性包括端口名、波特率、奇偶校验、数据位、停止位、握手、readtimeout 和 writetimeout。 这些属性用于指定串口名称、波特率、校验位、数据位、停止位、握手协议以及读写数据时的超时时间。 属性。
红色是类的公共属性,当我们使用该类时,该属性是根据所连接设备的情况进行配置的。
方法。 我们先配置一下类的属性,然后用 open() 方法打开串口,用 write() 方法发送数据,用 read() 方法读取数据,用 close() 方法关闭串口。
事件。 在发送和接收数据时,我们还可以使用事件来处理数据的到达和完成。
我们首先定义两种枚举类型:波特率和数据位
波特率。我正在将串行端口上的操作包装在一个类中。serializable]
public enum baudrates
数据位。
serializable]
public enum databits
using system;如何称呼:using system.collections;
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
using system.io.ports;
namespace fountain.net.core.com
字符串空操作。
public class operationserialportset
private baudrates _baudrate = baudrates.baud9600;
波特率。
public baudrates baudrateset
private parity _parity = parity.none;
校验位。
public parity parityset
private stopbits _stopbits = stopbits.one;
停止位。
public stopbits stopbitsset
private databits _databits = databits.bit8;
数据位。
public databits databitsset
无参数构造函数。
public operationserialport()
绑定事件。
private void boundevents()
存储接收到的用于分析的字节。
list _storereceivedbytes = new list();
接收数据。
private void serialport_datareceived(object sender, serialdatareceivedeventargs e)
catch 错误处理程序。
private void serialport_errorreceived(object sender, serialerrorreceivedeventargs e)
端口是否已打开。
public bool isopen
打开端口。
public void open()
this._serialport.portname = this._portname;
this._serialport.baudrate = (int)this._baudrate;
this._serialport.parity = this._parity;
this._serialport.databits = (int)this._databits;
this._serialport.stopbits = this._stopbits;
this._serialport.open();
catch (exception ex)
关闭端口。
public void close()
catch (exception ex)
public void discardbuffer()
写入数据。
字节数组。
public void write(byte writebuffer, int offset, int count)
this._serialport.write(writebuffer, offset, count);
catch (exception ex)
写入数据。
字节数组。
public void write(byte writebuffer)
this._serialport.write(writebuffer, 0, writebuffer.length);
catch (exception ex)
串行端口名称。
public static list getportnames()
return portnamelist;
catch(exception ex)
获取波特率。
public static list getbaurates()
return baudrateslist;
catch (exception ex)
获取校验位。
public static list getparitys()
return parityslist;
catch (exception ex)
获取数据位。
public static list getdatabits(ilist obj)
return databitslist;
catch (exception ex)
获取停止位。
public static list getstopbits()
return stopbitlist;
catch (exception ex)
using fountain.net.core.com;SerialPort 是一个非常方便的库,用于与串口设备通信,从事硬件对接开发和嵌入式开发的人难免会使用这个类。using system.io.ports;
using system.text;
namespace fountain.net.com.demo
public partial class formserialport : form
private void formserialport_load(object sender, eventargs e)catch
private void initialcombox()
catch (exception ex)
串口接收数据处理。
private void initialport()
this.begininvoke(new action(()=> )
catch (exception ex)
打开。 private void btnopen_click(object sender, eventargs e)
catch (exception ex)
关闭。 private void btnclose_click(object sender, eventargs e)
catch (exception ex)
清除收到的内容。
private void btnclean_click(object sender, eventargs e)
catch (exception exception)