0 引 言
可編程計算機控制器( PCC: Programmable Computer Controller) 以其可靠性高、開發周期短、配置靈活、功能強大而在工業控制領域得到越來越廣泛的應用。由于其能適應惡劣的工業現場,因此多被作為集散控制系統的下位機使用。但PCC的顯示功能較差, 因此將PC與PCC 結合起來構成了總線式的集散控制系統, 充分利用PC機強大的人機接口功能、豐富的系統軟件, 用圖形化界面實現了對整個系統的實時監控。其中各設備間的通信是系統實現的關鍵。RS-232 接口是計算機及PCC共同具有的, 利用貝加萊公司的幀驅動器并加入一些輔助電路及相應通信程序即可構造基于RS-232的總線式多機通信網絡。實驗證明, 該網絡具有硬件實現簡單、系統可靠、抗干擾能力強的特點。
1 多機實時通信的硬件實現
PC/ PCC 總線式集散控制系統的總體結構如圖1 所示。

圖1 計算機與多臺PCC 組成的集散控制系統
系統采用RS-232 串行通信方式實現了上位機對整個系統的實時監控, 同時為了提高硬件穩定性,優化系統工作性能, 本文采用硬件仲裁電路來實現數據總線的分配, 并合理解決了數據沖突問題, 簡化了軟件設計, 提高了系統可靠性和抗干擾能力。
1.1 RS-232 多機通信機制
普通的RS-232采用點對點串行數據傳輸方式, 無法滿足多設備之間的實時通信, 因此需要對其連接方式作一些改進。RS-232的點對點通信是將接口的數據發送端(TXD)連接到另一方的數據接收端(RXD) , RXD與另一方的TXD相連,雙方的地線端(GND)直接相連。但在計算機與多臺PCC相連時則發生了一些變化。如圖2所示,計算機的數據發送端直接連接到各PCC的數據接收端, 地端直接與各PCC的地端相連, 但各PCC的數據發送端不能同時連接到計算機的數據接收端, 因為數據發送端在無數據發送時為高電平,而發送的數據為高低電平組成的脈沖序列, 直接將兩個或多個數據發送端連接到一起接入計算機, 則會造成其數據接收端電平的不確定, 產生了數據沖突問題。為了解決上述問題設計了專門的硬件仲裁電路, 將各PCC的TXD 以及數據發送請求端(DTR)接入, 再將仲裁電路輸出端連接到計算機的數據接收端。

圖2 RS-232 多機通信連接示意圖
1.2 仲裁電路結構與工作原理
由于上位機(PC)的發送端為一對多廣播式發送, 所以上位機發送的數據幀所有的下位機( PCC)
均可以接收到, 至于數據幀由哪一臺下位機接收則由通信協議中的目的地址ID判定。但對于下位機,其發送端為多對一連接, 如直接將其相連, 則會發生數據沖突。圖3 所示的仲裁電路可以確保每次只有一臺下位機能夠發送數據到上位機的數據接收線上。應注意的是, RS-232 接口使用的高低電平與TTL 中的高、低電平不同, 需進行電平轉換。

