最近在开发一个项目,需要串口通信,所以学习怎么自己做一个串口通信助手
1.工程的建立
打开vs软件 -》 左上角 “文件”选项 -》 新建 -》 项目 ,弹出对话框如下:
点击visual c# 选项卡 -》 1. 选择 Windows 桌面 -》 2.选择Windows 窗体应用(.NET framework)
1.编辑项目名称 - 》 2.定义项目储存位置 -》 3. 框架修改为.NET Framework 4.5 -》 最后单击确定
注意: 框架4.0以下,不能在Windows xp系统中运行。
至此,工程项目已经创建好,如下图所示:
此时,单击工具栏中的 “启动”按钮,可以看见debug下的调试窗口。像windows普通窗口一样,可以拖动,点击右上方关闭按钮可以关闭并退出调试。
同时窗体也可以用鼠标对准其边线,调整窗口的大小,以满足用户的需求,试一试!!
2.软件的图形化窗体设计
串口助手(简洁版)相关的图形化窗体设计,我们需要用到 “工具箱 ” ,如“果在工程中没有找到 "工具箱"窗口,可以在软件上方菜单栏 “ 视图” -》 “工具箱” 中,进行打开。
工具箱中我们常用到三个部分,分别是 公共控件,容器 和 组件 选项卡。
第一 ,添加标号控件。 选择 工具箱 -》 公共控件 -》 Label (标号控件),单击选择到窗体中(先单击控件名称,再单击窗口助手窗体空白处)。然后对准图标,点击鼠标右键,选择 ‘属性’,弹出属性窗口,可设置控件相关属性。大家可以自己去尝试更改属性看看效果,不懂可以百度,亲们!
提醒:在属性窗口打开后,点击我们正在设计的串口助手窗体空白处,可设置整个窗体的属性哦!!
例如:在 Name 属性栏中,可查看标号控件名字(所有,一切的一切,控件都有自己的名字,在程序编写时会用到,最好不要去修改!)
在 Font 属性栏中,可修改文本的字体,大小。
在 Text 属性栏中,可修改具体显示出来的文字。
按相同方法,我们设计出如下四个标号控件,布好局:第二,添加下拉组合框控件。 选择 工具箱 -》 公共控件 -》 comboBox(组合框控件),单击选择到窗体中。然后对准鼠标右键,选择 ‘属性’,弹出属性窗口。
在 Items 属性栏中,可添加组合框下拉菜单内容。 注:本次串口助手软件 端口组合框 会在程序中添加下拉菜单内容,不用在属性栏中手动添加。而波特率组合框 直接在属性中添加下拉菜单内容。
我们设计出如下窗体:
第三,添加单选按钮控件。 选择 工具箱 -》 公共控件 -》 RadioButton(单选按钮控件),单击选择到窗体中。在单选按钮的属性窗口中,更改单选按钮文本(Text 栏),文字大小(Font)等参数。
注意:发送模式下的两个单选按钮为一组,接收模式下的单选按钮为另一组。为了发送和接收单选按钮相互独立,需将其划分组别,因此要引入容器控件。选择 工具箱 -》 容器 -》Panel(容器控件),将同组别单选按钮划分在一起。先放置容器控件,再往其中填入
第四,添加按键控件。 选择 工具箱 -》 公共控件 -》 Button(按钮控件),单击选择到窗体中。可在按钮的属性窗口中,更改单选按钮文本(Text 栏),文本大小(Font栏),背景颜色(BackColor栏)等参数。第五,添加文本框控件。 下面的文本框用于储存待发送数据,右边文本框用于储存串口接收到的数据。选择 工具箱 -》 公共控件 -》 TextBox(文本框控件),单击选择到窗体中。可在文本框的属性窗口中,更改为多行显示(multiline 栏)(否则无法纵向拉伸);纵向拓展或横向拓展或双向拓展(Scrollbars栏)(文本框边上有没有拖动条)
第六,添加串口控件 。既然要做串口助手,串口肯定是少不了的。选择 工具箱 -》 组件 -》 SerialPort(串口控件),单击选择到窗体中。这时细心的你会发现窗体中没有串口图标,不要担心,它在你的窗体下方,因为他是一个隐式(不可见的)(后台的)控件。
在串口的属性窗口中,我们发现可以设置波特率、串口号、停止位、校验位等参数。在这里我们保持默认值就好,下节我们会在程序中进行设置。所以亲们在这里就不用管啦,是不是很开心??
第七,添加定时器控件。有人会问为什么串口助手会用定时器,难不成是自动发送功能??答案为否。这里我们是想通过定时器做一个500ms定时周期性中断,这样就可以不停检测电脑的可用串口,然后将它放在端口的组合框控件的下拉菜单中。这样我们就不用去调用设备管理器,看咱们该调成哪个串口号了,是不是很高级!!
选择 工具箱 -》 组件 -》 Timer(定时器控件),单击选择到窗体中。他也是一个隐式控件。在定时器的属性窗口中,我们需要设置中断时间为500ms(Interval 栏);设置定时器使能(Enabled 栏)(就是软件一运行,定时器就开始工作,咱们就不用程序里再去打开他的开关了)。至此,可视化窗体已经做完了,我们点击 “”启动按钮“进行测试,查看具体的效果,发现按钮可以点击,组合框可以下拉,文本框可以输入字符,两组单选按钮各自工作正常。。。。。。关闭窗口。
后面我们将进入程序部分的编写,就比较难了,不过没关系,一步一步来。
我们完成了串口助手(简洁版)可视化窗体的设计,并且单击启动后可以运行。但是光有外壳,没有灵魂。所以接下来我们将继续一步一步来编写上位机软件的程序部分。
首先,我谈一下自己所理解的C#上位机软件程序编写的中心思想。以串口助手(简洁版)为例,所有程序都是以 “事件” 为核心来进行的,对应的 “事件”发生了,那软件就去执行 我们自己编写的 对应事件中的 程序。
按键按下,算一个事件吧 -----》》》》 执行这个按键按下对应的程序
串口突然收到数据 ,算一个事件吧 -----》》》执行串口收到数据时对应的程序
定时器中断来了,也是个事件 ----》》》》执行定时器中断发生时对应的程序
1.窗口加载时事件(程序)
窗体刚刚加载出来,就是弹出软件窗口的一瞬间,算个事件吧。那怎么去编写这一段的程序呢?我们到上一章编好的可视化窗体中,去双击窗体的空白处,就跳转到对应的事件发生程序中去了。比如双击这里: 1.窗口加载时事件(程序)然后就跳转到这个代码段中来了:
`、、、 C#
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace 串口助手_简洁版_
{
public partial class Form1 : Form
{
/默认存在/
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
} 函数 Form1_Load() 就会在窗体加载的时候被调用一次。上方的 Form1() 函数会默认存在,暂时不用理会。在其中加入代码:
‘’’ C#
/*窗体加载时被调用*/
private void Form1_Load(object sender, EventArgs e)
{
Updata_Serialport_Name(comboBox1); //调用更新可用串口函数,comboBox1为 端口 组合框名字
radioButton1.Checked = true; //函数中选择发送模式 为“数值”发送模式。 radioButton1为单选按钮属性(name)名字
radioButton3.Checked = true; //函数中选择接收模式 为“数值”接收模式。 radioButton3为单选按钮属性(name)名字
button2.Text = "打开串口"; // 确保 “打开串口”按键文本属性为 “打开串口”
}
/*用户自定义更新可用串口函数*/
private void Updata_Serialport_Name(ComboBox MycomboBox)
{
string[] ArryPort = SerialPort.GetPortNames(); //定义字符串数组,数组名为 ArryPort
//SerialP ort.GetPortNames()函数功能为获取计算机所有可用串口,以字符串数组形式输出
MycomboBox.Items.Clear(); //清除当前组合框下拉菜单内容
for (int i = 0; i < ArryPort.Length; i++)
{
MycomboBox.Items.Add(ArryPort[i]); //将所有的可用串口号添加到 端口 对应的组合框中
}
}`
总结:
- 1.在窗体加载事件中,我们设置 发送和接收模式都默认选择 “”数值“”模式, 同时 调用自定义的串口号更新函数 Updata_Serialport_Name (), 来更新一下 “端口” 组合框下拉菜单中的串口信息。
2. SerialPort.GetPortNames() 函数,用来查询所有的可用串口号。