1 引言
隨著工業生產的不斷發展以及自動化系統集成度的不斷提高,自動化控制是一種現代工業、農業、制造業等生產領域中機械電氣一體自動化集成控制技術和理論。自動化控制技術廣泛用于工業、農業、軍事、科學研究、交通運輸、商業、醫療、服務和家庭等方面。采用自動化控制不僅可以把人從繁重的體力勞動、部分腦力勞動以及惡劣、危險的工作環境中解放出來,而且能擴展人的器官功能,極大地提高勞動生產率,增強人類認識世界和改造世界的能力。因此,自動化控制是工業、農業、國防和科學技術現代化的重要條件和顯著標志。因此,為了能夠解決工業系統硬件設備的升級改變為軟件系統帶來的不便,更好的實現不同設備廠家硬件產品的集成互連,增強系統的穩定性與可靠性,工業自動化軟件接口的標準化、統一化成為工業控制領域必須面臨的一個問題。
為了能夠使得自動化軟件的開發具有統一的接口標準,dde(動態數據交換:dynamic data exchan-ge)、opc(基于過程控制的鏈接與嵌入:ole for process control)技術的出現和應用為不同的自動化程序系統之間能夠實現簡單交互、無縫互連做出了巨大的貢獻。
2 dde與opc技術的工作機制
2.1 dde技術的工作機制
DDE是一種動態數據交換機制(Dynamic Data Exchange,DDE)。使用DDE通訊需要兩個Windows應用程序,其中一個作為服務器處理信息,另外一個作為客戶機從服務器獲得信息。客戶機應用程序向當前所激活的服務器應用程序發送一條消息請求信息,服務器應用程序根據該信息作出應答,從而實現兩個程序之間的數據交換。
動態數據交換基于windows消息機制,各應用程序間通過傳遞消息進行對話交換信息。windows dde消息傳遞采用client/server模式,客戶(client)是數據的請求和接受者,而服務器(server)是數據的提供者,兩者之間通過請求、應答、傳輸三個步驟來完成數據的傳送。dde協議使用服務(service)、主題(topic)和數據項(item)三級命名來標識dde所傳遞的數據單元。一般情況下,服務(service)就是應用程序的文件名,主題是對服務器有意義的信息單元。每次dde客戶與服務程序之間的對話都是先由客戶啟動的,所以在每次客戶啟動之前,dde服務器應當首先投入運行。
當客戶程序需要向服務器程序請求數據時,客戶程序發送一條wm-dde-initiate消息給當前運行的所有windows應用程序,這條消息不但包含了它所需要的服務器名(service)和主題名(topic),而且指明了它所希望的數據類型,收到wm-dde-initiate消息的應用程序通過判別服務器名和會話主題決定是否應答,一旦dde服務器響應了這條被傳播的消息,dde會話就開始了。
dde的工作方式有冷連接(cool link)、溫連接(warm link)和熱連接(hot link)等3種。在冷連接方式下,當server中的數據發生變化后不主動通知client,但client可以隨時從server讀寫數據;在溫連接方式下,當server中的數據發生變化后馬上通知client,client得到通知后將數據取回;在熱連接方式下,當server中的數據發生變化后馬上通知client,同時將變化的數據直接送給client.
dde的網絡形式稱為netdde,它包含了dde的全部特征,是動態數據交換(dde)的擴充,可以在跨越網絡的計算機之間使用。采用netdde后,兩個或更多網絡上的應用能夠通過dde共享來建立網絡上不同工作站之間的連接,從而實現站站之間的動態信息共享。
2.2 opc技術的工作機制
OPC全稱是Object Linking and Embeding(OLE) for Process Control,它的出現為基于Windows的應用程序和現場過程控制應用建立了橋梁。在過去,為了存取現場設備的數據信息,每一個應用軟件開發商都需要編寫專用的接口函數。由于現場設備的種類繁多,且產品的不斷升級,往往給用戶和軟件開發商帶來了巨大的工作負擔。通常這樣也不能滿足工作的實際需要,系統集成商和開發商急切需要一種具有高效性、可靠性、開放性、可互操作性的即插即用的設備驅動程序。在這種情況下,OPC標準應運而生。OPC標準以微軟公司的OLE技術為基礎,它的制定是通過提供一套標準的OLE/COM接口完成的,在OPC技術中使用的是OLE 2技術,OLE標準允許多臺微機之間交換文檔、圖形等對象。
在opc技術出現以前,dde技術是絕大多數控制系統都支持和采用的數據交換方式。但是,由于dde是基于windows信息傳遞而建立的技術,因此,當通信量較大時,就會出現數據刷新速度慢、安全性管理機制差、可靠性能低等現象,從而就有可能致使dde客戶程序在較長時間內得不到回應。和dde 技術相比,基于com和dcom技術的opc技術具有數據傳送性能高、 安全性管理性能好、開發成本低等特點。
最初階段的opc規范是由opc基金會的先驅fisher-rosemount、rockwell、opto 22、intellution、intuitive technology公司于1996年8月發布的,目前opc基金會成員在全球已超過300多個,其中包括世界上幾乎所有主要的控制系統、儀器儀表、過程控制系統生產廠家。
opc以ole/com/dcom技術為基礎,是ole(object linking and embedding)for process control的縮寫,是微軟公司的對象鏈接和嵌入技術在過程控制方面的應用。與dde一樣,opc也采用client/server模式。opc服務器是數據源的提供者,數據源可以是plc、dcs、條形碼讀取器等控制設備,隨控制系統的構成不同,作為數據源的opc服務器既可以是和opc應用程序在同一臺計算機上運行的本地opc服務器,也可以是在另外計算機上運行的遠程opc服務器。opc客戶是數據的使用者,它按照opc接口規范從opc服務器獲取所需要的數據。
OPC服務器通常支持兩種類型的訪問接口,它們分別為不同的編程語言環境提供訪問機制。這兩種接口是:自動化接口(Automation interface);自定義接口(Custom interface)。自動化接口通常是為基于腳本編程語言而定義的標準接口,可以使用VisualBasic、Delphi、PowerBuilder等編程語言開發OPC服務器的客戶應用。而自定義接口是專門為C++等高級編程語言而制定的標準接口。OPC現已成為工業界系統互聯的缺省方案,為工業監控編程帶來了便利,用戶不用為通訊協議的難題而苦惱。任何一家自動化軟件解決方案的提供者,如果它不能全方位地支持OPC,則必將被歷史所淘汰。
opc客戶與opc服務器的接口有自定義接口(custom interface)和自動化接口(automation interface)兩種形式。自定義接口是一組com接口,主要用于采用c++語言的應用程序開發;自動化接口是自動化的ole接口,主要用于采用vb,delphi等基于腳本編程語言的應用程序開發。對于客戶端應用程序的開發,采用自定義接口的方式運行效率高,但開發難度較大;采用自動化接口的方式運行效率低,但開發簡單。這兩種接口與opc服務器的通信方式可用1圖所示。
圖1 自定義接口和自動化接口與opc服務器通信方式示意圖
對于分布式計算機上的opc客戶程序的開發,opc標準采用dcom技術實現服務器和客戶程序的通訊。
opc的數據訪問主要有同步數據訪問和異步數據訪問兩種方式。同步數據訪問時,opc服務器在將按照opc應用程序要求的數據返回之前,opc應用程序一直處于等待狀態,也就是說,同步方式的數據訪問在要求的動作沒有完成前不能執行任何opc應用程序側的處理。與之相比,異步方式的數據訪問在對opc服務器提出數據訪問要求后,立即返回到opc應用程序側的主處理程序中,opc服務器完成數據訪問時通知opc應用程序,opc應用程序從而得到數據訪問結果。當opc應用程序采用自動化接口訪問opc服務器時,同步和異步數據操作分別由syncread、syncwrite和asyncread、asyncwrite四個opc組對象的方法函數來實現。
3 dde與opc技術應用
當前,dde、opc技術在許多世界著名的自動化廠家的i/o通訊服務器、scada等自動化軟件中都得到了體現。例如wonderware 公司的daserver和intouch、siemens公司的simatic net和wincc、 rockwell-ab公司的rslinx和rsview32等。其中daserver和rslinx既可作為opc server,又可作為dde server;wincc和rsview32則既可以作為opc client,又可作為dde client.同時,由于各家的軟件接口都合乎dde、opc接口規范標準,所以,不同廠家的i/o通訊、scada等軟件產品也可以很方便的實現互連。
下面分別以wonderware 公司的intouch與daserver(dassidirect)、intouch與rockwell-ab公司的rslinx進行dde通訊,siemens 公司的wincc 與simatic net 、wincc 與rslinx進行opc通訊的方法為例說明dde、opc技術在工業自動化軟件的應用情況。
dassidirect是wonderware 公司開發用于對siemens s7 200/300/400系列plc進行以太網數據訪問的服務器軟件,支持dde、opc、suitlink、fastdde等通訊方式。當客戶程序通訊接口與dassidirect的連接采用dde方式時,dassidirect 的數據訪問采用了節點名(node name)、應用程序名(application name,此處為dassidirect)、主題名(topic name)和項目名(item name)的層次結構。而當通訊接口以opc方式與dassidirect連接時,dassidirect 的數據訪問則采用了節點名(node name)、服務器名(program name,此處為archestra.dassidirect.1)、組名(group name)、設備組名(device group)、連接名(link name)和項目名(item name)的層次結構。各層次項可在dassidirect軟件界面中配置實現。
工程應用時,需要在dassidirect管理界面smc archestra.dassidirect.1目錄下根據需要依次添加接口類型(tcp/ip)、接口處理器類型(s7 plc),并進行必要的參數設置,然后還要為device groups添加不同的topic以方便對不同變量的歸類管理。intouch標簽變量對dassidirect的訪問是通過"訪問名"的設置來實現的,所以intouch中"訪問名"的設置必須和dassidirect軟件中的設置一一對應,例如,"訪問名"中"應用程序名"應設置為dassidirect,"訪問名"中"主題名"的設置應和dassidirect中所添加的topic名稱完全一致。此外,intouch標簽變量"項目名"的填寫也必須遵從dassidirect中item name的定義形式,例如對s7 plc數據塊地址word的訪問形如db11.w80,對數據塊地址dword的訪問形如db11.d80,對輸入/輸出位的訪問形式分別為i5.2/q7.5等。
和wonderware公司的dassid-irect一樣,rslinx也支持opc/dde兩種通訊方式。當intouch和rslinx以dde方式進行通訊時,首先需要在rslinx"dde/opc topic configuration "對話框中添加新的topic,并建立該topic與要連接rslogix plc cpu之間的對應關系,然后再對intouch中"訪問名"做相應的配置。不過,此時"訪問名"中"應用程序名"應設置為rslinx,"訪問名"中的"主題名"則應和在rslinx中所添加的topic名稱完全一致。而intouch標簽變量"項目名"的填寫也應遵從rslinx中item name的定義形式,例如對rslogix plc cpu中全局變量controller tags地址的訪問即為 plc變量地址的tag name,而對cpu中程序變量program tags地址的訪問則為program:.的形式。
當采用siemens 公司的wincc作為opc client與opc服務器進行opc方式連接時,首先需要在wincc資源管理器中添加opc通訊驅動程序opc.chn,然后在出現的opc通道單元的"連接屬性"和所建變量的"變量地址屬性"對話框中分別填寫"opc服務器名稱"和"變量地址名稱",這樣便可建立該變量到opc服務器的連接。需要說明的是,不同的opc服務器,其opc服務器名稱和地址格式是不盡相同的,例如siemens simatic net opc服務器的名稱和地址訪問格式(以按s7協議對s7系列 plc數據訪問為例)分別是"opc.simaticnet"和"s7:[<連接名稱>]",而rockwell rslinx opc服務器的名稱和對rslogix 系列plc數據訪問的地址格式分別是"rsllinx opc server"和"[]".
同樣,其它scada軟件與相關dde、opc服務器軟件通訊的實現方法與此類似,不再贅述。
此外,由于dde、opc都是標準規范,所以也可以根據需要來實現dde、opc之間的接口轉換來滿足實際需求,例如wonderware公司的opclink便是實現opc、dde接口轉換的專用軟件。
4 利用vb開發dde與opc客戶端
vb是Visual Basic的簡稱,是由美國微軟公司于1991年開發的一種可視化的、面向對象和采用事件驅動方式的結構化高級程序設計語言,可用于開發 Windows 環境下的各類應用程序。它簡單易學、效率高,且功能強大可以與 Windows 專業開發工具SDK相媲美。在Visual Basic環境下,利用事件驅動的編程機制、新穎易用的可視化設計工具,使用Windows內部的廣泛應用程序接口(API)函數,動態鏈接庫(DLL)、對象的鏈接與嵌入(OLE)、開放式數據連接(ODBC)等技術,可以高效、快速地開發Windows環境下功能強大、圖形界面豐富的應用軟件系統。
Visual 意為可視的、可見的,指的是開發像Windows操作系統的圖形用戶界面(Graphic User Interface,GUI)的方法,它與其他編程軟件不同的是不需要編寫大量代碼去描述界面元素的外觀和位置,只要把預先建立好的對象拖放到屏幕上相應的位置即可。應該說,這是一次質的飛躍,是一次編程技術的革命。
如上所述,目前許多scada軟件都采用了dde、opc技術規范作為其軟件接口,而scada監控軟件在實際工程應用中則扮演了dde、opc客戶端的角色。另外,wonderware公司的wwclient,siemens公司的simatic net opc scout和rockwell-ab公司的opc test client等測試軟件也都是dde、opc客戶端軟件的實例。
dde、opc客戶端軟件可采用visual c++、visual basic、delphi等編程軟件實現,這里主要對如何用visual basic 6.0編寫dde、opc 客戶端實現和dde、opc 服務器通訊的方法分別予以介紹。
4.1 利用vb開發dde 客戶端
作為microsoft 公司軟件產品的重要一員,visual basic理所當然的對windows操作系統的下的dde技術給予支持。visual basic為一些控件提供了用于dde動態數據交換的linktopic、linkitem、linktimeout、linkmode等屬性,以及linkrequest、linkpoke、linkexecute、linksend等方法。其中,linktopic、linkitem兩項屬性分別對應于dde通訊架構中的主題名和數據項名,linktimeout、linkmode分別表示dde 客戶端與dde服務器的嘗試連接時間和連接模式(數據交換方式),linkmode有manual、notify、automatic三種方式,而automatic方式最為常用,它主要用于和dde server建立"熱連接(hot link)",即在dde服務器數據發生變化時主動發送數據給客戶端。linkrequest、linkpoke分別用于dde 客戶端對dde服務器數據的讀寫操作。
根據應用程序與服務器程序dde方式通訊機制,可以在visual basic編程環境下開發適合實際需要的dde客戶端應用程序。例如,visual basic訪問intouch 程序變量"intouchtag"時,其代碼為label1.linktopic= "view|tagn-ame"
label1.linkitem= "intouchtag"
label1.linkmode=1
label1.linkrequest
其中,代碼中的"view"和"tagname"分別表示intouch windowviewer的應用程序名和主題名,"linkmode"值為1表示該應用程序與windowviewer的連接方式為automatic(即"熱連接")方式。這樣,當該應用代碼被執行時,label1的值便隨intouch windowviewer"intouchtag"變量的變化而變化。
同樣可以在visual basic中添加label2、label3,并建立和dassidirect、rsllinx的dde通訊連接,使其分別隨所連接s7-300 plc數據db5.dbw20、controllogix 1756-l55 plc全局變量"linxlogixtag"數值的變化而變化,其代碼分別如下:
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的應用程序名以及在dassidirect和rslinx dde服務器中建立的主題名。而"db5.w20"和"linxlogixtag"則分別對應于s7-300 plc數據db5.dbw20和controllogix 1756-l55 plc全局變量linxlogixtag,這樣,該段代碼被執行時,label2和label3的數值將隨plc中數據db5.dbw20與linxlogixtag變量值的變化而變化。
netdde是dde的網絡擴展形式,主要為網絡上不同計算機之間的動態數據交換提供方便。在visual basic編程環境下,也可以開發基于netdde的客戶端應用程序。與開發dde客戶端不同的是,網絡上作為dde服務器和客戶端的計算機都要啟動netdde.exe服務,并在作為dde服務器的計算機上同時啟動ddeshare.exe程序,對新建的dde共享進行必要的設置。如下代碼的功能為計算機pc02讀取pc01計算機上rslinx dde服務器所采集的"linxlogixtag" plc變量的值。
label4.linktopic= "\pc01
ndde$|pc01shrnm"
label4.linkitem= "linxlogixtag"
label4.linkmode=1
label4.linkrequest
由于netdde的訪問采用了"\<計算機名>|<共享名>!<變量名>"的形式,所以,上述代碼中的"pc01"、"pc01shrnm"分別為dde服務器的計算機名和ddeshare.exe程序中的新建共享名,而dde訪問所需要的應用程序名rslinx和主題名rslinxtopic則在新建共享"pc01shrnm"的屬性對話框中進行了設置。
此外,由于excel也支持dde技術,所以pc01計算機上rslinx dde服務器plc變量linxlogixtag的變化也可以在pc02計算機excel表格中得到體現,只需要在需要顯示該值的單元格中填寫如下代碼='\pc01ndde$'|pc01shrnm!linxlogixtag
4.2 利用vb開發opc 客戶端
利用visual basic所開發的opc客戶端應用程序主要采用自動化通信接口和opc服務器程序實施通信。而opc基金會提供的opc自動化接口 opcdaauto.dll動態鏈接庫集成了所有用于對opc服務器進行訪問的對象、屬性和方法,為利用visual basic開發opc客戶端應用程序提供了極大方便。程序設計時,opc客戶程序應當首先生成opc服務器支持的opc對象,然后再使用opc對象支持的屬性和方法,實現對opc服務器的操作和訪問。
opc數據訪問對象主要包括opc服務器(opcserver)、opc組集合(opcgroups)、opc組(opcgroup)、opc標簽集合(opcitems)、opc標簽(opcitem)、opc瀏覽器(opcbrowser)等幾個部分。程序設計時,要首先在visual basic環境下選擇對opc automation 2.0接口的引用,此時,opc對象會被自動添加到正在開發的工程項目中,然后,再根據需要建立這些對象的實例并利用其屬性和方法來實現對opc服務器的訪問。對opc服務器的訪問主要包括聲明opc對象實例、連接opc server、添加標簽變量、讀寫opc服務器(同步/異步)、斷開連接等幾個步驟。
opc對象實例的聲明主要包括對opc服務器、opc組集合、opc組、opc標簽集合、opc服務器句柄的聲明及程序所需要的其它實例的聲明。opc客戶端和opc server的連接主要靠調用opc服務器對象實例的connect方法函數來完成,例如,連接本地計算機dassidirect和rslinx opc server 的代碼分別為connect("archestra.dassidirect.1")和connect("rslinx opc server")
連接網絡遠程計算機(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")
需要說明的是當進行遠程opc連接時,必須在遠程計算機上運行dcomcnfg程序,并啟動該計算機opc服務器的dcom服務。
標簽變量的添加主要由opc標簽集合的additems方法函數實現,該函數定義了添加的標簽數量、標簽變量名(數組)、應用程序句柄(數組)、opc服務器句柄(數組)、錯誤代碼(數組)等方面的信息。例如,為dassidirect和rslinx opc服務器添加標簽變量的代碼為tagnms(1)="portcps7.jsbf.db2,x48.0"或者tagnms(1)="linxlogixtag"
my_items.additems itmnum, tagnms, clienthdls, svrhandles, err
其中,my_items為opc標簽集合的一個實例。標簽變量添加完成后,可通過syncread、syncwrite和asyncread、asyncwrite四個函數實現對opc服務器中相應數據的讀寫操作。在讀寫操作完成后,程序將會自動執行syncreadcomplete、syncwritecomplete和asyncread-complete、asyncwritecomple-te等過程,opc客戶端應用程序的數據顯示、故障診斷等功能可在該段程序代碼中實現。
此外,在對opc服務器完成讀寫后,可以調用opc服務器的disconnect方法來斷開與相應opc服務器的連接。不過,為了節省系統開支,增加程序穩定性,通常要在斷開和opc服務器連接前先移除opc服務器中的opc標簽和opc組,并將opc集合對象都置為nothing,然后再執行disconnect操作并將opc server對象實例置為nothing.
5 結束語
dde、opc技術的出現與發展已經在包括工業自動控制在內的諸多領域得到了廣泛的應用。dde作為一種較成熟的數據交換方式已擁有最全面的支持,而opc技術也越來越受眾多自動化軟硬件企業的支持與青睞,所以,在將來很長的一段時間里,dde與opc將繼續在各自的應用領域發揮重要作用,dde、opc技術的出現和發展為我們提供了一個方便的數據訪問接口,從而使控制系統進一步走向開放,用戶系統因此受益。
-
服務器
+關注
關注
12文章
9021瀏覽量
85183 -
醫療
+關注
關注
8文章
1800瀏覽量
58660 -
自動化
+關注
關注
29文章
5512瀏覽量
79103
發布評論請先 登錄
相關推薦
評論