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