隨著工業(yè)控制技術(shù)、計(jì)算機(jī)網(wǎng)絡(luò)和數(shù)字通信技術(shù)的快速發(fā)展,分布式測(cè)量、分布式計(jì)算和網(wǎng)絡(luò)控制在工業(yè)生產(chǎn)中將越來越多地被使用。Remoting技術(shù)是在.NET環(huán)境下,在應(yīng)用程序內(nèi)部或應(yīng)用程序域之間傳輸數(shù)據(jù)的方案。它有多種可以在數(shù)據(jù)傳輸中使用的通道,并且,在一個(gè)封閉的網(wǎng)絡(luò)環(huán)境中,選擇TCP通道將獲得更好的連接性能。因此,把.NET Remoting技術(shù)運(yùn)用到工業(yè)生產(chǎn)測(cè)控通信之中,達(dá)到及時(shí)通信、實(shí)時(shí)控制的目的,具有一定的應(yīng)用價(jià)值。 1 Remoting 1.1 Remoting技術(shù)簡(jiǎn)介 Microsoft.NET Remoting提供了一種允許對(duì)象通過應(yīng)用程序域與另一對(duì)象進(jìn)行交互的框架。這種框架提供了多種服務(wù),包括激活和生存期支持,以及負(fù)責(zé)與遠(yuǎn)程應(yīng)用程序進(jìn)行消息傳輸?shù)耐ㄐ磐ǖ馈?梢酝ㄟ^使用Remoting來進(jìn)行不同應(yīng)用程序之間的通信,不管這些程序是在同一臺(tái)計(jì)算機(jī)上,還是在局域網(wǎng)內(nèi)的不同計(jì)算機(jī)上,甚至在Internet的不同操作系統(tǒng)上(當(dāng)然相應(yīng)的操作系統(tǒng)也必須實(shí)現(xiàn).Net Framework)。Remoting將取代DCOM成為應(yīng)用更為廣泛的一種技術(shù)。 1.2 Remoting的體系結(jié)鉤 .NET Remoting為分布式對(duì)象提供了一個(gè)基礎(chǔ)結(jié)構(gòu)。它使用既靈活又可擴(kuò)展的管線向遠(yuǎn)程進(jìn)程提供.NET的完全對(duì)象語義。Remoting體系結(jié)構(gòu)主要包括以下元素:遠(yuǎn)程對(duì)象、通道、消息、格式化標(biāo)志符、代理對(duì)象、RemotingConfiguration類、ChannelServices類。 圖1簡(jiǎn)單地描述了.NET Remoting的結(jié)構(gòu),客戶端的對(duì)象通過公共接口(代理)訪問遠(yuǎn)程服務(wù)器對(duì)象的方法(或結(jié)果);對(duì)象訪問和結(jié)果的傳輸以格式化的形式通過定義的通道進(jìn)行。 圖1 .NET Remoting體系結(jié)構(gòu)圖 1.3 Remoting技術(shù)的優(yōu)缺點(diǎn) Remoting技術(shù)的優(yōu)點(diǎn):能進(jìn)行分布式開發(fā);TCP通道的Remoting速度非常快;雖然是遠(yuǎn)程的,但是非常接近于本地調(diào)用對(duì)象;可以做到保持對(duì)象的狀態(tài);不受應(yīng)用程序限制,可以是控制臺(tái)、winform、IIS、windows服務(wù)承載遠(yuǎn)程對(duì)象等。 Remoting技術(shù)的缺點(diǎn)大體有兩點(diǎn):非標(biāo)準(zhǔn)的應(yīng)用,因此,有平臺(tái)限制;當(dāng)脫離IIS時(shí)需要有自己的安全機(jī)制。 2 工業(yè)通信系統(tǒng)中Remoting技術(shù)的實(shí)現(xiàn) 在PCLevel工業(yè)生產(chǎn)遠(yuǎn)程測(cè)控系統(tǒng)的設(shè)計(jì)實(shí)現(xiàn)中,采用分布式三層結(jié)構(gòu)的程序設(shè)計(jì)使得企業(yè)內(nèi)部生產(chǎn)控制整體管理軟件的集成得以方便實(shí)現(xiàn)。采用Remoting技術(shù)在業(yè)務(wù)處理層與用戶層建立多個(gè)通信管道傳輸數(shù)據(jù),較好地解決了企業(yè)生產(chǎn)的遠(yuǎn)程實(shí)時(shí)監(jiān)測(cè)和控制問題,為建立企業(yè)級(jí)的快速網(wǎng)絡(luò)進(jìn)行有效的探索。 應(yīng)用Remofing技術(shù)的分布式處理程序,通常包括三部分:遠(yuǎn)程對(duì)象、服務(wù)端、客戶端。圖2給出了PCLevel系統(tǒng)的數(shù)據(jù)流程。客戶端通過發(fā)布命令、請(qǐng)求數(shù)據(jù)來調(diào)用服務(wù)器端的對(duì)象,完成各種操作。發(fā)布命令、請(qǐng)求數(shù)據(jù)實(shí)質(zhì)上就是服務(wù)端訂閱客戶端事件,即由客戶端發(fā)送消息,服務(wù)端捕捉該消息,然后響應(yīng)該事件。 圖2 PCLevel系統(tǒng)數(shù)據(jù)流程示意圖 2.1 建立遠(yuǎn)程對(duì)象類(PCLClassLibrary.dll) 把遠(yuǎn)程對(duì)象集中編寫成一個(gè)類,便于服務(wù)端和客戶端的引用,同時(shí)也便于整個(gè)系統(tǒng)的修改升級(jí)。下面是建立遠(yuǎn)程公用類的一個(gè)例子: [Serializable] public class SendOrderClass:MarshalByRefObject,SendOrderIntedace { pubhc static event SendOrderEventHandler SendOrderEvent; #region Send actoin to control equIPMent pubic void SendAction(string equipmentIDTemp, string actionTemp,string userlDTemp,int userLoginGradeTemp) { if(SendOrderEvent!=null) { SendOnterEvent(equipmentIDTemp,actionTemp,userlDTemp,userLnginGradeTemp); } } #endregion //遠(yuǎn)程對(duì)象的生命周期設(shè)為無窮大 public override object InitializeLifetimeService() { retum null; } } 2.2 定義遠(yuǎn)程對(duì)象公共接口 為了方便系統(tǒng)的部署和修改升級(jí),對(duì)遠(yuǎn)程對(duì)象類的引用定義一個(gè)公共接口。以后修改遠(yuǎn)程對(duì)象時(shí),只需要修改或更新遠(yuǎn)程對(duì)象類即可。遠(yuǎn)程對(duì)象的公共接口(PCLCommon.d11)定義如下: public delegate void SendOrderEventHandhr(string equipmentlIYremp, string acfionTemp,string userIDTemp, int userLoginGradeTemp); public interface SendOrderInterface { void SendAction(string equipmentlDTemp,string actionTemp, string userlDTemp,int userIJ09inGradeTemp); } 2.3 服務(wù)器端的設(shè)置 在服務(wù)器端引用PCLCommon.dll和PCLCIassLi.brary.dll,定義和設(shè)置TCP通信通道,添加接收事件處理方法: TcpChannel tcpChannelTemp 2 new TcpChannel(8090); ChannelServices.RegisterChannel(tcpChannelTemp); RemotingConfiguration.RegisterWellKnownServiceType(typeof(SendOrderClass),”PCLServer—SendOrder”.Well. KnownObjectMode.sillglecall); ///Remofing事件的定義 SendOrderClass.SendOrderEvent+’=new SendOrderEventHandler(OnAcceptedClientOrder); 當(dāng)服務(wù)器端啟動(dòng)后,程序就偵聽端口8090上的信號(hào),一旦偵聽到就立即引發(fā)事件SendOrderEvent,進(jìn)而執(zhí)行方法函數(shù)OnAcceptedClientOrder,分析命令內(nèi)容后,調(diào)用不同的函數(shù)完成相應(yīng)的操作。 2.4 客戶端的設(shè)置 在客戶端只需引用PCLCommon.dll即可。定義和設(shè)置TCP通信通道語句如下: TcpChannel tcpChannelTemp 2 new TcpChannel(0); ChannelServices.RegisterChannel(tcpChannelTemp); sendOrder=(SendOrderInterface)Activator.GetObject(typeof(SendOrderInterface),”top://localhost:8090/PCLServerSendOrder”); 就像調(diào)用本機(jī)服務(wù)一樣,客戶端運(yùn)行后,能夠獲得比較滿意的傳輸速度。 此外,在遠(yuǎn)程服務(wù)器端和客戶端分別使用配置文件,配置通信信道的建立和注冊(cè),以及遠(yuǎn)程對(duì)象的注冊(cè),方便將來重新修改信道、發(fā)布的類型或升級(jí)服務(wù)器端遠(yuǎn)程處理對(duì)象。 3 結(jié)束語 在PCLevel系統(tǒng)中,采用.Net Framework的成熟技術(shù).Net Remoting實(shí)現(xiàn)了業(yè)務(wù)規(guī)則層和用戶界面層通信,通過抽象類和接口在遠(yuǎn)程處理使得客戶端和服務(wù)器端實(shí)現(xiàn)有效的對(duì)象信息傳遞。這樣不僅方便系統(tǒng)的部署,對(duì)應(yīng)用程序的升級(jí)也相當(dāng)方便,不需要修改任何客戶端代碼,只需要在服務(wù)器端重新部署新版本的組件即可。同時(shí),不僅保證了數(shù)據(jù)讀取的速度,而且保證了數(shù)據(jù)讀取的安全性,在工業(yè)生產(chǎn)遠(yuǎn)程數(shù)據(jù)通信實(shí)際應(yīng)用中取得了極大的成功。 |