C# 完成串口通信RS485

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值