前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >温度采集系统上位机设计

温度采集系统上位机设计

作者头像
飞哥
发布2020-07-10 10:29:34
1.8K0
发布2020-07-10 10:29:34
举报

上一次我们讲到了多点温度采集系统的设计,为此,特意开发了一个上位机用于显示温度,这一节就是来说一下上位机的开发。

当然,目前来说由于水平有限,这个上位机的功能比较简单,只是可以实时显示三路的温度信息,日后再去完善它。

先来看一下它的界面:

来简单介绍一下它的功能:

1、最重要的,能够实时显示温度信息。这里增加了两种显示格式,一种十进制,一种十六进制。十六进制主要是在调试中会使用,这里有些鸡肋。

2、当温度超过一定值(这里设置为40)时,会弹出提示框报警。

3、当超过一定时间(这里设置为5s)没有接收到数据时,弹出提示框报警,下一次如果需要接收数据,必须先点击刷新按钮。

下面简单说一下它的开发流程。省略一些初始的步骤,可以参考之前写的文章:使用C#开发第一个应用程序

开发平台:Microsoft visual studio 2019

开发语言:c#

(1)选择好使用到的控件

本次使用到的控件主要有:

按钮:button

下拉框:ComboBox

单选框:radio button

文本:label

串口:serial port

定时器:timer

(2)设置属性

主要是设置各个控件的初始值之类的。比如刚启动软件时下拉框的值是多少,单选框选的是哪个,文本显示什么,串口的串口号和波特率,定时器定时间隔这些,都可以在控件的属性里面设置。

(3)编写代码

最核心的部分就是要从串口那里读出数据,然后把它放在label文本处,里面有一些细节,比如数字与字符串之间的转化,十进制与十六进制的转化,串口号那里采用了扫描的方式,可以自动扫描出有用的串口。另外还设计了当5s之内没有收到数据就弹出提示框发出警告,这个是靠定时器做到的。

这里就简要介绍一下核心部分,其他的细节就不多说了。

a、串口读出数据,并且显示

代码语言:javascript
复制
data = (byte)serialPort1.ReadByte();//字符串方式读

b、区分不同采样点的信号来显示

这里是通过一次连发两个字节来实现的,第一个字节用来标记是哪一路信号,第二个字节是真正的温度数据。

代码语言:javascript
复制
if (data == 0x03)
                    {
                        data = (byte)serialPort1.ReadByte();//字符串方式读
                        if(data>40)
                        {
                            System.Media.SystemSounds.Asterisk.Play();//发出警告声音
                            MessageBox.Show("温度太高了!!!", "警告!!");//弹出提示框
                        }
                        string str = Convert.ToString(data, 10);
                        label4.Text = str + "℃";
                    }

c、当一定时间未检测到数据,弹出提示框

代码语言:javascript
复制
 private void timer1_Tick(object sender, EventArgs e)
        {
            count++;
            if(count>=50)      //定时5s钟
            {
                count = 0;
                label4.Text = "--";
                label5.Text = "--";
                label6.Text = "--";
                timer1.Stop();
                System.Media.SystemSounds.Asterisk.Play();//发出警告声音
                MessageBox.Show("温度接收不正常!!!", "警告!!");//弹出提示框
            }
        }

这是通过定时器来实现的,定时器每隔100ms进入定时器事件,然后在定时器事件函数里面对count值加1,当加到50,即5s钟时,就弹出提示框,并且关掉定时器。另外在串口接收事件里,只要接收到新数据,就对count值清0,这样就可以实现要求了。另外还需要注意的就是在计时到了之后,要关掉定时器,否则一直计时,可能会出现下面这种bug

关掉定时器就可以解决这个问题,但是这会带来另一个问题,那就是定时器关了,那么这个功能不就没了吗?所以必须要在合适的时候再开启定时器,本来是希望在串口接收事件里面打开定时器的,但是发现没有用,于是,就单独设计一个刷新按钮,用来打开定时器。

在定时器关了之后,必须要点击刷新按钮,才有数据显示,否则不显示,这样有一个好处就是,如果没有设计这个功能,那么当你长时间没有收到新的数据的时候,它上面还保留着上一次显示的内容,这会给人带来误会,而加上这个功能,则保证了显示的数据是最新接收到的。

另外还有串口扫描功能,实现的思路也就是在初始化的时候去挨个试能打开的串口,如果能打开就把串口号显示一下,之后再关闭,否则不显示,这样显示出来的就是当前可用的串口。

其他的细节就自己注意一下就行了。以后关于上位机的介绍也是只介绍最核心的部分,其他的细节就不多说了。

后台回复“温度采集系统上位机”获取源码

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 电子技术研习社 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档