相关概念
- 串口(SerialPort):也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。串口的数据传输方式为数据一位一位地顺序传送。
- RS-232:也称标准串口,最常用的一种串行通讯接口。传统的RS-232-C接口标准有22根线,采用标准25芯D型插头座(DB25),后来使用简化为9芯D型插座(DB9)。RS-232采取不平衡传输方式,即所谓单端通讯。
- RS-422:标准全称是平衡电压数字接口电路的电气特性。典型的RS-422是四线接口。实际上还有一根信号地线,共5根线。RS-422的最大传输距离为1219米,最大传输速率为10Mb/s。其平衡双绞线的长度与传输速率成反比,在100kb/s速率以下,才可能达到最大传输距离。有在很短的距离下才能获得最高速率传输。一般100米长的双绞线上所能获得的最大传输速率仅为1Mb/s。
- RS-485:是从RS-422基础上发展而来的,所以RS-485许多电气规定与RS-422相仿。如都采用平衡传输方式、都需要在传输线上接终接电阻等。RS-485可以采用二线与四线方式,二线制可实现真正的多点双向通信,而采用四线连接时,与RS-422一样只能实现点对多的通信,即只能有一个主(Master)设备,其余为从设备,但它比RS-422有改进,无论四线还是二线连接方式总线上可多接到32个设备。
- Nuget包:System.IO.Ports;
Demo
SerialPort初始化
public SerialPort(string portName, int baudRate, Parity parity, int dataBits, StopBits stopBits)
{
//串口名称
PortName = portName;
//波特率
BaudRate = baudRate;
//校验位
Parity = parity;
//数据位
DataBits = dataBits;
//停止位
StopBits = stopBits;
}
SerialPort发送操作
private void Button_Click_1(object sender, RoutedEventArgs e)
{
//操作同一个串口发送字符串
serialPort.Write("A");
//定义发送的字符串
string txt = "Message";
//将字节数组重新编码
byte[] bytes= Encoding.ASCII.GetBytes(txt);
//发送数据
serialPort.Write(bytes, 0, bytes.Length);
}
SerialPort主动接收
//停顿等待消息发送完成
Thread.Sleep(3000);
//seriport.BytesToRead是串口能读到的最大字节数
byte[] readBytes = new byte[serialPort.BytesToRead];
//将内容整体读入字节数组中
serialPort.Read(readBytes, 0, readBytes.Length);
//将原数组中的十进制ASCII码解码
string mes = Encoding.ASCII.GetString(readBytes);
//在文本框中显示接收到的内容
this.mestxt.Text = mes;
SerialPort被动接收
//当接收到数据的时候触发事件
serialPort.DataReceived += SerialPort_DataReceived;
private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
//seriport.BytesToRead是串口能读到的最大字节数
byte[] readBytes = new byte[serialPort.BytesToRead];
//将内容整体读入字节数组中
serialPort.Read(readBytes, 0, readBytes.Length);
//将原数组中的十进制ASCII码解码
string mes = Encoding.ASCII.GetString(readBytes);
//将UI代码放在主线程执行
this.Dispatcher.Invoke(() =>
{
//在文本框中显示接收到的内容
this.mestxt.Text = mes;
});
}
完整Demo代码
接触过的所有通信协议Demo代码