昨天晚上,帮师弟用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时就会呈现这种结局,因而,需要在敞开软件之后对串口缓存区进行铲除操作,而且要求读串口的速率大于单片机发送数据的速率。