李丹清,韓利峰,陳志軍,李國輝,陳永忠
(中國科學院 上海應用物理研究所 系統工程部,上海 201800)

圖1 EPICS控制系統架構Fig.1 EPICS Control system architecture

圖2 IOC軟件結構Fig.2 IOC Software structure
傳統上的化石能源包括天然氣、石油以及煤炭等,這些能源在人類文明發展的過程中起到了巨大的推動作用,然而這些能源的不可再生性以及對于環境的巨大污染導致人們迫切地去尋找替代能源。這些替代能源包括核能與可再生能源等清潔能源,清潔能源的發展能夠保障能源安全,應對氣候變化,實現可持續發展。其中氫氣作為新興的二次能源的載體,具有儲能豐富、熱值高、絕對清潔以及可運輸等優勢。當今世界各國越來越重視氫能產業的發展[1-3],并制定了相關發展規劃,將氫能和燃料電池確定為新一代能源技術發展的重要方向之一。在中國,國家發展改革委、國家能源局在《能源技術革命創新行動計劃2016-2030 年》[4]規劃了能源技術革命重點創新行動路線圖,將“氫能與燃料電池技術創新”列為15 項具體重點研究任務之一,首次將氫能產業提升至國家能源發展戰略高度[5]。氫能產業的發展,能夠帶動新能源汽車以及高端裝備制造業的快速發展。傳統上最為廣泛的制氫方法是電解制氫,然而傳統的電解制氫方法在能源、工藝以及設備方面成本過高[6],這嚴重地阻礙了氫能產業的發展。
中國科學院20KW 高溫電解制氫實驗裝置,旨在研究新一代高溫電解制氫技術。作為新一代的制氫技術,主要是通過高溫將水加熱成水蒸氣,然后在通過電解水蒸氣為氫氣和氧氣的方法完成制氫,與傳統的電解制氫方法相比,高溫電解制氫可以降低20%~30%的電能消耗,并將電解效率提高至90%~100%,這極大地降低了制氫的能源成本與工藝成本。同時可以用相對廉價的金屬氧化物來替代傳統上的貴金屬作為電極材料,這也可以降低設備成本。高溫電解制氫技術可以使用核反應堆的熱能對水進行加熱,從而實現多能融合的核能——可再生能源復合系統。
本文主要設計并實現了中國科學院20KW 高溫電解制氫實驗裝置的控制系統。控制系統主要監控高溫電解制氫實驗裝置的設備和管道溫度、流量、壓力、設備狀態、電流以及電壓等。通過人機界面完成各個設備的控制,在客戶端電腦上發出指令,完成設備的開機、停機、復位、緊急復位等。運行人員和實驗人員可以通過控制系統向系統設備或管道設定目標溫度、流量、壓力等,從而完成整個裝置的工況調節,為實驗和計算提供相應的支持。
本系統基于EPICS 進行開發,EPICS[7,8](實驗物理以及工業控制系統,Experimental Physics and Industrial Control System)是國內外加速器、大型實驗裝置、高能實驗系統以及天文臺常用的開發工具。如圖1 所示,它是一個標準的分布式控制系統。它包含三層架構,包括客戶端控制層、輸入輸出控制層以及設備控制層[9]。客戶端控制層提供人機交互界面(OPI),為操作人員與系統的交互提供接口。輸入輸出控制層是整個EPICS 系統的核心部分,負責從設備控制層獲取數據,提供數據給客戶端控制層,同時也負責將客戶端控制層中的操作指令發送給設備控制層。設備控制層是整個系統基礎,負責設備電氣和邏輯控制等。
輸入輸出控制層的主要部分是輸入輸出控制器(IOC),其內部軟件結構如圖2 所示。其中,IOC 數據庫(IOC Database)是一個常駐于內存的實時數據庫。Database Access 為數據訪問例程提供了訪問IOC 內部數據的接口。記錄支持(Record Support)為記錄類型提供支持,如模擬輸入量(ai)、模擬輸出量(ao)、數字輸入量(bi)、數字輸出量(bo)等,并且每種記錄類型對應于一種記錄支持。設備支持(Device Support)負責設備,一個記錄類型對應于多個設備支持程序,生成多個基于設備的各種記錄(record)。設備驅動(Deivce Drive)負責復雜外部設備的驅動連接。驅動程序擁有相應的設備驅動中端程序。通道訪問模塊(Channel Access)用于外部連接以形成基于以太網的分布式控制系統。

