當(dāng)前位置:歐亞貿(mào)易網(wǎng) > 技術(shù)中心 > 所有分類
| 自動(dòng)配料系統(tǒng)多機(jī)實(shí)時(shí)通信的實(shí)現(xiàn) | 2020-03-09 |
| 摘要:自動(dòng)配料系統(tǒng)的多機(jī)實(shí)時(shí)通信提出了基于RS-232的多機(jī)通信總線。該總線設(shè)計(jì)了硬件邏輯電路,系統(tǒng)中的各個(gè)終端通過此邏輯電路查詢得知總線狀態(tài),并在占用總線時(shí)通過該電路鎖定總線以避免多機(jī)通信在RS-232串行通信中遇到的數(shù)據(jù)沖突問題,并以此為基礎(chǔ)提出了合理的數(shù)據(jù)總線分配方法,不僅保證了總線的合理分配使用,并且滿足了系統(tǒng)各優(yōu)先級(jí)不同的通信任務(wù)的實(shí)時(shí)性。PC/CAS總線式自動(dòng)配料系統(tǒng),不僅硬件實(shí)現(xiàn)簡單,而且軟件實(shí)現(xiàn)可靠,較好地實(shí)現(xiàn)了系統(tǒng)中的多機(jī)實(shí)時(shí)通信,同時(shí)解決了數(shù)據(jù)沖突問題。長時(shí)間通信測(cè)試結(jié)果表明該系統(tǒng)的多機(jī)通信運(yùn)行可靠,實(shí)時(shí)性好,較好地滿足了系統(tǒng)的要求。 0引 言 可編程計(jì)算機(jī)控制器(CAS:ProgrammableComputerController)以其可靠性高、開發(fā)周期短、配置靈活、功能強(qiáng)大而在工業(yè)控制領(lǐng)域得到越來越廣泛的應(yīng)用。由于其能適應(yīng)惡劣的工業(yè)現(xiàn)場(chǎng),因此多被作為自動(dòng)配料系統(tǒng)的下位機(jī)使用。但CAS的顯示功能較差,因此將PC與CAS結(jié)合起來構(gòu)成了總線式的自動(dòng)配料系統(tǒng),充分利用PC機(jī)強(qiáng)大的人機(jī)接口功能、豐富的系統(tǒng)軟件,用圖形化界面實(shí)現(xiàn)了對(duì)整個(gè)稱重配料系統(tǒng)的實(shí)時(shí)監(jiān)控。其中各設(shè)備間的通信是系統(tǒng)實(shí)現(xiàn)的關(guān)鍵。RS-232接口是計(jì)算機(jī)及CAS共同具有的,利用的幀驅(qū)動(dòng)器并加入一些輔助電路及相應(yīng)通信程序即可構(gòu)造基于RS-232的總線式多機(jī)通信網(wǎng)絡(luò)。實(shí)驗(yàn)證明,該網(wǎng)絡(luò)具有硬件實(shí)現(xiàn)簡單、系統(tǒng)可靠、抗干擾能力強(qiáng)的特點(diǎn)。 1多機(jī)實(shí)時(shí)通信的硬件實(shí)現(xiàn) 計(jì)算機(jī)與多臺(tái)CAS組成的自動(dòng)配料系統(tǒng) 稱重配料系統(tǒng)采用RS-232串行通信方式實(shí)現(xiàn)了上位機(jī)對(duì)整個(gè)系統(tǒng)的實(shí)時(shí)監(jiān)控,同時(shí)為了提高硬件穩(wěn)定性,優(yōu)化系統(tǒng)工作性能,本文采用硬件仲裁電路來實(shí)現(xiàn)數(shù)據(jù)總線的分配,并合理解決了數(shù)據(jù)沖突問題,簡化了軟件設(shè)計(jì),提高了自動(dòng)配料系統(tǒng)可靠性和抗干擾能力。 1.1 RS-232多機(jī)通信機(jī)制 普通的RS-232采用點(diǎn)對(duì)點(diǎn)串行數(shù)據(jù)傳輸方式,無法滿足多設(shè)備之間的實(shí)時(shí)通信,因此需要對(duì)其連接方式作一些改進(jìn)。RS-232的點(diǎn)對(duì)點(diǎn)通信是將接口的數(shù)據(jù)發(fā)送端(TXD)連接到另一方的數(shù)據(jù)接收端(RXD),RXD與另一方的TXD相連,雙方的地線端(GND)直接相連。但在計(jì)算機(jī)與多臺(tái)CAS相連時(shí)則發(fā)生了一些變化。如圖2所示,計(jì)算機(jī)的數(shù)據(jù)發(fā)送端直接連接到各CAS的數(shù)據(jù)接收端,地端直接與各CAS的地端相連,但各CAS的數(shù)據(jù)發(fā)送端不能同時(shí)連接到計(jì)算機(jī)的數(shù)據(jù)接收端,因?yàn)閿?shù)據(jù)發(fā)送端在無數(shù)據(jù)發(fā)送時(shí)為高電平,而發(fā)送的數(shù)據(jù)為高低電平組成的脈沖序列,直接將兩個(gè)或多個(gè)數(shù)據(jù)發(fā)送端連接到一起接入計(jì)算機(jī),則會(huì)造成其數(shù)據(jù)接收端電平的不確定,產(chǎn)生了數(shù)據(jù)沖突問題。為了解決上述問題設(shè)計(jì)了專門的硬件仲裁電路,將各CAS的TXD以及數(shù)據(jù)發(fā)送請(qǐng)求端(DTR)接入,再將仲裁電路輸出端連接到計(jì)算機(jī)的數(shù)據(jù)接收端。 1.2仲裁電路結(jié)構(gòu)與工作原理 由于上位機(jī)(PC)的發(fā)送端為一對(duì)多廣播式發(fā)送,所以上位機(jī)發(fā)送的數(shù)據(jù)幀所有的下位機(jī)(CAS)均可以接收到,至于數(shù)據(jù)幀由哪一臺(tái)下位機(jī)接收則由通信協(xié)議中的目的地址ID判定。但對(duì)于下位機(jī),其發(fā)送端為多對(duì)一連接,如直接將其相連,則會(huì)發(fā)生數(shù)據(jù)沖突。圖3所示的仲裁電路可以確保每次只有一臺(tái)下位機(jī)能夠發(fā)送數(shù)據(jù)到上位機(jī)的數(shù)據(jù)接收線上。應(yīng)注意的是,RS-232接口使用的高低電平與TTL中的高、低電平不同,需進(jìn)行電平轉(zhuǎn)換。 各下位機(jī)初始化時(shí)均將其DTR設(shè)置為低電平,因?yàn)榕c門1、2、3均有低電平輸入,所以初始化后A、B、C三點(diǎn)均為低電平,并且與門4、5、6也一直輸出低電平。假設(shè)下位機(jī)1是臺(tái)要發(fā)送數(shù)據(jù)的下位機(jī),發(fā)送前先將自己的DTR端口設(shè)置為高電平,而此時(shí)B、C兩點(diǎn)仍為低電平,經(jīng)反相器后變?yōu)楦唠娖捷斎肱c門1,所以與門1的輸出A點(diǎn)電平也為高,此時(shí)數(shù)據(jù)發(fā)送服務(wù)程序讀取數(shù)據(jù)發(fā)送查詢端(DSR)電平狀態(tài)(即A點(diǎn)電平狀態(tài))為“1”,說明總線未被占用,處于空閑狀態(tài)。由于下位機(jī)1的DTR端口已被置高,且查詢得知總線空閑,則其DTR端口不變?nèi)匀辉O(shè)置為高電平,這樣下位機(jī)1就占用了總線,可以開始發(fā)送數(shù)據(jù)。數(shù)據(jù)由TXD端經(jīng)過與門4后輸入上位機(jī)的RXD端,由于此時(shí)A點(diǎn)電平為高,保證了數(shù)據(jù)經(jīng)過與門4后沒有失真直接上傳至上位機(jī),同時(shí)A點(diǎn)電平經(jīng)反相器后變?yōu)榈碗娖捷斎肱c門2、3,故B、C兩點(diǎn)電平為低,與門5、6始終輸出低電平,避免了數(shù)據(jù)沖突。當(dāng)下位機(jī)1數(shù)據(jù)發(fā)送完畢后將其DTR端口置低,A點(diǎn)電平變低,釋放了總線,又回到初始化后的狀態(tài),可以供給下一個(gè)要發(fā)送數(shù)據(jù)的下位機(jī)使用。假設(shè)下位機(jī)1發(fā)送數(shù)據(jù)的過程中,下位機(jī)2也要發(fā)送數(shù)據(jù),同樣先將自己的DTR端口置高,但此時(shí)A點(diǎn)電平為高,經(jīng)反相器后輸入與門2,所以與門2的輸出B點(diǎn)仍為低電平,程序讀取DSR端口電平(即B點(diǎn)電平)為“0”,說明總線已被占用,因此將DTR端口重新置低,等待下次查詢,這樣就避免了兩臺(tái)下位機(jī)同時(shí)上傳數(shù)據(jù)。下一個(gè)查詢周期未到時(shí),程序持續(xù)查詢是否有更高優(yōu)先級(jí)的任務(wù)標(biāo)志位置位,有則調(diào)用相應(yīng)的任務(wù)服務(wù)程序,沒有則重復(fù)查詢各標(biāo)志位直至下一個(gè)查詢周期到來;下一個(gè)查詢周期到來后,重復(fù)一次置高DTR端口、讀取DSR端口的過程以判斷總線狀態(tài),空閑則DTR端口保持高電平占用總線并發(fā)送數(shù)據(jù),否則置低DTR端口,等待下次查詢。下位機(jī)2重復(fù)上述過程直至查詢到總線空閑并占用總線以發(fā)送數(shù)據(jù)。 不同類型的數(shù)據(jù)發(fā)送其優(yōu)先級(jí)也不同,數(shù)據(jù)發(fā)送任務(wù)的優(yōu)先級(jí)越高,查詢周期就越短,保證了稱重配料系統(tǒng)通信的實(shí)時(shí)性。由于各發(fā)送方在發(fā)送時(shí)間上存在差異,首先查詢到總線空閑的下位機(jī)得以使用數(shù)據(jù)總線,在發(fā)送數(shù)據(jù)前已將其DTR由低電平轉(zhuǎn)為高電平,仲裁電路將總線狀態(tài)轉(zhuǎn)為忙碌,避免其余下位機(jī)同時(shí)使用總線造成數(shù)據(jù)沖突。當(dāng)數(shù)據(jù)傳輸結(jié)束則將DTR轉(zhuǎn)為低電平,仲裁電路將總線狀態(tài)轉(zhuǎn)為空閑。由于PC為一對(duì)多發(fā)送,下位機(jī)通過仲裁機(jī)制鎖死總線只是保證同一時(shí)刻數(shù)據(jù)上傳總線上只有一臺(tái)CAS向PC發(fā)送數(shù)據(jù),并不會(huì)影響PC通過數(shù)據(jù)下行總線發(fā)送數(shù)據(jù)到各CAS,從而實(shí)現(xiàn)了總線的合理分配,解決了數(shù)據(jù)沖突問題。 2多機(jī)實(shí)時(shí)通信的軟件實(shí)現(xiàn) 2.1RS-232的數(shù)據(jù)傳輸格式 RS-232的數(shù)據(jù)是以字節(jié)的形式發(fā)送的,一次發(fā)送一個(gè)字節(jié) 包含一個(gè)起始位、8個(gè)數(shù)據(jù)位以及一個(gè)校驗(yàn)位和停止位,數(shù)據(jù)位為所發(fā)送的對(duì)象,而數(shù)據(jù)幀則是多個(gè)字節(jié)按一定格式打包而成的一個(gè)字節(jié)序列,以字節(jié)流形式發(fā)送。 2.2幀驅(qū)動(dòng)器 稱重配料系統(tǒng)幀驅(qū)動(dòng)器是為實(shí)現(xiàn)與第三方設(shè)備之間進(jìn)行通信而設(shè)計(jì)的軟件工具箱,存放在CAS應(yīng)用程序ROM中,控制了通信的硬件部分而不改變幀的形式。通常數(shù)據(jù)通信,對(duì)數(shù)據(jù)進(jìn)行讀寫操作,用戶必須對(duì)端口的細(xì)節(jié)了解很清楚,才能通過編程實(shí)現(xiàn)對(duì)接口各管腳進(jìn)行操作。而幀驅(qū)動(dòng)器將這些操作集中起來,用戶只需要了解第三方產(chǎn)品的通信協(xié)議細(xì)節(jié)(包括信息幀格式的組成等),并用幀驅(qū)動(dòng)器寫出與第三方產(chǎn)品通信協(xié)議一樣的通信規(guī)約,就可方便地實(shí)現(xiàn)CAS與第三方產(chǎn)品之間的通信。同時(shí),幀驅(qū)動(dòng)器支持RS-232、RS-422、RS-485、CAN等接口,因此軟件中只要稍微作些改動(dòng),便可支持不同的接口進(jìn)行數(shù)據(jù)通信,具有可擴(kuò)展性和廣泛的應(yīng)用前景。 2.3通信協(xié)議制定 PC和CAS以及CAS之間能進(jìn)行通信首先需要制定一個(gè)合理的通信協(xié)議,才能進(jìn)行通信。為此本著充分利用資源、結(jié)構(gòu)簡單、可擴(kuò)充性強(qiáng)的原則定義了數(shù)據(jù)幀的結(jié)構(gòu)。 目的ID和源ID均分配一個(gè)字節(jié),用于標(biāo)志數(shù)據(jù)幀的接收設(shè)備和發(fā)送設(shè)備,以便接收設(shè)備判斷接收和發(fā)生接收錯(cuò)誤時(shí)呼叫發(fā)送設(shè)備重發(fā)。命令字給定數(shù)據(jù)幀的類型(數(shù)據(jù)或控制字),指明隨后的DATA是數(shù)據(jù)內(nèi)容還是控制字。這樣系統(tǒng)中的各設(shè)備可根據(jù)事先制定的通信協(xié)議將欲發(fā)送的控制指令或數(shù)據(jù)打包寫入DATA中,或者將接受的數(shù)據(jù)幀按協(xié)議解包為控制命令并執(zhí)行或?qū)邮盏降臄?shù)據(jù)進(jìn)行處理。幀數(shù)指明了當(dāng)前發(fā)送的是第幾個(gè)數(shù)據(jù)幀,以便于接收設(shè)備判斷是否有數(shù)據(jù)幀丟失以呼叫發(fā)送設(shè)備重發(fā)。最后判斷接收的校驗(yàn)位與自行計(jì)算校驗(yàn)位結(jié)果是否一致,一致則進(jìn)行相應(yīng)操作,否則丟棄該幀并呼叫發(fā)送設(shè)備重發(fā)。 配料系統(tǒng)為了確保數(shù)據(jù)接收的可靠性,使用應(yīng)答方式進(jìn)行通信,接收機(jī)接收到數(shù)據(jù)后返回一個(gè)應(yīng)答幀加以確認(rèn),發(fā)送機(jī)收到此幀再發(fā)送下一幀數(shù)據(jù),如無應(yīng)答則周期循環(huán)發(fā)送同一幀,如超時(shí)未應(yīng)答則向上位機(jī)發(fā)送數(shù)據(jù)幀報(bào)錯(cuò),上位機(jī)接收后顯示發(fā)送與接收設(shè)備ID及錯(cuò)誤類別并報(bào)警以提示監(jiān)控人員排除錯(cuò)誤。 2.4系統(tǒng)內(nèi)各設(shè)備間的通信 ①PC與CAS之間的通信。PC向下位機(jī)發(fā)送數(shù)據(jù)幀采用廣播式,但只有符合目標(biāo)地址ID的下位機(jī)能夠接受,而下位機(jī)采用仲裁機(jī)制向上位機(jī)發(fā)送數(shù)據(jù)。 ②CAS與CAS之間的通信。CAS與CAS之間是通過PC以數(shù)據(jù)轉(zhuǎn)發(fā)的形式進(jìn)行數(shù)據(jù)幀傳送的。當(dāng)監(jiān)控計(jì)算機(jī)收到不是以自己為目的地址的數(shù)據(jù)幀時(shí),直接將其送入數(shù)據(jù)傳送總線由目的CAS判斷接受。 2.5基于C語言的CAS數(shù)據(jù)通信的實(shí)現(xiàn) ①下位機(jī)編程。使用提供的標(biāo)準(zhǔn)PC。 CAS發(fā)送程序流程如圖5(a)所示。PC發(fā)送程序流程由于為一對(duì)多廣播式發(fā)送,省略查詢總線過程,直接發(fā)送即可。PC接收程序流程如圖5(b)所示。CAS接收程序流程基本與PC接收程序流程一致,但在判斷接收數(shù)據(jù)幀目的ID與本機(jī)ID不符后,CAS直接退出事件觸發(fā)服務(wù)程序返回,而PC則將得到的數(shù)據(jù)幀發(fā)送給各下位機(jī)以使目的CAS接收該數(shù)據(jù)幀。 ②上位機(jī)編程。稱重配料系統(tǒng)使用VisualBasic,流程中需要發(fā)送數(shù)據(jù)或命令只要按定義好的通信協(xié)議進(jìn)行數(shù)據(jù)裝幀并調(diào)用數(shù)據(jù)發(fā)送程序?qū)⑵渫ㄟ^串行口發(fā)送即可。為了實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)接收,在VB工程中導(dǎo)入了PCommPro(此軟件借助WindowsAPI函數(shù)的調(diào)用來控制使用串行通信端口)的通信函數(shù)庫和控件以實(shí)現(xiàn)接受數(shù)據(jù)的實(shí)時(shí)觸發(fā)。事件的觸發(fā)除了定時(shí)器或循環(huán)的輪詢(Polling)方式外,還可以使用回調(diào)函數(shù)(CallBackFunction)實(shí)現(xiàn)。PComm針對(duì)事件的處理就是采用回調(diào)函數(shù)的方式處理,欲建立事件,需給定一個(gè)函數(shù)的地址,當(dāng)事件發(fā)生時(shí),便到該回調(diào)函數(shù)所在地址去執(zhí)行該程序代碼。因此定義了回調(diào)函數(shù)作為接受數(shù)據(jù)的事件觸發(fā)服務(wù)程序,當(dāng)接受數(shù)據(jù)事件發(fā)生時(shí)便執(zhí)行該事件觸發(fā)程序,保存接受到的數(shù)據(jù),并按協(xié)議進(jìn)行數(shù)據(jù)幀的解包,將數(shù)據(jù)取出并作相應(yīng)處理顯示在監(jiān)視器上,以便實(shí)時(shí)監(jiān)控,或執(zhí)行相應(yīng)的命令。 3 結(jié)束語 本文利用硬件仲裁電路巧妙地實(shí)現(xiàn)了數(shù)據(jù)總線分配,解決了數(shù)據(jù)沖突問題,簡化了配料系統(tǒng)設(shè)計(jì),優(yōu)化了系統(tǒng)性能。自動(dòng)配料系統(tǒng)通過與PC的有機(jī)結(jié)合,構(gòu)成RS-232的總線式配料,用可視化的圖形界面實(shí)現(xiàn)對(duì)整個(gè)配料過程的實(shí)時(shí)監(jiān)控。實(shí)驗(yàn)證明,系統(tǒng)運(yùn)行良好,監(jiān)控準(zhǔn)確無誤,還可應(yīng)用于其它分布式測(cè)控系統(tǒng)和類似系統(tǒng),具有一定的工程應(yīng)用價(jià)值。 | |