基于W77E58雙串口通信的監(jiān)控系統(tǒng)
3 通信協(xié)議
本系統(tǒng)中MR16與W77E58及上位機三方都既是發(fā)送方又是接收方,都工作在半雙工模式。MR16和上位機的發(fā)送和接收均采用查詢方式,W77E58 的串口0和串口1發(fā)送均采用查詢方式,接收均采用中斷方式。要想保證通信準確可靠,通信雙方除規(guī)定好字符格式和波特率外,還要定義好通信協(xié)議。通過分析和實驗,最后確定了MR16和W77E58之間通信以77E58為主。W77E58和上位機之間通信以上位機為主的“主從通信法”通信協(xié)議。下面以 W77E58串口0和上位機為例,將這種通信協(xié)議介紹如下。
◆ W77E58串行口0通信協(xié)議(以W77E58為主機)
發(fā)送(查詢方式):
fe+fe+fe+代碼 ......請求回發(fā)相應(yīng)代碼的數(shù)據(jù)包
fe+fe+ef+代碼+高字節(jié)+低字節(jié)+校驗和 ......發(fā)送要修改的數(shù)據(jù)包
接收(中斷方式):
fe+fe+aa+故障代碼 ......接收故障代碼
fe+fe+fe+代碼+高字節(jié)+低字節(jié)+校驗和
......接收要顯示的數(shù)據(jù)包
◆ 上位機通信協(xié)議(以上位機為主機)
發(fā)送(查詢方式):
fe+fe+站號 ......查詢相應(yīng)站點
fe+fe+fe ......請求回發(fā)要顯示的數(shù)據(jù)包
接收(查詢方式):
fe+fe+站號 ......接收回發(fā)校驗站號
fe+fe+高字節(jié)+低字節(jié)+校驗和
......接收要顯示的數(shù)據(jù)包
協(xié)議里的斜體為包頭碼,黑體加下劃線為命令碼,站號即為多機通信時用于選擇單相逆變器的令牌,每臺單相逆變器的站號均不相同。數(shù)據(jù)包的包頭均是 0xfe,0xfe。以W77E58串口0為例,當W77E58使用命令0xfe向MR16請求回發(fā)相應(yīng)代碼的數(shù)據(jù)包后,若接收到命令0xaa,則表明有故障,然后根據(jù)收到的故障代碼進行相應(yīng)的故障顯示;若收到命令0xfe,則把收到的參數(shù)值送給液晶顯示器進行顯示。
從數(shù)據(jù)包格式可以看出,MR16和W77E58之間通信以W77E58為主,W77E58和上位機之間通信以上位機為主,MR16的發(fā)送和接收都是由W77E58串口0來控制的,而W77E58串口1的發(fā)送和接收又都是由上位機來控制的,這種主從方式是RS485標準中常采用的模式。這里通過發(fā)送包頭的辦法來實現(xiàn)數(shù)據(jù)同步,發(fā)送方每次都必須先發(fā)送包頭,然后再發(fā)送數(shù)據(jù);接收方只有在正確接收包頭后才開始接收數(shù)據(jù)。當接收數(shù)據(jù)出錯或發(fā)送的數(shù)據(jù)丟失時就放棄本次接收,在下個主循環(huán)重新通信。這樣可以在一次通信出錯后自動恢復(fù),同時避免“死機”現(xiàn)象的發(fā)生。
4 軟件實現(xiàn)
基于對該監(jiān)控通信系統(tǒng)通用性的考慮,我們采用了模塊化設(shè)計方法,將通信程序作為主程序的一個模塊來處理。因為BCD碼是以數(shù)字“0”到“9”開頭的,而控制命令則以字母“A”到“F”開頭,在發(fā)送端將數(shù)據(jù)轉(zhuǎn)化成BCD碼發(fā)送。這樣可區(qū)分這兩類信號,在接收端分別將它們解碼處理。
MR16通信模塊包括查詢接收程序和查詢發(fā)送程序,程序流程類似于圖3;W77E58串口1通信模塊包括中斷接收程序和查詢發(fā)送程序,程序流程與串口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機及單片機數(shù)據(jù)通信技術(shù). 北京:北京航空航天大學出版社,2000
評論