圖3 20KW高溫制氫控制系統物理架構Fig.3 Physical structure of 20kw high temperature hydrogen production control system
中國科學院20KW 高溫制氫實驗裝置包含數個工藝系統。它們是制氫系統、壓縮系統、存儲系統、冷凍水系統、吸附干燥純化系統、蒸汽系統以及壓縮空氣系統。冷凍水系統包含冷水機與純水機。冷水機利用傳統的Modbus 協議進行設備通訊,純水機在內部架設了TCP/IP 服務器可以使用EPICS 的S7-TCP/IP 驅動支持模塊進行通訊。其他系統采用基于Siemens PLC 為核心的控制器來實現和完成,這些系統可以通過EPICS 的通訊支持模塊S7nodave 來進行通訊,如圖3 所示。系統需要保存實驗數據以供實驗分析和事件定位,本系統使用EPICS 最新的數據歸檔系統Archiver Appliance 來完成數據歸檔和歷史數據存儲。
如圖4 所示,本系統的客戶端控制層使用Web 來展示歷史數據,并利用Web 對歷史數據歸檔系統進行管理、數據檢索以及下載實驗數據等。CSS 是EPICS 客戶端人機界面制作工具,提供了大量的控件用于人機界面的制作。此外還提供了傳統上的RDB channel Archiver[10]歸檔插件以及警報系統插件等。輸入輸出控制層包括IOC 以及Archiver Appliance 歷史數據歸檔系統,Archiver Appliance 通過Engine 進程從IOC 獲取歷史數據,并完成數據存儲。
本系統在Centos7 環境下完成EPICS 的各個組件的安裝與編譯,如圖5 所示。其中選擇的EPICS 核心版本是Base-3.15.5,所有的驅動支持組件和IOC 都需要依賴于EPICS 核心Base。其中AYSN 4-34 是EPICS 的設備異步驅動支持組件。所有組件的依賴關系需要在本組件RELEASE文件里添加其他組件的根目錄的路徑,從而實現依賴關系的建設,然后進行編譯和安裝即可。

圖4 高溫制氫邏輯架構Fig.4 High temperature hydrogen production logic architecture

圖5 EPICS模塊依賴關系圖Fig.5 EPICS Module dependency graph

