目录
前言
本学期我的上位机课程已经结束了,那么这次分享一下期末考核所做的一个简易版温室监测。首先先给大家介绍一下什么是上位机以及下位机。
上位机
上位机是指控制系统中通过人机接口与操作者进行交互的计算机。它般用于监控、控制和调试下机(如工业机器人自动化设备等)的运行和行为。上位机可以通过图形界面、命令行或者其他形式提供给操作者一些控制和操作选项,同时也能够接收和显示下位机的数据和反馈信息。上位机通常具备一定的计算能力,能够处理和分析从下位机传输来的数据,并作出相应的决策和控制命令。
下位机
下位机是指控制系统中与上位机相对应的计算机或者部件。它负责执行上位机发送的控制命令,并将执行结果或者反馈信息传输给上位机。下位机通常是一些嵌入式设备或者控制器,其主要任务是实时控制和操作外部设备,例如机器人的关节控制器、传感器读取器或者执行器。下位机一般采用专用硬件和实时操作系统,以保证稳定和准确的控制执行。上位机通过与下位机的连接,可以对下位机进行配置和监控,实时获取相关数据、调整控制参数,并对下位机进行控制。这次做的温室监测,也是用到下位机,我这边用的是一个51单片机。
需要实现的功能
本次的温室监测,需要实现的功能有:喷灌(利用一个直流电机转动来模拟)、通风(利用一个直流电机转动来模拟)、采光(点亮单片机上的LED灯来模拟)、显示温度、声光报警。
以上就是我们C#上位机的界面布局.
上位机代码部分
首先是串口数据的接收
在串口的接收事件里面编写以下代码
Thread.Sleep(20);//每间隔20ms接收一次数据
this.Invoke(new EventHandler(delegate
{
try
{
if (serialPort1.BytesToRead > 0)//当串口缓存区中有数据时
{
//以字符串方式读取所有接收到的数据
string Str = serialPort1.ReadExisting();
//将接收到的所有0x00替换成\0显示在界面上,因为0x00是一个控制字符,不会在文本框中显示
Str = Str.Replace("\0", "\\0");
//把16进制字符串转换成整数以字符串输出
txtTemperature.Text = Str + "℃";//把温度显示在文本框中
//在信息框中追加接收的数据,其中包括接收时间和接收内容
AppendTextToInfoBox("[" + DateTime.Now.ToString("HH:mm:s") + "]" + "收" + "<-", txtReceive);
AppendTextToInfoBox(Str + "℃" + "\r\n", txtReceive);
temp = float.Parse(Str);//获取温度
}
}
catch (Exception ex)
{
//在信息框中追加异常信息
AppendTextToInfoBox("[" + DateTime.Now.ToString("HH:mm:ss") + "]" + "收" + "< -", txtReceive);
AppendTextToInfoBox(ex.Message + "\r\n", txtReceive)