圖3 下位機發送數據仲裁電路
圖3 以三路PCC 為例說明。各下位機初始化時均將其DTR 設置為低電平, 因為與門1 、2 、3
均有低電平輸入, 所以初始化后A、B、C 三點均為低電平, 并且與門4 、5 、6 也一直輸出低電平。假設下位機1 是第一臺要發送數據的下位機, 發送前先將自己的DTR 端口設置為高電平, 而此時B、C 兩點仍為低電平, 經反相器后變為高電平輸入與門1 , 所以與門1 的輸出A 點電平也為高, 此時數據發送服務程序讀取數據發送查詢端(DSR) 電平狀態(即A 點電平狀態) 為"1", 說明總線未被占用,處于空閑狀態。由于下位機1 的DTR 端口已被置高, 且查詢得知總線空閑, 則其DTR 端口不變仍然設置為高電平, 這樣下位機1 就占用了總線, 可以開始發送數據。數據由TXD 端經過與門4 后輸入上位機的RXD 端, 由于此時A 點電平為高, 保證了數據經過與門4 后沒有失真直接上傳至上位機, 同時A 點電平經反相器后變為低電平輸入與門2 、3 , 故B、C 兩點電平為低, 與門5 、6 始終輸出低電平, 避免了數據沖突。當下位機1 數據發送完畢后將其DTR 端口置低, A 點電平變低, 釋放了總線, 又回到初始化后的狀態, 可以供給下一個要發送數據的下位機使用。假設下位機1 發送數據的過程中, 下位機2 也要發送數據, 同樣先將自己的DTR 端口置高, 但此時A 點電平為高, 經反相器后輸入與門2 , 所以與門2 的輸出B 點仍為低電平, 程序讀取DSR 端口電平(即B 點電平) 為"0", 說明總線已被占用, 因此將DTR 端口重新置低, 等待下次查詢, 這樣就避免了兩臺下位機同時上傳數據。下一個查詢周期未到時, 程序持續查詢是否有更高優先級的任務標志位置位, 有則調用相應的任務服務程序, 沒有則重復查詢各標志位直至下一個查詢周期到來; 下一個查詢周期到來后,重復一次置高DTR 端口、讀取DSR 端口的過程以判斷總線狀態, 空閑則DTR 端口保持高電平占用總線并發送數據, 否則置低DTR 端口, 等待下次查詢。下位機2 重復上述過程直至查詢到總線空閑并占用總線以發送數據。
不同類型的數據發送其優先級也不同, 數據發送任務的優先級越高, 查詢周期就越短, 保證了系統通信的實時性。由于各發送方在發送時間上存在差異, 首先查詢到總線空閑的下位機得以使用數據總線, 在發送數據前已將其DTR 由低電平轉為高電平, 仲裁電路將總線狀態轉為忙碌, 避免其余下位機同時使用總線造成數據沖突。當數據傳輸結束則將DTR 轉為低電平, 仲裁電路將總線狀態轉為空閑。由于PC 為一對多發送, 下位機通過仲裁機制鎖死總線只是保證同一時刻數據上傳總線上只有一臺PCC 向PC 發送數據, 并不會影響PC 通過數據下行總線發送數據到各PCC , 從而實現了總線的合理分配, 解決了數據沖突問題。
2 多機實時通信的軟件實現
2.1 RS-232 的數據傳輸格式
RS-232 的數據是以字節的形式發送的, 一次發送一個字節, 其數據傳輸格式如圖4 所示。

圖4 RS-232 數據傳輸格式
包含一個起始位、8 個數據位以及一個校驗位和停止位, 數據位為所發送的對象, 而數據幀則是多個字節按一定格式打包而成的一個字節序列, 以字節流形式發送。
2.2 幀驅動器
幀驅動器是貝加萊公司為實現與第三方設備之間進行通信而設計的軟件工具箱, 存放在PCC 應用程序ROM 中, 完全控制了通信的硬件部分而不改變幀的形式。通常數據通信, 對數據進行讀寫操作, 用戶必須對端口的細節了解很清楚, 才能通過編程實現對接口各管腳進行操作。而幀驅動器將這些操作集中起來, 用戶只需要了解第三方產品的通信協議細節(包括信息幀格式的組成等) , 并用幀驅動器寫出與第三方產品通信協議一樣的通信規約,就可方便地實現PCC 與第三方產品之間的通信。同時, 幀驅動器支持RS-232 、RS-422 、RS-485 、CAN 等接口, 因此軟件中只要稍微作些改動, 便可支持不同的接口進行數據通信, 具有可擴展性和廣泛的應用前景。
2.3 通信協議制定
PC 和PCC 以及PCC 之間能進行通信首先需要制定一個合理的通信協議, 才能進行通信。為此本著充分利用資源、結構簡單、可擴充性強的原則定義了數據幀的結構。對于數據幀的格式, 考慮到組網以及適應不同通信接口的需要做了如表1 定義。
表1 數據幀的格式定義
目的
ID
|
源ID |
命令字
|
幀數 |
DAT
A1
|
DAT
A2
|
... |
DAT
An
|
校驗
位
|
停止
位
|
目的ID 和源ID 均分配一個字節, 用于標志數據幀的接收設備和發送設備, 以便接收設備判斷接收和發生接收錯誤時呼叫發送設備重發。命令字給定數據幀的類型(數據或控制字) , 指明隨后的DA TA 是數據內容還是控制字。這樣系統中的各設備可根據事先制定的通信協議將欲發送的控制指令或數據打包寫入DA TA 中, 或者將接受的數據幀按協議解包為控制命令并執行或對接收到的數據進行處理。幀數指明了當前發送的是第幾個數據幀, 以便于接收設備判斷是否有數據幀丟失以呼叫發送設備重發。最后判斷接收的校驗位與自行計算校驗位結果是否一致, 一致則進行相應操作, 否則丟棄該幀并呼叫發送設備重發。
為了確保數據接收的可靠性, 使用應答方式進行通信, 接收機接收到數據后返回一個應答幀加以確認, 發送機收到此幀再發送下一幀數據, 如無應答則周期循環發送同一幀, 如超時未應答則向上位機發送數據幀報錯, 上位機接收后顯示發送與接收設備ID及錯誤類別并報警以提示監控人員排除錯誤。
2.4 系統內各設備間的通信
①PC 與PCC 之間的通信。PC 向下位機發送數據幀采用廣播式, 但只有符合目標地址ID 的下
位機能夠接受, 而下位機采用仲裁機制向上位機發送數據。
②PCC 與PCC 之間的通信。PCC 與PCC 之間是通過PC 以數據轉發的形式進行數據幀傳送
的。當監控計算機收到不是以自己為目的地址的數據幀時, 直接將其送入數據傳送總線由目的PCC判斷接受。
2.5 基于C語言的PCC數據通信的實現及程序流程圖
①下位機編程。使用貝加萊公司提供的標準PC。
PCC 發送程序流程如圖5 (a) 所示。PC 發送程序流程由于為一對多廣播式發送, 省略查詢總線過程, 直接發送即可。PC 接收程序流程如圖5 (b) 所示。PCC 接收程序流程基本與PC 接收程序流程一致, 但在判斷接收數據幀目的ID 與本機ID 不符后, PCC 直接退出事件觸發服務程序返回, 而PC則將得到的數據幀發送給各下位機以使目的PCC 接收該數據幀。

