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

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