嚴(yán) 澤 李嘉杰 王小胡 莊 建
1(西南科技大學(xué)國防科技學(xué)院 綿陽621010)2(散裂中子源科學(xué)中心 東莞523803)3(中國科學(xué)院高能物理研究所 北京100049)4(深圳技術(shù)大學(xué)先進(jìn)材料測(cè)試技術(shù)研究中心 深圳518118)
中子是組成原子核的粒子之一,和質(zhì)子一起組成氫之外其他元素的原子核[1]。中子散射是研究物質(zhì)微觀結(jié)構(gòu)和動(dòng)態(tài)過程的理想工具之一,散裂中子源能為中子散射提供高通量的脈沖中子。散裂中子源是加速器驅(qū)動(dòng)的、產(chǎn)生強(qiáng)流中子束的大型科學(xué)實(shí)驗(yàn)裝置,其中子產(chǎn)生的機(jī)制為原子核的散裂反應(yīng)[2-3]。中國散裂中子源(Chinese Spallation Neutron Source,CSNS)是我國首臺(tái)散裂中子源,主要由一臺(tái)負(fù)氫離子直線加速器、一臺(tái)快循環(huán)同步加速器(Rapid Cycling Synchrotron,RCS)、兩條束流輸運(yùn)線、一個(gè)靶站、多臺(tái)譜儀以及相關(guān)配套設(shè)施組成[3-5]。CSNS多物理譜儀位于16號(hào)束線,多物理譜儀主要用于不同有序度材料的結(jié)構(gòu)分析,應(yīng)用領(lǐng)域主要集中在長(zhǎng)程有序但局域無序材料或長(zhǎng)程無序但中短程有序材料的結(jié)構(gòu)研究中[6]。CSNS屬于脈沖式中子源,加速器束流最高重復(fù)頻率為25 Hz,以加速器定時(shí)系統(tǒng)提供的質(zhì)子打靶時(shí)刻T0作為觸發(fā)信號(hào),對(duì)多物理譜儀配備的多臺(tái)中子斬波器和眾多中子探測(cè)及測(cè)量電子學(xué)進(jìn)行觸發(fā),用于實(shí)現(xiàn)高效的斬波功能和準(zhǔn)確的飛行時(shí)間計(jì)算,因此T0信號(hào)的準(zhǔn)確性和穩(wěn)定性決定了該譜儀是否能高效運(yùn)行。
基于實(shí)驗(yàn)物理和工業(yè)控制系統(tǒng)(Experimental Physics and Industrial Control System,EPICS)開發(fā)T0信號(hào)監(jiān)測(cè)系統(tǒng),借用CSNS的高精度時(shí)間同步系統(tǒng),將接入T0扇出器的T0信號(hào)標(biāo)記高精度時(shí)間戳,用于各個(gè)T0扇出器的頻率計(jì)算和各級(jí)扇出設(shè)備之間的時(shí)間差值計(jì)算,將數(shù)據(jù)上傳Kafka消息中間件,解決了高并發(fā)大量數(shù)據(jù)的寫入,有助于控制和優(yōu)化數(shù)據(jù)流傳輸?shù)乃俣?,解決生產(chǎn)消息和消費(fèi)消息處理速度不一致問題,同時(shí)提供異步處理機(jī)制,有利于對(duì)數(shù)據(jù)的處理和計(jì)算。最后實(shí)現(xiàn)數(shù)據(jù)的可視化功能,便于觀察T0信號(hào)的抖動(dòng)情況。
散裂中子源多物理譜儀的電子學(xué)系統(tǒng)作為中子科學(xué)研究和中子數(shù)據(jù)分析的重要基礎(chǔ),其數(shù)字化觸發(fā)平臺(tái)需要接入一個(gè)準(zhǔn)確的T0信號(hào)來進(jìn)行觸發(fā),觸發(fā)系統(tǒng)采用星型扇出結(jié)構(gòu),利用專用光纖逐級(jí)扇出的方法從位于靶站譜儀中控室的主站分發(fā)給各個(gè)譜儀和譜儀電子學(xué)。
中子斬波器是飛行時(shí)間中子散射譜儀不可缺少的關(guān)鍵設(shè)備之一,要實(shí)現(xiàn)與加速器觸發(fā)T0定時(shí)信號(hào)同步的斬波功能[6-7],準(zhǔn)確地接入T0觸發(fā)信號(hào)至關(guān)重要。對(duì)于探測(cè)器電子學(xué)和測(cè)量電子學(xué),T0作為開窗信號(hào),開啟采集時(shí)間窗,用于飛行時(shí)間的計(jì)算,通過測(cè)量中子的飛行時(shí)間來獲得中子能量信息是脈沖中子源中測(cè)定中子能量的關(guān)鍵[8-10]。不準(zhǔn)確的T0會(huì)導(dǎo)致斬波器的斬波相位與加速器中子束團(tuán)之間產(chǎn)生偏差,同時(shí)也會(huì)引起探測(cè)器的中子飛行時(shí)間計(jì)算錯(cuò)誤從而影響多物理譜儀實(shí)驗(yàn)數(shù)據(jù)的準(zhǔn)確性和實(shí)驗(yàn)結(jié)果的可靠性。在多物理譜儀的散射腔周圍分布著12組探測(cè)器陣列,每個(gè)陣列包含多個(gè)探測(cè)器模塊,分布圖如圖1所示。為了保證每個(gè)探測(cè)器模塊都能準(zhǔn)確地接收到T0信號(hào),各級(jí)扇出設(shè)備間采用的是相同長(zhǎng)度的光纖來保證T0信號(hào)的準(zhǔn)確性,但是探測(cè)器模塊對(duì)于T0信號(hào)觸發(fā)的及時(shí)性要求極高,因此建立觸發(fā)監(jiān)測(cè)系統(tǒng)對(duì)T0信號(hào)的頻率和在傳輸過程中的時(shí)間延遲進(jìn)行監(jiān)測(cè),從而保證T0對(duì)多物理眾多探測(cè)器模塊的準(zhǔn)確觸發(fā),這是高效探測(cè)和高可靠測(cè)量的基本保證。
圖1 多物理譜儀探測(cè)器分布圖Fig.1 Layout of multi-physical spectrometer detectors
該監(jiān)測(cè)系統(tǒng)采集前端T0設(shè)備的原始數(shù)據(jù),經(jīng)過統(tǒng)計(jì)分析,在靶站譜儀監(jiān)控平臺(tái)上顯示。主要包括硬件和軟件設(shè)計(jì),硬件設(shè)計(jì)部分用于時(shí)間戳的標(biāo)記及原始數(shù)據(jù)上傳;軟件設(shè)計(jì)部分針對(duì)T0信號(hào)頻率快、數(shù)據(jù)量大的特點(diǎn),采用了Kafka消息中間件對(duì)數(shù)據(jù)進(jìn)行持久化達(dá)到快速計(jì)算與分析的目的,同時(shí)對(duì)監(jiān)測(cè)數(shù)據(jù)進(jìn)行了可視化并設(shè)置報(bào)警。
在多物理譜儀T0信號(hào)分發(fā)系統(tǒng)主要分發(fā)T0信號(hào)和束團(tuán)ID編號(hào),由自研電子學(xué)硬件構(gòu)成,自研電子學(xué)部分接入T0信號(hào)和WR(White Rabbit)的時(shí)間同步信號(hào)分別用于T0信號(hào)的扇出和標(biāo)記高精度時(shí)間戳。可從該硬件部分通過串行接口輸出束團(tuán)ID、時(shí)間戳等內(nèi)容,因此可作為數(shù)據(jù)源。由于譜儀綜合監(jiān)控系統(tǒng)是使用Open-Falcon軟件,同時(shí)后端連接Kafka,所以考慮使用SOC(System on Chip)通過串行輸出數(shù)據(jù)并作為Kafka數(shù)據(jù)的生產(chǎn)者。在SOC上運(yùn)行相應(yīng)的操作系統(tǒng)可以完成復(fù)雜的任務(wù)管理與調(diào)度,同時(shí)支持上層應(yīng)用的開發(fā),適合應(yīng)用場(chǎng)景的SOC比常見的微控制單元(Microcontroller Unit,MCU)(如STM系列)更加符合與具備Kafka生產(chǎn)者的開發(fā)環(huán)境。系統(tǒng)的硬件組成如圖2所示,由自研電子學(xué)硬件和SOC共同組成T0的扇出設(shè)備T0扇出器。
圖2 硬件結(jié)構(gòu)框圖Fig.2 Block diagram of hardware structure
根據(jù)數(shù)據(jù)的頻率、大小,可選用具有Linux系統(tǒng)的樹莓派作為數(shù)據(jù)的輸出和上傳,其中樹莓派3B搭載博通的四核64位ARM Cortex-A53處理器,樹莓派4搭載了博通的四核64位ARM Cortex-A72處理器,參數(shù)如表1所示,通過對(duì)CPU性能、主頻、網(wǎng)絡(luò)、內(nèi)存等的對(duì)比,選擇樹莓派4更能符合實(shí)際的需求。
表1 硬件參數(shù)對(duì)比Table 1 Hardware parameter comparison
監(jiān)測(cè)系統(tǒng)的監(jiān)測(cè)量為多物理譜儀T0扇出器束團(tuán)ID(pulse_ID)的頻率,和T0信號(hào)與真實(shí)質(zhì)子打靶時(shí)間的偏差,量級(jí)為ns。T0在傳輸過程中,一條鏈路上有多個(gè)節(jié)點(diǎn)每個(gè)節(jié)點(diǎn)都分配有T0扇出器。加速器定時(shí)系統(tǒng)的頻率為25 Hz,當(dāng)束流開機(jī)時(shí),需對(duì)每次脈沖產(chǎn)生的T0進(jìn)行監(jiān)測(cè),在一定的時(shí)間內(nèi)產(chǎn)生的數(shù)據(jù)量較大、頻率較快且數(shù)據(jù)是持續(xù)產(chǎn)生直到束流結(jié)束。當(dāng)對(duì)時(shí)間差值以及頻率進(jìn)行計(jì)算時(shí)需要多臺(tái)T0扇出器的時(shí)間戳數(shù)據(jù),因此需將數(shù)據(jù)進(jìn)行暫存來實(shí)現(xiàn)鏈路上各個(gè)節(jié)點(diǎn)、多臺(tái)設(shè)備的之間的延遲時(shí)間的計(jì)算,同時(shí)保證數(shù)據(jù)的實(shí)時(shí)性進(jìn)行快速計(jì)算。
根據(jù)上述T0信號(hào)的特點(diǎn)和計(jì)算的需要,采用Kafka來保證多臺(tái)設(shè)備大量數(shù)據(jù)同時(shí)、持續(xù)地寫入并暫存。Kafka的構(gòu)架如圖3所示,Kafka是一種高吞吐量的分布式發(fā)布訂閱消息系統(tǒng),主要包括:生產(chǎn)者(producer)負(fù)責(zé)創(chuàng)建消息,消費(fèi)者(consumer)連接Kafka并訂閱消息,broker為服務(wù)代理節(jié)點(diǎn)[11]。一個(gè)或多個(gè)broker組成一個(gè)Kafka集群,Zookeeper是Kafka用來負(fù)責(zé)集群元數(shù)據(jù)的管理[12]。將多臺(tái)T0扇出器分別作為數(shù)據(jù)的生產(chǎn)者向Kafka寫入數(shù)據(jù),將數(shù)據(jù)持久化到Kafka的topic中,然后通過消費(fèi)者對(duì)數(shù)據(jù)訂閱進(jìn)行計(jì)算與處理,為保證監(jiān)測(cè)數(shù)據(jù)能夠合理地顯示,計(jì)算每秒25次時(shí)間差值的最大值、平均值、最小值,將差值作為PV上傳EPICS。
圖3 Kafka架構(gòu)框圖Fig.3 Block diagram of Kafka architecture
CSNS采用的是EPICS分布式控制架構(gòu),EPICS的組成包括三部分:運(yùn)行在客戶端的操作員接口模塊OPI(Operator Interface)、運(yùn)行在服務(wù)器端的輸入輸出控制模塊IOC(Input Output Controller)和網(wǎng)絡(luò)通訊模塊CA(Channel Access)[13]。將監(jiān)測(cè)量作為過程變量(Process Variable,PV)通過pyepics接口上傳到EPICS對(duì)應(yīng)IOC中的記錄(record),IOC的掃描時(shí)間為1 s,實(shí)現(xiàn)對(duì)變量的監(jiān)控,將監(jiān)測(cè)系統(tǒng)集成于整個(gè)CSNS的EPICS控制架構(gòu)下。為實(shí)現(xiàn)遠(yuǎn)程監(jiān)控與監(jiān)測(cè)量的直觀展示采用監(jiān)控框架Open-Falcon和可視化工具Grafana接入來自EPICS的PV量,Open-Falcon數(shù)據(jù)刷新頻率為60 s,所以數(shù)據(jù)在Grafana的進(jìn)行展示的刷新頻率也是60 s。整個(gè)監(jiān)測(cè)系統(tǒng)的結(jié)構(gòu)如圖4所示。
圖4 監(jiān)測(cè)系統(tǒng)結(jié)構(gòu)示意圖Fig.4 Schematic diagram of monitoring system structure
系統(tǒng)的實(shí)現(xiàn)部分主要包括數(shù)據(jù)序列化與反序列化處理、Kafka生產(chǎn)者、消費(fèi)者的開發(fā)以及監(jiān)控系統(tǒng)的數(shù)據(jù)可視化工作。
樹莓派作為數(shù)據(jù)生產(chǎn)者以串行接口的方式從T0信號(hào)扇出器的自研電子學(xué)部分獲取數(shù)據(jù),需要安裝樹莓派的C語言開發(fā)庫wiringPi,用于樹莓派的串口通信。同時(shí)需要上傳數(shù)據(jù)到Kafka服務(wù)器,需要安裝Kafka的C/C++接口librdKafka庫。安裝序列化庫flatbuffers,不同的數(shù)據(jù)生產(chǎn)者由于開發(fā)語言不同而需要建設(shè)不同的Kafka接口,需要使用序列化工具將數(shù)據(jù)封裝后上傳至Kafka集群。
生產(chǎn)者程序如圖5所示,組成部分包括:樹莓派獲取數(shù)據(jù)、解析數(shù)據(jù)、數(shù)據(jù)序列化、數(shù)據(jù)發(fā)送Kafka。由于串口接收到的數(shù)據(jù)是二進(jìn)制流,根據(jù)數(shù)據(jù)格式接收21個(gè)字節(jié)為完整的數(shù)據(jù),并根據(jù)標(biāo)志位將數(shù)據(jù)切分為三部分,包括質(zhì)子打靶脈沖編號(hào)(pulse_id)、秒下(time_nano)信息、秒上(time_second)信息,將數(shù)據(jù)解析為十進(jìn)制數(shù)據(jù),讀取和解析過程如圖6所示。給設(shè)備定義T0扇出器設(shè)備編號(hào)(device_id)、設(shè)備名稱(device_name),備用值(value)同pulse_id和時(shí)間值一起定義需要序列化的數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)類型如表2,編寫schema文件MetaData.fbs,通過序列化工具flatbuffer進(jìn)行序列化轉(zhuǎn)化為二進(jìn)制數(shù)據(jù)用于傳輸。序列化后的數(shù)據(jù)通過Kafka生產(chǎn)者上傳動(dòng)作即produce函數(shù)(virtual ErrorCode produce)上傳數(shù)據(jù)。
圖5 生產(chǎn)者程序流程圖Fig.5 Producer program flow chart
圖6 讀取與解析子程序流程圖Fig.6 Flowchart of reading and parsing subroutine
表2 Schema文件數(shù)據(jù)類型Table 2 Schema file data type
消費(fèi)者采用python開發(fā),環(huán)境搭建需要安裝Kafka python API、flatbuffer python API、EPICS python API,分別用于連接Kafka建立消費(fèi)動(dòng)作、反序列化數(shù)據(jù)、數(shù)據(jù)上傳EPICS軟件。調(diào)用flatc使schema文件生成python對(duì)應(yīng)的Data包,程序開發(fā)時(shí)導(dǎo)入,方便調(diào)用生成的schema實(shí)列方法MD.MetaData.GetRootAsMetaData(buf,0)進(jìn)行反序列化。通 過 函 數(shù)Kafkaconsumer(topic,group_id,bootstrap_servers)連接Kafka服務(wù)器,主要參數(shù)包括訂閱的主題、消費(fèi)組名、Kafka服務(wù)器的地址。Consumer的消費(fèi)動(dòng)作是循環(huán)的流式消費(fèi)處理:for msg in consumer,循環(huán)內(nèi)通過buf=msg.value獲取數(shù)據(jù),再調(diào)用schema實(shí)例方法進(jìn)行反序列化,然后依次讀取數(shù)據(jù),Kafka的消費(fèi)動(dòng)作即完成。
在實(shí)際工程中,質(zhì)子流強(qiáng)監(jiān)測(cè)器中真實(shí)質(zhì)子打靶的數(shù)據(jù)和T0扇出器的上傳到了不同的Kafka服務(wù)器,需要在不同的Kafka服務(wù)器中去消費(fèi),因此開啟兩個(gè)進(jìn)程去讀取數(shù)據(jù)。以不同的設(shè)備編號(hào)作為區(qū)分,以同一ID為基準(zhǔn)來對(duì)齊數(shù)據(jù),找到不同T0扇出器設(shè)備同一ID的時(shí)間值和質(zhì)子流強(qiáng)監(jiān)測(cè)器對(duì)應(yīng)的ID時(shí)間值,然后計(jì)算差值。程序流程如圖7所示,主要使用隊(duì)列來實(shí)現(xiàn)進(jìn)程間的通信,使用隊(duì)列的方法put()和get(),該隊(duì)列是阻塞隊(duì)列,當(dāng)隊(duì)列中沒有數(shù)據(jù)的情況下,消費(fèi)該隊(duì)列的進(jìn)程會(huì)被自動(dòng)阻塞(掛起),直到有數(shù)據(jù)放入隊(duì)列。當(dāng)隊(duì)列中填滿數(shù)據(jù)的情況下,生產(chǎn)該隊(duì)列的進(jìn)程被自動(dòng)阻塞(掛起),當(dāng)隊(duì)列中有空的位置,進(jìn)程被自動(dòng)喚醒。
圖7 程序流程圖Fig.7 Program flow chart
進(jìn)程p1為從Kafka1服務(wù)器(T0扇出器的數(shù)據(jù)上傳的服務(wù)器)中消費(fèi),進(jìn)程p2為從Kafka2服務(wù)器(真實(shí)質(zhì)子打靶數(shù)據(jù)上傳的服務(wù)器)消費(fèi)。兩個(gè)進(jìn)程都從最后的offset消費(fèi),利用阻塞隊(duì)列使他們對(duì)齊。p1消費(fèi)最后的offset得到初始ID,將初始ID通過隊(duì)列queue1發(fā)送給進(jìn)程p2然后阻塞。進(jìn)程p1要得到進(jìn)程p2中的數(shù)據(jù),只有當(dāng)隊(duì)列queue2中有數(shù)據(jù)時(shí)才可以,即進(jìn)程p2消費(fèi)得到的ID和進(jìn)程p1消費(fèi)得到的ID相同時(shí),其他時(shí)候被阻塞,當(dāng)ID對(duì)齊時(shí)開始計(jì)算差值。
在Linux系統(tǒng)下安裝EPICS base搭建softIoc,通過pyepics接口將計(jì)算的時(shí)間差值作為PV量上傳到EPICS。在使用EPICS的softIoc時(shí)需要設(shè)計(jì)softIoc實(shí)時(shí)數(shù)據(jù)庫,EPICS IOC實(shí)時(shí)數(shù)據(jù)庫能夠?qū)崟r(shí)接收和存儲(chǔ)上傳的數(shù)據(jù),編寫數(shù)據(jù)庫記錄db文件,啟動(dòng)softIoc時(shí)鏈接自定義的db文件。
數(shù)據(jù)可視化的工作主要是將上傳到EPICS的PV量作為自定義數(shù)據(jù)上傳到Open-Falcon作為數(shù)據(jù)源,然后利用Grafana軟件進(jìn)行數(shù)據(jù)的直觀展示。自定義數(shù)據(jù)的格式要求是json格式,包括7個(gè)字段:1)metric:最核心的字段,即采集數(shù)據(jù)的名稱;2)endpoint:標(biāo)明Metric的主體(屬主);3)timestamp:表示上傳數(shù)據(jù)時(shí)的unix時(shí)間戳;4)value:代表該metric在當(dāng)前時(shí)間點(diǎn)的值;5)step:表示該數(shù)據(jù)采集項(xiàng)的匯報(bào)周期;6)counterType:有COUNTER和GAUGE兩種選擇,前者表示該數(shù)據(jù)采集項(xiàng)為計(jì)時(shí)器類型,后者表示其為原值;7)tags:一組逗號(hào)分割的鍵值對(duì),對(duì)metric進(jìn)一步描述和細(xì)化,可以是空字符串。在python腳本中定義字典record,對(duì)應(yīng)參數(shù)如表3。
表3 自定義數(shù)據(jù)格式Table 3 Custom data format
針對(duì)系統(tǒng)的穩(wěn)定性進(jìn)行測(cè)試分析,主要測(cè)試傳輸不同數(shù)據(jù)量對(duì)生產(chǎn)者程序的影響,從而得到數(shù)據(jù)傳輸數(shù)據(jù)量的參考值;同時(shí)對(duì)每個(gè)周期的數(shù)據(jù)進(jìn)行用時(shí)監(jiān)測(cè),計(jì)算數(shù)據(jù)生產(chǎn)到消費(fèi)的時(shí)間,判斷數(shù)據(jù)是否有堆積;最后用Grafana軟件對(duì)數(shù)據(jù)進(jìn)行展示得到結(jié)果。
為保證樹莓派能夠正常生產(chǎn)數(shù)據(jù),不存在內(nèi)存崩潰,CPU占用率過高問題導(dǎo)致響應(yīng)不及時(shí)。測(cè)試傳輸數(shù)據(jù)量與系統(tǒng)影響,對(duì)Kafka生產(chǎn)者程序進(jìn)行運(yùn)行測(cè)試。測(cè)試發(fā)送不同字節(jié)數(shù)數(shù)據(jù)時(shí)系統(tǒng)負(fù)載的變化,通過Linux下的top命令查看生產(chǎn)者程序的CPU和內(nèi)存。根據(jù)散裂中子源工程中可能會(huì)出現(xiàn)的數(shù)據(jù)量大小,從小往大倍數(shù)式測(cè)試,每個(gè)測(cè)試點(diǎn)均測(cè)試運(yùn)行20 min,取最大值,最終形成圖8的曲線圖。由圖8可見,當(dāng)數(shù)據(jù)量少于23 000字節(jié)時(shí),CPU占用率低于14%,內(nèi)存占用也低于0.4%,即使在234 000字節(jié)時(shí),CPU和內(nèi)存占用率都在合理范圍內(nèi)。通過對(duì)具體數(shù)據(jù)的實(shí)際需求分析,設(shè)置每個(gè)脈沖發(fā)送120字節(jié)數(shù)據(jù),此數(shù)據(jù)量在測(cè)試曲線中處于較低且較平穩(wěn)的范圍內(nèi),因此可評(píng)估生產(chǎn)者程序在樹莓派硬件中能穩(wěn)定運(yùn)行。
圖8 不同數(shù)據(jù)長(zhǎng)度生產(chǎn)者程序CPU和內(nèi)存占用率Fig.8 CPU and memory usage of producer programs for data of different length
為了驗(yàn)證監(jiān)測(cè)數(shù)據(jù)能每周期上傳及計(jì)算統(tǒng)計(jì),對(duì)數(shù)據(jù)產(chǎn)生至消費(fèi)的過程進(jìn)行用時(shí)檢測(cè),以確保監(jiān)測(cè)結(jié)果的實(shí)時(shí)有效性。利用數(shù)據(jù)在生產(chǎn)者和消費(fèi)者的時(shí)間戳進(jìn)行計(jì)算測(cè)試,如圖9(a)所示。
ntp時(shí)間同步在局域網(wǎng)內(nèi)精度可以達(dá)到毫秒級(jí)[14],使用ntp時(shí)間同步將生產(chǎn)者的主機(jī)和消費(fèi)者的主機(jī)進(jìn)行時(shí)間同步,設(shè)置同步間隔為60 s,使用clockdiff測(cè)得兩臺(tái)主機(jī)間的時(shí)間差值為1 ms,對(duì)每一條消息產(chǎn)生后標(biāo)記生產(chǎn)者主機(jī)的時(shí)間戳,連同數(shù)據(jù)一起上傳至Kafka服務(wù)器,用消費(fèi)者消費(fèi)每條消息后的時(shí)間戳減去該條消息中生產(chǎn)者的時(shí)間,得到數(shù)據(jù)上傳Kafka服務(wù)器到消費(fèi)耗費(fèi)的時(shí)間。統(tǒng)計(jì)10萬條數(shù)據(jù),設(shè)置組距為0.1,從圖9(b)可以看出,最小值為9.5 ms,最大值為19.9 ms,耗費(fèi)的時(shí)間主要集中在12.5 ms左右,且呈正態(tài)分布,而生產(chǎn)者生產(chǎn)消息的周期是40 ms,說明每個(gè)周期內(nèi)生產(chǎn)的數(shù)據(jù)都在該周期內(nèi)上傳與消費(fèi),沒有產(chǎn)生數(shù)據(jù)堆積的問題,消費(fèi)者能夠進(jìn)行及時(shí)消費(fèi),符合實(shí)際工程需求。
圖9 用時(shí)計(jì)算結(jié)構(gòu)圖(a)和傳輸時(shí)間頻數(shù)分布圖(b)Fig.9 Structure diagram of time calculation(a)and distribution diagram of time transmission frequency(b)
在Grafana中下載Open-Falcon插件安裝并添加數(shù)據(jù)源的地址。在Grafana中主要使用Graph Panel插件,將數(shù)據(jù)展示成折線、條狀、點(diǎn)狀等風(fēng)格,并設(shè)定的報(bào)警閾值。圖10為現(xiàn)場(chǎng)設(shè)備安裝測(cè)試,得到最后的監(jiān)控界面如圖11所示。從結(jié)果可以得出,監(jiān)測(cè)系統(tǒng)實(shí)現(xiàn)對(duì)傳輸鏈路上各個(gè)節(jié)點(diǎn)設(shè)備的監(jiān)控,同時(shí)對(duì)各個(gè)節(jié)點(diǎn)的平均值、最大值、最小值進(jìn)行了統(tǒng)一顯示便于對(duì)比。
圖10 硬件設(shè)備現(xiàn)場(chǎng)安裝和測(cè)試圖Fig.10 Photos of hardware equipment installation and test on site
圖11 數(shù)據(jù)可視化界面Fig.11 Data visualization interface
本文根據(jù)CSNS多物理譜儀T0信號(hào)的扇出路徑和T0信號(hào)觸發(fā)的重要性出發(fā),對(duì)T0信號(hào)的監(jiān)測(cè)做出需求分析,在EPICS平臺(tái)下設(shè)計(jì)了多物理譜儀的T0監(jiān)測(cè)系統(tǒng)。利用Kafka消息中間件來實(shí)現(xiàn)數(shù)據(jù)的暫存,便于數(shù)據(jù)的處理,同時(shí)采用Open-Falcon軟件與Grafana可視化工具對(duì)監(jiān)測(cè)量進(jìn)行了直觀的曲線展示、報(bào)警反饋等,達(dá)到了良好的監(jiān)測(cè)效果,并投入使用。