選單

這樣學上位機,是不是有意思多了

寫在前面

有小夥伴跟我說:

這樣學上位機,是不是有意思多了

為了兌現承諾,這次給大家安排一個小專案案例,不管你是小白,還是有一定基礎,都可以參與進來,一起把這個專案做出來。

專案需求

1、建立一個室內空氣質量檢測系統,要求電腦軟體+微控制器硬體,程式語言及硬體可以自行選擇。

2、系統分為三部分:資料採集部分、資料傳輸部分、系統軟體互動部分。

3、需求檢測的資料:IAQ(Indoor Air Quality)、溫度、溼度、PM2。5、CO2、CO。

4、資料傳輸可以選擇串列埠、乙太網、WIFI、藍芽中的一種。

5、當檢測到空氣質量過差時,系統需要給出相應的解決方案(如:提示開窗通風等)。

協議分析

這個專案其實涉及到微控制器開發,但這塊並不是上位機的範疇。在確定好上位機與微控制器之間的通訊協議之後,雙方都按照這個協議來開發,最終進行對接就可以了。這個協議一般是由微控制器開發人員制定,本例協議制定如下:

單片機發送的資料格式:#TXXX,YYY,S@

1、#後面的大寫英文T表示對應的引數型別,具體對應關係如下:

2、XXX:代表檢測數值,佔三個字元,例如010就是10。

3、YYY:代表該陣列的限值,佔三個字元,例如010就是10。

4、符號@前的S表示報警狀態,1表示限值報警,0表示正常

上位機進行限值設定傳送資料格式:&SXXX$

1、&號後面的大寫英文T表示對應的引數型別,對應關係同上。

2、XXX代表設定的限值資料,佔三個字元

3、傳送報文以$結束。

介面設計

根據專案需求,並結合協議設計介面如下:

這樣學上位機,是不是有意思多了

本案例的一個關鍵知識點在於

自定義組合控制元件

的使用。

如果讓你來設計這個介面,你是否會考慮組合控制元件應用,如果全部用的是系統控制元件,那麼程式碼會寫得很複雜,而且容易出錯,更重要的是擴充套件性會很差——如果需求發生變化,會需要改很多東西。

這裡把引數的一系列狀態及操作做成一個自定義控制元件,然後將相關的功能抽象成屬性及事件。

實時通訊

這裡採用串列埠通訊,針對SerialPort封裝一個串列埠類,這裡會涉及到串列埠通訊、鎖處理、委託技術,核心為串列埠接收事件,程式碼如下:

引數設定功能:

主介面功能

有了以上的基礎之後,主介面的功能開發就很容易了。

主介面的功能主要是兩部分內容,第一部分內容是資料解析,將解析結果賦值給控制元件的屬性進行顯示,第二部分內容是通用的引數設定,將6個Monitor控制元件的引數設定事件都繫結同一個事件,然後在該事件裡呼叫SetValue方法即可。

一般我們軟體開發完成後,都應該先自我測試一下,便於及時發現問題,減少除錯時間。

對於串列埠通訊,可以我們透過虛擬串列埠來進行測試,模擬資料傳送與資料接收,測試結果如下:

這樣學上位機,是不是有意思多了

這樣學上位機,是不是有意思多了

特別福利

為了便於大家更好地學習這個專案,我將透過

免費直播課

的方式演示整個專案的部署及開發,透過完整的專案分析及編寫,即使你是零基礎,也能帶你實現專案功能。