表1 Modbus通訊協議數據格式Table 1 Modbus communication protocol data format
Modbus[10]是一種常用的串行總線協議,如今擁有串口、以太網等多種版本。本系統通過ZLAN 串口服務器,將串口轉換成以太網。Modbus 協議的數據格式如表1 所示。其中,設備地址通常可以在設備里自定義設置,默認通常是1。功能碼指明了當前Modbus 協議的具體操作,通常寫操作的功能碼為5,6,15,16,而讀操作碼為1,2,3,4。
EPICS 的Modbus 通訊協議,首選需要根據依賴關系完成安裝。然后,需要對啟動文檔modbus.cmd 進行如下配置。
1)drv Asyn IP Port Configure("H T S E L SJ","192.168.1.158:502",0,0,1)
2)modbusInterposeConfig("HTSELSJ",0,2000,0)
3)asynSetOption("HTSELSJ",0, "disconnectOnReadTimeout", "Y")
4)drvModbusAsynConfigure("ModAI01", "HTSELSJ", 0,3, 04000, 040, 0, 100, "Koyo")
5)dbLoadTemplate(“HTSELSJ.substitutions”)
其 中drvAsynIPPortConfigure 負 責IP 與 端 口 名的配置,完成異步連接。"HTSELSJ"為協議端口名,"192.168.1.158:502"為Modubs 設備端的IP 地址與服務端口。最后3 個參數分別為進程優先級,重連以及結尾標識符。
modbusInterposeConfig 命令負責驅動的一些配置,"HTSELSJ"為drvAsynIPPortConfigure 定義的端口名指明此操作的連接對象。第二個參數為連接類型,0 代表TCP/IP連接,1 代表RTU,2 代表ASCII。最后兩個參數分別表示最大延時上限,設備寫延時。
drvModbusAsynConfigure 實現最終Modbus 端口驅動,參數定義如下所示:
參數1:Modbus 表端口名(tablename)。
參數2:drvAsynIPPortConfigure 定義的端口名。
參數3:從站地址SlaveAdress。
參數4:為Modbus 功能碼,如表1 所示。
參數5:為Modbus 數據的起始地址。
參數6:Modbus-Length 為Modbus 數據表長度。
參數7:為數據類型。
參數8:為讀寫延時。
參數9:為PLC 類型說明字符串。
dbLoadTemplate 加載宏文件,通過宏文件和宏文件中的模板文件生成db 文件,db 文件定義了記錄(record)的具體類型。宏文件格式如下:
file "../../db/longin.template" { pattern
{P, R, PORT, OFFSET, SCAN}
{HTSELST:, AX01, ModAI01, 0, "I/O Intr"}
{HTSELST:, AX02, ModAI01, 1, "I/O Intr"}
{HTSELST:, AX02, ModAI01, 2, "I/O Intr"}
{HTSELST:, AX03, ModAI01, 3, "I/O Intr"}
}
PORT 字段(ModAI01)與啟動文件中的命令drvModbusAsynConfigure 的第一個參數(Modbus 表端口名)應相同,從而實現表名與基于Modbus 協議格式數據的設備物理地址相互映射。完成db 文件中的record 與Modbus 協議數據的連接。其中longin.template 為db 文件的模板文件,格式如下:
record(longin,"$(P)$(R)") {
field(DTYP,"asynUInt32Digital")
field(INP,"@asynMask($(PORT) $(OFFSET)0xFFFF)")
field(SCAN,"$(SCAN)")}
宏文件中的P 字段與R 字段,在運行時替換模板函數中的$(P)與$(R)從而完成record 的PV 變量名的組合。PORT 字段和地址偏移量(OFFSET)結合啟動文件中的其他命令完成數據尋址。
此外,Modbus 還有其他模板函數可供選擇,如bi_bit.template,bo.template,ai.template 等。通過啟動modbus.cmd 加載宏文件,使用模板文件生成的數據相關的record,通過記錄調用記錄支持,設備支持以及驅動完成數據通訊。
EPICS 的S7-TCP/IP 驅動支持模塊是支持TCP/IP 方式的設備數據通訊協議的驅動模塊,將設備PLC 控制器架設成TCP/IP 服務器,通過TCP/IP 的方式實現設備到EPICS IOC 的數據收發。首先通過以下命令創建空IOC 應用。
MakeBaseApp.pl -t ioc S7plc
MakeBaseApp.pl -i -t ioc S7plc
將S7-TCP/IP 驅動支持包放入S7plcApp/src 目錄下,修改Makefile,添加以下內容:
LIBRARY = s7plc
LIB_SRCS += s7plc_registerRecordDeviceDriver.cpp
LIB_SRCS += drvS7plc.c
LIB_SRCS += devS7plc.c
PROD_DEFAULT = s7plcApp
s7plcApp_LIBS += s7plc
s7plcApp_DBD += base.dbd
s7plcApp_DBD += s7plc.dbd
DBD += s7plcApp.dbd
s7plcApp.dbd.d: s7plc.dbd
s7plc.dbd: s7plcBase.dbd s7plcCalcout.dbd s7plcReg.dbd cat
更改ioc 下的st.cmd,添加以下內容:
dbLoadDatabase(“dbd/s7plcApp.dbd”)
s7plcApp_registerRecordDeviceDriver
s7plcConfigure ("HTSECSJ", "192.168.0.10", 2000, 1024,32, 1, 500, 100)
dbLoadRecords(“../../example.db”)
在TOP/db 目錄下添加example.db 格式如下:
record (ai, "HTSECSJ-AI01") {
# map range 0...1000 to 0.0000...10.0000
field (DTYP, "S7plc")
field (INP, "@HTSECSJ:0/0 'T=INT16 L=0 H=1000'")
field (EGUF, "10")
field (LOPR, "-10")
field (HOPR, "10")
field (LINR, "LINEAR")
field (PREC, "2")
field (SCAN, "I/O Intr")
}
其中,record 的INP 字段定義了設備通訊協議的端口地址與數據類型。
S7nodave 是 Siemens PLC 的 EPICS 驅動支持模塊。目前該模塊可以實現 Siemens S7 系列的多種PLC 通信協議支持,與S7-TCP/IP 通訊協議不同的是S7nodave 可直接訪問PLC 中的內存映射表內容,無需在PLC 端進行通訊配置。首先根據S7nodave 的依賴關系,將S7nodave 作為單獨模塊添加到 EPICS 的設備驅動塊目錄下并編譯,編譯成功后,在S7nodave 的TOP 目錄下的lib 目錄和dbd 目錄中分別有庫文件S7nodave 和dbd 文件S7nodave.dbd 生成。然后建立空IOC 應用,并且在IOC 的RELEASES 中配置S7nodave 安裝路徑,如下所示:
S7NODAVE=/usr/local/epics/modules/s7nodave
修改在IOC 程序的src 目錄中的makefile 文件,在文件中配置庫文件S7nodave 和dbd 文件S7nodave.dbd。
nodave_DBD + = s7nodave.dbd
nodave_LIBS + = s7nodave
S7nodave 設備支持可以直接讀取和寫入PLC 的內存地址,利用記錄record 的設備地址字段INP 和OUT,指定S7nodave 認可的PLC 設備地址。IOC 程序的st.cmd 文件中添加以下內容:
dbLoadDatabase("dbd /S7nodave.dbd")
S7nodave_register R ecordDeviceDriver pdbbase
S7nodaveConfigureIsoTcpPort( "HTSE02","192.168.1.1”,0,0,0)
S 7 n o d a v e C o n f i g u r e P o l l G r o u p( "H T S E 0 2","HTSE02group",0.1,0)
dbLoad R ecords “db/HTSE02.db”
由于PLC 與SoftIOC 間通過以太網基于TCP/IP 的方式交換信息,需要指明PLC 的IP 地址,后面3 個數字分別代表PLC 機架號、卡槽站號和線程優先級。db 文件記錄格式如下:
record(ao," $(user):W R ITEVOLTAGE_W8")
{
field( DTYP,"s7nodave" )
field( OUT,"@HTSE02(DLV=0,DHV = 27648) DB1.DBW8 int16" )}
record(ai,"$ (user):WRITEVOLTAGE_W8" )
{
field(DTYP,"s7nodave")
field(INP,"@HTSE02( DLV = 0,DHV = 27648) DB1.DBW16 int16)
}
record 中OUT 與INP 字段負責外部連接,其中分別需要指定端口名,數據上下限以及數據塊地址等。
EPICS 傳統上廣泛使用的歷史數據歸檔系統是RDB Channel Archiver。RDB Channel Archiver 是基于關系型數據庫來實現數據存儲的,然而由于關系型數據庫其本身嚴格定義的數據結構、多表查詢以及事務處理機制等因素而導致讀寫性能上存在瓶頸。當數據量到達一定量級是會存在檢索延時等情況,20KW 高溫制氫實驗裝置需要通過歷史數據進行快速歷史事件定位。因此,需要快速地響應歷史數據檢索結果。考慮到基于關系型數據庫的RDB Channel Archiver 的性能限制,本系統使用EPICS 最新的歸檔系統Archiver Appliance 來進行歷史數據存儲。
SLAC(Stanford Linear Accelerator Center,美國國家加速器實驗室)在2016 年EPICS 年度大會上展示了它們最新研發的EPICS Archiver Ap-pliance[11]系統。EPICS archiver appliance 重點關注于提高數據的聚合性能,同時研發了相應的管理界面,通過管理界面可以查看數據的歸檔狀態,數據的變化趨勢曲線等。
Archiver Appliance 本質上是一個Tomcat 服務器,提供了4 個Tomcat 進程。它們分別是數據歸檔引擎(Engine)、數據管理模塊(ETL)、數據檢索模塊(Retrieval)以及邏輯業務執行模塊(Mgmt)。Engine 的作用在于根據PV 變量名從IOC 采集數據。Retrieval 則負責從數據庫收集數據,并整合數據以滿足用戶檢索需求。Mgmt 則負責執行業務邏輯,管理頁面以及保存配置文件等。ETL 負責存儲數據的管理,負責將數據在3 個存儲階段間進行轉移。Archiver Appliance 存在3 個歷史數據存儲階段,它們是短期存儲階段(Short Term Store,STS),中期存儲階段(Medium term store,MTS)和長期存儲階段(Long Term Store,LTS)。STS 數據通常存放在內存中,它負責存儲數小時內的數據。MTS 負責存儲數天內的數據,它通常存放在固態硬盤和系統硬盤中。LTS 則負責更為長期的歷史數據存儲,ETL 負責將數據在各個存儲階段進行轉移。Archiver Appliance 的架構如圖6 所示。
本系統在Lenovo TS560 塔式服務器上搭建Archvier Appliance,總存儲容量約為3TB 左右。20KW 高溫制氫實驗裝置,需要監控的量約為250 個PV 變量。以每秒采樣率為3 計算,一個record 的一年占用存儲約為1.8GB,本服務器可以存儲6 年以上連續不斷的實驗產生的數據,足以滿足實驗的需求。圖7 為Archiver Appliance 系統主界面,圖8 為數據檢索界面。

圖6 Archiver Appliance原理圖Fig.6 Schematic diagram of the Archiver Appliance

圖7 Archiver Appliance系統主界面Fig.7 Main page of archiver appliance

圖8 Archiver Appliance數據檢索界面Fig.8 Retrieval page of Archiver Appliance

圖9 高溫制氫系統界面Fig.9 High temperature hydrogen production system interface
系統界面通過EPICS 人機界面工具CSS 來實現,本文以制氫模塊為例,如圖9 所示。系統界面主要分為工藝部分與關鍵數據圖表部分。工藝部分描述了系統的工藝流程圖、設備警報狀態以及頁面導航按鈕。在工藝流程圖上需要顯示溫度、流量、液位以及壓力等實時數據。在工藝流程圖下方則是各個關鍵設備的警報狀態顯示圖標,綠色表示設備正常,紅色表示設備異常。導航按鈕通過下拉框的形式實現各個子系統界面之間的切換。左邊部分為關鍵數據圖標部分,通過實時曲線的方式顯示關鍵數據,從而為實驗工況調節與事件定位提供支持。
本文基于EPICS 實現了20KW 高溫制氫實驗裝置的控制系統。首先利用西門子S7-PLC 實現了系統大部分設備的本地控制,通過分析EPICS 的多個通訊協議支持組件,實現了20KW 高溫制氫實驗裝置控制系統的遠程數據收發。考慮到系統實驗與實驗事件定位需要,本系統采用EPICS最新歷史歸檔系統Archiver Appliance 來存儲歷史數據。整套控制軟件均在Centos7 操作系統下基于EPICS 開發,簡化了軟件系統結構和代碼維護量,提高了整套系統運行的穩定性,為20KW 高溫制氫實驗裝置的控制系統提供了可靠的技術保障。