如何利用LabVIEW設(shè)計智能家居報警系統(tǒng)
昨天晚上,幫師弟用LabVIEW做了一個智能家居報警系統(tǒng)的上位機軟件,挺好玩的,雖然功能不多、結(jié)構(gòu)也簡單,但是,所用到的技術(shù)對于學(xué)習(xí)LabVIEW的人來說很重要。
首先,貼出前面板的圖片來。單片機向上位機發(fā)送的幀格式為:0x0A+3字節(jié)的溫度數(shù)據(jù)+0x0B+4字節(jié)的煙霧濃度數(shù)據(jù)+0x0C+1字節(jié)的開關(guān)門信號(總共11個字節(jié)),發(fā)送的波特率為9600,發(fā)送周期為200ms。上位機采集軟件每隔10ms(就是前面板上的隊列循環(huán)周期)從串口緩存區(qū)里讀取11個字節(jié)的數(shù)據(jù),然后將其進行解析和顯示。
圖1 軟件的前面板截圖
然后,再把程序框圖一一給大家亮出來。
圖2 串口配置和串口收/發(fā)的程序圖
如圖2所示,VISA每隔10ms從串口緩存區(qū)讀取11個字節(jié)的數(shù)據(jù),然后將數(shù)據(jù)送入串口接收數(shù)據(jù)隊列中。這里采用的是生產(chǎn)者-消費者模型的循環(huán)結(jié)構(gòu),讀串口采用的是生產(chǎn)者循環(huán)結(jié)構(gòu),解析數(shù)據(jù)采用的是消費者循環(huán)結(jié)構(gòu)。
圖3 數(shù)據(jù)解析和數(shù)據(jù)顯示部分的程序圖
如圖3所示,消費者循環(huán)用于解析數(shù)據(jù),根據(jù)0x0A、0x0B、0x0C三個屬性字節(jié)分別對溫度值、煙霧濃度值以及開關(guān)門信號進行解析和顯示,波形顯示采用的是波形圖表,溫度值可通過溫度計顯示,煙霧濃度可通過指針式儀表盤顯示,顯示效果直觀、大方。
圖4 聲音報警部分的程序圖
如圖4所示是聲音報警部分的程序圖,上半部分是溫度報警程序,報警聲音持續(xù)時間為2秒鐘,報警聲頻率為3KHz;下半部分是煙霧濃度報警程序,報警聲音持續(xù)時間為1秒鐘,報警聲頻率為1KHz。由于聲音報警持續(xù)的時間為1~2秒鐘,如果將報警程序放在解析數(shù)據(jù)的那個大循環(huán)里,則會導(dǎo)致大循環(huán)的執(zhí)行被延遲1~2秒鐘,因此,必須將報警程序提出來單獨寫,從而使之變成了兩個獨立運行的線程。
以上就是對本軟件的介紹,本軟件依然存在一些小BUG,比如說:有時候第一次啟動這個軟件后,串口讀到的數(shù)據(jù)幀并不是0x0A+3字節(jié)的溫度數(shù)據(jù)+0x0B+4字節(jié)的煙霧濃度數(shù)據(jù)+0x0C+1字節(jié)的開關(guān)門信號,通過探針我看到的是1字節(jié)的開關(guān)門信號+0x0A+3字節(jié)的溫度數(shù)據(jù)+0x0B+4字節(jié)的煙霧濃度數(shù)據(jù)+0x0C,開關(guān)門信號跑到幀首去了,出現(xiàn)了斷幀的現(xiàn)象。這個結(jié)果是由設(shè)置串口每次讀取11個字節(jié)引起的,當(dāng)串口緩存區(qū)里的字節(jié)數(shù)大于11時就會出現(xiàn)這種結(jié)局,因此,需要在開啟軟件之后對串口緩存區(qū)進行清除操作,并且要求讀串口的速率大于單片機發(fā)送數(shù)據(jù)的速率。