| 自動配料系統多機實時通信的實現 | 2020-03-09 |
| 摘要:自動配料系統的多機實時通信提出了基于RS-232的多機通信總線。該總線設計了硬件邏輯電路,系統中的各個終端通過此邏輯電路查詢得知總線狀態,并在占用總線時通過該電路鎖定總線以避免多機通信在RS-232串行通信中遇到的數據沖突問題,并以此為基礎提出了合理的數據總線分配方法,不僅保證了總線的合理分配使用,并且滿足了系統各優先級不同的通信任務的實時性。PC/CAS總線式自動配料系統,不僅硬件實現簡單,而且軟件實現可靠,較好地實現了系統中的多機實時通信,同時解決了數據沖突問題。長時間通信測試結果表明該系統的多機通信運行可靠,實時性好,較好地滿足了系統的要求。 0引 言 可編程計算機控制器(CAS:ProgrammableComputerController)以其可靠性高、開發周期短、配置靈活、功能*而在工業控制領域得到越來越廣泛的應用。由于其能適應惡劣的工業現場,因此多被作為自動配料系統的下位機使用。但CAS的顯示功能較差,因此將PC與CAS結合起來構成了總線式的自動配料系統,充分利用PC機*的人機接口功能、豐富的系統軟件,用圖形化界面實現了對整個稱重配料系統的實時監控。其中各設備間的通信是系統實現的關鍵。RS-232接口是計算機及CAS共同具有的,利用的幀驅動器并加入一些輔助電路及相應通信程序即可構造基于RS-232的總線式多機通信網絡。實驗證明,該網絡具有硬件實現簡單、系統可靠、抗干擾能力強的特點。 1多機實時通信的硬件實現 計算機與多臺CAS組成的自動配料系統 稱重配料系統采用RS-232串行通信方式實現了上位機對整個系統的實時監控,同時為了提高硬件穩定性,優化系統工作性能,本文采用硬件仲裁電路來實現數據總線的分配,并合理解決了數據沖突問題,簡化了軟件設計,提高了自動配料系統可靠性和抗干擾能力。 1.1 RS-232多機通信機制 普通的RS-232采用點對點串行數據傳輸方式,無法滿足多設備之間的實時通信,因此需要對其連接方式作一些改進。RS-232的點對點通信是將接口的數據發送端(TXD)連接到另一方的數據接收端(RXD),RXD與另一方的TXD相連,雙方的地線端(GND)直接相連。但在計算機與多臺CAS相連時則發生了一些變化。如圖2所示,計算機的數據發送端直接連接到各CAS的數據接收端,地端直接與各CAS的地端相連,但各CAS的數據發送端不能同時連接到計算機的數據接收端,因為數據發送端在無數據發送時為高電平,而發送的數據為高低電平組成的脈沖序列,直接將兩個或多個數據發送端連接到一起接入計算機,則會造成其數據接收端電平的不確定,產生了數據沖突問題。為了解決上述問題設計了專門的硬件仲裁電路,將各CAS的TXD以及數據發送請求端(DTR)接入,再將仲裁電路輸出端連接到計算機的數據接收端。 1.2仲裁電路結構與工作原理 由于上位機(PC)的發送端為一對多廣播式發送,所以上位機發送的數據幀所有的下位機(CAS)均可以接收到,至于數據幀由哪一臺下位機接收則由通信協議中的目的地址ID判定。但對于下位機,其發送端為多對一連接,如直接將其相連,則會發生數據沖突。圖3所示的仲裁電路可以確保每次只有一臺下位機能夠發送數據到上位機的數據接收線上。應注意的是,RS-232接口使用的高低電平與TTL中的高、低電平不同,需進行電平轉換。 各下位機初始化時均將其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為一對多發送,下位機通過仲裁機制鎖死總線只是保證同一時刻數據上傳總線上只有一臺CAS向PC發送數據,并不會影響PC通過數據下行總線發送數據到各CAS,從而實現了總線的合理分配,解決了數據沖突問題。 2多機實時通信的軟件實現 2.1RS-232的數據傳輸格式 RS-232的數據是以字節的形式發送的,一次發送一個字節 包含一個起始位、8個數據位以及一個校驗位和停止位,數據位為所發送的對象,而數據幀則是多個字節按一定格式打包而成的一個字節序列,以字節流形式發送。 2.2幀驅動器 稱重配料系統幀驅動器是為實現與第三方設備之間進行通信而設計的軟件工具箱,存放在CAS應用程序ROM中,控制了通信的硬件部分而不改變幀的形式。通常數據通信,對數據進行讀寫操作,用戶必須對端口的細節了解很清楚,才能通過編程實現對接口各管腳進行操作。而幀驅動器將這些操作集中起來,用戶只需要了解第三方產品的通信協議細節(包括信息幀格式的組成等),并用幀驅動器寫出與第三方產品通信協議一樣的通信規約,就可方便地實現CAS與第三方產品之間的通信。同時,幀驅動器支持RS-232、RS-422、RS-485、CAN等接口,因此軟件中只要稍微作些改動,便可支持不同的接口進行數據通信,具有可擴展性和廣泛的應用前景。 2.3通信協議制定 PC和CAS以及CAS之間能進行通信首先需要制定一個合理的通信協議,才能進行通信。為此本著充分利用資源、結構簡單、可擴充性強的原則定義了數據幀的結構。 目的ID和源ID均分配一個字節,用于標志數據幀的接收設備和發送設備,以便接收設備判斷接收和發生接收錯誤時呼叫發送設備重發。命令字給定數據幀的類型(數據或控制字),指明隨后的DATA是數據內容還是控制字。這樣系統中的各設備可根據事先制定的通信協議將欲發送的控制指令或數據打包寫入DATA中,或者將接受的數據幀按協議解包為控制命令并執行或對接收到的數據進行處理。幀數指明了當前發送的是第幾個數據幀,以便于接收設備判斷是否有數據幀丟失以呼叫發送設備重發。最后判斷接收的校驗位與自行計算校驗位結果是否一致,一致則進行相應操作,否則丟棄該幀并呼叫發送設備重發。 配料系統為了確保數據接收的可靠性,使用應答方式進行通信,接收機接收到數據后返回一個應答幀加以確認,發送機收到此幀再發送下一幀數據,如無應答則周期循環發送同一幀,如超時未應答則向上位機發送數據幀報錯,上位機接收后顯示發送與接收設備ID及錯誤類別并報警以提示監控人員排除錯誤。 2.4系統內各設備間的通信 ①PC與CAS之間的通信。PC向下位機發送數據幀采用廣播式,但只有符合目標地址ID的下位機能夠接受,而下位機采用仲裁機制向上位機發送數據。 ②CAS與CAS之間的通信。CAS與CAS之間是通過PC以數據轉發的形式進行數據幀傳送的。當監控計算機收到不是以自己為目的地址的數據幀時,直接將其送入數據傳送總線由目的CAS判斷接受。 2.5基于C語言的CAS數據通信的實現 ①下位機編程。使用提供的標準PC。 CAS發送程序流程如圖5(a)所示。PC發送程序流程由于為一對多廣播式發送,省略查詢總線過程,直接發送即可。PC接收程序流程如圖5(b)所示。CAS接收程序流程基本與PC接收程序流程一致,但在判斷接收數據幀目的ID與本機ID不符后,CAS直接退出事件觸發服務程序返回,而PC則將得到的數據幀發送給各下位機以使目的CAS接收該數據幀。 ②上位機編程。稱重配料系統使用VisualBasic,流程中需要發送數據或命令只要按定義好的通信協議進行數據裝幀并調用數據發送程序將其通過串行口發送即可。為了實現數據的實時接收,在VB工程中導入了PCommPro(此軟件借助WindowsAPI函數的調用來控制使用串行通信端口)的通信函數庫和控件以實現接受數據的實時觸發。事件的觸發除了定時器或循環的輪詢(Polling)方式外,還可以使用回調函數(CallBackFunction)實現。PComm針對事件的處理就是采用回調函數的方式處理,欲建立事件,需給定一個函數的地址,當事件發生時,便到該回調函數所在地址去執行該程序代碼。因此定義了回調函數作為接受數據的事件觸發服務程序,當接受數據事件發生時便執行該事件觸發程序,保存接受到的數據,并按協議進行數據幀的解包,將數據取出并作相應處理顯示在監視器上,以便實時監控,或執行相應的命令。 3 結束語 本文利用硬件仲裁電路巧妙地實現了數據總線分配,解決了數據沖突問題,簡化了配料系統設計,優化了系統性能。自動配料系統通過與PC的有機結合,構成RS-232的總線式配料,用可視化的圖形界面實現對整個配料過程的實時監控。實驗證明,系統運行良好,監控準確無誤,還可應用于其它分布式測控系統和類似系統,具有一定的工程應用價值。 | |