楊 義 焦繼業(yè)
(西安郵電大學(xué)計(jì)算機(jī)學(xué)院 西安 710121)
在熱電廠調(diào)控系統(tǒng)中,維護(hù)通信總線作為重要的測試通信網(wǎng)關(guān),完成電廠系統(tǒng)中的重要工作環(huán)境參數(shù)和生產(chǎn)運(yùn)行狀態(tài)等參數(shù)的監(jiān)控上報(bào)功能[1]。隨著電廠系統(tǒng)復(fù)雜性越來越高,數(shù)據(jù)量的不斷增加,實(shí)時、穩(wěn)定、高速、精確已成為現(xiàn)代通信網(wǎng)關(guān)的發(fā)展趨勢。由于系統(tǒng)中各設(shè)備之間信號類型的多樣性和功能的復(fù)雜性使得整個調(diào)控網(wǎng)絡(luò)更加龐大,控制管理機(jī)制復(fù)雜[2],因此需要一套穩(wěn)定性強(qiáng)、安全性高的通信系統(tǒng)實(shí)現(xiàn)對數(shù)據(jù)信息的的實(shí)時、高效調(diào)控與處理。
目前,熱電廠控制系統(tǒng)大多采用集散式控制系統(tǒng)——DCS系統(tǒng)[3],在該系統(tǒng)下,通信網(wǎng)關(guān)模塊大多使用RS-422,RS-232C,RS-485和以太網(wǎng)接口與其他控制站設(shè)備進(jìn)行連接通信[4],控制設(shè)備采用的通信協(xié)議不統(tǒng)一,控制方式多為主從問答方式,同一時刻僅允許一個終端擁有總線使用權(quán),數(shù)據(jù)的通信速率取決于當(dāng)前優(yōu)先級最高的控制終端,限制了系統(tǒng)的傳輸速率[5]。
針對以上問題,本文采用自定義格式對總線協(xié)議進(jìn)行設(shè)計(jì),在分析RS485通信標(biāo)準(zhǔn)的基礎(chǔ)上,根據(jù)4B5B編碼、NRZI差分編碼設(shè)計(jì)一個高效穩(wěn)定的通信協(xié)議[6~7]。該協(xié)議能夠?qū)崿F(xiàn)電廠系統(tǒng)的自診斷與維護(hù)等功能,同時在較大數(shù)據(jù)量的數(shù)據(jù)交互下,通過添加CRC校驗(yàn),保證芯片較高效穩(wěn)定的運(yùn)行[8]。
基于自定義協(xié)議的本地維護(hù)通信總線采用非標(biāo)準(zhǔn)總線來完成對個設(shè)備模塊的數(shù)據(jù)通信,硬件采用Microsemi公司的IGLOO2系列FPGA和ST公司的STM32F103單片機(jī),F(xiàn)PGA是整個電廠網(wǎng)關(guān)系統(tǒng)的控制中心和數(shù)據(jù)交互媒介,STM32完成配置并通過讀取FPGA內(nèi)部的寄存器來實(shí)現(xiàn)系統(tǒng)各項(xiàng)功能??偩€上有485總線數(shù)據(jù)流控制模式,通過控制站發(fā)送485總線數(shù)據(jù)流控制維護(hù)總線的運(yùn)行。RS-485接口從RS232發(fā)展過來,采用差分傳輸,可以實(shí)現(xiàn)點(diǎn)到點(diǎn)、多節(jié)點(diǎn)的通信,信號抗干擾能力較強(qiáng),傳輸距離也較遠(yuǎn)[9~11]。在總線上允許連接多達(dá)128個收發(fā)器。
圖1 網(wǎng)關(guān)模塊對外配置圖
系統(tǒng)上電啟動后,需要完成相關(guān)器件的初始化功能,讀取板卡ID信息,完成內(nèi)部存儲器的初始化功能,完成外部E2PROM接口的自檢(數(shù)據(jù)CRC校驗(yàn))功能,若校驗(yàn)正確取E2PROM中的配置參數(shù)初始化相應(yīng)的內(nèi)部RAM(加載數(shù)據(jù)),如E2PROM接口自檢錯誤(存儲器數(shù)據(jù)CRC校驗(yàn)錯誤)則進(jìn)入故障狀態(tài),否則進(jìn)入運(yùn)行工作狀態(tài)。
圖2 軟件運(yùn)行流程圖
M-BUS采用主從問答設(shè)計(jì)方式,維護(hù)接口模塊為主節(jié)點(diǎn),控制器、點(diǎn)對點(diǎn)卡、多節(jié)點(diǎn)卡、IO卡為從節(jié)點(diǎn)。M-BUS主節(jié)點(diǎn)從節(jié)點(diǎn)都連接在M-BUS總線上,通信時,主節(jié)點(diǎn)下發(fā)下裝/維護(hù)數(shù)據(jù)包時,從節(jié)點(diǎn)需要在收到這包數(shù)據(jù)后立即發(fā)送反饋數(shù)據(jù)包,如果主節(jié)點(diǎn)發(fā)送的是廣播數(shù)據(jù)包,則不用反饋數(shù)據(jù),主節(jié)點(diǎn)發(fā)送數(shù)據(jù)包和從節(jié)點(diǎn)反饋數(shù)據(jù)包之間的間隔不能超過響應(yīng)時間要求,否則視為超時[12]。
由于模塊內(nèi)存在兩個時鐘,輸送給應(yīng)用層的使能信號可能由于系統(tǒng)時鐘和鏈路時鐘的不同而踩不到關(guān)鍵的使能信號,故在和應(yīng)用層對接時應(yīng)做跨時鐘域處理[13],具體方法如下:發(fā)送方向應(yīng)該將w_tg信號展寬5倍,再用鏈路時鐘去采樣展寬后的信號,可以得到一個鏈路時鐘的脈沖信號。接收方向應(yīng)該將w_rg,w_crc展寬2倍,再用系統(tǒng)時鐘去采樣展寬后的信號,可以得到一個系統(tǒng)時鐘的脈沖信號。
圖3 M-BUS協(xié)議架構(gòu)圖
M-BUS應(yīng)用層主要實(shí)現(xiàn)控制鏈路層物理層發(fā)送和接收、接收數(shù)據(jù),去掉無用字段,將有效數(shù)據(jù)存入下裝下行緩存或者維護(hù)下行緩存、從下裝上行緩沖區(qū)或者維護(hù)上行緩沖區(qū)讀取數(shù)據(jù)加入包裝字段存入鏈路層和物理層發(fā)送數(shù)據(jù)緩沖區(qū),并通知鏈路層和物理層發(fā)送至物理總線、接收數(shù)據(jù)若為廣播,則不發(fā)送上行反饋,連續(xù)接收到3包廣播復(fù)位數(shù)據(jù)包,給出復(fù)位請求給當(dāng)前板卡。M-BUS應(yīng)用層上采用自定義數(shù)據(jù)幀格式來定義數(shù)據(jù)包,數(shù)據(jù)通過數(shù)據(jù)包的方式在總線中傳輸,一個數(shù)據(jù)包即一幀數(shù)據(jù)。常用的通信協(xié)議由幀頭、地址信息、數(shù)據(jù)類型、數(shù)據(jù)長度、數(shù)據(jù)塊、校驗(yàn)碼、幀尾等部分組成[14]。M-BUS協(xié)議中應(yīng)用層用DA域?yàn)槟康牡刂窐?biāo)識,SA為源地址標(biāo)識。主節(jié)點(diǎn)的SA域填寫主節(jié)點(diǎn)(維護(hù)接口模塊)的地址。從節(jié)點(diǎn)的DA域?yàn)橹鞴?jié)點(diǎn)的SA域信息值,從節(jié)點(diǎn)的SA域?yàn)閺墓?jié)點(diǎn)的地址。功能碼域代表兩方面的信息,F(xiàn)C用來定義報(bào)文類型,表明該幀是請求幀還是應(yīng)答幀。MODE域?yàn)榘l(fā)送此數(shù)據(jù)包的板卡模式,CMD域?yàn)榇藬?shù)據(jù)包的執(zhí)行命令,SN域?yàn)榘蛱?,用來區(qū)別相同位置不同時間的兩次數(shù)據(jù)幀。ADDR域?yàn)檎埱髲墓?jié)點(diǎn)操作的內(nèi)存首地址,TYPE域?yàn)榘蹇愋?,板卡類型定義:維護(hù)接口模塊:0x00;控制器:0x10;點(diǎn)對點(diǎn)卡:0x20;多節(jié)點(diǎn)卡:0x30。DATA域?yàn)镈ata Unit用戶數(shù)據(jù)域,用于放置要攜帶的用戶數(shù)據(jù),長度可取128字節(jié)。
圖4 M-BUS應(yīng)用層自定義幀格式
M-BUS通信協(xié)議鏈路層和物理層模塊主要完成鏈路組幀/拆包[15],CRC 編碼/解碼,并串轉(zhuǎn)換發(fā)送/接收任務(wù)。M-BUS的總線以12.5Mbps的速率進(jìn)行傳輸,數(shù)據(jù)的同步信息無需附加在字符中間,每個字符以NRZI格式傳輸,在接收端通過數(shù)據(jù)時鐘恢復(fù)并校驗(yàn)。幀字節(jié)格式為10位,跳變沿為1'b0,無跳變沿為1'b1。以下為5B/4B編碼方式:
5'b11110:decodemap_5B4B=5'h0;//hex'0'
5'b01001:decodemap_5B4B=5'h1;//hex'1'
5'b10100:decodemap_5B4B=5'h2;//hex'2'
5'b10101:decodemap_5B4B=5'h3;//hex'3'
5'b01010:decodemap_5B4B=5'h4;//hex'4'
5'b01011:decodemap_5B4B=5'h5;//hex'5'
5'b01110:decodemap_5B4B=5'h6;//hex'6'
5'b01111:decodemap_5B4B=5'h7;//hex'7'
5'b10010:decodemap_5B4B=5'h8;//hex'8'
5'b10011:decodemap_5B4B=5'h9;//hex'9'
5'b10110:decodemap_5B4B=5'hA;//hex'A'
5'b10111:decodemap_5B4B=5'hB;//hex'B'
5'b11010:decodemap_5B4B=5'hC;//hex'C'
5'b11011:decodemap_5B4B=5'hD;//hex'D'
5'b11100:decodemap_5B4B=5'hE;//hex'E'
5'b11101:decodemap_5B4B=5'hF;//hex'F'
以下為非字符的譯碼:
5'b11000:decodemap_5B4B=J;
5'b10001:decodemap_5B4B=K;
5'b01101:decodemap_5B4B=T;
5'h1F:decodemap_5B4B=I;
當(dāng)檢測的JK時,標(biāo)志著一幀的開始,檢測到TT時,為一幀的結(jié)束。
圖5 M-BUS物理層幀格式
M-BUS通信協(xié)議鏈路層SYNC數(shù)據(jù)域表示同步頭固定字符“0x33,0x33”。JK數(shù)據(jù)域表示幀起始字符,DATA數(shù)據(jù)域?yàn)閼?yīng)用數(shù)據(jù)段,F(xiàn)CS數(shù)據(jù)域是為了校驗(yàn)CRC而設(shè)立的,其值等于幀中除同步符SYNC,起始符JK和結(jié)束符TT域外的所有各域的CRC32校驗(yàn)和,位于TT前。ED數(shù)據(jù)域?yàn)閹Y(jié)束標(biāo)志符。
圖6 M-BUS鏈路層數(shù)據(jù)幀格式
M-BUS在周期開始時,主節(jié)點(diǎn)依次發(fā)送請求信號給各從節(jié)點(diǎn),要求從節(jié)點(diǎn)在600bit時間內(nèi)應(yīng)答。
圖7 M-BUS鏈路過程
本文采用Linux操作系統(tǒng)和Microsemi公司的IGLOO2系列M2GL090-FG484I器件FPGA搭建了軟件驗(yàn)證平臺,通過編寫大量測試程序在電廠系統(tǒng)上對其進(jìn)行測試,以此來驗(yàn)證對所設(shè)計(jì)M-BUS總線的正確性。
為了驗(yàn)證所設(shè)計(jì)的M-BUS總線協(xié)議的正確性,編寫大量的測試?yán)訉偩€進(jìn)行測試。圖8是通過向DUT輸入50MHz時鐘,通過station_in、rack_in和slot_in對DUT連續(xù)輸入3組ID信息,待DUT完成初始化后,在運(yùn)行模式下運(yùn)行下裝模式功能,通過波形查看M-BUS的性能。
圖8 M-BUS性能測試
測試由波形看出M-BUS通信速率為12.5Mb?ps,數(shù)據(jù)傳輸正確,M-BUS性能正確。
對M-BUS接口布局布線后的網(wǎng)表進(jìn)行分析。
圖9 M-BUS接口測試
圖9 中兩級同步寄存器的時鐘具有固定相位關(guān)系,因此做同步處理正確。
在本文中,提出了M-BUS總線協(xié)議的架構(gòu)設(shè)計(jì),分別對M-BUS總線應(yīng)用層、數(shù)據(jù)鏈路層和物理層進(jìn)行了自定義協(xié)議設(shè)計(jì),該協(xié)議是開放的,只要遵循此協(xié)議的板卡都可該總線兼容,實(shí)現(xiàn)了應(yīng)用場景擴(kuò)展,并且該總線協(xié)議借鑒了傳統(tǒng)工業(yè)現(xiàn)場總線的優(yōu)點(diǎn),具有穩(wěn)定性高、安全性高、實(shí)時精準(zhǔn)等特點(diǎn)。此外,通過Linux操作系統(tǒng)和Microsemi公司的IGLOO2系列器件FPGA搭建了軟件驗(yàn)證平臺,完成了對M-BUS總線性能測試和接口測試,作為一種高效穩(wěn)定的通信協(xié)議,該總線協(xié)議可以廣泛應(yīng)用于工業(yè)控制、遠(yuǎn)程抄表、維護(hù)監(jiān)控等領(lǐng)域。