(北京工業(yè)大學(xué) 信息學(xué)部,北京 100124)
對(duì)可燃?xì)怏w濃度進(jìn)行監(jiān)測(cè),是預(yù)防因可燃?xì)怏w泄漏引起火災(zāi)、爆炸事故,避免大量人員傷亡、財(cái)產(chǎn)損失的重要手段[1-2]。目前,我國(guó)可燃?xì)怏w檢測(cè)行業(yè)技術(shù)發(fā)展的主要方向是延長(zhǎng)使用壽命;增強(qiáng)抗干擾性能,解決誤報(bào)警和漏報(bào)警的問題;提高產(chǎn)品智能化,不僅監(jiān)測(cè)可燃?xì)怏w泄漏,還能監(jiān)控產(chǎn)品自身性能。故在此,經(jīng)過對(duì)可燃?xì)怏w濃度監(jiān)測(cè)、控制報(bào)警進(jìn)行深入研究,選用高性能STM32F103VET6單片機(jī)作為下位機(jī)的微控制器,設(shè)計(jì)出一款技術(shù)水平較好的可燃?xì)怏w濃度檢測(cè)報(bào)警與顯示系統(tǒng)。該系統(tǒng)上、下位機(jī)的交互保證了故障發(fā)生時(shí)能夠及時(shí)被響應(yīng)和處理[3]。同時(shí)為了使系統(tǒng)減少誤報(bào)警和漏報(bào)警[4],除了采用在硬件電路部分加入靜電保護(hù)三極管、磁珠、屏蔽線等抗干擾措施外,在此還提出改進(jìn)CRC校驗(yàn)規(guī)則、監(jiān)控幀握手機(jī)制和丟幀處理機(jī)制,保證系統(tǒng)在惡劣的工作環(huán)境中能穩(wěn)定運(yùn)行[5]。
室內(nèi)可燃?xì)怏w濃度檢測(cè)報(bào)警與顯示系統(tǒng)分為上位機(jī)和下位機(jī)兩部分。上下位機(jī)監(jiān)測(cè)的內(nèi)容各不相同。其中上位機(jī)檢測(cè)氣體報(bào)警等故障,下位機(jī)實(shí)時(shí)監(jiān)測(cè)電源和繼電器狀態(tài)。當(dāng)故障發(fā)生時(shí),上下位機(jī)通過RS232串口相互傳輸信息,使得故障報(bào)警既可以通過報(bào)警指示燈、燈帶和聲音報(bào)警器在電路板上提示,也可以在上位機(jī)界面上顯示。其整體設(shè)計(jì)方案如圖1所示。下位機(jī)實(shí)物如圖2所示。
圖1 可燃?xì)怏w檢測(cè)的原理框圖Fig.1 Schematic diagram of combustible gas detection
圖2 可燃?xì)怏w檢測(cè)下位機(jī)實(shí)物Fig.2 Real object of combustible gas detection lower machine
該系統(tǒng)的硬件部分由主板和按鍵板構(gòu)成[6]。其中,主板包含報(bào)警指示燈電路、聲音報(bào)警電路、燈帶指示電路,繼電器故障接口電路、電壓狀態(tài)監(jiān)測(cè)電路、通道屏蔽電路;按鍵板包含燈帶指示電路、復(fù)位按鍵電路、確認(rèn)/消音按鍵電路[7]。主板與按鍵板通過板間連接器相連接。硬件結(jié)構(gòu)如圖3所示。
該系統(tǒng)的軟件設(shè)計(jì)流程如圖4所示。
圖3 可燃?xì)怏w檢測(cè)的硬件結(jié)構(gòu)Fig.3 Hardware structure of combustible gas detection
圖4 可燃?xì)怏w檢測(cè)的軟件設(shè)計(jì)流程Fig.4 Software design flow chart of combustible gas detection
RS232通信屬于異步串行通信,一般為兩點(diǎn)傳輸,其每幀的數(shù)據(jù)格式通常為:起始位+數(shù)據(jù)位+奇偶校驗(yàn)位(可省略)+停止位[9]。為保證系統(tǒng)穩(wěn)定,所定義的數(shù)據(jù)幀格式共12個(gè)字節(jié),分為起始字節(jié)、控制單元、應(yīng)用數(shù)據(jù)、幀校驗(yàn)和、結(jié)束字節(jié)等單元。其中,控制單元包括幀方向字節(jié)、控制字節(jié)、保留字節(jié);應(yīng)用數(shù)據(jù)包括幀序號(hào)高字節(jié)、幀序號(hào)低字節(jié)、子幀類型字節(jié)、具體數(shù)據(jù)高字節(jié)、具體數(shù)據(jù)低字節(jié)。具體的幀格式見表1。
表1 可燃?xì)怏w檢測(cè)的幀格式Tab.1 Frame format of combustible gas detection
起始字節(jié)用于確定幀的起始位置;由于數(shù)據(jù)傳輸?shù)碾p向性,幀方向字節(jié)用于指示信息是從上位機(jī)傳輸?shù)较挛粰C(jī),還是從下位機(jī)傳輸?shù)缴衔粰C(jī);控制字節(jié)表示幀數(shù)據(jù)是信息幀還是監(jiān)控幀;保留字節(jié)初始化為0;幀序號(hào)用2個(gè)字節(jié)表示幀的序號(hào),循環(huán)計(jì)數(shù)從0~65535;子幀類型用于區(qū)分狀態(tài)幀和命令幀;具體數(shù)據(jù)是為不同故障所定義的數(shù)值信息;幀校驗(yàn)和是使用CRC16校驗(yàn)得出的結(jié)果;結(jié)束字節(jié)代表一幀數(shù)據(jù)的結(jié)束[9]。
傳統(tǒng)CRC校驗(yàn)只針對(duì)應(yīng)用數(shù)據(jù)字節(jié)計(jì)算。為保證上下位機(jī)通信的準(zhǔn)確性,避免出現(xiàn)誤報(bào)警和漏報(bào)警問題,在此對(duì)除幀校驗(yàn)和字節(jié)外的其余10個(gè)字節(jié)進(jìn)行CRC校驗(yàn)。依據(jù)國(guó)際電報(bào)電話咨詢委員會(huì)CCITT標(biāo)準(zhǔn),生成多項(xiàng)式選用x16+x12+x5+1。每個(gè)字節(jié)的數(shù)據(jù)轉(zhuǎn)化為二進(jìn)制數(shù)后按幀格式順序排列,后面補(bǔ)全2個(gè)字節(jié)的0構(gòu)成被除數(shù),由生成多項(xiàng)式即{1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1} 構(gòu) 成 除數(shù),二者相除所得余數(shù)即為幀校驗(yàn)和。得到余數(shù)后,放入幀校驗(yàn)和字節(jié)。將這樣的12 B數(shù)據(jù)封裝成幀等待發(fā)送。在接收端,把除幀校驗(yàn)和之外的10 B數(shù)據(jù)轉(zhuǎn)化為二進(jìn)制數(shù)后依次排列,幀校驗(yàn)和轉(zhuǎn)化為的二進(jìn)制數(shù)放在10 B數(shù)據(jù)后面共同構(gòu)成被除數(shù),相同的生成多項(xiàng)式構(gòu)成除數(shù),執(zhí)行除法運(yùn)算計(jì)算余數(shù)。當(dāng)余數(shù)為0時(shí),接收數(shù)據(jù)正確,否則接收數(shù)據(jù)錯(cuò)誤。
GB 16808—2008《可燃?xì)怏w報(bào)警控制器》規(guī)定,采用閃亮方式的指示燈每次點(diǎn)亮?xí)r間≮0.25 s,報(bào)警指示燈(器)閃動(dòng)頻率≮1 Hz[10]。在此,采用定時(shí)器中斷的方式控制故障指示燈亮滅,頻率為1 Hz。此外,通道屏蔽指示燈不采用閃亮方式,只要有屏蔽存在,該屏蔽指示燈就被點(diǎn)亮。屏蔽狀態(tài)只能通過無屏蔽指令關(guān)閉,不受復(fù)位等操作的影響[10]。
為了區(qū)分不同的故障等級(jí),蜂鳴器可以輸出2種頻率的聲音報(bào)警信號(hào)[11]。優(yōu)先級(jí)高的故障如氣體報(bào)警等,其聲音頻率為1 Hz,而故障報(bào)警等優(yōu)先級(jí)較低的故障,聲音報(bào)警頻率為0.5 Hz。
主板和按鍵板上均有燈帶指示電路,它由14個(gè)LED燈交替排列組成,用于顯示故障級(jí)別。沒有故障時(shí),燈帶顯藍(lán)色;當(dāng)電源等出現(xiàn)故障時(shí),燈帶顯黃色;當(dāng)發(fā)生氣體報(bào)警時(shí),燈帶顯紅色;如果不同級(jí)別的故障同時(shí)存在,則燈帶僅顯示出級(jí)別最高故障所對(duì)應(yīng)的顏色。無故障時(shí)可通過長(zhǎng)按“確認(rèn)/消音”按鍵打開、關(guān)閉藍(lán)色燈帶。
電壓狀態(tài)監(jiān)測(cè)電路包括主電源接口電路和備用電源接口電路。下位機(jī)采集電源接口的電壓值,判斷是否有故障以及具體的故障類型,在電路板上報(bào)警提示的同時(shí)將故障信息發(fā)送到上位機(jī)。
繼電器故障接口電路的檢測(cè)通過不斷采集繼電器接口的狀態(tài),當(dāng)檢測(cè)到故障時(shí)將信息發(fā)送到上位機(jī)。
復(fù)位和“確認(rèn)/消音”按鍵采用外部中斷的方式實(shí)現(xiàn)。GB 16808—2008《可燃?xì)怏w報(bào)警控制器》中規(guī)定,控制器的故障信號(hào)在故障排除后,可以自動(dòng)或手動(dòng)復(fù)位。復(fù)位后,控制器應(yīng)在100 s內(nèi)重新顯示尚存在的故障[10]。在此設(shè)計(jì)中,復(fù)位按鍵實(shí)現(xiàn)關(guān)閉所有故障指示燈(屏蔽除外),靜音蜂鳴器,并將復(fù)位指令上傳至上位機(jī)。上位機(jī)接收到復(fù)位指令后,重新查詢所有故障狀態(tài),檢測(cè)到報(bào)警后通過串口發(fā)送數(shù)據(jù)幀到下位機(jī),啟動(dòng)電路板上相應(yīng)的故障指示燈、燈帶和聲音報(bào)警電路。同時(shí),下位機(jī)重新檢測(cè)電壓狀態(tài)監(jiān)測(cè)電路和繼電器故障接口電路,如果故障存在即執(zhí)行相應(yīng)的報(bào)警提示。短按“確認(rèn)/消音”按鍵實(shí)現(xiàn)靜音蜂鳴器操作。當(dāng)電源出現(xiàn)備電欠壓故障時(shí),若不及時(shí)處理會(huì)導(dǎo)致電路板斷電,此時(shí)“確認(rèn)/消音”按鍵不能靜音蜂鳴器。當(dāng)燈帶顯藍(lán)色時(shí),可通過長(zhǎng)按此按鍵控制藍(lán)色燈帶的打開和關(guān)閉。
串口通信采用中斷的方式實(shí)現(xiàn),保證了在故障發(fā)生時(shí)上下位通過串口傳輸?shù)男畔ⅲ軌蚣皶r(shí)地被接收并處理。
為保持上下位機(jī)之間的通信連接,下位機(jī)每隔500 ms向上位機(jī)發(fā)送監(jiān)控幀,上位機(jī)接收到監(jiān)控幀后,用生成多項(xiàng)式對(duì)傳輸過來的數(shù)據(jù)進(jìn)行CRC檢驗(yàn)[12]。余數(shù)為0表示數(shù)據(jù)正確,向下位機(jī)回復(fù)ACK信息,ACK是指控制字節(jié)中Bit3=1,Bit2=0且應(yīng)用數(shù)據(jù)部分只有幀序號(hào)字節(jié)有效的監(jiān)控幀。之后下位機(jī)從下一個(gè)幀序號(hào)開始繼續(xù)發(fā)送監(jiān)控幀或者故障信息幀。如果結(jié)果錯(cuò)誤,上位機(jī)向下位機(jī)回復(fù)NAK信息,NAK是指控制字節(jié)中Bit3=0,Bit2=1且應(yīng)用數(shù)據(jù)部分只有幀序號(hào)字節(jié)有效的監(jiān)控幀。接收到NAK信息后,下位機(jī)使用原來的幀序號(hào)重新發(fā)送該條監(jiān)控幀。如果上位機(jī)連續(xù)3次接收到錯(cuò)誤監(jiān)控幀信息,或者1.5 s內(nèi)未接收到任何數(shù)據(jù),則顯示通訊連接故障。
當(dāng)下位機(jī)檢測(cè)到故障時(shí),會(huì)將新的狀態(tài)寫入到串口設(shè)備中,但是它無法主動(dòng)通知上位機(jī),因此上位機(jī)只能通過輪詢監(jiān)聽的方式來獲取狀態(tài)的更新[13]。系統(tǒng)運(yùn)行過程中,上下位機(jī)頻繁地通信會(huì)導(dǎo)致丟幀問題不定時(shí)發(fā)生[14]。
為解決這個(gè)問題,在上下位機(jī)之間定義丟幀處理機(jī)制。一方接收到數(shù)據(jù)幀后,對(duì)幀序號(hào)進(jìn)行判斷,如果新接收到的幀序號(hào)和已經(jīng)保存的上一幀幀序號(hào)連續(xù),則保存新接收到的幀序號(hào)并對(duì)具體指令進(jìn)行解析處理。否則,就說明出現(xiàn)了丟幀問題,此時(shí),把保存的上一幀幀序號(hào)放入具體數(shù)據(jù)字節(jié)且子幀類型字節(jié)設(shè)置為0x03,依據(jù)幀格式的定義封裝成信息幀后傳輸給對(duì)方。另一方接收到丟幀指令并得到幀序號(hào)后,重新檢測(cè)所有故障報(bào)警,并從得到的幀序號(hào)開始繼續(xù)發(fā)送數(shù)據(jù)幀。
室內(nèi)可燃?xì)怏w濃度檢測(cè)報(bào)警與顯示系統(tǒng)的總體軟件流程如圖5所示。
狀態(tài)幀和命令幀的具體數(shù)據(jù)定義分別見表2,表3。
該系統(tǒng)發(fā)生備電故障、氣體報(bào)警和自檢指令時(shí),下位機(jī)的效果如圖6所示。下位機(jī)正視圖中主板奇數(shù)位、按鍵板偶數(shù)位燈帶顯黃色;主板偶數(shù)位、按鍵板奇數(shù)位燈帶使用紅藍(lán)雙色燈實(shí)現(xiàn)。圖6(a)為發(fā)生備電故障時(shí)電路板的狀態(tài),故障報(bào)警燈、備電故障燈閃亮,燈帶顯黃色;圖6(b)為發(fā)生氣體報(bào)警時(shí)電路板的狀態(tài),氣體報(bào)警指示燈閃亮,燈帶顯紅色;圖6(c)為接收自檢指令時(shí)電路板的狀態(tài),所有故障指示燈和燈帶常亮。由圖可見,下位機(jī)可以正確檢測(cè)電源狀態(tài),并在電路板上報(bào)警提示;當(dāng)接收到來自上位機(jī)的報(bào)警信息或者命令指令時(shí),也能正確解析并響應(yīng)。
使用串口調(diào)試助手保存的通信數(shù)據(jù)[15]如圖7所示,一行為2幀數(shù)據(jù)。上下位機(jī)之間傳送故障指令和監(jiān)控幀的數(shù)據(jù)信息如圖7a所示。串口傳輸嚴(yán)格按照幀格式進(jìn)行,當(dāng)上位機(jī)3次接收到錯(cuò)誤的監(jiān)控幀時(shí),提示通信故障,因而能有效解決誤報(bào)警問題。每一幀數(shù)據(jù)所對(duì)應(yīng)的操作如下:1路電源工作;氣體報(bào)警;故障報(bào)警;監(jiān)控幀;ACK;通道屏蔽;監(jiān)控幀;ACK;監(jiān)管;通道無屏蔽;復(fù)位;監(jiān)控幀;ACK;備電故障;確認(rèn)/消音;監(jiān)控幀;ACK;備電故障恢復(fù);主電故障;主電故障恢復(fù);自檢;結(jié)束自檢。
使用串口調(diào)試助手實(shí)現(xiàn)了丟幀測(cè)試,如圖7b所示。當(dāng)下位機(jī)向上位機(jī)發(fā)送幀序號(hào)為1的數(shù)據(jù)之后,下一幀如果發(fā)送的是幀序號(hào)為4的數(shù)據(jù),則上位機(jī)會(huì)提示丟幀;當(dāng)下位機(jī)再次發(fā)送幀序號(hào)為2的數(shù)據(jù)幀之后,上位機(jī)正確接收,并且電路板正確響應(yīng)。每一幀數(shù)據(jù)所對(duì)應(yīng)的操作如下:1路電源工作;氣體報(bào)警(第1幀數(shù)據(jù));通道屏蔽(第4幀數(shù)據(jù));丟幀數(shù)據(jù);故障報(bào)警(第2幀數(shù)據(jù))。
圖5 總體軟件流程Fig.5 Overall software flow chart
表2 狀態(tài)幀的具體數(shù)據(jù)定義Tab.2 Specific data definitions of state frame
表3 命令幀的具體數(shù)據(jù)定義Tab.3 Specific data definitions of command frame
圖6 可燃?xì)怏w檢測(cè)的部分效果Fig.6 Partial renderings of combustible gas detection
圖7 可燃?xì)怏w檢測(cè)的部分幀數(shù)據(jù)Fig.7 Partial frame data of combustible gas detection
通過對(duì)可燃?xì)怏w濃度監(jiān)測(cè)、控制報(bào)警等進(jìn)行深入研究,提出了室內(nèi)可燃?xì)怏w濃度檢測(cè)報(bào)警與顯示系統(tǒng)的整體設(shè)計(jì)方案,并闡述說明了該平臺(tái)的硬件及軟件的主要設(shè)計(jì)內(nèi)容。為確保系統(tǒng)的穩(wěn)定和可靠,設(shè)計(jì)了改進(jìn)CRC校驗(yàn)規(guī)則、監(jiān)控幀握手機(jī)制和丟幀處理機(jī)制。聯(lián)調(diào)測(cè)試效果顯示,下位機(jī)能夠正確響應(yīng)上位機(jī)檢測(cè)并傳送過來的故障和指令;下位機(jī)也能及時(shí)將檢測(cè)到的電源、繼電器、以及按鍵的故障傳送到上位機(jī);上下位機(jī)嚴(yán)格按照幀格式通信,CRC校驗(yàn)解決誤報(bào)警問題,監(jiān)控幀確保連接正常,丟幀機(jī)制解決漏報(bào)警問題。