王丹豪, 彭道剛, 張銳鋒, 趙慧榮
(1.上海電力大學(xué) 自動(dòng)化工程學(xué)院, 上海 200090;2.貴州電網(wǎng)有限責(zé)任公司 電力科學(xué)研究院, 貴州 貴陽(yáng) 550002)
智慧電廠的本質(zhì)是信息化和智能化技術(shù)在發(fā)電領(lǐng)域的融合,信息化和智能化的基礎(chǔ)就是數(shù)據(jù)[1]。以發(fā)電廠廠級(jí)監(jiān)控信息系統(tǒng)和分散控制系統(tǒng)為例,通常以用于過(guò)程控制的OLE(OLE for Process Control,OPC)作為現(xiàn)場(chǎng)設(shè)備數(shù)據(jù)信息的接口標(biāo)準(zhǔn)[2],基于此標(biāo)準(zhǔn)傳輸實(shí)時(shí)數(shù)據(jù),構(gòu)建電廠的信息化平臺(tái)。OPC數(shù)據(jù)采集一般使用相關(guān)廠家的商業(yè)OPC客戶端軟件[3-6],存在模式單一、功能簡(jiǎn)陋、費(fèi)用昂貴、采樣頻率低等問(wèn)題,導(dǎo)致了后續(xù)系統(tǒng)開(kāi)發(fā)成本高、周期長(zhǎng)、可靠性差等后果,為智慧電廠的建設(shè)帶來(lái)了一定的困難。
OPC標(biāo)準(zhǔn)已經(jīng)應(yīng)用多年,多種編程語(yǔ)言均支持OPC標(biāo)準(zhǔn)的開(kāi)發(fā)。文獻(xiàn)[7]提出了一種采用node.js語(yǔ)言開(kāi)發(fā)的OPC客戶端;文獻(xiàn)[8]提出了一種基于C#語(yǔ)言開(kāi)發(fā)的OPC客戶端;文獻(xiàn)[9]提出了一種基于JAVA語(yǔ)言的OPC客戶端。
雖然很多學(xué)者采用了不同的語(yǔ)言進(jìn)行OPC客戶端的開(kāi)發(fā)和實(shí)現(xiàn)[10-11],但大多數(shù)還停留在代碼層級(jí)的實(shí)現(xiàn)。鑒于此,本文依據(jù)OPC實(shí)時(shí)數(shù)據(jù)訪問(wèn)規(guī)范(Data Access,DA)標(biāo)準(zhǔn),采用JAVA編程語(yǔ)言,設(shè)計(jì)開(kāi)發(fā)了一套基于OPC(DA)標(biāo)準(zhǔn)的通用工業(yè)數(shù)據(jù)采集和轉(zhuǎn)儲(chǔ)系統(tǒng)軟件(OPC to Database,OTDB),很好地解決上述數(shù)據(jù)采集和轉(zhuǎn)儲(chǔ)過(guò)程中存在的問(wèn)題。
在實(shí)際的工業(yè)信息化系統(tǒng)開(kāi)發(fā)中,現(xiàn)有的OPC數(shù)據(jù)采集和轉(zhuǎn)儲(chǔ)系統(tǒng)軟件主要存在以下問(wèn)題。
(1) 未集成可視化交互界面,采集方式不靈活,用戶體驗(yàn)差,普通用戶難以使用。
(2) 轉(zhuǎn)儲(chǔ)類(lèi)型單一,只能轉(zhuǎn)儲(chǔ)特定的數(shù)據(jù)倉(cāng)庫(kù),或只能滿足特定版本的數(shù)據(jù)倉(cāng)庫(kù)。
(3) 轉(zhuǎn)儲(chǔ)模式固定,只能以其軟件固定的方式寫(xiě)入數(shù)據(jù)倉(cāng)庫(kù),無(wú)法更改字段名稱和數(shù)據(jù)表名稱,難以滿足系統(tǒng)的實(shí)際開(kāi)發(fā)需求。
(4) 轉(zhuǎn)儲(chǔ)配置復(fù)雜,配置頁(yè)面內(nèi)容復(fù)雜,在采樣點(diǎn)比較多的情況下,無(wú)法批量選擇與更改,甚至存在一步做錯(cuò)就要全部重置的情況。
(5) 跨平臺(tái)能力差,部分軟件只能在特定的系統(tǒng)版本上運(yùn)行,難以在不同的平臺(tái)上使用。
(6) 容災(zāi)能力差,在服務(wù)器故障關(guān)機(jī)重啟后,無(wú)法自動(dòng)恢復(fù)數(shù)據(jù)的轉(zhuǎn)儲(chǔ),導(dǎo)致數(shù)據(jù)大量丟失。
針對(duì)現(xiàn)有OPC數(shù)據(jù)采集和轉(zhuǎn)儲(chǔ)系統(tǒng)軟件的不足,OTDB在設(shè)計(jì)研發(fā)過(guò)程中需要遵循的原則主要包括以下幾個(gè)方面。
(1) 通過(guò)JAVA可視化技術(shù),開(kāi)發(fā)交互界面,豐富配置內(nèi)容,為用戶提供簡(jiǎn)單自由的配置方式。
(2) 提供多樣的數(shù)據(jù)倉(cāng)庫(kù)支持,包括常用的MySQL和Sql Server數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng),并且提供同一數(shù)據(jù)倉(cāng)庫(kù)的不同版本之間的支持。
(3) 通過(guò)簡(jiǎn)單的文件配置即可完成不同的數(shù)據(jù)表轉(zhuǎn)儲(chǔ)任務(wù),并提供自定義的數(shù)據(jù)庫(kù)名、數(shù)據(jù)表名、字段名更改,可動(dòng)態(tài)地創(chuàng)建或重建轉(zhuǎn)儲(chǔ)庫(kù)和轉(zhuǎn)儲(chǔ)表。
(4) 通過(guò)簡(jiǎn)單配置項(xiàng)可生成配置模板,提供高自由度的轉(zhuǎn)儲(chǔ)配置方法,實(shí)現(xiàn)批量配置修改,降低配置復(fù)雜度。
(5) 支持不同的系統(tǒng)平臺(tái)進(jìn)行安裝和部署,具備優(yōu)異的跨平臺(tái)能力。
(6) 支持系統(tǒng)軟件開(kāi)機(jī)自啟動(dòng),可配置開(kāi)機(jī)自動(dòng)轉(zhuǎn)儲(chǔ)數(shù)據(jù)倉(cāng)庫(kù)的功能,在服務(wù)器故障恢復(fù)時(shí)能自動(dòng)恢復(fù)數(shù)據(jù)轉(zhuǎn)儲(chǔ)任務(wù),減少數(shù)據(jù)丟失,降低運(yùn)維的復(fù)雜度。
(7) 提高系統(tǒng)的數(shù)據(jù)采集能力,可實(shí)現(xiàn)大規(guī)模數(shù)據(jù)的采集及短周期、超短周期高頻數(shù)據(jù)的采集。
(8) 與其他業(yè)務(wù)系統(tǒng)解耦,專(zhuān)注于實(shí)現(xiàn)數(shù)據(jù)的采集和轉(zhuǎn)儲(chǔ)任務(wù),提高系統(tǒng)的穩(wěn)定性和可靠性。
OTDB系統(tǒng)軟件在網(wǎng)絡(luò)中處于OPC服務(wù)器與數(shù)據(jù)系統(tǒng)服務(wù)器之間,集成了用戶授權(quán)驗(yàn)證、實(shí)時(shí)數(shù)據(jù)顯示、OPC服務(wù)端配置、轉(zhuǎn)儲(chǔ)列表配置、數(shù)據(jù)倉(cāng)庫(kù)配置、轉(zhuǎn)儲(chǔ)粒度配置、實(shí)時(shí)任務(wù)狀態(tài)日志顯示、軟件及任務(wù)自啟動(dòng)自恢復(fù)、OPC服務(wù)器自動(dòng)激活等多種功能。通過(guò)這些功能,將OPC服務(wù)器的數(shù)據(jù)自由地導(dǎo)入本地或遠(yuǎn)程數(shù)據(jù)倉(cāng)庫(kù)中。其功能架構(gòu)如圖2所示。
圖2 OTDB功能架構(gòu)
為了保證OTDB數(shù)據(jù)采集和轉(zhuǎn)儲(chǔ)系統(tǒng)軟件在實(shí)際使用過(guò)程中的穩(wěn)定性和可靠性,對(duì)程序的執(zhí)行流程進(jìn)行了有針對(duì)性的設(shè)計(jì)和優(yōu)化。程序執(zhí)行的具體步驟如下。
(1) 判斷軟件是否已經(jīng)取得授權(quán)。若已取得授權(quán)則軟件會(huì)自動(dòng)激活,并判斷用戶是否設(shè)置故障自啟動(dòng)。若設(shè)置了自啟動(dòng),則OTDB會(huì)自動(dòng)激活OPC服務(wù)端程序,否則等待用戶手動(dòng)啟動(dòng)客戶端。
(2) 自動(dòng)掃描配置信息,若已有配置信息,則進(jìn)行OPC服務(wù)器的連接認(rèn)證和數(shù)據(jù)庫(kù)服務(wù)器的連接測(cè)試;若無(wú)配置信息,則需先進(jìn)行信息配置。
(3) 配置OPC服務(wù)器,通過(guò)自動(dòng)導(dǎo)出功能,導(dǎo)出測(cè)點(diǎn)文件的配置信息;用戶自主選擇需要轉(zhuǎn)儲(chǔ)的測(cè)點(diǎn)以及導(dǎo)入數(shù)據(jù)庫(kù)的字段信息;系統(tǒng)可支持向多張不同的表同時(shí)導(dǎo)入數(shù)據(jù)的功能。
(4) 設(shè)置完配置文件后,可選擇相應(yīng)的廠家數(shù)據(jù)庫(kù)及對(duì)應(yīng)的數(shù)據(jù)庫(kù)版本。用戶可自主重建數(shù)據(jù)庫(kù)及數(shù)據(jù)表,縮短開(kāi)發(fā)周期,簡(jiǎn)化開(kāi)發(fā)流程。
生物化學(xué)實(shí)驗(yàn)是藥學(xué)專(zhuān)業(yè)一門(mén)重要的專(zhuān)業(yè)基礎(chǔ)實(shí)驗(yàn)課,為了能讓藥學(xué)生在有限的資源和時(shí)間內(nèi)更好地掌握實(shí)驗(yàn)技能,生物化學(xué)實(shí)驗(yàn)教學(xué)課程體系需要不斷優(yōu)化和完善。近年來(lái),本校生物化學(xué)教研室在教學(xué)方法和手段、教學(xué)內(nèi)容、成績(jī)?cè)u(píng)估方式和教學(xué)資源等方面,對(duì)實(shí)驗(yàn)課程的教學(xué)進(jìn)行了系列改革。通過(guò)實(shí)踐,提高了學(xué)生的科研素質(zhì)、分析問(wèn)題與解決問(wèn)題的能力,為培養(yǎng)高質(zhì)量藥學(xué)人才奠定了基礎(chǔ)。
(5) 設(shè)置數(shù)據(jù)的采集周期,導(dǎo)入測(cè)點(diǎn)配置文件后進(jìn)行連接測(cè)試。若連接測(cè)試通過(guò),即可配置自動(dòng)轉(zhuǎn)儲(chǔ)功能的開(kāi)啟;否則,根據(jù)提示信息排查錯(cuò)誤。
(6) 配置信息步驟完成后,開(kāi)始對(duì)OPC服務(wù)器的測(cè)點(diǎn)進(jìn)行數(shù)據(jù)采樣,并以多線程的方式寫(xiě)入相應(yīng)的數(shù)據(jù)庫(kù)和數(shù)據(jù)表中。
OTDB程序執(zhí)行流程如圖3所示。
圖3 OTDB的程序執(zhí)行流程
由于數(shù)據(jù)分析系統(tǒng)通常采用JAVA語(yǔ)言開(kāi)發(fā),所以基于JAVA語(yǔ)言開(kāi)發(fā)OPC客戶端能與其他系統(tǒng)有更好的兼容性,且便于二次開(kāi)發(fā)。JAVA語(yǔ)言開(kāi)發(fā)OPC客戶端主要分為Utgard和JEasyOPC兩種開(kāi)源類(lèi)庫(kù)方式。Utgard方式具有采樣頻率高、支持點(diǎn)數(shù)多等優(yōu)點(diǎn),但不支持組查詢,無(wú)法讀取OPC的節(jié)點(diǎn)列表,且使用前需要配置DCOM獲得用戶名和密碼,導(dǎo)致操作過(guò)程復(fù)雜,用戶無(wú)法有效使用,其功能以面向開(kāi)發(fā)者為主[6]。JEasyOPC進(jìn)行OPC數(shù)據(jù)采集的方式雖然犧牲了部分性能,但其無(wú)需配置DCOM,不需要用戶名和密碼,且支持組查詢等,使用過(guò)程簡(jiǎn)單,穩(wěn)定性好。兩種方式的具體對(duì)比如表1所示。
表1 Utgard和JEasyOPC的性能對(duì)比
OTDB客戶端采用JEasyOPC方式,C/S架構(gòu)開(kāi)發(fā),具備簡(jiǎn)潔的用戶交互界面,同時(shí)支持WindowsXP,Windows7,Windows8,Windows10的32/64位操作系統(tǒng)。其主要包含用戶授權(quán)模塊、用戶配置模塊、數(shù)據(jù)采集模塊。
用戶在安裝OTDB客戶端后,程序會(huì)自動(dòng)讀取本機(jī)的機(jī)器碼,通過(guò)相關(guān)加密算法,生成與機(jī)器碼對(duì)應(yīng)的唯一識(shí)別碼。當(dāng)用戶獲得授權(quán)碼后,OTDB會(huì)將授權(quán)碼持久化到磁盤(pán)。當(dāng)軟件服務(wù)器重啟或故障恢復(fù)后,系統(tǒng)會(huì)自動(dòng)跳過(guò)用戶驗(yàn)證頁(yè)面,以保證數(shù)據(jù)轉(zhuǎn)儲(chǔ)任務(wù)的正常運(yùn)行。
JAVA通過(guò)調(diào)用服務(wù)器腳本命令查詢CPU序列號(hào),再通過(guò)輸入流的方式獲得序列號(hào),在客戶端將授權(quán)碼進(jìn)行解碼,并與序列號(hào)進(jìn)行一致性校驗(yàn)。
用戶授權(quán)登錄模塊軟件界面如圖4所示。
圖4 用戶授權(quán)模塊軟件界面
該模塊的主要功能包括OPC服務(wù)器的相關(guān)配置、數(shù)據(jù)庫(kù)相關(guān)配置,以及轉(zhuǎn)儲(chǔ)任務(wù)的相關(guān)配置等,其實(shí)現(xiàn)流程如下。
(1) JAVA OPC客戶端與OPC服務(wù)器建立安全通道,獲取OPC服務(wù)器的組列表及節(jié)點(diǎn)名稱,通過(guò)文本輸出流將測(cè)點(diǎn)信息寫(xiě)入csv文件。
(2) OTDB軟件將現(xiàn)在主流的數(shù)據(jù)庫(kù)驅(qū)動(dòng)加入軟件內(nèi)部,用戶可自行選擇不同類(lèi)型的數(shù)據(jù)庫(kù)驅(qū)動(dòng),通過(guò)數(shù)據(jù)庫(kù)的地址、用戶名、密碼與數(shù)據(jù)庫(kù)建立連接。
(3) 用戶配置csv格式的數(shù)據(jù)采集文件,文件包含采集標(biāo)志、測(cè)點(diǎn)描述、測(cè)點(diǎn)地址、轉(zhuǎn)儲(chǔ)表名、轉(zhuǎn)儲(chǔ)字段名5個(gè)關(guān)鍵信息。
用戶配置模塊軟件界面如圖5所示。
圖5 用戶配置模塊軟件界面
本模塊的主要功能包括轉(zhuǎn)儲(chǔ)任務(wù)的啟動(dòng)和停止信息顯示、OPC服務(wù)器名稱及連接狀態(tài)顯示、數(shù)據(jù)庫(kù)信息及連接狀態(tài)顯示、轉(zhuǎn)儲(chǔ)任務(wù)的明細(xì)數(shù)據(jù)及轉(zhuǎn)儲(chǔ)狀態(tài)顯示、OPC采集測(cè)點(diǎn)名稱及實(shí)時(shí)數(shù)據(jù)顯示、OTDB軟件運(yùn)行日志顯示等內(nèi)容。通過(guò)這些關(guān)鍵信息的顯示,使用戶能夠明確知道自己的配置文件是否配置成功,轉(zhuǎn)儲(chǔ)的功能是否實(shí)現(xiàn)等。
其實(shí)現(xiàn)流程如下。
(1) 通過(guò)JOpcBrowser進(jìn)行組查詢,初始化OPC服務(wù)器的連接。
(2) 與OPC服務(wù)器建立連接后,讀取選擇的OPC服務(wù)器名稱,與對(duì)應(yīng)的服務(wù)器建立安全通道。
(3) 將配置文件中配置的測(cè)點(diǎn)名稱加入到新建立的OPC組中,完成OPC測(cè)點(diǎn)的初始化。
(4) 添加OPC測(cè)點(diǎn)完成后,以O(shè)PC組的方式按照設(shè)置的讀取頻率進(jìn)行異步讀取OPC的數(shù)據(jù),再將讀取到的數(shù)據(jù)進(jìn)行壞點(diǎn)校驗(yàn),將處理完成的數(shù)據(jù)存入數(shù)據(jù)庫(kù)中。
實(shí)時(shí)數(shù)據(jù)采集模塊軟件界面如圖6所示。
圖6 實(shí)時(shí)數(shù)據(jù)采集模塊軟件界面
作為一款通用的OPC數(shù)據(jù)采集軟件,OTDB的應(yīng)用場(chǎng)景廣泛,理論上可用于所有自動(dòng)化領(lǐng)域的數(shù)據(jù)采集,如分散控制系統(tǒng)、數(shù)據(jù)采集系統(tǒng)、廠級(jí)監(jiān)控信息系統(tǒng)等。通過(guò)OTDB采集數(shù)據(jù),可以構(gòu)建統(tǒng)一的工業(yè)控制系統(tǒng)信息平臺(tái),完成異構(gòu)網(wǎng)段數(shù)據(jù)的有效交換,實(shí)現(xiàn)不同工業(yè)網(wǎng)絡(luò)系統(tǒng)的信息集成。經(jīng)過(guò)不斷的迭代更新,OTDB的功能已達(dá)到工業(yè)現(xiàn)場(chǎng)實(shí)時(shí)數(shù)據(jù)采集的要求,現(xiàn)已運(yùn)用于多個(gè)發(fā)電廠數(shù)據(jù)分析系統(tǒng)。圖7為某火電廠重要輔機(jī)能耗分析與評(píng)價(jià)系統(tǒng)的應(yīng)用界面。
圖7 OTDB在火電廠重要輔機(jī)能耗分析與評(píng)價(jià)系統(tǒng)中的應(yīng)用界面
該系統(tǒng)通過(guò)OTDB以分鐘為密度,從廠級(jí)監(jiān)控信息系統(tǒng)開(kāi)放的OPC服務(wù)器采集共計(jì)514個(gè)測(cè)點(diǎn)的數(shù)據(jù)。通過(guò)采集到的數(shù)據(jù)對(duì)火電廠重要輔機(jī)的能耗、單耗、電耗等指標(biāo)進(jìn)行數(shù)據(jù)挖掘和分析,為火電廠的經(jīng)濟(jì)運(yùn)行、智慧發(fā)電、檢修維護(hù)提供指導(dǎo),OTDB已與該系統(tǒng)配套運(yùn)行近4個(gè)月。
另一電廠采用的小指標(biāo)分析與決策系統(tǒng),通過(guò)OTDB以秒級(jí)采樣的方式,采集廠級(jí)監(jiān)控信息系統(tǒng)共計(jì)1 000個(gè)測(cè)點(diǎn)的數(shù)據(jù)。根據(jù)采集到的數(shù)據(jù),對(duì)電廠機(jī)組運(yùn)行數(shù)據(jù)進(jìn)行篩選,統(tǒng)計(jì)超溫、超壓等異常數(shù)據(jù)。通過(guò)對(duì)機(jī)組運(yùn)行參數(shù)的統(tǒng)計(jì),分析不同的班組值班時(shí)機(jī)組的運(yùn)行狀態(tài),對(duì)班組的成績(jī)進(jìn)行考核等。通過(guò)該系統(tǒng),為電廠機(jī)組的運(yùn)行提供了指導(dǎo)。OTDB已與該系統(tǒng)配套運(yùn)行近3個(gè)月。
經(jīng)過(guò)長(zhǎng)期的運(yùn)行及檢驗(yàn),OTDB采集的數(shù)據(jù)準(zhǔn)確率高,丟包率低,即使服務(wù)器故障重啟,OTDB仍能自動(dòng)恢復(fù)數(shù)據(jù)轉(zhuǎn)儲(chǔ)任務(wù),為系統(tǒng)的數(shù)據(jù)采集提供了有力保障。
通過(guò)深入研究OPC(DA)相關(guān)技術(shù)規(guī)范,采用JAVA語(yǔ)言開(kāi)發(fā)的OPC數(shù)據(jù)采集和轉(zhuǎn)儲(chǔ)系統(tǒng)軟件,有效地解決了工業(yè)信息化過(guò)程中數(shù)據(jù)采集的難題,縮短了系統(tǒng)開(kāi)發(fā)周期,增強(qiáng)了數(shù)據(jù)采集的可靠性,實(shí)現(xiàn)了跨平臺(tái)、高自由度、自恢復(fù)及自啟動(dòng)的數(shù)據(jù)采集和轉(zhuǎn)儲(chǔ)。同時(shí),通過(guò)在現(xiàn)場(chǎng)的實(shí)際應(yīng)用和檢驗(yàn),證明了該軟件的穩(wěn)定性和可靠性,具有較強(qiáng)的實(shí)用性和廣泛的應(yīng)用前景。