初次尝试利用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 = "";