李東岳,邢傳義
(哈爾濱威克科技股份有限公司,黑龍江哈爾濱150090)
把無線通信和串行通信結合起來,在鐵路與其他行業中有著極其廣泛的應用,可以進行遠程數據采集、處理與控制。文章介紹的是服務器與單片機系統,通過數傳電臺,實現串行主從式通信的實例。上位機使用RS-232串口,連接數傳電臺,數傳電臺用的是MOTOROLA公司的GM950i,下位機硬件主要有89C51單片機及串口電路等,串口電路采用MAX232芯片。
在無線通信過程中,會產生一系列的不同于有線通信的問題,主要是無線通信中的干擾,無線電臺在發送數據的時候,自身會產生一些亂碼,在對數據處理的時候,還要有對從機的識別與區分。這些都要通過制定必要的通訊協議來解決。所以要編寫相應的發送程序和接受程序,增強系統對誤碼的判斷能力,提高程序對數據傳輸的可靠性。
串行端口的本質功能是作為CPU和串行設備間的編碼轉換器。當數據從CPU經過串行端口發送出去時,字節數據轉換為串行的位。在接收數據時,串行的位被轉換為字節數據。數傳電臺是本通信系統中重要的通信媒介,起到微波發送與接收的作用,它有一個RS232接口,直接與上位機的串口連接,它們之間通過四線制(RX、TX、SG、RTS)連接。在收發數據的時候,程序要合理地控制RTS信號線。
本通信系統是半雙工的,一次只能同一個終端設備進行數據交換。所以就有資源沖突問題,要通過時序的協調來解決。網絡的控制權集中在中心主機上,主機以順序查詢的方式與從機進行通訊,從機是被動地接收或發送數據,其功能可通過通信協議來實現。為了解決單片機緩沖區小的問題,本程序采用了多次發送,多次接收,一次處理的方法,使單片機可以通過協議收發多組數據。對于數傳電臺傳輸過程中的干擾問題,也有相對的解決方案。經試驗發現,干擾產生的亂碼集中在RTS發生變化的時候,也就是說,大部分亂碼出現在數據的首尾,于是本程序利用亂碼出現頻率較低的OAAH和55H作為前導碼。接收程序在判斷到這兩個數據之后才對協議中的控制字、地址等進行判斷。控制字定義了按協議寫的數組的長度,所以后續的亂碼就不用去處理了,從而實現了先判斷后處理。實驗證明,此方案可行。通信連接示意圖如圖1所示。


表1 協議構成
幀頭(24位)就是前導碼。制定無線通信協議的第一任務就是要能夠正確識別數據。傳送過程中的干擾噪聲和有效數據干擾噪聲是以隨機字節形式出現的,沒有明顯的表示規律。通過測試發現,0AAH和55H比較合適。
從機地址的范圍為1到254,所以一次最多可以連254個從機。0作為廣播式通信時主機發送的地址信號。255保留。
控制字有8位。D7表示數據來源,1為主機,0為從機。D6表示傳送方式,1主從式,0廣播式。D5D4D3是控制字,000表示準備好了嗎/準備好了;001表示請求子機發送數據/子機發送數據;010表示子機發送的是最后一組數據;100表示是主機發送數據;101代表主機發送結束。D2D1D0標志著數據位的長度,000~111依次表示傳送0~8個字節數據。數據位可根據需要取相應字節數,按十六進制傳送;校驗位采用CRC校驗碼。
上位機通信程序用VB編寫,通信流程圖如圖2。下位機用匯編語言編寫,通信流程圖如圖3。除了遵守通信協議之外,還要遵守相應的硬件規約。發送的每個字節數據都是10位,包括1個起始位、1個停止位、8個數據位。通信波特率為4 800bit/s。

4.2.1 發送程序
發送數據的關鍵問題是一次傳送的字節數,由于單片機緩沖區一次只能放一個字節的數據。而按照協議發送的字節數組很長,所以本程序用了如下方法實現收發:
(1)將要發送的數據按照協議放入一個字節數組中,例如:要發送數據7給從機1,數據幀FF AA 55 01 E1 07,校驗位在本演示程序未寫入,放在SendData字節數組中SendData(0)=0FFH,SendData(1)=0AAH,以此類推。
(2)將字節數組中的數據發送出去,每個中間間隔40ms,從SendData(0)依次發到SendData(5),中間經過一個過度數組out(),是一個能放一字節數據的定長數組。
發送程序如下:


4.2.2 接收程序
由于發送時間間隔是40ms,本程序采用事件驅動接收,就是緩沖區每有一個字節的數據就觸發Oncomm事件,將緩沖區數據取入數組中,可以在六個數據都取完了之后再處理。如何知道數據發送結束呢?在這里,利用發送時間間隔為40ms這個特點,可以把每組數據時間間隔設長一點。第一次觸發,用時鐘記時,第二次觸發,時鐘清零,再開始記時,然后對接收到的數組處理。接收數據的接收過程利用的是Oncomm事件和Timer3定時器。

下位機通信程序的收發功能與上位機類似,發送的時序和時間間隔都按照本通信協議,只是使用匯編語言編寫,本程序只對程序發送數據做簡單描述。

實驗證明,該方法及其通信協議能很好地實現數據的接收和發送,數據收發準確率較高;不足之處在于數據傳輸速度相對比較慢,因此適合于對數據傳輸速度要求不高,數據量不多的場合。在鐵路通訊中,由于部分區段無法進行有線通訊,無線通信是很好的解決方法。目前越來越多的智能儀器采用通用的RS232接口加數傳電臺方式實現通信和控制。文章的方法可以很好地解決這一問題。
[1]李華.單片機原理及應用[M].蘭州:蘭州大學出版社,2001.
[2]范逸之.利用實現串并行通信技術[M].北京:清華大學出版社,2001.
[3]李鴻吉.Visual Basic 6.0中文版編程方法詳解[M].北京:科學出版社,2001.(編輯:鐘 媛)