使用visual studio 制作上位机
使用visual studio 制作上位机
在嵌入式开发的后期,客户往往需要调试一些参数,为减少与工程师的反复对接,反复更新程序,此时开发一款相应的上位机,通过数据的传输来进行相关参数的修改,显的尤为重要,今天我们就利用visual studio来开发一款通过电脑串口进行通讯的上位机软件。
1.新建工程
(1)新建:文件➔新建➔项目
(2)选择Visual C#下面的Windows 桌面 ➔ Windows窗体应用(.NET Framework)➔ 输入项目名称 ➔ 设置保存路径 ➔ 点击确认
(3)等待创建工程:
等待几秒钟之后,项目工程会创建完毕。我们会得到一个最基本的窗口。这其实就是我们的画布,接下来我们需要哪些组件,我们就可以自己手动添加进去。
2.放置组件,组件,按钮等
接下来我会介绍几个基本的组件,这几个组件基本能够覆盖我们平时调试需要的功能:
-
组件所在位置:视图➔工具箱
-
常用组件及如何放置控件:
我们最常用的组件在“公共控件”,“容器”和“组件”,这三个分组里面。
放置控件有两种方法:
方法一:双击相应的控件,该控件就会出现在你的窗口当中。
方法二:点击相应的图标,拖拽到我们的窗口当中。
-
Lable :标签。主要功能:用于注释。
我们添加的一些按钮或者文本框,往往需要一个文本注释,来说明是做什么的。这个时候我们就需要用到Label这个控件。
添加完控件之后,右击控件,选择属性。
通过修改右下角窗口中的label1属性中的Text内容,即可修改该标签的显示。
注意!标签的名称请不要修改,标签的名称唯一,标签名称用于不同标签的区分。
有关字体大小,以及背景颜色的修改方法,可自行百度,此处不做赘述。 -
ComboBox :下拉列表框。主要功能,数据的选择和输入。
同样右击属性,在Text选项框中,我们可以设置改下拉列表的初始化默认值。
3.放置串口,放置定时器!
一般我们制作上位机的目的是与下位机进行通讯,所以我们必须启用串口通讯功能。切记添加串口和定时器。
1.放置串口:组件➔SerialPort
2.放置定时器:组件➔Timer
定时器,定时时间设置:
4.串口相关设置
串口相关的设置主要包括以下5个组件:
(1)搜索串口(button)
(2)选择串口(ComboBox)
(3)波特率设置(ComboBox)
(4)打开串口(button)
(5)关闭串口(button)
布局好之后,我们需要对相应的组件添加功能代码,已实现相应的组件功能。
搜索串口
双击搜索串口button组件添加如下代码:
//扫描串口
private void button1_Click(object sender, EventArgs e)
{
SearchAndAddSerialToComboBox(serialPort2,comboBox2); //扫描并讲课用串口添加至下拉列表
}
private void SearchAndAddSerialToComboBox(SerialPort MyPort, ComboBox MyBox)
{ //将可用端口号添加到ComboBox
string[] MyString = new string[20]; //最多容纳20个,太多会影响调试效率
string Buffer; //缓存
MyBox.Items.Clear(); //清空ComboBox内容
for (int i = 1; i < 20; i++) //循环
{
try //核心原理是依靠try和catch完成遍历
{
Buffer = "COM" + i.ToString();
MyPort.PortName = Buffer;
MyPort.Open(); //如果失败,后面的代码不会执行
MyString[i - 1] = Buffer;
MyBox.Items.Add(Buffer); //打开成功,添加至下俩列表
MyPort.Close(); //关闭
}
catch
{
}
}
// MyBox.Text = MyString[0]; //初始化
}
选择串口
选择串口的ComboBox组件无需添加代码
选择波特率
选择波特率的ComboBox组件无需添加代码
打开串口
双击打开串口组件,添加如下代码:注意你所添加的串口组件名称
private void button2_Click(object sender, EventArgs e)
{
try
{
serialPort2.PortName = comboBox2.Text;//开启的串口名称为选择串口的ComboBox组件中的内容
//serialPort1.BaudRate = 9600;
serialPort2.BaudRate = Convert.ToInt32(comboBox1.Text);//将选择波特率ComboBox组件中的数据转为Int型,并且进行波特率的设置
serialPort2.Open();//打开串口
button2.Enabled = false;//打开串口按钮不可用
button3.Enabled = true;//关闭串口可用
// timer1.Start();
}
catch//如果打开串口失败 需要做如下警示
{
MessageBox.Show("打开串口失败,请检查相关设置。", "错误");
}
}
关闭串口
双击关闭串口组件,添加如下代码:
private void button3_Click(object sender, EventArgs e)
{
try
{
serialPort2.Close();//关闭串口
button2.Enabled = true;//打开串口按钮可用
button3.Enabled = false;//关闭串口按钮不可用
}
catch (Exception err)//一般情况下关闭串口不会出错,所以不需要加处理程序
{
}
}
5.发送数据
假设:button5按键为发送数据按钮:
我们在对相应的buf数组进行赋值之后,需要进行如下操作:
发送数据的函数为 serialPort2.Write(dataBuf, 0, 6)
参数为:发送的数组名称,发送数据起始位,发送数据长度。
serialPort2.Write(dataBuf, 0, 6);
如下代码逻辑可供参考,注意打开串口,以及相关警示的设置:
```c
private void button5_Click(object sender, EventArgs e)
{
f_run_pass_fail = 1;
f_send_data = true;
timer1Count = 0;
if (button2.Enabled)//如果还没有打开串口
{
MessageBox.Show("请打开串口", "提示");
}
else if (checkBox1.Checked == false)
{
MessageBox.Show("请选定头码!", "提示");
}
else
{
NormalData();
serialPort2.Write(dataBuf, 0, 6);
// timer1.Start();
}
}
6.小结
上述内容为创建上位机软件的最基础代码原理,有任何问题,欢迎留言交流。
本篇博文不定时更新完善。