1 引言
XML使得從工廠底層到企業(yè)辦公自動(dòng)化的系統(tǒng)集成變得非常容易,利用Internet技術(shù),它可以實(shí)現(xiàn)以任何文件格式進(jìn)行再使用、搜索和交換數(shù)據(jù)信息,實(shí)現(xiàn)從工廠底層的監(jiān)控和控制系統(tǒng)到較高級(jí)別的制造業(yè)企業(yè)應(yīng)用程序的縱向信息系統(tǒng)集成。同時(shí)在工廠自動(dòng)化和企業(yè)解決方案方面也能夠獲得較高的集成度。XML還能夠提供更好的方式將獲得的實(shí)時(shí)生產(chǎn)數(shù)據(jù)信息嵌入基于辦公自動(dòng)化信息處理的應(yīng)用程序中去,進(jìn)一步滿足企業(yè)對(duì)各種數(shù)據(jù)信息的需要。
2 OPC DA(COM)的局限性
以往的OPC(OLE for Process Contrl)規(guī)范是基于Microsoft COM/DCOM技術(shù)制定的。然而,由于COM自身的一些特點(diǎn),使得它的應(yīng)用受到了一定的限制,主要表現(xiàn)在以下3個(gè)方面:
(1) 依賴Microsoft環(huán)境,缺少跨平臺(tái)通用性
由于COM/D COM對(duì)Microsoft平臺(tái)的依賴性,使得OPC COM接口很難被應(yīng)用到其它平臺(tái)上。如果運(yùn)行的是DCOM服務(wù)器程序,所有的分布式的客戶端不得不運(yùn)行于微軟的操作平臺(tái)上。
(2) 難以與企業(yè)應(yīng)用程序連接
企業(yè)應(yīng)用程序需要實(shí)時(shí)的工業(yè)現(xiàn)場(chǎng)數(shù)據(jù),但是這些上層應(yīng)用程序大多沒有與OPCCOM服務(wù)器交互的OPC COM接口,因而無法連接到具有COM接口的OPC服務(wù)器進(jìn)行獲取數(shù)據(jù)。
(3) 不易通過防火墻,較難與Internet應(yīng)用程序集成
現(xiàn)行的OPC COM應(yīng)用程序在現(xiàn)場(chǎng)級(jí)的局域網(wǎng)環(huán)境下能夠很好的工作。但當(dāng)你試圖通過Internet進(jìn)行數(shù)據(jù)交換時(shí),網(wǎng)絡(luò)防火墻會(huì)過濾掉大多數(shù)基于COM傳輸?shù)臄?shù)據(jù),因此基于COM為了解決這些問題,人們用OPC XML標(biāo)準(zhǔn),對(duì)原有OPC服務(wù)器進(jìn)行必要的功能擴(kuò)充。OPC XML 標(biāo)準(zhǔn)具有良好的跨平臺(tái)通用性,而且基于廣泛應(yīng)用的Internet標(biāo)準(zhǔn)。
3 OPC XML解決方案
(1) OPC XML簡(jiǎn)介
OPC XML DA用基于XML的Web服務(wù)概念,用SOAP(簡(jiǎn)單對(duì)象訪問協(xié)議)作為對(duì)應(yīng)用程序共享消息進(jìn)行包裝的標(biāo)準(zhǔn)協(xié)議。OPC客戶端和服務(wù)器之間通過HTTP協(xié)議傳輸Web服務(wù)。OPC XML提供一種比較容易的方式用于通過Internet發(fā)布OPC數(shù)據(jù)信息,為企業(yè)自動(dòng)化過程控制系統(tǒng)集成提供廣泛的連接特性。同時(shí)也為非Microsoft操作系統(tǒng)平臺(tái)發(fā)布OPC數(shù)據(jù)信息提供一種數(shù)據(jù)信息轉(zhuǎn)換機(jī)制,這些平臺(tái)包括Linux、UNIX、CORBAR等。
OPC XML DA支持Brows、Read、Write、Subscribe等服務(wù),每種服務(wù)都包括一個(gè)請(qǐng)求(Request)和一個(gè)響應(yīng)(Response)。通過對(duì)這些服務(wù)的定義,提供了訪問工業(yè)現(xiàn)場(chǎng)數(shù)據(jù)的標(biāo)準(zhǔn)接口。請(qǐng)求和響應(yīng)按照SOAP協(xié)議標(biāo)準(zhǔn)被包裝成SOAP信封,信封標(biāo)題說明消息如何被處理,信封正文則包含工業(yè)過程信息。
(2) OPC XML解決方案
OPC XML標(biāo)準(zhǔn)采用了XML技術(shù)擴(kuò)展了OPC訪問數(shù)據(jù)信息平臺(tái)。OPC XML DA定義了一套基于XML的面向工廠自動(dòng)化和過程控制領(lǐng)域的數(shù)據(jù)信息交換接口,以便讓這一領(lǐng)域的自動(dòng)化過程控制設(shè)備橫跨Internet而工作。用OPC XML作為OPC COM數(shù)據(jù)服務(wù)器的補(bǔ)充,在OPC COM服務(wù)器上添加OPC XML接口,將OPC COM數(shù)據(jù)服務(wù)器采集的數(shù)據(jù)通過OPC XML發(fā)布到Web服務(wù)器上,這樣處于其它網(wǎng)絡(luò)平臺(tái)的授權(quán)用戶就可以很容易通過Internet訪問Web服務(wù)器提供的信息(如圖1所示)。
圖1 OPC XML支持任何操作系統(tǒng)平臺(tái)的Web瀏覽器
人們還開發(fā)了基于SOAP協(xié)議的客戶端,實(shí)現(xiàn)了對(duì)企業(yè)信息及生產(chǎn)數(shù)據(jù)的訪問。在實(shí)驗(yàn)室環(huán)境下取得了較好的預(yù)期效果。
(3) SOAP簡(jiǎn)介
SOAP(Simple Object Access Protocol)簡(jiǎn)單對(duì)象訪問協(xié)議是在分散或分布式的環(huán)境中交換信息的簡(jiǎn)單的協(xié)議,是一個(gè)基于XML的協(xié)議。它為在一個(gè)松散的、分布的環(huán)境中使用XML對(duì)等地交換結(jié)構(gòu)化的和類型化的信息提供了一個(gè)簡(jiǎn)單且輕量級(jí)的機(jī)制。SOAP可以簡(jiǎn)單的理解為這樣的一個(gè)開放協(xié)議SOAP=RPC+HTTP+XML:采用HTTP作為底層通訊協(xié)議;RPC作為一致性的調(diào)用途徑,XML作為數(shù)據(jù)傳送的格式,允許服務(wù)提供者和服務(wù)客戶經(jīng)過防火墻在Internet進(jìn)行通訊交互。
SOAP的兩個(gè)主要設(shè)計(jì)目標(biāo)是簡(jiǎn)單性和可擴(kuò)展性,它包括四個(gè)部分:SOAP信封(SOAP Envelop),封裝定義了一個(gè)描述消息中的內(nèi)容是什么,是誰發(fā)送的,誰應(yīng)當(dāng)接受并處理它以及如何處理它們的框架;SOAP編碼規(guī)則(SOAP Encoding rules),用于表示應(yīng)用程序需要使用的數(shù)據(jù)類型的實(shí)例;SOAP RPC表示(SOAP RPC Representation),表示遠(yuǎn)程過程調(diào)用和應(yīng)答的協(xié)定;SOAP綁定(SOAP Binding),用于使用底層協(xié)議交換信息。
SOAP定義了一種消息交互機(jī)制,它描述了如何用XML對(duì)信息進(jìn)行編碼。通常,SOAP用于在運(yùn)行時(shí)解釋遠(yuǎn)程調(diào)用的參數(shù)值,并且使用特定的編碼方式將這些值填充在XML文檔中。然后,XML數(shù)據(jù)通過HTTP協(xié)議傳輸至遠(yuǎn)程服務(wù)器。SOAP 技術(shù)有助于實(shí)現(xiàn)大量異構(gòu)程序和平臺(tái)之間的互操作性,從而使存在的應(yīng)用能夠被廣泛的用戶所訪問。SOAP是把成熟的基于HTTP的WEB技術(shù)與XML的靈活性和可擴(kuò)展性組合在了一起。
(4) SOAP與DCOM的比較優(yōu)勢(shì)
首先,DCOM定義了傳送信息的語義,對(duì)參數(shù)和返回值使用二進(jìn)制編碼。但是對(duì)諸如參數(shù)名稱或類型的任何信息都不編碼,使中介很難處理消息。又因?yàn)槊總€(gè)系統(tǒng)使用不同的二進(jìn)制編碼,系統(tǒng)間的互操作很難實(shí)現(xiàn)。SOAP并沒有定義信息的語義、服務(wù)質(zhì)量以及基于Internet的事務(wù)處理。而是采用 XML 進(jìn)行消息編碼,正確的處理需要服務(wù)器和客戶端本身來執(zhí)行,理解和執(zhí)行彼此使用的信息格式(One-To-One,Request/Reply,Broadcast,ETC),應(yīng)用程序本身在語義解析中扮演著十分重要的角色。
其次,盡管DCOM可以在微軟的各種平臺(tái)上運(yùn)行,但是基于DCOM的解決方案必須依賴于單一的應(yīng)用程序。比如說,假如運(yùn)行的是DCOM服務(wù)器程序,所有的分布式的客戶端不得不運(yùn)行于微軟的操作平臺(tái)上。DCOM適合于服務(wù)器―服務(wù)器間的通訊,但是對(duì)于客戶端―服務(wù)器的通訊十分脆弱,尤其當(dāng)客戶程序分布在Internet上更是如此。
最后,DCOM雖然是有效的、靈活的,但也是很復(fù)雜的。而SOAP的一個(gè)主要優(yōu)點(diǎn)就在于它的簡(jiǎn)單性,SOAP使用HTTP作為網(wǎng)絡(luò)通訊協(xié)議,接受和傳送數(shù)據(jù)參數(shù)時(shí)采用XML作為數(shù)據(jù)格式,從而代替了DCOM中的NDR格式,提供了更高層次上的抽象,與平臺(tái)和環(huán)境無關(guān)
4 基于SOAP的OPC XML DA客戶端的實(shí)現(xiàn)
現(xiàn)在許多自動(dòng)化廠商已經(jīng)開發(fā)出了高效的OPC XML DA應(yīng)用程序,如作為OPC規(guī)范的五個(gè)發(fā)起公司之一的SIEMENS公司開發(fā)的WinCC更是很好的支持OPC XML。客戶可以按照OPC XML規(guī)范編寫自己所需功能的客戶端,就能實(shí)現(xiàn)與服務(wù)器相連,進(jìn)行數(shù)據(jù)交換。
OPC XML DA是在Web服務(wù)基礎(chǔ)上制定的全新的接口規(guī)范,所有支持Web服務(wù)的編程工具(例如Microsoft的Visual C++,Borland Delphi等)都可以用來編寫OPC XML DA接口。由于Delphi7強(qiáng)大的Web Service 功能,對(duì)XML和SOAP有很好的支持,開發(fā)者無需精通XML和SOAP即可進(jìn)行相關(guān)程序的開發(fā),因此選用Delphi在WINDOWS下進(jìn)行客戶端的編程。
圖2 Read命令界面
下面以客戶端如何向服務(wù)器端發(fā)送讀請(qǐng)求為例,給出開發(fā)步驟及部分實(shí)現(xiàn)代碼。測(cè)試服務(wù)器網(wǎng)址為www.tswinc.us/XMLDADemo/XML_Sim/opcxmldaserver.asmx。
步驟1:在工程目錄下建立一個(gè)文本文檔,把Read界面中各命令的參數(shù)值按照XML語言規(guī)范保存到這個(gè)文檔中,方便以后用到讀命令時(shí)進(jìn)行SOAP封裝。文檔中XML代碼如下:
<Read
xmlns="
http://www.tswinc.us/XMLDADemo/XML_Sim/opcxmldaserver.asmx">
<Options
ReturnItemName="true"
ReturnItemPath="true"
ReturnDiagnosticInfo="true"
ReturnItemTime="true"
ReturnErrorText="true"
ClientRequestHandle="123"
LocaleID="" />
<ItemList MaxAge="0">
<Items MaxAge="0"
ItemName="Bucket Brigade.Boolean"
ClientItemHandle="264331" />
</ItemList>
</Read>
步驟2:SOAP請(qǐng)求需要SOAPAction HTTP標(biāo)頭。
SoapAction:= 'http://opcfoundation.org/webservices/XMLDA/1.0/’+’Read’;
步驟3:發(fā)送的SOAP Envelop
ReadRequest := TStringStream.Create(
‘<?xml version="1.0" encoding="UTF-8" ?>’
+’<SOAP-ENV:Envelopexmlns:SOAP-ENV=
"http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">'
+'<SOAP-ENV:Body>'
+ 步驟(1)建立的Read文檔的內(nèi)容
+'</SOAP-ENV:Body>'
+'</SOAP-ENV:Envelope>');
步驟4:命令發(fā)送函數(shù)Send
function TXMLDAClient.Send(const ReadReq: TStream): Integer;
…… //變量定義
begin
……
Request
:= HttpOpenRequest(FInetConnect, 'POST', PChar(FURLSite),nil, nil, nil, Flags, 0);
//創(chuàng)建http句柄
ActionHeader:= GetSOAPActionHeader(FSoapAction);
HttpAddRequestHeaders(Request, PChar(ActionHeader), Length(ActionHeader), HTTP_ADDREQ_FLAG_ADD);
//向HTTP請(qǐng)求句柄加入一個(gè)或多個(gè)HTTP請(qǐng)求頭部
……
BuffSize := ReadReq.Size;
//設(shè)置緩沖區(qū)
if BuffSize > MaxSinglePostSize then
begin
Buffer := TMemoryStream.Create;
try Buffer.SetSize(MaxSinglePostSize);
//初始化緩沖區(qū)
……
//開始發(fā)送
Check(not HttpSendRequestEx(Request,@INBuffer,nil, HSR_INITIATE or HSR_SYNC, cardinal(self))); //發(fā)送讀請(qǐng)求到XML DA Server
try
while True do
begin
Len := BuffSize - ReadReq.Position;
//讀緩沖區(qū)數(shù)據(jù)
Len := ReadReq.Read(Buffer.Memory^, Len);
if Len = 0 then
raise Exception.Create(SInvalidHTTPRequest);
Check(not InternetWriteFile(Request, @Buffer.Memory^, Len,RetVal));
//把數(shù)據(jù)寫入一個(gè)打開的Internet file
……
finally …
end;
end;
通過測(cè)試,客戶端能夠按照預(yù)定設(shè)計(jì)通過Internet進(jìn)行數(shù)據(jù)讀、寫等基本功能。
5 結(jié)語
現(xiàn)在工業(yè)過程自動(dòng)化控制領(lǐng)域正在積極容納電子商務(wù)的管理和應(yīng)用模式,以便更好地將工廠現(xiàn)場(chǎng)的自動(dòng)化過程控制與企業(yè)辦公自動(dòng)化集成在一起。OPC XML擴(kuò)展了OPC的功能,實(shí)現(xiàn)了企業(yè)信息系統(tǒng)控制、監(jiān)控、管理3個(gè)層次間的信息溝通和系統(tǒng)整合。SOAP把成熟的基于HTTP的WEB技術(shù)與XML的靈活性和可擴(kuò)展性組合在了一起,使大量異構(gòu)程序和基于不同平臺(tái)子系統(tǒng)之間的互操作成為可能,從而使存在的應(yīng)用能夠被廣泛的用戶所訪問。SOAP與OPC XML必將為工業(yè)自動(dòng)化控制系統(tǒng)集成提供新的途徑。