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

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

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

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

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

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

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