前端機由帶RS -422接口的8031單片機系統組成,分別放在控制現場附近。通信控制器是插在IBM - PC/XT擴展槽上的帶8031單片機的接口板,為主機和前端機間的通信提供一個智能化通道。用戶只須通過主機向控制器發(fā)一條簡單的命令而無須知道通信的細節(jié),就可以使前端機執(zhí)行相應的動作??刂破髅看伟l(fā)送或接收的數據是可變的,但不超過255字節(jié)。每次通信都要進行差錯檢測和差錯處理,以保證數據傳輸的準確性。主機IBM - PC/XT是命令的發(fā)起者和系統運行的控制者。
1.前端機
圖1- 27是前端機的結構框圖。它是一個帶RS - 422串行接口的51系列單片機系統。其輸入/輸出和A/D轉換的通道數是根據實際應用控制系統(如汽車自動檢測線)的需要而配置的,與通信無關。圖1- 28給出了串行接口原理圖。每個前端機和通信控制器的接口均用MC3486和MC3487作差分驅動和接收。串行總線由一對雙絞線DATA+和DATA-組成。雙絞線的末端有提升電阻,使線路在空閑時處于邏輯1狀態(tài)。當發(fā)送邏輯o(TxD=O)時,線路處于0狀態(tài)。這種差分驅動和接收總線在電氣特性上符合RS - 422標準,比起RS - 232,這樣的單端驅動總線具有抗干擾能力強,數據傳輸率高,距離遠等優(yōu)點。
2.通信控制器
控制器的結構框圖如圖1- 29所示,8031通過串行接口和并行接口分別和各前端機以及主機交換數據。并行接口的原理圖見圖1- 30,控制器和IBM - PC/XT間的數據交換是以查詢的方式實現的。8255A工作于A口方式2(雙向總線I/O),控制器向IBM - PC/XT輸出數據時,首先WR信號有效將數據寫到A口,這使得PC7( OBFA)一O(初始狀態(tài)OBFA =1);IBM - PC/XT通過讀8212Ⅲ的狀態(tài)得知OBFA=O后,再讀8212 I即可將A口數據讀入;與此同時,8212 I的INT信號使OBFA恢復到初始狀態(tài)。IBM - PC/XT向控制器送數據時,用輸出命令將數據寫入8212Ⅱ;同時8212Ⅱ的INT信號有效,使PC4( STBA)產生一個選通信號;該信號將PC5(IBFA)置為有效(即IBFA =1,初始狀態(tài)IBFA=0),8031讀8255A的C口狀態(tài)得知IBFA =1.再讀A口即可將數據讀入控制器。并行口地址采用部分譯碼,8212 I和8212Ⅱ的地址是02EOH;8212Ⅲ的地址是02EIH。
通信協議
1.幀格式
幀是一次發(fā)送或接收的數據。本系統有從控制器發(fā)送到前端機的命令幀和前端機發(fā)送到控制器的命令響應幀。它們的格式如下:
命令幀:前端機地址,前端機地址,數據長度,數據長度,命令字段,數據,……,數據,校驗字1,校驗字2。
響應幀:狀態(tài)字段,數據,……,數據,校驗字1,校驗字2。
其中前端機地址(或稱站地址)是前端機的唯一標識符;命令字段是要求前端機執(zhí)行的操作;狀態(tài)字段指示命令的執(zhí)行情況;數據長度用一字節(jié)(B)表示,因此幀的長度不能大于255 B。
2.差錯檢測
對命令幀,前端機地址和數據長度各自重復發(fā)送兩字節(jié)。前端機根據兩字節(jié)是否一致,判斷地址和數據長度字節(jié)在傳輸過程中是否出錯。命令字和所有數據字節(jié)用CRC - 16多項式檢錯法檢錯。前端機通過計算得出兩字節(jié)的校驗字,并與命令幀最后兩字節(jié)校驗字相比較,判斷數據傳輸是否有錯。命令響應幀也采用同樣的CRC - 16多項式檢驗法檢錯。實踐證明,這種檢錯法既可以有效地檢查出傳輸差錯,又可以保證較低的數據冗余度。由于單片機缺少CRC檢錯的硬件,所以采用軟件算法,所得的兩字節(jié)校驗字作為幀的最后兩字節(jié)發(fā)送。
3.差錯處理
可能有兩種差錯:幀受到損傷;或者完全丟失。系統規(guī)定,控制器每發(fā)送一幀,前端機僅當數據被正確接收時,才會發(fā)送一個響應幀。如果一個受損幀到達前端機,就會被丟棄,過一段時間后.控制器會因為超時而把原幀重發(fā)一次,直到該幀最終完好無損地到達為止。幀在從控制器到前端機的過程中丟失,也會因為收不到響應幀而超時,使原幀重發(fā)。
一種特殊情況是:
①控制器發(fā)一幀報文到前端機,該報文被前端機正確地接收并回送一響應幀。
②該響應幀在從前端機到控制器的過程中完全丟失或受損。
③控制器最終超時,由于沒有收到正確的響應幀,它就會不正確地假定:發(fā)出的報文已經丟失或受損,并把該幀重發(fā)一次。
④該重復幀也完好無損地到達前端機,于是前端機收到重復的兩幀。如果該幀要求前端機產生一個動作,則它會動作兩次,這顯然是不允許的。
為了避免這種情況的發(fā)生,命令字段的最高位設成序列編號。控制器每發(fā)一幀都加一個序列編號。新幀的序列編號總和前一幀的序列編號不同,重復幀的序列編號和前一幀的序列編號相同。前端機利用該編號判斷是新幀,還是要丟棄的重復幀。當一個重復幀到達時,前端機拒絕接受,但重發(fā)上一次的響應幀。
本系統超時時間的長短是動態(tài)的。它與幀長度成正比,和傳輸速度成反比。這種方法比超時時間固定的方法具有更高的通信效率。
4.遠程存取控制
遠程存取控制( RAC)是一組高層命令,IBM - PC/XT可以根據這組高層命令的格式,在內存中組織一段報文送到控制器??刂破鞲鶕笪南蚯岸藱C發(fā)送一個命令幀,然后根據響應幀將命令的執(zhí)行情況報告IBM - PC/XT。
軟件設計
1.通信控制器程序
通信控制器的程序流程圖如圖1- 31所示。其中初始化包括:①設定不高于100 kb的波特率;②設定超時計算用的To中斷為最高級中斷;③設定SP堆棧寄存器的值為30H;④初始化8255A使A口工作于方式2。從IBM接收一幀報文,將前端機不能通信的信息報告IBM.將前端機序列編號出錯信息報告IBM及向IBM發(fā)響應報文,均是以查詢方式與IBM - PC/XT交換數據的程序模塊;發(fā)送子程序和接收響應幀子程序為滿足通信協議的通信程序模塊。限于篇幅,不再詳述。程序的長度約2.4 KB。
2.前端機通信子程序
該程序是長為1.1 KB的串行口中斷子程序,包括接收命令、執(zhí)行命令、發(fā)響應幀三個滿足通信協議的程序模塊。限于篇幅,其詳細的程序流程圖在此從略。命令送到前端機后何時開始執(zhí)行命令,取決于主程序對串行口中斷級別的設定和主程序當時正在執(zhí)行什么操作。若把串行口中斷設為高級中斷而其他中斷設為低級中斷,則收到命令后立即執(zhí)行命令。通信子程序占用的資源包括串行中斷口、2 KB RAM中開始的300個存儲單元、128個內存字節(jié)中地址從30H~3FH的存儲單元和定時器Tl。
3.IBM - PC/XT遠程存取控制命令的組織和調用
IBM - PC/XT要前端機執(zhí)行一條如表1- 14所列的命令只須向控制器發(fā)一段報文。報文的格式是:命令長度,前端機地址,命令值(見表1-14),數據,……,數據。例如復位1號前端機的報文是02H,OIH,OOH;讀2號前端機外存8000H單元值的報文是04H,02H,18H,80H,OOH。
發(fā)送完報文后,根據IBM - PC/XT接收控制器發(fā)來的響應報文(包括狀態(tài)字段、命令執(zhí)行結果),即可得知命令的執(zhí)行情況。
本系統已應用于汽車性能自動檢測等集散式控制系統中。理論和實踐都證明,在1 km范圍內數據傳輸率可達100 kb/s,而且可靠性很好。應用于一般工業(yè)控制系統,其性能價格比是較高的;但由于缺乏總線裁決和碰撞檢測等軟件與硬件,前端機不能主動向主機或其他前端機發(fā)起通信。增加這些軟硬件,便可構成實時性更強的分布式控制系統。
評論