王清珍,鄔寶寅
(1.鄭州科技學(xué)院信息科學(xué)與工程系,鄭州450064;2.鄭州科技學(xué)院機(jī)械工程系,鄭州450064)
現(xiàn)代工業(yè)現(xiàn)場(chǎng)控制中,經(jīng)常采用現(xiàn)場(chǎng)總線結(jié)構(gòu)[1],將各個(gè)工業(yè)現(xiàn)場(chǎng)設(shè)備連接起來(lái),實(shí)現(xiàn)設(shè)備之間的信息交換。單片機(jī)等帶有UART結(jié)構(gòu)的芯片可以用來(lái)制造工業(yè)現(xiàn)場(chǎng)控制器、智能儀表等設(shè)備,這些設(shè)備可以通過單片機(jī)自帶的UART結(jié)構(gòu)[2]來(lái)搭建現(xiàn)場(chǎng)總線,實(shí)現(xiàn)相互通信。UART設(shè)備廣泛存在于單片機(jī)等可編程設(shè)備中,這種設(shè)備傳輸簡(jiǎn)單,具有較高的數(shù)據(jù)傳輸正確性和準(zhǔn)確性,可以實(shí)現(xiàn)芯片之間半雙工、雙工異步通信。但僅靠芯片電平的UART設(shè)備傳輸距離較近,且只能實(shí)現(xiàn)主機(jī)、從機(jī)之間的通信,不能實(shí)現(xiàn)任意兩個(gè)設(shè)備之間的通信,不完全符合現(xiàn)場(chǎng)總線之間的要求。
為實(shí)現(xiàn)現(xiàn)場(chǎng)總線功能,需要設(shè)計(jì)一套通信協(xié)議,實(shí)現(xiàn)任意兩個(gè)UART設(shè)備之間的通信。并且需要采用RS485型電氣接口,提高通信距離。RS485接口是一種工業(yè)電氣標(biāo)準(zhǔn),采用半雙工方式通訊,可以實(shí)現(xiàn)較遠(yuǎn)距離通信和較高的傳輸速度,抗干擾能力強(qiáng)。該設(shè)計(jì)將UART設(shè)備與RS485接口結(jié)合起來(lái),借助相應(yīng)的通信軟件,可以構(gòu)建一種現(xiàn)場(chǎng)總線,用于工業(yè)現(xiàn)場(chǎng)設(shè)備的通訊。
在工業(yè)現(xiàn)場(chǎng)的可編程控制系統(tǒng)中,實(shí)現(xiàn)無(wú)主機(jī)的多機(jī)通信,每一個(gè)模塊本身在系統(tǒng)中既是一個(gè)主控模塊,相對(duì)于另一個(gè)模塊來(lái)說(shuō)又是從模塊。模塊與模塊之間采用RS485工業(yè)現(xiàn)場(chǎng)總線通信[3],因此在各模塊的串行通信端口必須增加電平轉(zhuǎn)換器。每個(gè)模塊采用以單片機(jī)為中心構(gòu)成的嵌入式控制模塊,通過串口進(jìn)行信息傳輸,通過接口芯片MAX487掛載在RS485現(xiàn)場(chǎng)總線上。各模塊通過本文設(shè)計(jì)的協(xié)議在RS485總線上進(jìn)行穩(wěn)定的數(shù)據(jù)傳輸,在整個(gè)總線上最多可以接入255個(gè)模塊。系統(tǒng)的總線硬件結(jié)構(gòu)如圖1所示。
圖1 總線硬件結(jié)構(gòu)
該通信協(xié)議的設(shè)計(jì)借助了令牌環(huán)[4]原理。掛載在總線上的每一個(gè)設(shè)備,都有唯一的一個(gè)地址,并存儲(chǔ)有下位設(shè)備的地址??偩€上的設(shè)備常態(tài)下處于從控狀態(tài),可以接收。擁有令牌標(biāo)志的設(shè)備處于主控狀態(tài),可以向需要傳送數(shù)據(jù)的目標(biāo)設(shè)備發(fā)送數(shù)據(jù),完畢之后將令牌標(biāo)志傳送給下位設(shè)備。這樣可以保證在任一時(shí)刻只有一個(gè)設(shè)備具有數(shù)據(jù)發(fā)送權(quán),而數(shù)據(jù)發(fā)送權(quán)在總線上所有的設(shè)備之間循環(huán),使每一個(gè)都有向目標(biāo)設(shè)備發(fā)送數(shù)據(jù)的機(jī)會(huì)。
信息傳輸過程中需要設(shè)置一系列的變量和常數(shù)。相互通訊的設(shè)備之間所傳送的內(nèi)容有指令和數(shù)據(jù)兩種情況:所傳輸?shù)氖侵噶顒t第9位為1,是數(shù)據(jù)則第9位為0。傳輸指令和標(biāo)志位的內(nèi)容如表1、表2所示。通信軟件分從控模式和主控模式兩種情況。
表1 控制字與應(yīng)答字分配表
表2 標(biāo)志位含義解析表
從控模式下設(shè)備處于接收狀態(tài),可以通過UART中斷運(yùn)行程序,對(duì)接收到的數(shù)據(jù)做出一系列判斷。接收到的內(nèi)容有兩種可能,指令或數(shù)據(jù),通過串行數(shù)據(jù)的第九位進(jìn)行分辨,第九位為1表示指令,為0表示數(shù)據(jù)。
程序流程圖如圖2所示,接收到的內(nèi)容若為指令,通過識(shí)別判斷指令的內(nèi)容,結(jié)合相應(yīng)標(biāo)志位做出動(dòng)作。在初始狀態(tài)下,作為數(shù)據(jù)接收方,若從控模式設(shè)備接收到尋址指令,且指令地址與本地地址相一致,則將地址匹配標(biāo)志位置位;若接收到數(shù)據(jù)開始發(fā)送指令,且地址已經(jīng)匹配,則將sm2位清零,數(shù)據(jù)接收緩存區(qū)初始化,做好數(shù)據(jù)接收準(zhǔn)備;若接收到數(shù)據(jù)傳送結(jié)束指令,則將sm2位置位,地址匹配標(biāo)志位復(fù)位,退出接收狀態(tài)。若接收到授令牌指令,且地址已經(jīng)匹配,則將令牌標(biāo)志置位,開始運(yùn)行主控模式下的數(shù)據(jù)發(fā)送操作。若接收的內(nèi)容是數(shù)據(jù),且數(shù)據(jù)允許接收位sm2為0,則將數(shù)據(jù)存入接收緩存區(qū)。
圖2 從控模式程序流程圖
從控模式設(shè)備每接收到一次有效指令,都要向主控模式設(shè)備做出相應(yīng)應(yīng)答,而總線上每次只有唯一的從控模式設(shè)備,可以作出應(yīng)答。在接收和應(yīng)答相切換時(shí)要轉(zhuǎn)換MAX487芯片的收發(fā)狀態(tài)。每一次接收都由中斷觸發(fā),發(fā)送應(yīng)答由中斷關(guān)閉,可以節(jié)省CPU資源。
當(dāng)設(shè)備接收到有效的授令牌指令之后,轉(zhuǎn)為主控模式,并運(yùn)行相關(guān)程序段。程序流程圖如圖3所示。若主控設(shè)備有數(shù)據(jù)需要向目標(biāo)設(shè)備發(fā)送,則按程序流程圖所示過程,依次發(fā)送目標(biāo)設(shè)備地址尋址指令,發(fā)送數(shù)據(jù)開始傳送指令,連續(xù)發(fā)送數(shù)據(jù),最后發(fā)送數(shù)據(jù)傳送完畢指令;若主控設(shè)備沒有數(shù)據(jù)需要發(fā)送或數(shù)據(jù)發(fā)送完畢,便需要將令牌標(biāo)志傳給下位機(jī),依次發(fā)送下位機(jī)地址尋址指令和授令牌指令,退出主控模式。
圖3 主控模式
主控設(shè)備每次發(fā)送指令之后,都需要等待相應(yīng)的從控設(shè)備發(fā)出正確應(yīng)答,才能開始下一條指令的發(fā)送。若在規(guī)定時(shí)間內(nèi)沒有收到正確的應(yīng)答信號(hào),則重復(fù)發(fā)送指令;當(dāng)重復(fù)發(fā)送指令一定次數(shù)后還沒有收到正確的應(yīng)答信號(hào),則認(rèn)為目標(biāo)設(shè)備不存在,將相應(yīng)的錯(cuò)誤標(biāo)志位置位。
為了簡(jiǎn)化程序結(jié)構(gòu),主控模式運(yùn)行中UART收發(fā)采用查詢方式。
整個(gè)系統(tǒng)由若干個(gè)模塊組成,模塊之間通過RS485電氣接口相連。在每個(gè)模塊上設(shè)計(jì)人機(jī)操作界面,構(gòu)建了系統(tǒng)后臺(tái)數(shù)據(jù)庫(kù),編寫了各個(gè)模塊的數(shù)據(jù)采集和處理程序[5],建立了模塊與模塊之間的硬件電路,編寫調(diào)試了各部分的軟件代碼,提供了實(shí)時(shí)數(shù)據(jù)顯示。實(shí)現(xiàn)了各模塊數(shù)據(jù)的自動(dòng)采集功能,加工處理后的數(shù)據(jù)能自動(dòng)存入后臺(tái)數(shù)據(jù)庫(kù)中。設(shè)計(jì)的無(wú)主機(jī)多機(jī)通信模型最多可以連接255個(gè)現(xiàn)場(chǎng)可編程控制模塊,可以很方便地實(shí)現(xiàn)雙向通信,在通訊協(xié)議的支持下系統(tǒng)能自動(dòng)識(shí)別各個(gè)功能模塊的功能。本系統(tǒng)結(jié)構(gòu)較簡(jiǎn)單,功能較完善,具有一定的實(shí)用價(jià)值,可以滿足集管分控可編程控制器的通信要求。
[1] 潘世永,鄭萍,等.集散控制系統(tǒng)(DCS)的發(fā)展及展望[J].自動(dòng)化與儀器儀表,2003(4):50-53.
[2] 王清珍.單片機(jī)原理及接口技術(shù)[M].大連:大連理工大學(xué)出版社,2009.
[3] 徐和飛,牛秦洲,等.基于MODBUS協(xié)議的開關(guān)量控制模塊設(shè)計(jì)[J].自動(dòng)化與儀表,2009(10):24-28.
[4] 季燏..基于邏輯令牌環(huán)的容錯(cuò)協(xié)議的研究與實(shí)現(xiàn)[J].學(xué)位論文,2007.
[5] 徐應(yīng)躍,吳愛國(guó),等.現(xiàn)場(chǎng)總線MAC層的分析[J].化工自化及儀表,2010(2):20-23.