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