侯海軍,馬見功,白海燕
(北京和利時系統(tǒng)工程有限公司,北京 100176)
地鐵是一類位于地下的特殊建筑,地鐵車站是人流密集的公共場所,根據(jù)國家消防規(guī)范和地鐵設(shè)計規(guī)范的要求,必須設(shè)置火災(zāi)自動報警系統(tǒng)和消防系統(tǒng)及設(shè)備。一般情況下地鐵不設(shè)置專門防排煙系統(tǒng)設(shè)備,多數(shù)情況下采用通風(fēng)系統(tǒng)的共用設(shè)備作為防排煙系統(tǒng)設(shè)備,它們在正常工況下實現(xiàn)通風(fēng)換氣的功能,由環(huán)境與設(shè)備監(jiān)控系統(tǒng)(BAS)系統(tǒng)實現(xiàn)控制,火災(zāi)情況下則用于防排煙。目前,地鐵內(nèi)均設(shè)有專業(yè)的火災(zāi)報警系統(tǒng)(FAS),擔(dān)負著對建筑內(nèi)火災(zāi)的探測、報警及聯(lián)動控制消防設(shè)施的功能[1-2]。根據(jù)《地鐵設(shè)計規(guī)范》的要求,兩系統(tǒng)間采用通信接口,BAS系統(tǒng)將通過通信接口獲得FAS產(chǎn)生的報警信息及模式聯(lián)動控制命令信息[3]。
目前大部分FAS供應(yīng)商都能提供基于Modbus RTU協(xié)議的通訊方式,這種情況下BAS和FAS系統(tǒng)之間的通訊實現(xiàn)容易。但部分FAS制造商只提供非標準的專用協(xié)議(如愛德華公司的ETS3 協(xié)議、ESSER 公司的IDT 協(xié)議等),BAS 實現(xiàn)專用協(xié)議的解析,一是采用能提供高級語言編程的接口模塊,采用這種方式軟件設(shè)計和現(xiàn)場調(diào)試都需要開發(fā)技術(shù)人員的介入,費時費人工;二是采用BAS PLC上的串口用ASCII指令編程,這種方式下BAS PLC工程技術(shù)人員即可實現(xiàn)程序的編寫和調(diào)試。本文設(shè)計開發(fā)了通過AB PLC 的CPU 集成串口和ESSER火災(zāi)報警主機之間的通訊程序,通訊協(xié)議是“ESSER第三方通訊協(xié)議(IDT)”。該程序穩(wěn)定性高、實時性強,編程思路可移植到其它廠商的PLC平臺。
地鐵是構(gòu)筑與地下的大容量軌道交通系統(tǒng),系統(tǒng)的大部分處于地下車站和隧道構(gòu)成的封閉區(qū)域內(nèi)。與地面自然環(huán)境想隔絕,人和設(shè)備高度密集。一旦發(fā)生火災(zāi),地鐵中的環(huán)境與設(shè)備監(jiān)控系統(tǒng)(BAS)和火災(zāi)自動報警系統(tǒng)(FAS)聯(lián)動協(xié)作,對火災(zāi)事故進行自動化的處理,從而抑制火勢蔓延,排出濃煙,為疏散人員、撲救提供保障。
BAS 系統(tǒng)主要對各車站及地下區(qū)間的通風(fēng)空調(diào)設(shè)備、給排水設(shè)備、照明設(shè)備、自動扶梯、導(dǎo)向標志、環(huán)境監(jiān)測設(shè)備進行監(jiān)控,站級BAS 通過冗余通信接口與站級綜合監(jiān)控系統(tǒng)連接,將信息集中上傳至綜合監(jiān)控系統(tǒng),實現(xiàn)BAS 在綜合監(jiān)控系統(tǒng)中的集成,實現(xiàn)控制中心、車站、就地三級監(jiān)控[4]。
FAS系統(tǒng)擔(dān)負著地鐵車站及地下區(qū)間內(nèi)早期火災(zāi)的探測、報警及消防聯(lián)動控制的功能。確?;馂?zāi)前期防排煙系統(tǒng)的正常準確運行,對在發(fā)生火災(zāi)時候人員疏散和消防救助,起到了重要的作用。
BAS系統(tǒng)與FAS系統(tǒng)在車站設(shè)通信接口。正常運行時,通風(fēng)空調(diào)系統(tǒng)設(shè)備由車站BAS 系統(tǒng)管理。發(fā)生火災(zāi)時,F(xiàn)AS 向BAS 發(fā)出指令,由BAS 將與防災(zāi)有關(guān)的通風(fēng)排煙設(shè)備按相關(guān)的防災(zāi)模式進行程序控制,并向FAS 返回設(shè)備動作后的狀態(tài)信號。BAS系統(tǒng)保證FAS控制指令的優(yōu)先權(quán)。
本文的研究對象就是BAS 系統(tǒng)的PLC 控制器與FAS系統(tǒng)火災(zāi)報警主機之間通過串行通信進行火災(zāi)報警信息傳輸,實現(xiàn)火災(zāi)工況下BAS對防排煙設(shè)備的控制。
本文的研究對象以北京地鐵X 號線車站中的BAS、FAS 系統(tǒng)之間的通訊功能為例。BAS 系統(tǒng)采用美國AB公司的PLC(可編程控制器),F(xiàn)AS系統(tǒng)的火災(zāi)報警主機采用德國ESSER 公司的產(chǎn)品。BAS 與FAS 系統(tǒng)之間的接口示意圖如圖1所示。
圖1 BAS、FAS接口示意圖
BAS 系統(tǒng)在車站控制室IBP(緊急后備盤)盤處設(shè)置一套PLC,通過CPU上集成的串口和ESSER的火災(zāi)報警主機連接,通訊鏈路采用RS232串行鏈路。
系統(tǒng)的硬件平臺如下:PLC 采用AB 公司的CompactLogix系列處理器1768-L 43;遠程接口模塊為1768-CNBR;電源模塊為1768-PA 3;ESSER 公司的火災(zāi)報警主機。
AB 編程環(huán)境RSLogix 5000 常用的編程語言有三種:梯形圖(LAD)、功能塊(FBD)、結(jié)構(gòu)化文本(ST),根據(jù)所實現(xiàn)的邏輯需要,本文選擇了梯形圖(LAD)、結(jié)構(gòu)化文本(ST)兩種編程方式[5-6]。
RSLogix 5000 采用版本V20.04,與CPU 的Firmware(固件)版本V20.019相匹配。
IDT概述
1) 由ESSER 主機提供的網(wǎng)絡(luò)專用通訊轉(zhuǎn)換接口(RS232/485)或圖文終端電腦的串口(RS232/485)向第三方系統(tǒng)(包括BAS系統(tǒng))發(fā)送。
2) 每段報文信息以Time/Date起始,后面跟著一串事件信息,這些信息是當(dāng)前系統(tǒng)所有狀態(tài)的信息,每個狀態(tài)信息均以“0x1C”起始和“0x54”結(jié)尾。系統(tǒng)中的正常狀態(tài)信息不發(fā)送[7]。
3) 數(shù)據(jù)發(fā)送周期可設(shè)置為:1-20秒,即每間隔1-20秒自動發(fā)送一次數(shù)據(jù)包。
4) 串口參數(shù):波特率:19200bps,起始位:1 位,數(shù)據(jù)位:8位,校驗位:無,停止位:1位。報文格式(報文中的字符采用16進制格式):1C C0 xx xx 40 xx xx 54 1C 28 xx xx xx xx xx 54 1C 11 xx xx 54 ……
2.3.1 事件信息分類
1) 探測分區(qū)信息、探測區(qū)信息如表1所示。
表1 FAS探測分區(qū)信息狀態(tài)表
2) 控制器信息:
控制器信息包括CPU故障、打印故障等火災(zāi)報警主機的狀態(tài)信息。這部分信息與BAS、FAS 系統(tǒng)之間的聯(lián)動功能無關(guān),此處不再詳細描述。
2.3.2 分區(qū)號解析
探測分區(qū)信息、探測器信息各種狀態(tài)后面跟5個字節(jié)說明狀態(tài)發(fā)生的位置。分區(qū)號的信息包含在字節(jié)1 到字節(jié)3中。
字節(jié)1:oooooo01
字節(jié)2:xaaacc10
字節(jié)3:bbbbbb11
分區(qū)號為:xbbbbbb乘以100加上ccoooooo。
系統(tǒng)中探測分區(qū)號的范圍:1-9999。
由章節(jié)2.3中所述,ESSER火災(zāi)報警主機發(fā)給BAS系統(tǒng)的報文格式是16進制的數(shù)字序列。需要對CPU上的串口參數(shù)進行設(shè)置,才能實現(xiàn)實現(xiàn)BAS、FAS之間的通訊。
串口參數(shù)配置中需要設(shè)置“Mode:(模式)”設(shè)置為“User”,按照章節(jié)2.3 中的串口參數(shù)規(guī)定設(shè)置波特率、數(shù)據(jù)位、停止位、校驗位,其它參數(shù)保持默認值。
用戶協(xié)議參數(shù)設(shè)置中需要將“Read/Write Buffer Size(讀寫緩沖區(qū)大小)”設(shè)置為 1024;由于每個狀態(tài)信息均以"0x54"結(jié)尾,大寫字母“T”對應(yīng)的ASCII 碼用16進制表示的話是"0x54",所以“Termination Character 1:(終止字符1)”設(shè)置為大寫字母“T”;其它參數(shù)保持默認值。
選中“Echo Mode”后,當(dāng)火災(zāi)報警主機有報文發(fā)送到CPU 時,CPU 面板上的指示燈Ch0 會閃爍,非常直觀地觀察通訊是否正常。
經(jīng)過上述設(shè)置后,CPU可以通過指令A(yù)RL(ASCII讀取行)將字符從緩沖區(qū)移除,并將其存儲到內(nèi)存中的標簽中[8]。即將FAS主機發(fā)送的每包報文“1C C0 xx xx 40 xx xx 54 1C 28 xx xx xx xx xx 54 1C 11 xx xx 54 ……”以54作為界定符分條存儲到內(nèi)存的標簽中。
程序的流程圖如圖2所示。
圖2 程序流程圖
3.2.1 串口數(shù)據(jù)讀取
串口數(shù)據(jù)讀取程序采用CPU 內(nèi)置的ASCII 串行端口指令實現(xiàn),采用LAD(梯形圖)方式編程,相關(guān)邏輯的梯形圖如圖3所示。
圖3 串口數(shù)據(jù)讀取
圖3的梯級0 功能:程序第一次掃描的時候使用指令A(yù)CL(ASCII 清空緩沖區(qū))來立即清空緩沖區(qū)和ASCII隊列,同時復(fù)位相關(guān)串口控制指令標簽FAS_Line、FAS_Read的標志位。
圖3的梯級1功能:使用指令A(yù)BL(緩沖區(qū)行的ASCII測試)對緩沖區(qū)中的第一個終止字符“T”以前的字符(包括終止字符)進行計數(shù)。使能位FAS_Line.EN 表示指令是否使能。ABL 指令在緩沖區(qū)搜索終止字符“T”,找到后將發(fā)現(xiàn)位FAS_Line.FD置位。
圖3的梯級2 功能:用來判斷CPU 和火災(zāi)報警主機之間的通訊鏈路是否正常?;馂?zāi)報警主機數(shù)據(jù)發(fā)送周期設(shè)置為20 秒,所以計時器的預(yù)置值設(shè)置為23000(AB 的CPU中1000表示1秒)。
圖3的梯級3 功能:使用指令A(yù)RL(ASCII 讀取行)將終止字符“T”以前的字符(包括終止字符)從緩沖區(qū)移除,并存儲到字符串?dāng)?shù)組標簽FAS_Message中。
3.2.2 火災(zāi)信息提取
火災(zāi)報警主機發(fā)送給BAS CPU 的事件信息中的第二個字符如果是“28H”或者“38H”,則表示該條狀態(tài)信息是火災(zāi)信息,分區(qū)號的信息包含在第3到第5個字符中。
使用標志位FAS_Read.EM 表示ARL 指令已完成,與邏輯掃描同步。此處不能使用標志位FAS_Read.DN(此標志位也表示ARL指令已完成,但與邏輯掃描異步)。
分區(qū)號的信息包含在FAS_Message.Data[2]~[4]中。
FAS_Message.Data[2]:oooooo01
FAS_Message.Data[3]:xaaacc10
FAS_Message.Data[4]:bbbbbb11
分區(qū)號為:xbbbbbb乘以100加上ccoooooo。
使用BTD(位域分配)指令將FAS_Message.Data[2]~[4]中分區(qū)號信息中轉(zhuǎn)到兩個臨時變量中,而后計算出分區(qū)號FAS_Zone。
如果火災(zāi)標志位FAS_Fire_OK_Flag 為0,則調(diào)用BAS模式號計算程序Sub_FAS_Code。
3.2.3 BAS模式號碼計算
FAS 專業(yè)向BAS 專業(yè)提供接口通訊點表,典型的點表格式表2所示。
BAS 模式號碼計算程序:根據(jù)分區(qū)號FAS_Zone(表2中的分區(qū)列)的值和信息類型計算出對應(yīng)的BAS 模式號碼。
從表2看,分區(qū)列的值和對應(yīng)的BAS 模式號碼之間不存在線性關(guān)系。這部分程序采用結(jié)構(gòu)文本語言(ST)實現(xiàn),編程模式采用“表驅(qū)動法”。表驅(qū)動方法是一種可以在表中查找信息,而不必用很多的邏輯語句(If或Case)來把它們找出來的方法[9-10]。
表2 FAS通訊點表(部分)
程序主要包含兩個部分:其中Code_Mapping 是將通訊點表中的分區(qū)列、BAS 模式號碼列賦值到數(shù)組中;Sub_FAS_Code實現(xiàn)表驅(qū)動法編程。
Code_Mapping 程序中設(shè)置4 個大小為20 的一維數(shù)組FAS_Type_2838H、BAS_FireCode_2838H、FAS_Type_28H、BAS_FireCode_28H,賦值代碼如下:
FAS_Type_2838H[0]:=1001;
FAS_Type_2838H[1]:=1002;
……
BAS_FireCode_2838H[0]:=900;
BAS_FireCode_2838H[1]:=901;
……
FAS_Type_28H[0]:=5001;
FAS_Type_28H[1]:=5003;
……
Sub_FAS_Code部分實現(xiàn)代碼如下所示。
FOR Loop_X:=0 TO 19 BY 1 DO/*防煙分區(qū)火災(zāi)模式*/
IF(Fas_Type=16#28 OR Fas_Type=16#38)AND Fas_Zone=FAS_Type_2838H[Loop_X]
THEN BAS_Fire_Code:=BAS_FireCode_2838H[Loop_X];
EXIT;
END_IF;
END_FOR;
FOR Loop_X:=0 TO 19 BY 1 DO/*煙感報警信號*/
IF Fas_Type=16#28 AND Fas_Zone=FAS_Type_28H[Loop_X]
THEN BAS_Fire_Code:=BAS_FireCode_28H[Loop_X];
EXIT;
END_IF;
END_FOR;
本程序的關(guān)鍵部分設(shè)計就在此,其它車站的通訊程序根據(jù)本站的通訊點表修改Code_Mapping 即可,其它程序無需修改。
3.2.4 日志功能
由章節(jié)2.3 中所述,ESSER 火災(zāi)報警主機所發(fā)出的報文是一種私有協(xié)議,報文中沒有校驗和,通訊過程中存在丟包和誤碼的可能性。基于此,程序中增加相應(yīng)的數(shù)據(jù)記錄功能,將FAS 主機發(fā)送的信息類型為“28H、38H”的通訊報文、分區(qū)號存儲,便于事后查詢。
程序中定義一個Fas_Log 的結(jié)構(gòu)體類型,結(jié)構(gòu)體成員Zone類型為Dint,結(jié)構(gòu)體成員Frame類型為SINT[8]。定義標簽FAS_Log為結(jié)構(gòu)體FAS_Log[200]的一維數(shù)組[10]。
日志記錄功能如圖4所示。
圖4 火災(zāi)信息記錄
當(dāng)BAS_Fire_Code 的值非零時候,將FAS_Zone 存儲到結(jié)構(gòu)體變量Fas_Log[Log_Counter.ACC].Zone中;將FAS_Message拷貝到結(jié)構(gòu)體變量Fas_Log[Log_Counter.ACC].Frame 中。如果記錄達到200 條,則新的記錄從Fas_Log[0]重新開始存儲。
本文的設(shè)計成果已經(jīng)應(yīng)用在北京地鐵X號線工程的BAS系統(tǒng)中,經(jīng)現(xiàn)場調(diào)試驗證,運行穩(wěn)定可靠。如果其它廠商的PLC 系統(tǒng)和ESSER 的火災(zāi)報警主機采用串行通訊方式,進行數(shù)據(jù)傳授,本文的設(shè)計思路和編程方法也可借鑒使用。