DDE與OPC技術(shù)在工業(yè)自動化系統(tǒng)中的應(yīng)用
4 利用vb開發(fā)dde與opc客戶端
如上所述,目前許多scada軟件都采用了dde、opc技術(shù)規(guī)范作為其軟件接口,而scada監(jiān)控軟件在實際工程應(yīng)用中則扮演了dde、opc客戶端的角色。另外,wonderware公司的wwclient,siemens公司的simatic net opc scout和rockwell-ab公司的opc test client等測試軟件也都是dde、opc客戶端軟件的實例。
dde、opc客戶端軟件可采用visual c++、visual basic、delphi等編程軟件實現(xiàn),這里主要對如何用visual basic 6.0編寫dde、opc 客戶端實現(xiàn)和dde、opc 服務(wù)器通訊的方法分別予以介紹。
4.1 利用vb開發(fā)dde 客戶端
作為microsoft 公司軟件產(chǎn)品的重要一員,visual basic理所當(dāng)然的對windows操作系統(tǒng)的下的dde技術(shù)給予支持。visual basic為一些控件提供了用于dde動態(tài)數(shù)據(jù)交換的linktopic、linkitem、linktimeout、linkmode等屬性,以及l(fā)inkrequest、linkpoke、linkexecute、linksend等方法。其中,linktopic、linkitem兩項屬性分別對應(yīng)于dde通訊架構(gòu)中的主題名和數(shù)據(jù)項名,linktimeout、linkmode分別表示dde 客戶端與dde服務(wù)器的嘗試連接時間和連接模式(數(shù)據(jù)交換方式),linkmode有manual、notify、automatic三種方式,而automatic方式最為常用,它主要用于和dde server建立“熱連接(hot link)”,即在dde服務(wù)器數(shù)據(jù)發(fā)生變化時主動發(fā)送數(shù)據(jù)給客戶端。linkrequest、linkpoke分別用于dde 客戶端對dde服務(wù)器數(shù)據(jù)的讀寫操作。
根據(jù)應(yīng)用程序與服務(wù)器程序dde方式通訊機(jī)制,可以在visual basic編程環(huán)境下開發(fā)適合實際需要的dde客戶端應(yīng)用程序。例如,visual basic訪問intouch 程序變量“intouchtag”時,其代碼為
label1.linktopic= "view|tagn-ame"
label1.linkitem= "intouchtag"
label1.linkmode=1
label1.linkrequest
其中,代碼中的“view”和“tagname”分別表示intouch windowviewer的應(yīng)用程序名和主題名,“l(fā)inkmode”值為1表示該應(yīng)用程序與windowviewer的連接方式為automatic(即“熱連接”)方式。這樣,當(dāng)該應(yīng)用代碼被執(zhí)行時,label1的值便隨intouch windowviewer“intouchtag”變量的變化而變化。
同樣可以在visual basic中添加label2、label3,并建立和dassidirect、rsllinx的dde通訊連接,使其分別隨所連接s7-300 plc數(shù)據(jù)db5.dbw20、controllogix 1756-l55 plc全局變量“l(fā)inxlogixtag”數(shù)值的變化而變化,其代碼分別如下:
label2.linktopic = "dassidire-ct|dasvrtopic"
label2.linkitem = "db5.w20"
label2.linkmode = 1
label2.linkrequest
label3.linktopic = "rslinx|" “rslinxtopic”
label3.linkitem= "linxlogixtag"
label3.linkmode = 1
label3.linkrequest
其中,“dassidirect”和“dasvrtopic”、“rslinx”和“rslinxtopic”分別為dassidirect和rslinx的應(yīng)用程序名以及在dassidirect和rslinx dde服務(wù)器中建立的主題名。而“db5.w20”和“l(fā)inxlogixtag”則分別對應(yīng)于s7-300 plc數(shù)據(jù)db5.dbw20和controllogix 1756-l55 plc全局變量linxlogixtag,這樣,該段代碼被執(zhí)行時,label2和label3的數(shù)值將隨plc中數(shù)據(jù)db5.dbw20與linxlogixtag變量值的變化而變化。
netdde是dde的網(wǎng)絡(luò)擴(kuò)展形式,主要為網(wǎng)絡(luò)上不同計算機(jī)之間的動態(tài)數(shù)據(jù)交換提供方便。在visual basic編程環(huán)境下,也可以開發(fā)基于netdde的客戶端應(yīng)用程序。與開發(fā)dde客戶端不同的是,網(wǎng)絡(luò)上作為dde服務(wù)器和客戶端的計算機(jī)都要啟動netdde.exe服務(wù),并在作為dde服務(wù)器的計算機(jī)上同時啟動ddeshare.exe程序,對新建的dde共享進(jìn)行必要的設(shè)置。如下代碼的功能為計算機(jī)pc02讀取pc01計算機(jī)上rslinx dde服務(wù)器所采集的"linxlogixtag" plc變量的值。
label4.linktopic= "pc01ndde$|pc01shrnm"
label4.linkitem= "linxlogixtag"
label4.linkmode=1
label4.linkrequest
由于netdde的訪問采用了“計算機(jī)名>ndde$>|共享名>!變量名>”的形式,所以,上述代碼中的“pc01”、“pc01shrnm”分別為dde服務(wù)器的計算機(jī)名和ddeshare.exe程序中的新建共享名,而dde訪問所需要的應(yīng)用程序名rslinx和主題名rslinxtopic則在新建共享“pc01shrnm”的屬性對話框中進(jìn)行了設(shè)置。
此外,由于excel也支持dde技術(shù),所以pc01計算機(jī)上rslinx dde服務(wù)器plc變量linxlogixtag的變化也可以在pc02計算機(jī)excel表格中得到體現(xiàn),只需要在需要顯示該值的單元格中填寫如下代碼=‘pc01ndde$‘|pc01shrnm!linxlogixtag
4.2 利用vb開發(fā)opc 客戶端
利用visual basic所開發(fā)的opc客戶端應(yīng)用程序主要采用自動化通信接口和opc服務(wù)器程序?qū)嵤┩ㄐ拧6鴒pc基金會提供的opc自動化接口 opcdaauto.dll動態(tài)鏈接庫集成了所有用于對opc服務(wù)器進(jìn)行訪問的對象、屬性和方法,為利用visual basic開發(fā)opc客戶端應(yīng)用程序提供了極大方便。程序設(shè)計時,opc客戶程序應(yīng)當(dāng)首先生成opc服務(wù)器支持的opc對象,然后再使用opc對象支持的屬性和方法,實現(xiàn)對opc服務(wù)器的操作和訪問。
opc數(shù)據(jù)訪問對象主要包括opc服務(wù)器(opcserver)、opc組集合(opcgroups)、opc組(opcgroup)、opc標(biāo)簽集合(opcitems)、opc標(biāo)簽(opcitem)、opc瀏覽器(opcbrowser)等幾個部分。程序設(shè)計時,要首先在visual basic環(huán)境下選擇對opc automation 2.0接口的引用,此時,opc對象會被自動添加到正在開發(fā)的工程項目中,然后,再根據(jù)需要建立這些對象的實例并利用其屬性和方法來實現(xiàn)對opc服務(wù)器的訪問。對opc服務(wù)器的訪問主要包括聲明opc對象實例、連接opc server、添加標(biāo)簽變量、讀寫opc服務(wù)器(同步/異步)、斷開連接等幾個步驟。
opc對象實例的聲明主要包括對opc服務(wù)器、opc組集合、opc組、opc標(biāo)簽集合、opc服務(wù)器句柄的聲明及程序所需要的其它實例的聲明。opc客戶端和opc server的連接主要靠調(diào)用opc服務(wù)器對象實例的connect方法函數(shù)來完成,例如,連接本地計算機(jī)dassidirect和rslinx opc server 的代碼分別為connect("archestra.dassidirect.1")和connect("rslinx opc server")
連接網(wǎng)絡(luò)遠(yuǎn)程計算機(jī)(ip地址為10.144.45.45)上dassidirect和rslinx opc server 的代碼分別為connect("archestra.dassidirect.1", "10.144.45.45")和connect("rslinx opc server", "10.144.45.45")
評論