专栏首页电子技术研习社温度采集系统上位机设计

温度采集系统上位机设计

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

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

先来看一下它的界面:

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

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、串口读出数据,并且显示

data = (byte)serialPort1.ReadByte();//字符串方式读

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

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

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、当一定时间未检测到数据,弹出提示框

 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

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

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

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

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

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

本文分享自微信公众号 - 电子技术研习社(zjf18770701843),作者:小小飞飞哥

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • uCOS | 软件定时器

    硬件定时器是芯片本身提供的定时功能。一般是由外部晶振提供给芯片输入时钟,芯片向软件模块提供一组配置寄存器,接受控制输入,到达设定时间值后芯片中断控制器产生时钟中...

    飞哥
  • HC05蓝牙模块通信(附源码)

    实现的目标是利用蓝牙模块,实现手机与单片机通信,在手机上点击按钮,点亮单片机上面的小灯。

    飞哥
  • 定时器的PWM输出与输入捕获

    STM32F1的定时器非常多,由2个基本定时器(TIM6、TIM7)、4个通用定时器(TIM2-TIM5)和2个高级定时器(TIM1、TIM8)组成。基本定时器...

    飞哥
  • 财报前瞻:在甲骨文公布第三财季报告前,市场情绪喜忧参半

    软件解决方案供应商甲骨文公司(Oracle)将于3月14日收盘后公布第三财季业绩。市场预计,该公司二月每股收益将从去年的0.83美元小幅升至0.84美元。预计收...

    人称T客
  • OCP-052考试题库汇总(35)-CUUG内部解答版

    Which two are true about Oracle Data Pump in Oracle Database 11g Release 2?

    用户5892232
  • Web实时通讯方案 - SockJS

    HTML5有了websocket,让我们可以方便开发实时通信程序,但websocket还很年轻,目前还是需要一个更加成熟的实时通讯方案 SockJS 就是一个...

    dys
  • IDC:2017 Q1云计算IT基础设施收入达80亿美元

    编译 研究分析机构IDC最近调研报告表明,云计算占全球IT支出的份额不断增加,2017年第一季度全球云计算IT基础设施收入达到80亿美元,同比增长15%,思...

    人称T客
  • TiKV 源码解析系列文章(八)grpc-rs 的封装与实现

    上一篇《gRPC Server 的初始化和启动流程》为大家介绍了 gRPC Server 的初始化和启动流程,本篇将带大家深入到 grpc-rs 这个库里,查看...

    PingCAP
  • 互联网金融这么火,安全问题如何破?

    在“互联网+”大潮中,互联网金融可谓是百花齐放,银行、支付、保险、股市、基金、小贷、征信、理财、记账,每一个细分领域都在与互联网发生化学反应。互联网俨然已成为金...

    罗超频道
  • 云ERP彻底实现尚需时日,看大佬们在忙些什么?

    T客汇官网:tikehui 撰文 | Felix 云端ERP不久之前还是整个ERP中的“丑小鸭",但是如今它却正在蜕变为“白天鹅”的路上,并开始在ERP市场中占...

    人称T客

扫码关注云+社区

领取腾讯云代金券