孫云云
上海電氣集團(tuán)股份有限公司 中央研究院 上海 200070
?
基于大華軟件開(kāi)發(fā)工具包的組態(tài)軟件視頻監(jiān)控控件*
孫云云
上海電氣集團(tuán)股份有限公司 中央研究院 上海 200070
視頻監(jiān)控用于重要場(chǎng)所的安全防護(hù),組態(tài)軟件作為數(shù)據(jù)采集與過(guò)程控制的專(zhuān)用軟件,整合視頻監(jiān)控功能很有必要。介紹了使用C#語(yǔ)言調(diào)用大華軟件開(kāi)發(fā)工具包開(kāi)發(fā)可嵌入NetControl組態(tài)軟件的控件,以實(shí)現(xiàn)網(wǎng)絡(luò)攝像機(jī)的視頻預(yù)覽、錄像存儲(chǔ)、截圖、云臺(tái)控制等功能,同時(shí)實(shí)現(xiàn)與組態(tài)軟件中其它子系統(tǒng)的數(shù)據(jù)交互。
軟件開(kāi)發(fā)工具包; 視頻監(jiān)控; 組態(tài)軟件
組態(tài)軟件是處于自動(dòng)控制系統(tǒng)監(jiān)控層一級(jí)的軟件平臺(tái)和開(kāi)發(fā)環(huán)境,可為用戶(hù)實(shí)現(xiàn)快速構(gòu)建工業(yè)自動(dòng)控制系統(tǒng)的監(jiān)控功能[1]。針對(duì)國(guó)內(nèi)中小型企業(yè)面臨的生產(chǎn)需求,上海電氣集團(tuán)結(jié)合國(guó)內(nèi)組態(tài)軟件的發(fā)展情況,開(kāi)發(fā)出NetControl通用數(shù)據(jù)采集和監(jiān)控軟件,用于機(jī)械制造、化工、電力等涉及自動(dòng)化的領(lǐng)域[2]。
伴隨計(jì)算機(jī)網(wǎng)絡(luò)、多媒體技術(shù)的發(fā)展,視頻監(jiān)控得到了快速發(fā)展。隨著人們安全意識(shí)的提高,視頻監(jiān)控廣泛應(yīng)用于各種行業(yè)。視頻監(jiān)控由于具備內(nèi)容直觀豐富、操作簡(jiǎn)單等優(yōu)點(diǎn),近年來(lái)在工業(yè)自動(dòng)化領(lǐng)域中也開(kāi)始廣泛運(yùn)用[3-4]。組態(tài)軟件作為自動(dòng)化領(lǐng)域中數(shù)據(jù)采集和過(guò)程控制的專(zhuān)用軟件,整合視頻監(jiān)控功能十分有必要[5]。
筆者主要介紹基于大華軟件開(kāi)發(fā)工具包(SDK)的NetControl組態(tài)軟件視頻監(jiān)控控件,可以為組態(tài)軟件添加大華視頻監(jiān)控功能,進(jìn)而實(shí)現(xiàn)視頻監(jiān)控信息采集與設(shè)備控制,同時(shí)實(shí)現(xiàn)與組態(tài)軟件其它子系統(tǒng)的實(shí)時(shí)數(shù)據(jù)交互。
SDK一般是軟件工程師為特定軟件包、軟件框架、硬件平臺(tái)、操作系統(tǒng)等建立的應(yīng)用軟件開(kāi)發(fā)工具[6]。大華設(shè)備網(wǎng)絡(luò)SDK是基于設(shè)備私有網(wǎng)絡(luò)通信協(xié)議而開(kāi)發(fā)的套件,為網(wǎng)絡(luò)硬盤(pán)錄像機(jī)、網(wǎng)絡(luò)視頻服務(wù)器、網(wǎng)絡(luò)攝像機(jī)、網(wǎng)絡(luò)球機(jī)、智能設(shè)備等產(chǎn)品服務(wù),主要包括業(yè)務(wù)操作和設(shè)備管理兩大部分,具有實(shí)時(shí)監(jiān)控、錄像回放與下載、云臺(tái)控制、遠(yuǎn)程升級(jí)等功能[7]。
2.1 調(diào)用外部聲明
在C#語(yǔ)言中聲明.dll文件中的外部方法,其基本形式是:
[DllImport(“.dll文件”)]
修飾符extern返回變量類(lèi)型 方法名稱(chēng) (參數(shù)列表)
例如:
using System.Runtime.InteropServices;
[DllImport(@".DHdhnetsdk.dll")]
public static extern bool CLIENT_Init(fDisConnect cbDisConnect, UInt64 dwUser);
由于是非托管.dll文件,無(wú)法在公共語(yǔ)言運(yùn)行庫(kù)(CLR)中直接調(diào)用,因此在聲明的方法名前需要使用[DllImport(@".DHdhnetsdk.dll")]聲明.dll文件及其所在路徑。需要注意的是,在程序聲明中需要使用System.Runtime.InteropServices命名空間,DllImport只能放置在方法聲明上[8]。由于控件需要嵌入組態(tài)軟件中使用,因此.dll文件必須位于組態(tài)軟件安裝目錄下。返回變量類(lèi)型、方法名稱(chēng)、參數(shù)列表要與.dll文件中的定義相一致。
2.2 重寫(xiě)結(jié)構(gòu)體
例如:
[StructLayoutAttribute(LayoutKind.Sequential)]
public struct NET_PARAM
{
int nWaittime;
//等待超時(shí)時(shí)間,單位為ms,若為0,則默認(rèn)為5000ms
int nConnectTime;
//連接超時(shí)時(shí)間,單位為ms,若為0,則默認(rèn)為1500ms
int nConnectTryNum;
//連接嘗試次數(shù),若為0,則默認(rèn)為1次
int nSubConnectSpaceTime;
//子連接之間的等待時(shí)間,單位為ms,若為0,則默認(rèn)為10ms
int nGetDevInfoTime;
//獲取設(shè)備信息超時(shí)時(shí)間,單位為ms,若為0,則默認(rèn)為1000ms
int nConnectBufSize;
//每個(gè)連接接收數(shù)據(jù)的緩存大小,單位為Byte,若為0,則默認(rèn)為250×1024Byte
int nGetConnInfoTime;
//獲取子連接信息超時(shí)時(shí)間,單位為ms,若為0,則默認(rèn)為1000ms
int nSearchRecordTime;
//按時(shí)間查詢(xún)錄像文件的超時(shí)時(shí)間,單位為ms,若為0,則默認(rèn)為3000ms
int nsubDisconnetTime;
//檢測(cè)子連接斷線(xiàn)等待時(shí)間,單位為ms,若為0,則默認(rèn)為60000ms
byte byNetType;
//網(wǎng)絡(luò)類(lèi)型,0為局域網(wǎng),1為廣域網(wǎng)
byte byPlaybackBufSize;
//回放數(shù)據(jù)接收的緩存大小,單位為Byte,若為0,則默認(rèn)為4MByte
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst=2, ArraySubType=UnmanagedType.I1)]
byte[] byReserved1;
//保留字段
int nPicBufSize;
//實(shí)時(shí)圖片接收的緩存大小,單位為Byte,若為0,則默認(rèn)為1024×1024 Byte
[MarshalAsAttribute(UnmanagedType.ByValArray,SizeConst=4, ArraySubType=UnmanagedType.I1)]
byte[] bReserved;
//保留字段
}
2.3 參數(shù)數(shù)據(jù)類(lèi)型轉(zhuǎn)換
表1 C++與C#中數(shù)據(jù)類(lèi)型對(duì)照
3.1 SDK開(kāi)發(fā)
根據(jù)控制要求,視頻監(jiān)控控件功能主要包括進(jìn)程間通信監(jiān)視預(yù)覽、云臺(tái)控制、回放、下載、截圖、錄像等,主要流程如圖1所示??丶垂δ芸煞譃椴煌K,實(shí)現(xiàn)每個(gè)功能前需要初始化SDK,用戶(hù)注冊(cè)至設(shè)備,操作結(jié)束后注銷(xiāo)設(shè)備,釋放SDK。
圖1 控制流程圖
初始化SDK完成對(duì)整個(gè)網(wǎng)絡(luò)SDK系統(tǒng)的初始化、內(nèi)存預(yù)分配等操作。
用戶(hù)注冊(cè)至設(shè)備實(shí)現(xiàn)用戶(hù)的注冊(cè)功能,注冊(cè)成功后,返回的登錄標(biāo)志碼(ID)作為其它功能操作的唯一標(biāo)識(shí)。對(duì)設(shè)備而言,普通數(shù)字錄像設(shè)備最多同時(shí)允許10個(gè)用戶(hù)注冊(cè),網(wǎng)絡(luò)硬盤(pán)錄像設(shè)備最多同時(shí)允許20個(gè)用戶(hù)注冊(cè),超級(jí)硬盤(pán)錄像設(shè)備不做限制。
功能調(diào)用結(jié)束后,或設(shè)備主動(dòng)注銷(xiāo)時(shí)調(diào)用注銷(xiāo)用戶(hù)。
程序關(guān)閉時(shí)調(diào)用釋放SDK資源,完成內(nèi)存分配資源的回收。
監(jiān)視預(yù)覽模塊主要包括從前端服務(wù)器取實(shí)時(shí)碼流、解碼顯示及播放控制等功能。用戶(hù)注冊(cè)至設(shè)備成功后,在CLIENT_RealPlayEx接口中播放有效句柄的窗口句柄,由SDK實(shí)現(xiàn)解碼功能,進(jìn)而實(shí)現(xiàn)實(shí)時(shí)視頻流調(diào)取播放。
云臺(tái)控制模塊使用CLIENT_DHPTZControl接口,實(shí)現(xiàn)對(duì)云臺(tái)的基本操作,以及預(yù)置點(diǎn)、巡航、軌跡和三維定位控制。按照SDK中規(guī)定的參數(shù)形式,指定不同的云臺(tái)控制方向,通過(guò)用戶(hù)登陸ID號(hào)即可進(jìn)行云臺(tái)控制。
回放下載模塊可按照文件或時(shí)間回放下載錄像。按文件回放或下載需要先查找錄像文件接口獲取文件信息(CLIENT_FindFile、CLIENT_FindClose接口),然后根據(jù)獲取的文件名開(kāi)始回放或下載(CLIENT_PlayBackByRecordFile、CLIENT_DownloadByRecordFile接口)。按時(shí)間回放或下載文件時(shí),用戶(hù)不需要調(diào)用查找錄像文件的相關(guān)接口,只要在接口中指定開(kāi)始和結(jié)束時(shí)間,調(diào)用CLIENT_PlayBackByTime、CLIENT_DownloadByTime接口即可,此時(shí),將按指定時(shí)間范圍內(nèi)最近的有錄像時(shí)間段開(kāi)始回放或下載。
視頻處理模塊主要包括對(duì)視頻截圖(CLIENT_CapturePicture接口)、通過(guò)鼠標(biāo)滾輪實(shí)現(xiàn)放大縮小(CLIENT_DHPTZControl接口)等操作。
3.2 與組態(tài)軟件的數(shù)據(jù)交互
為實(shí)現(xiàn)與NetControl組態(tài)軟件的數(shù)據(jù)交互,方便其它子系統(tǒng)對(duì)視頻信息的控制與操作,開(kāi)發(fā)了面向底層的服務(wù)方法。在代碼中封裝切換攝像頭、截圖、云臺(tái)控制方法,在方法體前添加[ServiceMethod]注釋?zhuān)纾?/p>
[ServiceMethod]
public bool SwitchCam(string IPAddress, ushort PortNumber)
這樣,在組態(tài)軟件的腳本程序中可以調(diào)用該服務(wù)方法,如圖2所示。
圖2 NetControl腳本程序中服務(wù)方法調(diào)用
3.3 控件使用
視頻監(jiān)控控件成功安裝后將在組態(tài)軟件工具箱中顯示,如圖3所示。NetControl運(yùn)行時(shí)控件界面如圖4所示。
圖3 視頻監(jiān)控控件在NetControl中的顯示
筆者主要介紹了通過(guò)控件形式在NetControl組態(tài)軟件中添加大華視頻監(jiān)控的功能,解決了NetControl中無(wú)法利用大華視頻設(shè)備進(jìn)行監(jiān)控的問(wèn)題,同時(shí)介紹了如何實(shí)現(xiàn)控件與組態(tài)軟件的數(shù)據(jù)交互,便于實(shí)現(xiàn)工程中各子系統(tǒng)聯(lián)動(dòng)。文中介紹的控件仍存在改善和提高的空間,需要在后期工程中不斷進(jìn)行功能完善。
圖4 NetControl組態(tài)軟件視頻監(jiān)控控件界面
[1] 施祖銘.智能電網(wǎng)發(fā)展現(xiàn)狀[J].裝備機(jī)械,2010(3): 2- 12.
[2] 張勇旭,康盛,闞文勇.一種新型組態(tài)軟件的功能分析及應(yīng)用實(shí)例[J].儀表技術(shù),2009(11): 26-28.
[3] 信師國(guó),劉慶磊,劉全賓.網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)現(xiàn)狀和發(fā)展趨勢(shì)[J].信息技術(shù)與信息化,2010(1): 23-25.
[4] 王靖,龐立.數(shù)模結(jié)合視頻監(jiān)控系統(tǒng)在軌道交通中的應(yīng)用[J].上海電氣技術(shù),2010,3(2): 10-16.
[5] 楊湛瑩.基于工控組態(tài)技術(shù)的隧道綜合監(jiān)控系統(tǒng)的實(shí)現(xiàn)[J].上海電氣技術(shù),2011,4(4): 5-10.
[6] 陳俊良,葛俊鋒,葉林,等.基于??低昐DK的視頻監(jiān)控軟件的開(kāi)發(fā)[J].工業(yè)控制計(jì)算機(jī),2015,28(7): 97-98,101.
[7] 浙江大華技術(shù)股份有限公司.設(shè)備網(wǎng)絡(luò)SDK(NetSDK)_Win64[EB/OL].http: //download.dahuatech.com/sdk_det.php?cid=1094&id=220.
[8] 牛軍龍.動(dòng)力電池測(cè)試平臺(tái)軟件控制系統(tǒng)設(shè)計(jì)[D].北京: 北京交通大學(xué),2014.
[9] 黃雙玲.面向C/C++程序函數(shù)調(diào)用關(guān)系的靜態(tài)分析方法研究[D].合肥: 中國(guó)科學(xué)技術(shù)大學(xué),2015.
[10] 劉建峰..NET環(huán)境下軟件組件之間的互操作方法研究[D].南京: 南京理工大學(xué),2007.
(編輯: 爾 東)
Video surveillance is used for safety protection of important places. Configuration software as special software for data acquisition and process control, has the necessity to integrate video surveillance function. Introduced the use of C# language to call Dahua SDK for development of embedded NetControl configuration software controls to achieve the functions of network camera including video preview, video storage, screenshots and PTZ control while realizing data interaction with other subsystems in the configuration software.
SDK; Video Surveillance; Configuration Software
2016年12月
孫云云(1990— ),女,碩士,助理工程師,主要從事工業(yè)軟件研發(fā)工作, E-mail: sunyy5@shanghai-electric.com
TM925.7
B
1674-540X(2017)02-009-04
*上海市科學(xué)技術(shù)委員會(huì)企業(yè)合作專(zhuān)項(xiàng)(編號(hào): 15dz1180400)