这次上位机程序设计的专业课老师布置的期末实战作业,是类似与温室大棚监控的上位机程序,我将分为两篇文章来分享我的制作过程以及一些经验。
这是我程序的界面设计,整体是按照老师给的例图来布置。
三个功能键-开启通风、开启采光、开启喷灌在未打开串口前设置为不启用状态。
温度数值显示框默认设置为只读(不可编辑状态)。
先从退出按键开始,这个功能的实现使用了this.Close(); 非常直接简单的一个方法。
串口的下拉框则是serial_comboBox.Items.AddRange(SerialPort.GetPortNames());来一次性添加存在的串口。
搜索串口功能,则是先将下拉框的内容清空,再次使用添加串口的命令。
开启串口使用这里调用了 串口控件名.Open() 、串口控件名.Close() 、、等等,开启前会逐步读打开默认不启用的三个功能控件,关闭则相反,再加个try\catch来抓异常。
串口接收部分则是将接收的数据转为字节形式。串口发送也是。
const byte FFRAME_HEAD1 = 0xAA;
const byte FFRAME_HEAD2 = 0x55;
const byte FRAME_END = 0x0D;
const byte FRAME_DIR_CMD = 0x01;
const byte FRAME_DIR_REC = 0x81;
const byte FRAME_DEVICE_LED = 0x01;
const byte FRAME_DEVICE_FAN = 0x02;
const byte FRAME_DEVICE_TEMP = 0x03;
const byte FRAME_DEVICE_FAN2 = 0x04;
const byte FRAME_DEVICE_TEMP_LIMIT_UP = 0x05;
const byte FRAME_DEVICE_TEMP_LIMIT_DOWN = 0x06;
const byte FRAME_DEVICE_TEMP_LIMIT_LIGHT = 0x07;
const byte FRAME_DATA_NUM = 3;
这是相关的帧格式。
关于接收解析方面
就是依次判断是否等同于设置的帧。然后将数据存入。
下面时一个发送指令的程序
后续的命令都是基于此进行小改动。
上图是发送温度上限的命令,将温度上限数据拆分,发送给下位机。
自动获取温度是定时器定时发送获取温度命令实现。
发送设置的温度上限前,定时器会判断输入框是否为空,空则会赋一个初值。
应用多线程,防止程序死等。