摘要: CORBA是開放式、多平臺、面向對象的分布式計算技術的工業規范,利用CORBA可以進行跨平臺、跨語言的分布式軟件開發。本文結合CORBA技術、數值計算方法、OpenGL圖形仿真技術,以C++Builder為開發工具開發了基于CORBA的分布式多連桿仿真系統,實現了分布式環境下的多連桿系統的分析、仿真及靈敏度分析,用戶可以在客戶端提供相應參數,由服務器完成動力學模型的自動建模、數值分析以及靈敏度分析,客戶端可以利用服務器端的分析數據進行圖形仿真。該系統的實現為CORBA在工程技術領域的應用進行了有益的實踐。
關鍵詞: CORBA ORB 分布式仿真 靈敏度分析 直接微分法
一、CORBA簡介
CORBA(Common Object Request Broker Architecture,公共對象請求代理體系結構)是由OMG(對象管理組織,Object Management Group)提出的應用軟件體系結構和對象技術規范,其核心是一套標準的語言、接口和協議,支持異構分布應用程序間的互操作性及獨立于平臺和編程語言的對象重用。
二、平面三連桿系統的分析
工程實際中的機械系統是由若干部件與運動副組成。在動力學分析時,首先應將一個實際系統抽象為一個多體系統(本文以多剛體系統為研究對象)。如果組成機械系統的所有部件都在同一平面或平行的平面內運行,這個系統就是平面機械系統。在考慮力的作用下研究各部件的位置與姿態,以及它們變化速度與加速度的關系,稱為動力學分析。由于各部件間通過運動副與驅動裝置連接在一起,平面機械系統的數學模型為各部件的位置與姿態坐標的非線性代數方程,以及速度與加速度的線性代數方程。所以平面機械系統動力學分析可以歸結為求解線性與非線性代數方程問題。
三、仿真的實現
1.接口的定義和編譯
OMG IDL文件在整個系統中處于非常重要的地位,它是客戶對象和服務器對象共同使用的接口。OMG IDL是與平臺和語言無關的;而數據及調用格式的轉換則是由ORB透明地完成。所有的CORBA對象接口,以及接口中相關的數據類型,都可以由接口定義語言(IDL)說明。
根據對模型的分析,接口程序定義的變量應該為:模型的初始位置q,桿的質量m,物塊的質量m1,仿真的初始時間tbegin和結束時間tend,兩次計算間的時間間隔step,兩次存儲結果間的時間間隔wstep。
編輯完畢并保存后,對接口文件進行編譯,生成相應的接口存根對象樁及接口框架對象架構,在此基礎上可以擴展實現客戶端和服務器端。
2.編寫服務器端程序
服務器端所要實現的功能即是原來仿真程序所實現的功能??梢园堰@部分程序看成一個黑箱系統,不必關心它的功能具體是如何實現的,所要關心的是它能夠提供什么樣的服務,最關鍵的是它的輸入輸出是什么,也就是它呈現給外界的接口是怎樣的。
數據庫在整個系統中的主要作用是存儲數據,同時可以更方便地展示數據,也利于其他程序共享數據。數據庫使用Microsoft Access建立,服務器端的C++Application通過ODBC直接對數據庫進行存儲操作??蛻舳丝梢酝ㄟ^JDBC-ODBC橋訪問Access數據庫。服務器端對數據庫的操作主要是數據的存儲,即把處理后的數據從文件中讀出后直接寫入表中,客戶端對數據庫的主要操作是數據的演示,只需讀出表中的數據即可。
3.編寫客戶端程序
相對于服務器端,客戶端的實現比較簡單。本文中采用C++ Application的形式。
執行File|New菜單項,在New Items對話框中選擇Multitier頁,點取CORBA Client圖標做到客戶端的實現,用以提交各項數據。編輯完畢后,使用Edit|Use CORBA Object指定客戶端要使用的對象實現。
4.Smart Agent
在客戶存根和服務器框架之間的橋梁是Smart agent,由它們來負責網絡間的底層通信,Smart agent是一個動態的分布式目錄服務,該服務定位實現特定對象的有效服務器。如果有多個服務器供選,智能代理提供載入平衡。它還提供服務器失敗保護,方式是在鏈接失敗時嘗試重起服務或必要時定位到其它主機上的服務器。Smart agent必須在局域網中的至少一臺主機上啟動。ORB用廣播消息定位Smart agent,如果網絡中有多個Smart agent,ORB使用第一個響應的。
5.仿真功能的實現
客戶端的仿真功能主要是基于計算數據的圖形仿真。采用二維和動畫兩種形式,把處理后的、存儲在數據庫中的數據顯示出來。
動畫仿真采用OpenGL技術。OpenGL是一套三維圖形處理庫,也是該領域的工業標準。OpenGL被設計成獨立于硬件,獨立于窗口系統的,在運行各種操作系統的各種計算機上都可用,并能在網絡環境下以客戶/服務器模式工作,是專業圖形處理、科學計算等高端應用領域的標準圖形庫。在使用OpenGL的時候,只需要做簡單的初始化,然后就可以直接調用相應的函數進行圖形繪制。在要實現動畫的窗體中添加一時鐘控件。由于一時鐘控件可以控制一時鐘事件完成一些周期性的工作,所以繪制圖畫的功能就添加在時鐘事件里。隨著時間變化,根據從數據庫中讀出的數據,不斷重繪桿的位置,就形成了動畫。動畫仿真的截圖如下:
二維仿真使用線性圖表顯示出在任意時刻某一個變量的值。x1對t的曲線圖如下:

參考文獻:
[1]潘振寬,趙維加.多體系統動力學設計靈敏度分析.青島大學.
[2]Jarrod Hollingworth. C++Builder5程序設計大全.機械工業出版社.
[3]徐士梁.C常用算法程序集.清華大學出版社.
[4]白建軍,朱亞平.Open GL三圖形設計與制作.人民郵電出版社.