C# 完成串口通信RS485|RS232上下位机交互
第零步:
我用的是电脑usb 转串口的所以首先是驱动程序下载,我们用的是CH341
下载地址:https://www.wch.cn/downloads/CH341SER_EXE.html
第一步:连接机器
RS485 上面有三个端子,A正B负GND地线,我们需要把他们都对应连接(GND看你连不连都可以)
第二步:
连接好了之后就是C# 控制程序啦,这里没什么特别的,主要是用到一个类 SerialPort
SerialPort类
在C#中,串口通信主要是使用SerialPort类来实现的。SerialPort类提供了串口通信中所有必需的属性和方法。使用SerialPort类,我们可以轻松地连接电脑和外设,进行数据传输。
SerialPort类的属性
SerialPort类中有几个重要的属性值,通过设置这些属性值,我们可以对串口进行配置,从而实现串口通信。以下是SerialPort类中几个重要的属性:
- PortName:串口端口名称,如COM1、COM2等;
- BaudRate:波特率,指每秒钟传输的数据位数;
- Parity:奇偶校验位,用于检验数据传输是否有误;
- DataBits:数据位,用于设置每次传输多少位数据;
- StopBits:停止位,用于指定数据传输过程中的间隔时间。
SerialPort类的常用方法
SerialPort类的方法包括打开串口、关闭串口、发送数据等操作。以下是SerialPort类的几个重要的方法:
- Open():打开串口;
- Close():关闭串口;
- Write():发送数据;
- Read():接收数据。
随便写了一个贴这里了
一、 首先先赋值,参考
static SerialPort serialPort = new SerialPort();
private void Send_Load(object sender, EventArgs e)
{
// 查询更新已有端口
IList<string> list = new List<string>();
// 读取当前有哪些COM口
foreach (string s in SerialPort.GetPortNames())
{
list.Add(s);
}
port_m.DataSource = list;
// 传输速度
int[] speed_data = new int[] { 128000, 9600, 19200, 38400, 115200 };
speed.DataSource = speed_data;
// 传输速度
int[] times_data = new int[] { 10, 1, 2, 5, 10, 20 };
times.DataSource = times_data;
// 奇偶校验
IList<string> list1 = new List<string>();
list1.Add("0不发生奇偶校验检查");
list1.Add("1设置奇偶校验位奇数");
list1.Add("2设置奇偶校验位偶数");
list1.Add("3将奇偶校验位保留为1");
list1.Add("4将奇偶校验位保留为0");
odd_even.DataSource = list1;
// 停止位
string[] stop = { "0", "1", "2" };
stop_num.DataSource = stop;
serialPort.DataBits = 8;
}
二、打开串口,发送数据,接收数据,关闭串口
private void simOpen_Click(object sender, EventArgs e)
{
serialPort.PortName = port_m.Text;
serialPort.BaudRate = Int32.Parse(speed.Text);
switch (odd_even.Text) {
case "0不发生奇偶校验检查":
serialPort.Parity = Parity.None;
break;
case "1设置奇偶校验位奇数":
serialPort.Parity = Parity.Odd;
break;
case "2设置奇偶校验位偶数":
serialPort.Parity = Parity.Even;
break;
case "3将奇偶校验位保留为1":
serialPort.Parity = Parity.Mark;
break;
case "4将奇偶校验位保留为0":
serialPort.Parity = Parity.Space;
break;
default:
serialPort.Parity = Parity.None;
break;
}
serialPort.DataBits = 8;
switch (stop_num.Text)
{
case "1":
serialPort.StopBits = StopBits.One;
break;
case "2":
serialPort.StopBits = StopBits.Two;
break;
default:
serialPort.StopBits = StopBits.One;
break;
}
try
{
serialPort.Open();
}
catch (Exception )
{
txtLog.Text += "\n 串口打开失败,请检查是不是这个COM,或者检查参数是否有误";
}
serialPort.Write(txtSend.Text);//这个是文本发送数据给对应的串口
Byte[] TxData = { 0x04, 0x03, 0x00, 0x03, 0x00, 0x01, 0x74, 0x5f }; //定义通讯指令 ,0x04设备地址为4,0x03功能码为3, 0x00, 0x03是通讯地址吗,0x00, 0x01是寄存器数量,0x74, 0x5f是CRC校验
serialPort.Write(TxData , 0, 8);//或者这样发送
byte[] recData = new byte[7];
serialPort.Read(recData, 0, 7);//接收数据
serialPort.Close();//关闭串口
}
好了,有兴趣的朋友可以去了解一下SerialPort