余志永 包艷青
摘 要:本文簡述了Mobile-C與Ch的優(yōu)勢,詳細介紹了Mobile-C移動代理函數(shù)庫的原理機制與封裝調用。通過Mobile-C移動代理來實現(xiàn)控制時,可以在運行中動態(tài)地切換成新的算法,函數(shù)庫的使用使得代理傳送的代碼量大大減少,減少網(wǎng)絡延時,同時使程序的結構簡單明了,為復雜控制的實現(xiàn)做好基礎。
關鍵詞:Mobile-C;Ch;移動代理;函數(shù)庫封裝
Mobile-C是一個基于FIPA標準的多代理平臺,是專為實現(xiàn)硬件的實時連接和資源受限制的應用而設計的。它支持智能機電系統(tǒng)和嵌入式系統(tǒng)中的C/C++的移動代理。移動代理是一種可以在不同的執(zhí)行環(huán)境之間移動的軟件組件,可以在運行時動態(tài)地創(chuàng)建,發(fā)送到遠程系統(tǒng)執(zhí)行任務。一個移動代理在遠程系統(tǒng)運行時,可以動態(tài)地改變運行著的程序的算法,而無須中斷、重新編譯和啟動遠程系統(tǒng),特別適用于動態(tài)變化的環(huán)境。
Mobile-C作為普通的移動代理平臺,能夠應用到許多領域,適用于網(wǎng)絡智能機電一體化和嵌入式系統(tǒng)。例如,柔性自動化系統(tǒng)[2]。還可用于移動機器人的實時控制[3],實現(xiàn)算法間的切換和參數(shù)的修改。Mobile-C庫使Mobile-C代理機構可以嵌入到支持C/C++移動代理的程序中去。另外,通過Mobile-C API函數(shù),用戶可以完全控制嵌入到程序中的Mobile-C代理機構。因此,Mobile-C庫不僅為分布式應用提供了有效的代碼移動性,而且還促進了多代理系統(tǒng)的開發(fā),使其可以容易地與多種硬件設備交互。
Ch是一個支持跨平臺的,具有強大擴展功能的C/C++程序的解釋器,即無需編譯即可執(zhí)行,無需修改程序即可跨平臺執(zhí)行。Ch作為Mobile-C的執(zhí)行引擎,使得Mobile-C具有Ch的所有優(yōu)點。Ch支持ISO 1990C標準的所有功能和ISO C99的大部分特性,還支持C++中基于對象的編程。如用C語言作為移動代理的代碼語言,可以容易的實現(xiàn)與底層硬件的交互,特別適用于機電一體化和嵌入式系統(tǒng)。而其它移動代理平臺,如:Mole、Aglets、Concordia、JADE,只支持Java開發(fā),Java語言又是不支持底層硬件開發(fā)。因此,Mobile-C在機電系統(tǒng)和嵌入式系統(tǒng)中很有優(yōu)勢。
1 Mobile-C移動代理函數(shù)庫的原理機制
首先,介紹Ch的函數(shù)庫調用的原理機制,它和Mobile-C下的相同。其次說明各個文件的作用。
Ch SDK的開發(fā)可以通過完全新建源代碼來實現(xiàn),也可以通過對現(xiàn)有的二進制靜態(tài)庫、動態(tài)庫或共享庫進行二次封裝來實現(xiàn),從而加快開發(fā)的進度。本文中的控制代碼是源代碼,沒有現(xiàn)成的庫可以利用,因此選用第一種方式實現(xiàn)。下面先介紹Mobile-C移動代理函數(shù)庫的原理機制。如下圖1中以主程序的main
函數(shù)中調用func1
函數(shù)為例,來說明Ch中對C函數(shù)調用的過程。如圖所示,Ch空間指調用func1
函數(shù)的程序空間由主程序和chf文件組成;C空間指func1
函數(shù)和接口函數(shù)所封裝得到的函數(shù)庫的空間,由func1.c文件和func1_chdl.c文件封裝而成。
函數(shù)時,首先調用fun1.chf文件,建立句柄打開動態(tài)庫,然后打開相應的函數(shù),把Ch空間的參數(shù)傳遞到C空間并運行庫函數(shù),最后傳回返回值并關閉句柄。動態(tài)庫是由func1.c文件和func1_chdl.c文件封裝成的動態(tài)函數(shù)庫libfun1.dl;也可以先將fun1c.c文件封裝成動態(tài)庫func1.dll,然后將封裝func1.dll時生成的靜態(tài)庫文件func1.lib和func1_chdl.c封裝成動態(tài)函數(shù)庫libfunc1.dl。
需要封裝多個函數(shù)時,可以將各個函數(shù)文件funcn.c和funcn_chdl.c文件封裝成一個動態(tài)庫libfunc.dl;也可以用一個func.c文件包含各個函數(shù),一個func_chdl.c文件包含各個函數(shù)接口封裝成一個動態(tài)庫。前者每個函數(shù)有一個同名的chf文件,后者需要一個包含各個函數(shù)所需chf文件內容的chf文件,但是文件名需要和第一個函數(shù)的名相同,而且必須先調用第一個函數(shù)后才能調用其它的函數(shù)。當封裝的函數(shù)較多時前者的Makefile文件復雜,后者的Makefile文件則不因封裝函數(shù)的多少而變復雜。因此,選用后者來實現(xiàn)移動代理函數(shù)的封裝,同時減少了chf文件的個數(shù),優(yōu)化了程序結構。
下面的圖2更形象的描繪出Ch SDK中各個文件的作用。
2 總結
使用Mobile-C,可以實現(xiàn)對終端代理的實時控制,動態(tài)地切換算法,控制方式靈活方便快捷,程序算法調試簡便,封裝成函數(shù)庫以后程序結構優(yōu)化有利于開發(fā)。移動代理技術的發(fā)展方向是分布式復雜系統(tǒng)的開發(fā),它能增強分布式系統(tǒng)的設計和分析。
參考文獻
[1] Mobile-C. A Multi-Agent Platform for Mobile C/C++ Agents[EB/OL].(2001-08-09)[2010-12-10] http://www.mobilec.org.
[2] NESTINGER S S, CHEN B, CHENG H H. A Mobile Agent-Based Framework for Flexible Automation Systems[J]. IEEE/ASME TRANSACTIONS ON MECHATRONICS, 2010, 15(6): 942-951.
[3] CHOU Y C, KO D, CHENG H H. An embeddable mobile agent platform supporting runtime code mobility, interaction and coordination of mobile agents and host systems[J]. Information and Software Technology, 2010, 52: 185-196.
[4] CHENG H H. Scientific computing in the Ch programming language[J]. Scientific Programming, 1993, 2(3): 49-75.
[5] CHENG H H. Ch: A C/C++ interpreter for script computing[J]. C/C++ Users Journal, 2006, 24(1): 6-12.
[6] CHENG H H. Ch – an Embeddable C/C++ Interpreter[EB/OL]. [2009-04-15] http://www.softintegration.com.
[7] CHOU Y C, KO D, CHENG H H. Mobile agent-based computational steering for distributed applications[J]. Concurrency and Computation: Practice and Experience, 2009, 21(18): 2377-2399.