劉 鎏,臧 峰,牛洪海
(南京南瑞繼保電氣有限公司,江蘇 南京 211102)
控制系統(tǒng),如分布式控制系統(tǒng)(distributed control system,DCS)、可編程邏輯控制器(programmable logic controller,PLC)等,是計算機技術(shù)不斷發(fā)展與自動化控制技術(shù)相結(jié)合的產(chǎn)物,在電力、石化、冶金、化工等大型工業(yè)中有著廣泛的應(yīng)用[1]。與蓬勃發(fā)展的現(xiàn)場總線(如Profibus、FF、CAN、LonWorks等[2-3])相比,控制系統(tǒng)本地總線的發(fā)展顯得相對緩慢。究其原因,主要是控制系統(tǒng)與本地輸入/輸出(input/output,I/O)模塊通信相對比較封閉,涉及到控制系統(tǒng)架構(gòu)和所有I/O模塊,因此各個廠家都對協(xié)議保密,令其他廠家無法獲取其通信信息。文獻[4]提出了一種基于面向通用對象的變電站事件(general object oriented substatI/on event,GOOSE)的控制器與I/O之間的通信協(xié)議,但由于其使用網(wǎng)絡(luò)通信,限制了其使用范圍。文獻[5]提出了一種基于PCI Express的通信線,但由于計算機串行總線(如PCI Express、USB、IEEE 1394)兼容性、可靠性和可擴展性等方面的原因,無法很好地滿足控制系統(tǒng)應(yīng)用的需求[6-9]。
針對上述總線所存在的問題,本文提出了一種基于現(xiàn)場可編程門陣列(field programmable gate array,FPGA)的高速、可靠的冗余I/O通信總線。物理層采用多點低壓差分信號[10](multi-point-low-voltage differential signaling,M-LVDS)標(biāo)準(zhǔn),實現(xiàn)了數(shù)據(jù)鏈路層實時數(shù)據(jù)的傳輸和通道鏈路狀態(tài)的監(jiān)視,保證了數(shù)據(jù)傳輸?shù)目煽啃院蛯崟r性。I/O模塊采用直接內(nèi)存存取(direct memory access,DMA)的方式進行通用異步收發(fā)器(universal asynchronous receiver transmitter,UART)的通信報文解析,詳細設(shè)計參考文獻[10]。
系統(tǒng)結(jié)構(gòu)如圖1所示。
圖1 系統(tǒng)結(jié)構(gòu)圖
目前,主流控制系統(tǒng)的體系架構(gòu)一般可分為4個層次:企業(yè)管理層、工廠(車間)層、控制裝置單元層和現(xiàn)場儀表層[11]。其中,控制單元層包括控制器和I/O模塊。控制器與I/O模塊的互聯(lián)互通是整個系統(tǒng)數(shù)據(jù)傳輸?shù)臉屑~,在實時性、可靠性和可擴展性等方面有著非常高的要求,總線的通信效率直接影響了整個控制系統(tǒng)的性能[1]。本文設(shè)計的控制器采用主備冗余的方案,I/O單元采用A/B冗余I/O總線方案。主備控制器通A/B冗余總線與I/O模塊進行通信,但僅主控制器通過A/B冗余總線交替對I/O模塊發(fā)送查詢數(shù)據(jù)和控制報文,備控制器通過A/B冗余總線監(jiān)聽I/O模塊的響應(yīng)數(shù)據(jù)以判斷鏈路的通斷。當(dāng)備控制器升級為主控制器后,原主控制器不再發(fā)送查詢數(shù)據(jù)和控制報文,而新晉控制器主要發(fā)送查詢數(shù)據(jù)和控制報文。
其中,I/O模塊可以是模擬量輸入(analog input,AI)、模擬量輸出(analog output,AO)、開關(guān)量輸入(digital input, DI)、開關(guān)量輸出(digital output,DO)或其他一些特殊的I/O模塊。一對控制器下可以帶6條冗余I/O總線,每條I/O冗余總線可以掛載10個I/O模塊。因此,本文設(shè)計的控制器一共可以掛載60個本地I/O模塊。
控制器與I/O模塊之間通信的實時性和可靠性,主要取決于物理層通信速率和數(shù)據(jù)鏈路層調(diào)度策略。本文設(shè)計的通信協(xié)議規(guī)定了控制器與I/O模塊之間的信息交換模式。此協(xié)議遵守開發(fā)系統(tǒng)互連參考模型(open system interconnect / on reference model,OSI/RM),使用了應(yīng)用層、數(shù)據(jù)鏈路層和物理層。應(yīng)用層實現(xiàn)了I/O模塊實時數(shù)據(jù)或非實時數(shù)據(jù)的解析,數(shù)據(jù)鏈路層實現(xiàn)了數(shù)據(jù)的循環(huán)冗余校驗(cyclic redundant check,CRC),物理層實現(xiàn)了串口數(shù)據(jù)的編解碼功能。
本文設(shè)計的每個I/O模塊均具有相同的通信接口和幀結(jié)構(gòu)。I/O模塊包括一個微控制器(micro control unit,MCU),通過DMA實現(xiàn)了數(shù)據(jù)的采集和分析,詳細設(shè)計參考文獻[11]??刂破魇褂昧薠ilinx公司的Zynq芯片。此芯片具有2個ARM芯片和1個FPGA。ARM芯片運行QNX實時操作系統(tǒng),并通過FPGA擴展6路冗余I/O總線。每路總線實現(xiàn)了5 Mbit/s的高速串口通信,主要包括M-LVDS發(fā)送/接收模塊、10 bit編解碼模塊、CRC校驗?zāi)K。QNX實時操作系統(tǒng)通過配置寄存器和DMA實現(xiàn)與FPGA的數(shù)據(jù)交互。
物理層規(guī)定了控制器與I/O模塊之間通信的機械、電氣、功能和過程方面的特性。此通信協(xié)議采用M-LVDS標(biāo)準(zhǔn),實現(xiàn)了一主多從的通信模式。M-LVDS具有高速傳輸、低電壓擺幅、抗干擾、低功耗、多點通信和故障安全隔離等特點[1]。由于M-LVDS具有上述特點,I/O模塊可以實現(xiàn)在線熱插拔以實時建立或斷開與控制器的通信,而不會干擾I/O總線上其他I/O模塊的通信功能。總線的熱插拔功能提高了整個系統(tǒng)的可靠性和可擴展性。
數(shù)據(jù)鏈路層負責(zé)在鏈路上進行控制器與I/O模塊之間鏈路層協(xié)議數(shù)據(jù)單元(protocol data unit,PDU)的交互。數(shù)據(jù)鏈路層詳細定義了協(xié)議數(shù)據(jù)單元,如表1所示。其中:啟動字符0x7e7e的幀格式按照幀頭幀尾判斷,幀長度是從啟動字符1到結(jié)束字符的長度。
表1 協(xié)議數(shù)據(jù)單元
應(yīng)用層協(xié)議主要包括3個部分:①控制器根據(jù)I/O模塊的配置文件,對下發(fā)給I/O模塊的查詢或控制報文進行組包;②解析I/O模塊上送的實時數(shù)據(jù),并把數(shù)據(jù)填入I/O接收緩沖區(qū);③對非實時報文進行組包或解析。
由于QNX實時操作系統(tǒng)通過DMA把下發(fā)給I/O模塊的報文傳輸給FPGA,因此需要對下發(fā)的報文格式進行設(shè)計,以保證FPGA接收數(shù)據(jù)的正確性。定義ARM傳輸給FPGA的數(shù)據(jù)格式如表2所示。
表2 ARM傳輸給FPGA的數(shù)據(jù)格式
Tab.2 Data format of ARM to FPGA
info字段使用6 bit作為掩碼,每個bit位代表6條總線的各個分支,如0x1表示在第一條總線上發(fā)送,0x10代表在第五條總線上發(fā)送,0x3f代表六個分支都發(fā)送。len_byte代表這幀數(shù)據(jù)報文的總長度,content即數(shù)據(jù)鏈路層協(xié)議數(shù)據(jù)單元PDU,但沒有CRC校驗和幀尾標(biāo)志。這2項內(nèi)容FPGA會自動加入,以減輕ARM芯片的負載。
由于采用DMA發(fā)送數(shù)據(jù)會產(chǎn)生DMA中斷,因此在FPGA接收到數(shù)據(jù)后,并不是通過DMA的方式把數(shù)據(jù)傳輸給QNX實時操作系統(tǒng),而是通過循環(huán)緩沖區(qū)的方式把數(shù)據(jù)存儲在全局?jǐn)?shù)據(jù)區(qū)。此設(shè)計有兩方面的優(yōu)勢:①減少DMA中斷產(chǎn)生的次數(shù),QNX實時操作系統(tǒng)不需要在FPGA接收到每個I/O模塊數(shù)據(jù)后都產(chǎn)生一次中斷去處理數(shù)據(jù);②6條總線下的I/O模塊可以統(tǒng)一處理,I/O模塊的數(shù)據(jù)可以形成一個斷面,有利于算法頁處理。
軟件程序主要包括:①I/O模塊配置文件解析;②串口寄存器配置;③串口驅(qū)動配置;④FPGA寄存器配置;⑤實時報文傳輸;⑥非實時報文傳輸??刂破鏖_機后,首先進行參數(shù)配置設(shè)置。設(shè)置完后,F(xiàn)PGA定周期產(chǎn)生5 ms脈沖信號,QNX實時操作系統(tǒng)捕獲此脈沖信號后,進行實時報文和非實時報文的組包和解析。
實時傳輸流程如圖2所示。
圖2 實時傳輸流程圖
當(dāng)QNX實時操作系統(tǒng)捕獲FPGA產(chǎn)生的定時中斷后,首先,F(xiàn)PGA通過循環(huán)緩沖區(qū)傳輸給應(yīng)用層的報文解析,根據(jù)解析結(jié)果把I/O模塊的實時采集數(shù)填入I/O模塊的內(nèi)存區(qū);然后控制器根據(jù)I/O模塊配置信息,對下發(fā)給I/O模塊的控制或查詢報文進行組包;最后,當(dāng)掃描完60個I/O模塊后,把形成的下發(fā)報文通過DMA傳輸給FPGA。FPGA接收到報文后,通過表2格式進行解析,并在鏈路協(xié)議數(shù)據(jù)單元PDU的末尾填入CRC校驗和幀尾標(biāo)志。
由于FPGA定周期產(chǎn)生5 ms的脈沖信號進行實時報文的接收和下發(fā),因此需要考慮在實時報文中加入非實時報文,以適應(yīng)一些非周期性數(shù)據(jù)的請求。本文的設(shè)計方案是:如果分支有非實時數(shù)據(jù),那么在此分支實時報文傳輸周期的最末加了一幀非實時報文;如果沒有,則忽略此分支的非實時時隙。利用這種方案,可以有效解決實時報文傳輸和非實時報文傳輸?shù)臎_突。
通過如圖3所示的總線時隙圖,可以更好地理解控制器與I/O模塊如何通過A/B冗余總線進行通信。
圖3 總線時隙圖
圖3中:T1為QNX實時操作系統(tǒng)解析I/O模塊上送數(shù)據(jù)的時間,T2為QNX實時操作系統(tǒng)根據(jù)I/O模塊配置文件進行下發(fā)查詢或控制報文的組包時間,T3為通過DMA把數(shù)據(jù)從ARM芯片傳輸給FPGA的時間。經(jīng)過實測,T1、T2、T3的處理時間量級都在ms級。
當(dāng)達到T3后,F(xiàn)PGA根據(jù)表2格式進行下發(fā)數(shù)據(jù)報文解析,并自動加入CRC校驗和幀尾標(biāo)志下發(fā)查詢或控制報文。理論上,因為T1、T2、T3并不占用總線帶寬時間,通信時間可以達到5 ms。如果此周期是A總線下發(fā)報文,那么下個周期切換到B總線下發(fā)報文。
這樣切換發(fā)送既可以減輕I/O模塊的通信負載,也可以監(jiān)視A/B總線的通信鏈路狀態(tài)。但是這樣操作的缺陷就是處理I/O模塊反饋的數(shù)據(jù),需等待2個查詢周期,即10 ms的時間。如果A總線或B總線通信鏈路斷開,那么會導(dǎo)致整個分支查詢周期擴大一倍。但是控制器和I/O模塊在一個屏柜組屏,而且通信鏈路斷開控制器會報警,因此可以很好地避免這種情況的發(fā)生。
本文設(shè)計并實現(xiàn)了一種基于FPGA的高速冗余I/O總線。系統(tǒng)很好地結(jié)合了嵌入式ARM芯片與FPGA的優(yōu)點,實現(xiàn)了FPGA與ARM芯片相結(jié)合的嵌入式平臺開發(fā),提高了系統(tǒng)的實時性、可靠性和穩(wěn)定性。該設(shè)計可以保證6路I/O模塊總線實時并發(fā)處理,而且不占用ARM芯片的處理時間,因此具有很高的使用價值和推廣意義。