基于W77E58雙串口通信的監控系統
3 通信協議
本系統中MR16與W77E58及上位機三方都既是發送方又是接收方,都工作在半雙工模式。MR16和上位機的發送和接收均采用查詢方式,W77E58 的串口0和串口1發送均采用查詢方式,接收均采用中斷方式。要想保證通信準確可靠,通信雙方除規定好字符格式和波特率外,還要定義好通信協議。通過分析和實驗,最后確定了MR16和W77E58之間通信以77E58為主。W77E58和上位機之間通信以上位機為主的“主從通信法”通信協議。下面以 W77E58串口0和上位機為例,將這種通信協議介紹如下。
◆ W77E58串行口0通信協議(以W77E58為主機)
發送(查詢方式):
fe+fe+fe+代碼 ......請求回發相應代碼的數據包
fe+fe+ef+代碼+高字節+低字節+校驗和 ......發送要修改的數據包
接收(中斷方式):
fe+fe+aa+故障代碼 ......接收故障代碼
fe+fe+fe+代碼+高字節+低字節+校驗和
......接收要顯示的數據包
◆ 上位機通信協議(以上位機為主機)
發送(查詢方式):
fe+fe+站號 ......查詢相應站點
fe+fe+fe ......請求回發要顯示的數據包
接收(查詢方式):
fe+fe+站號 ......接收回發校驗站號
fe+fe+高字節+低字節+校驗和
......接收要顯示的數據包
協議里的斜體為包頭碼,黑體加下劃線為命令碼,站號即為多機通信時用于選擇單相逆變器的令牌,每臺單相逆變器的站號均不相同。數據包的包頭均是 0xfe,0xfe。以W77E58串口0為例,當W77E58使用命令0xfe向MR16請求回發相應代碼的數據包后,若接收到命令0xaa,則表明有故障,然后根據收到的故障代碼進行相應的故障顯示;若收到命令0xfe,則把收到的參數值送給液晶顯示器進行顯示。
從數據包格式可以看出,MR16和W77E58之間通信以W77E58為主,W77E58和上位機之間通信以上位機為主,MR16的發送和接收都是由W77E58串口0來控制的,而W77E58串口1的發送和接收又都是由上位機來控制的,這種主從方式是RS485標準中常采用的模式。這里通過發送包頭的辦法來實現數據同步,發送方每次都必須先發送包頭,然后再發送數據;接收方只有在正確接收包頭后才開始接收數據。當接收數據出錯或發送的數據丟失時就放棄本次接收,在下個主循環重新通信。這樣可以在一次通信出錯后自動恢復,同時避免“死機”現象的發生。
4 軟件實現
基于對該監控通信系統通用性的考慮,我們采用了模塊化設計方法,將通信程序作為主程序的一個模塊來處理。因為BCD碼是以數字“0”到“9”開頭的,而控制命令則以字母“A”到“F”開頭,在發送端將數據轉化成BCD碼發送。這樣可區分這兩類信號,在接收端分別將它們解碼處理。
MR16通信模塊包括查詢接收程序和查詢發送程序,程序流程類似于圖3;W77E58串口1通信模塊包括中斷接收程序和查詢發送程序,程序流程與串口0相類似,這里都不再給出。
參考文獻
1 WINBOND electronics corp. 8-Bit Microcontroller——W77E58. 2001.7
2 Fail-Safe, High-Speed (10Mbps), Slew-Rate-Limited RS-485/RS-422 Transceivers,MAXIM Document , 1997
3 Advance Information. MC68HC908MR16/MC68HC908MR32?Rev. 4.0. MOTOROLA Document, 2000
4 李朝青. PC機及單片機數據通信技術. 北京:北京航空航天大學出版社,2000
評論