一、项目描述
我们的课程项目是模拟温度大棚控制系统,使用C#开发一个Windows Forms应用程序,通过工具箱设计按钮等控件实现各个设备的操作控制。还需要在界面上显示当前大棚内的温度。串行口是设备之间进行通信常用的硬件接口,而串口通信是物联网应用技术中最常用的通信方式。串口通信是指外设和计算机之间,通过数据线按位进行传输数据的一种通讯方式。设计一个上位机程序,实现上位机与下位机之间的双向串口通信。过上位机可以直接观察到温室的各项实时参数和各个装置的工作状态,并且可以通过曲线图直观地分析该温室最近一段时间的环境变化。上位机可对终端中遮阳、风机等装置进行远程控制。管理员可以通过查询数据库来查看温室的历史环境参数。上位机将采集数据转发至移动终端,方便管理员能够随时随地查看温室内情况,同时,上位机可接受移动终端下达的指令并通过串口转发至底层终端。为了使主进程能够流畅的运行,不出现卡顿的情况,我使用线程池,为每一个模块执行的重要操作都分配一个线程,这样便可以保证程序不再运行过程中会出现无响应等异常情况。整个程序包括自动报警、串口通信、显示数据、数据存储。
项目要求:
- 通过串口方式与下位机通信,通信协议自定
- 上位机可以实时显示下位机采集到的温度数据
- 上位机可以开启或者关闭下位机的采光、风扇、喷灌设备
二、串口通信
上位机服务器与底层终端的通信采用串口来实现,由.NET Framework提供的操作串口的System.IO.Port.SerialPort类创建并初始化对象PortNameArr,调用GetPortNames()方法获取目标串口名称,并通过主窗体上的ComboBox控件配置波特率、数据位等主要参数,通过注册监听方式接收数据。
三、项目实施
绘制一个界面。
实例化一个串口
SerialPort serialPort1 = new SerialPort();
打开串口、关闭串口
private void btn_Open_Click(object sender, EventArgs e) //打开 and 关闭串口按键
{
if (serial_open_state == true) //关闭串口
{
UserCloseSerialPort();
}
else //打开串口