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