物联网专业课程设计:温室监控系统——上位机篇(串口通信、SQL sever数据库

这个程序是本科课程设计写的程序,因为最近在复习java和C#,故把以前的东西拿出来看看,顺便写个博客 。
此程序的功能描述:通过上位机可以直接观察到温室的各项实时参数和各个装置的工作状态,并且可以通过曲线图直观地分析该温室最近一段时间的环境变化 。上位机可对终端中遮阳、风机等装置进行远程控制 。管理员可以通过查询数据库来查看温室的历史环境参数 。上位机将采集数据转发至移动终端,方便管理员能够随时随地查看温室内情况,同时,上位机可接受移动终端下达的指令并通过串口转发至底层终端 。为了使主进程能够流畅的运行,不出现卡顿的情况,我使用线程池,为每一个模块执行的重要操作都分配一个线程,这样便可以保证程序不再运行过程中会出现无响应等异常情况 。整个程序包括自动报警、串口通信、图表显示、数据存储、网络通信等主要模块 。
主要的模块就三个:
1.串口通信的上传下达(与底层硬件)
2.网络通信(与APP)
3.数据的显示(图表、数据库、报表)
一个一个来看:
1.串口通信
上位机服务器与底层终端的通信采用串口来实现,由.NET 提供的操作串口的.IO.Port.类创建并初始化对象,调用()方法获取目标串口名称,并通过主窗体上的控件配置波特率、数据位等主要参数,通过注册监听方式接收数据,关键代码如下:
if (pchReceive.PortState)//检查串口当前状态{pchReceive.ClosePort();}else{pchReceive.OpenPort(cb_portNameReceive.Text, int.Parse(cb_baudRate.Text),//打开控件内所选择的串口int.Parse(cb_dataBit.Text), int.Parse(cb_stopBit.Text),int.Parse(cb_timeout.Text));}FreshBtnState(pchReceive.PortState);//更新串口状态pchReceive.OnComReceiveDataHandler+=new PortControlHelper.//创建串口接收线程ComReceiveDataHandler(ComReceiveData);//接收线程调用接收函数Btn_receive.Text = "停止接收";ReceiveState = true;
效果如图:
通过串口助手将字符串传到上位机,上位机通过按位截取的方式在对应文本框显示数据 。
上位机通过串口下达指令,前面四位为温度上下限,0代表每一个电机为关闭状态 。
2.网络通信
上位机就用户设置的本地IP地址和端口创建一个TCP服务器套接字,并调用Bind()方法绑定IP和端口,调用()方法监听,之后再创建一个线程用来监听安卓TCP客户端到PC端的连接 。
PC端上位机服务器监听线程流程图如图3-3所示 。线程开始后,循环执行如下操作:通过调用TCP服务器套接字的()方法等待安卓客户端连接到PC端,当安卓端成功通过TCP连接上PC端后,方法返回客户端的套接字 。之后,创建一个TCP接收线程用来接收安卓端发送给PC端的数据 。关键代码如下:
Socket sokConnection = socketWatch.Accept();//监听套接字lbOnline.Items.Add(sokConnection.RemoteEndPoint.ToString());// 向列表控件中添加客户端的IP信息dict.Add(sokConnection.RemoteEndPoint.ToString(), sokConnection); // 将与客户端连接的套接字对象添加到集合中ShowMsg(shijian + "客户端连接成功!");Socket sokClient = sokConnectionparn as Socket;byte[] arrMsgRec = new byte[1024 * 1024 * 2];//定义缓存区int length = -1;length = sokClient.Receive(arrMsgRec); //接收数据string strMsg = System.Text.Encoding.UTF8.GetString(arrMsgRec, 0, length); // 将接受到的字节数据转化成字符串strMsg = strMsg + "\n";Doupdate(strMsg);
这个效果在APP的博客里展示 。
3.数据显示
(1)数据显示
数据显示模块包含数据实时显示部分和图表显示部分,实时显示即在极短时间内系统对终端传送的数据及时接收并显示,图表显示则对接收的数据在坐标系上进行打点,生动直观的呈现给用户 。上位机与终端进行连接通信后,终端将采集到的温度、湿度、光照强度等参数上传至上位机,上位机将实时接收到的数据显示在图表曲线的最右边,随着数据的不断更新,图表曲线随之动态左移 。