目录
(1)在解决方案中单击右键,依次点击“添加->类”,在弹出的对话框中将类的名称设置为GreenHouse
(2)运行上位机程序并打开COM1,运行串口助手并打开COM2
(3)在上位机程序中,点击“开启通风”按钮,观察在串口调试工具中是否收到了数据(注意:接收数据要 以16进制方式显示,否则会出现乱码),并且数据格式是否正常。
一、设计温室监控系统应用程序界面
打开
Visual Studio 2019
编程环境,创建一个名称为
“
温室控制系统设计
”
的项目,设计一个
“
温室
控制系统
”
应用程序功能界面,该程序可以使用项目5-1上位机程序模板进行修改,可以加快开发速度。

二、编写温室监控系统 WinForm 程序
1.上位机与下位机通信协议定制
本项目中上位机与下位机是通过串口连接进行数据传输的,上位机可以控制温室大棚进 行通风、采光等操作,这种操作属于上位机下发控制指令,数据流向从上到下;上位机还需要显示当前 的温室大棚内的实时温度值,这种属于下位机上传数据,数据流向是从下到上。

因此,我们对通信协议的要求可以总结出以下几点:
1.
通信协议应包含数据流向,既要区分是下发还是上传
2.
通信协议应包含控制对象与控制值,例如控制风扇的状态为开
3.
通信协议需要包含帧头和帧尾,在本项目中使用固定帧长度
根据以上需求,设计的帧格式如图
7-16
所示

图 7-16 通信协议帧格式
各个数据段的含义如表
7-5
所示:
表
7-5
:通信帧数字段说明以及含义

2.上位机协议解析
(1)在解决方案中单击右键,依次点击“添加->类”,在弹出的对话框中将类的名称设置为GreenHouse

(2)定义帧格式变量。
为了提高代码的可读性和维护性,应该避免在代码的逻辑判断中直接写数据,如 for循环中的循环次数直接写
6
等,这被称之为
"
魔数
"
,因为除了编程者没人知道为什么循环次数是
6
,对 于这种数应该使用单独的变量定义并且变量名称使用大写。在C
语言中常常用
define
定于常量。定义常量 能提高可读性之外,还能提高维护性,一旦需要修改这个变量只需要一处定义即可。GreenHouse
类中
定义了以下常量。
const byte FRAME_HEAD1 = 0xAA; //帧头1
const byte FRAME_HEAD2 = 0x55; //帧头2
const byte FRAME_END = 0x0D; //帧尾
const byte FRAME_DIR_CMD = 0x01; //数据方向 上位机发命令
const byte FRAME_DIR_REC = 0x81; //数据方向 上位机接收数据
const byte DEVICE_LED = 0x01; //设备类型 LED
const byte DEVICE_FAN = 0x02; //设备类型 风扇
const byte DEVICE_TEMP = 0x03; //设备类型 温度传感器
实现串口数据解析功能。在类中添加
ReceivedRawData
方法,其参数为