最近有越來越多做電氣的小伙伴開始學習C#來做上位機開發,很多人在學習一段時間后,都有這種感覺,似乎學到了很多知識,但是不知道怎么應用,因此我找了一個真實的上位機小項目,讓大家來練練手。這篇文章主要對這個項目案例及開發過程做個整體介紹。
PS:文末提供完整錄播視頻及源碼
1. 項目案例介紹
很多人對單片機有一種特殊的情懷,總是感覺單片機很神秘或很復雜。單片機簡稱MCU,即Micro Control Unit,是將CPU、存儲器(RAM和ROM)、多種IO接口等集成在一塊芯片上,形成一個芯片級計算機,可以這么說,在我們的生活和工作中,單片機無處不在。
單片機MCU的使用分為兩種,一種是單片機開發,就是嵌入式開發,一般采用C語言編程,另一種是單片機應用,比如和單片機進行通信控制,而作為上位機開發人員,我們更多偏向於后者,上位機按照既定的協議對單片機實現控制。控制系統的使用者是操作人員,他們不可能去直接操作單片機,因此上位機的職責是將單片機和操作人員聯系起來,通過UI界面給操作人員提供展示和控制,再將指令傳遞給單片機來執行動作,最終形成一套完整的控制系統。
本案例是一個基於單片機的串口通信案例,主要是通過上位機來實現對電機的速度控制,並顯示電機實時速度。調速模式會有多種,包括電機正轉、電機反轉、電機正反轉、雙向混沌、單向混沌五種模式。
2. MCU協議分析
針對五種調速模式的描述如下所示:
調速模式 | 調速說明 |
---|---|
電機正轉 | 發送一個大於0的速度給單片機 |
電機反轉 | 發送一個小於0的速度給單片機 |
電機正反轉 | 發送一個速度正負值及換速時間給單片機 |
單向混沌 | 隨機或手動生成N個的隨機正數,定時發送給單片機 |
雙向混沌 | 隨機或手動生成N個隨機自然數,定時發送給單片機 |
從上面的描述,我們可以看出,調速的本質都是發送報文給單片機,不同的調速模式影響的是發送的數值和發送的頻率,因此上位機和單片機之間必須要約定協議,協議如下所示:
功能命令 | 協議格式 | 備注 |
---|---|---|
電機正轉 | S+速度值+; | 速度值必須為正數,如S+40; |
電機正轉 | S+速度值+; | 速度值必須為負數,如S-40; |
電機正反轉 | T+時間+S+速度值+; | 時間為換速時間,如T5+-40; |
單向混沌 | S+速度值+; | 速度值為正數,生成隨機數,定時發送 |
雙向混沌 | S+速度值+; | 速度值為自然數,生成隨機數,定時發送 |
速度反饋 | V+速度值+; | 返回的速度值,如V+40; |
速度清零 | S+速度值+; | 速度值設為0,即S+0;或者S-0; |
協議規定:單片機與上位機之間的通信格式為:波特率9600,數據位8,停止位1,校驗位無,設定速度范圍為10-300rpm,反饋速度范圍為0-1000rpm,換算時間范圍為1-10秒,通信編碼格式為ASCII。
上位機開發功能要求:
- 與單片機之間的連接提示及斷開提示
- 可以自由選擇通訊端口
- 調試模式可以隨時調整
- 混沌模式隨機數支持自動生成和人為輸入/復制粘貼
- 支持換速時間快速設置
- 支持實時速度顯示並可控
- 支持實時數據寫入並可控
- 支持發送命令可存儲、可追溯
- 軟件打開時保持上次關閉時的狀態
3. 上位機界面設計
根據開發功能要求,整體設計界面如下圖所示:
當選擇雙向混沌或者單向混沌時,會彈出混沌值設置界面,支持自動生成及手動輸入,如下圖所示:
4. 粉絲福利
這個項目整體來說難度不是很大,但是很具有代表性,非常適合上位機初學者來練手。很多初學者學習最大的問題就是手頭沒有實際項目,大家可以把這個當做一個實際項目來練手。
為了感謝大家一直以來的支持,我們已經將這部分的視頻整理好,免費贈送給大家學習,需要視頻及源碼的小伙伴,趕緊聯系助教老師領取吧!
名額有限,先到先得,活動僅限當天。如添加不上,請+:xiketang789
錄播視頻大綱如下: