zoukankan      html  css  js  c++  java
  • 基于LabVIEW的智能家居报警系统(多线程、队列)

        昨天晚上,帮师弟用LabVIEW做了一个智能家居报警系统的上位机软件,挺好玩的,虽然功能不多、结构也简单,但是,所用到的技术对于学习LabVIEW的人来说很重要。

        首先,贴出前面板的图片来。单片机向上位机发送的帧格式为:0x0A+3字节的温度数据+0x0B+4字节的烟雾浓度数据+0x0C+1字节的开关门信号(总共11个字节),发送的波特率为9600,发送周期为200ms。上位机采集软件每隔10ms(就是前面板上的队列循环周期)从串口缓存区里读取11个字节的数据,然后将其进行解析和显示。

    图1 软件的前面板截图

    然后,再把程序框图一一给大家亮出来。

     图2 串口配置和串口收/发的程序图

        如图2所示,VISA每隔10ms从串口缓存区读取11个字节的数据,然后将数据送入串口接收数据队列中。这里采用的是生产者-消费者模型的循环结构,读串口采用的是生产者循环结构,解析数据采用的是消费者循环结构。

    图3 数据解析和数据显示部分的程序图

        如图3所示,消费者循环用于解析数据,根据0x0A、0x0B、0x0C三个属性字节分别对温度值、烟雾浓度值以及开关门信号进行解析和显示,波形显示采用的是波形图表,温度值可通过温度计显示,烟雾浓度可通过指针式仪表盘显示,显示效果直观、大方。

    图4 声音报警部分的程序图

        如图4所示是声音报警部分的程序图,上半部分是温度报警程序,报警声音持续时间为2秒钟,报警声频率为3KHz;下半部分是烟雾浓度报警程序,报警声音持续时间为1秒钟,报警声频率为1KHz。由于声音报警持续的时间为1~2秒钟,如果将报警程序放在解析数据的那个大循环里,则会导致大循环的执行被延迟1~2秒钟,因此,必须将报警程序提出来单独写,从而使之变成了两个独立运行的线程。

        以上就是对本软件的介绍,本软件依然存在一些小BUG,比如说:有时候第一次启动这个软件后,串口读到的数据帧并不是0x0A+3字节的温度数据+0x0B+4字节的烟雾浓度数据+0x0C+1字节的开关门信号,通过探针我看到的是1字节的开关门信号+0x0A+3字节的温度数据+0x0B+4字节的烟雾浓度数据+0x0C,开关门信号跑到帧首去了,出现了断帧的现象。这个结果是由设置串口每次读取11个字节引起的,当串口缓存区里的字节数大于11时就会出现这种结局,因此,需要在开启软件之后对串口缓存区进行清除操作,并且要求读串口的速率大于单片机发送数据的速率。

  • 相关阅读:
    php实现base64图片上传方式实例代码
    Html5 js FileReader接口
    获取月份
    JS实现双击编辑可修改
    SimpleMDE编辑器 + 提取HTML + 美化输出
    基于visual Studio2013解决C语言竞赛题之0608水仙花函数
    基于visual Studio2013解决C语言竞赛题之0607strcpy
    基于visual Studio2013解决C语言竞赛题之0605strcat
    android --静默安装
    基于visual Studio2013解决C语言竞赛题之0604二维数组置换
  • 原文地址:https://www.cnblogs.com/huangsanye/p/5652448.html
Copyright © 2011-2022 走看看