圖5 程序流程圖
②上位機編程。使用Visual Basic , 流程中需要發送數據或命令只要按定義好的通信協議進行數據裝幀并調用數據發送程序將其通過串行口發送即可。為了實現數據的實時接收, 在VB 工程中導入了PComm Pro (此軟件借助Windows API 函數的調用來控制使用串行通信端口) 的通信函數庫和控件以實現接受數據的實時觸發。事件的觸發除了定時器或循環的輪詢(Polling) 方式外, 還可以使用回調函數(CallBack Function) 實現。PComm 針對事件的處理就是采用回調函數的方式處理, 欲建立事件, 需給定一個函數的地址, 當事件發生時, 便到該回調函數所在地址去執行該程序代碼。因此定義了回調函數作為接受數據的事件觸發服務程序, 當接受數據事件發生時便執行該事件觸發程序, 保存接受到的數據, 并按協議進行數據幀的解包, 將數據取出并作相應處理顯示在監視器上, 以便實時監控, 或執行相應的命令。
多機實時通信測試程序實驗結果如圖6 所示。

圖6 多機實時通信測試程序實驗結果
3 結束語
本文利用硬件仲裁電路巧妙地實現了數據總線分配, 解決了數據沖突問題, 簡化了系統設計, 優化了系統性能。通過PCC 與PC 的有機結合, 構成了基于RS-232 的總線式集散控制系統, 充分利用了PCC 和PC 的優點, 用可視化的圖形界面實現對整個系統的實時監控。實驗證明, 系統運行良好, 監控準確無誤, 還可應用于其它分布式測控系統和類似系統, 具有一定的工程應用價值。
參考文獻
[1] 齊蓉.可編程計算機控制器原理及應用[M] .西安: 西北工業大學出版社, 2002。
[2] 齊蓉. 可編程計算機控制器高級技術[M] . 西安:西北工業大學出版社, 2002。
[3] 范逸之. Visual Basic 與分布式監控系統[ M] . 北京: 清華大學出版社, 2002。
[4] 楊寧. 趙玉剛. 集散控制系統及現場總線[M] . 北京: 北京航空航天大學出版社, 2003。
[5] 范逸之,陳立元. Visual Basic 與RS-232 串行通信控制[M] . 北京: 清華大學出版社, 2002。
作者簡介:
高 飛(1980) , 男, 碩士研究生, 從事計算機測量與控制方面的研究;
林 輝(1957) , 男, 教授, 主要從事電力科學方面的教學與科研工作。