2020-11-14

本文介绍了初学者如何使用C#编写串口上位机,涉及控件配置、数据通信、事件处理和异常处理。通过设置界面、COM选择、波特率设定,实现了字符和数字数据在虚拟串口间的交互,并演示了打开、关闭串口及发送数据的完整流程。
摘要由CSDN通过智能技术生成

初次尝试利用c#语言编写串口上位机小测试  测试环境VS2017

1.熟悉上位机开发界面布局,常用控件(label textcombox_ button_等)使用方法

2.编写设置界面控件属性以及不同控件下的事件函数功能(串口号选取 波特率 页面背景 等)

3.实现数字与字符类型等数据在虚拟串口之间通讯;测试工具 :Configure Virtual Serial Port Driver     XCOM V2.0  自己编写的上位机界面

在主界面插入该语句

System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;//进行线程之间的跨越处理的声明

进行串口具体功能函数编写,需进行页面布局一些初始化;此处最后一句是给串口控件添加事件函数

       for (int i = 0; i < 20; i++)//列表出20个串口号
            {
                comboBox1.Items.Add("COM" + i.ToString());//拼接字符 显示端口号
            }
            comboBox1.Text = "COM1";//初始化串口选择
            comboBox2.Text = "9600";//初始化波特率的确定
            serialPort1.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);//用户自定义接受数据函数 需去串口控件进行注册

具体接受函数需自定义编写;本次如下:

 private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            if (!radioButton3.Checked)
            {
                string str = serialPort1.ReadExisting();//字符按键按下  进行字符类型读取
                 textBox1.AppendText(str);//数据显示至文本框
             //   textBox1.Text += str;//同上一样的作用  使用方法不同
            }
            else {
                Byte DATA;
                DATA = (Byte)serialPort1.ReadByte(); //定义BYTE类型DATA读取接受数据
                string str = Convert.ToString(DATA, 16).ToUpper();  //将数据转换成字符类型             
                if (str.Length == 1)
                {
                    str = "0" + str;
                }
                else {
                    str = str;
                }
                textBox1.AppendText(str);  
            }
        }

打开串口按钮事件函数

        try
          {
                serialPort1.PortName = comboBox1.Text;  //赋值串口号
                serialPort1.BaudRate = Convert.ToInt32(comboBox2.Text);//对波特率进行字符转换 进行赋值
                serialPort1.Open(); //内部打开串口事件 出错跳转 catch
                button1.Enabled = false;//对按钮进行不可选操作
                button2.Enabled = true;//对按钮进行可选使能操作
            }
            catch
            {
                MessageBox.Show("串口打开失败,请重新检查!!");//串口打开失败提示信息
            }

关闭串口按钮事件函数

            try
            {
                serialPort1.Close();
                button1.Enabled = true;
                button2.Enabled = false;
            }
            catch
            {
            }

发送数据按钮事件函数

            byte[] data = new byte[1]; //定义一个Byte data 进行数据发送
            if (serialPort1.IsOpen)//判断串口是否处于打开状态
            {
                if (textBox3.Text != "")//判断发送数据是否为空
                {
                    if (!radioButton2.Checked)//判断发送类型
                    {
                        try
                        {
                            serialPort1.WriteLine(textBox3.Text);//直接调用发送数据函数 出错跳转catch
                        }
                        catch
                        {
                            MessageBox.Show("发送数据出错,检查串口是否正常");
                            serialPort1.Close(); //出错必须去执行关串口 不然出现BUg
                            button1.Enabled = true;  //按钮重新选择使能
                            button2.Enabled = false;//按钮重新选择使能
                        }

                    }
                    else
                    {
                        for (int i = 0; i < (textBox3.Text.Length - textBox3.Text.Length % 2) / 2; i++) //数据长度选择 i最大一半选择 分奇 偶数情况
                        {
                            data[0] = Convert.ToByte(textBox3.Text.Substring(i * 2, 2), 16);//一次性选择两位  即为转换为16进制
                            serialPort1.Write(data, 0, 1);//DATA数据发送
                        }
                        if (textBox3.Text.Length % 2 != 0)//奇个数最后一位发送
                        {
                            data[0] = Convert.ToByte(textBox3.Text.Substring(textBox3.Text.Length - 1, 1), 16);
                            serialPort1.Write(data, 0, 1);
                        }
                    }
                }
            }

清零操作按钮函数事件(最简单的操作。。。。。。。。!!!!!!)

  textBox3.Text = "";

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值