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