這樣學(xué)上位機,是不是有意思多了
新閣教育-喜科堂付工原創(chuàng)文章
寫在前面
有小伙伴跟我說:

為了兌現(xiàn)承諾,這次給大家安排一個小項目案例,不管你是小白,還是有一定基礎(chǔ),都可以參與進來,一起把這個項目做出來。
項目需求
1、建立一個室內(nèi)空氣質(zhì)量檢測系統(tǒng),要求電腦軟件+單片機硬件,編程語言及硬件可以自行選擇。
2、系統(tǒng)分為三部分:數(shù)據(jù)采集部分、數(shù)據(jù)傳輸部分、系統(tǒng)軟件交互部分。
3、需求檢測的數(shù)據(jù):IAQ(Indoor Air Quality)、溫度、濕度、PM2.5、CO2、CO。
4、數(shù)據(jù)傳輸可以選擇串口、以太網(wǎng)、WIFI、藍(lán)牙中的一種。
5、當(dāng)檢測到空氣質(zhì)量過差時,系統(tǒng)需要給出相應(yīng)的解決方案(如:提示開窗通風(fēng)等)。
協(xié)議分析
這個項目其實涉及到單片機開發(fā),但這塊并不是上位機的范疇。在確定好上位機與單片機之間的通信協(xié)議之后,雙方都按照這個協(xié)議來開發(fā),最終進行對接就可以了。這個協(xié)議一般是由單片機開發(fā)人員制定,本例協(xié)議制定如下:
單片機發(fā)送的數(shù)據(jù)格式:#TXXX,YYY,S@
1、#后面的大寫英文T表示對應(yīng)的參數(shù)類型,具體對應(yīng)關(guān)系如下:

2、XXX:代表檢測數(shù)值,占三個字符,例如010就是10。
3、YYY:代表該數(shù)組的限值,占三個字符,例如010就是10。
4、符號@前的S表示報警狀態(tài),1表示限值報警,0表示正常
上位機進行限值設(shè)置發(fā)送數(shù)據(jù)格式:&SXXX$
1、&號后面的大寫英文T表示對應(yīng)的參數(shù)類型,對應(yīng)關(guān)系同上。
2、XXX代表設(shè)置的限值數(shù)據(jù),占三個字符
3、發(fā)送報文以$結(jié)束。
界面設(shè)計
根據(jù)項目需求,并結(jié)合協(xié)議設(shè)計界面如下:

本案例的一個關(guān)鍵知識點在于自定義組合控件的使用。
如果讓你來設(shè)計這個界面,你是否會考慮組合控件應(yīng)用,如果全部用的是系統(tǒng)控件,那么代碼會寫得很復(fù)雜,而且容易出錯,更重要的是擴展性會很差——如果需求發(fā)生變化,會需要改很多東西。
這里把參數(shù)的一系列狀態(tài)及操作做成一個自定義控件,然后將相關(guān)的功能抽象成屬性及事件。

實時通信
這里采用串口通信,針對SerialPort封裝一個串口類,這里會涉及到串口通信、鎖處理、委托技術(shù),核心為串口接收事件,代碼如下:

參數(shù)設(shè)置功能:

主界面功能
有了以上的基礎(chǔ)之后,主界面的功能開發(fā)就很容易了。
主界面的功能主要是兩部分內(nèi)容,第一部分內(nèi)容是數(shù)據(jù)解析,將解析結(jié)果賦值給控件的屬性進行顯示,第二部分內(nèi)容是通用的參數(shù)設(shè)置,將6個Monitor控件的參數(shù)設(shè)置事件都綁定同一個事件,然后在該事件里調(diào)用SetValue方法即可。
一般我們軟件開發(fā)完成后,都應(yīng)該先自我測試一下,便于及時發(fā)現(xiàn)問題,減少調(diào)試時間。
對于串口通信,可以我們通過虛擬串口來進行測試,仿真數(shù)據(jù)發(fā)送與數(shù)據(jù)接收,測試結(jié)果如下:


特別福利
為了便于大家更好地學(xué)習(xí)這個項目,我將通過免費直播課的方式演示整個項目的部署及開發(fā),通過完整的項目分析及編寫,即使你是零基礎(chǔ),也能帶你實現(xiàn)項目功能。
想要學(xué)習(xí)的小伙伴,趕緊掃描下方二維碼,進入班級群。

PS:名額有限,微信群僅限200人,先到先得,僅限當(dāng)天。