Mobile—C移动代理函数库的封装机制

2015-08-28 04:10余志永包艳青
卷宗 2015年8期

余志永 包艳青

摘 要:本文简述了Mobile-C与Ch的优势,详细介绍了Mobile-C移动代理函数库的原理机制与封装调用。通过Mobile-C移动代理来实现控制时,可以在运行中动态地切换成新的算法,函数库的使用使得代理传送的代码量大大减少,减少网络延时,同时使程序的结构简单明了,为复杂控制的实现做好基础。

关键词:Mobile-C;Ch;移动代理;函数库封装

Mobile-C是一个基于FIPA标准的多代理平台,是专为实现硬件的实时连接和资源受限制的应用而设计的。它支持智能机电系统和嵌入式系统中的C/C++的移动代理。移动代理是一种可以在不同的执行环境之间移动的软件组件,可以在运行时动态地创建,发送到远程系统执行任务。一个移动代理在远程系统运行时,可以动态地改变运行着的程序的算法,而无须中断、重新编译和启动远程系统,特别适用于动态变化的环境。

Mobile-C作为普通的移动代理平台,能够应用到许多领域,适用于网络智能机电一体化和嵌入式系统。例如,柔性自动化系统[2]。还可用于移动机器人的实时控制[3],实现算法间的切换和参数的修改。Mobile-C库使Mobile-C代理机构可以嵌入到支持C/C++移动代理的程序中去。另外,通过Mobile-C API函数,用户可以完全控制嵌入到程序中的Mobile-C代理机构。因此,Mobile-C库不仅为分布式应用提供了有效的代码移动性,而且还促进了多代理系统的开发,使其可以容易地与多种硬件设备交互。

Ch是一个支持跨平台的,具有强大扩展功能的C/C++程序的解释器,即无需编译即可执行,无需修改程序即可跨平台执行。Ch作为Mobile-C的执行引擎,使得Mobile-C具有Ch的所有优点。Ch支持ISO 1990C标准的所有功能和ISO C99的大部分特性,还支持C++中基于对象的编程。如用C语言作为移动代理的代码语言,可以容易的实现与底层硬件的交互,特别适用于机电一体化和嵌入式系统。而其它移动代理平台,如:Mole、Aglets、Concordia、JADE,只支持Java开发,Java语言又是不支持底层硬件开发。因此,Mobile-C在机电系统和嵌入式系统中很有优势。

1 Mobile-C移动代理函数库的原理机制

首先,介绍Ch的函数库调用的原理机制,它和Mobile-C下的相同。其次說明各个文件的作用。

Ch SDK的开发可以通过完全新建源代码来实现,也可以通过对现有的二进制静态库、动态库或共享库进行二次封装来实现,从而加快开发的进度。本文中的控制代码是源代码,没有现成的库可以利用,因此选用第一种方式实现。下面先介绍Mobile-C移动代理函数库的原理机制。如下图1中以主程序的main

函数中调用func1

函数为例,来说明Ch中对C函数调用的过程。如图所示,Ch空间指调用func1

函数的程序空间由主程序和chf文件组成;C空间指func1

函数和接口函数所封装得到的函数库的空间,由func1.c文件和func1_chdl.c文件封装而成。

函数时,首先调用fun1.chf文件,建立句柄打开动态库,然后打开相应的函数,把Ch空间的参数传递到C空间并运行库函数,最后传回返回值并关闭句柄。动态库是由func1.c文件和func1_chdl.c文件封装成的动态函数库libfun1.dl;也可以先将fun1c.c文件封装成动态库func1.dll,然后将封装func1.dll时生成的静态库文件func1.lib和func1_chdl.c封装成动态函数库libfunc1.dl。

需要封装多个函数时,可以将各个函数文件funcn.c和funcn_chdl.c文件封装成一个动态库libfunc.dl;也可以用一个func.c文件包含各个函数,一个func_chdl.c文件包含各个函数接口封装成一个动态库。前者每个函数有一个同名的chf文件,后者需要一个包含各个函数所需chf文件内容的chf文件,但是文件名需要和第一个函数的名相同,而且必须先调用第一个函数后才能调用其它的函数。当封装的函数较多时前者的Makefile文件复杂,后者的Makefile文件则不因封装函数的多少而变复杂。因此,选用后者来实现移动代理函数的封装,同时减少了chf文件的个数,优化了程序结构。

下面的图2更形象的描绘出Ch SDK中各个文件的作用。

2 总结

使用Mobile-C,可以实现对终端代理的实时控制,动态地切换算法,控制方式灵活方便快捷,程序算法调试简便,封装成函数库以后程序结构优化有利于开发。移动代理技术的发展方向是分布式复杂系统的开发,它能增强分布式系统的设计和分析。

参考文献

[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.