一种机器人控制系统软件框架

    许志瑜

    

    

    摘 要 本文主要介绍了一种用于机器人控制系统中应用程序的开发框架DAREE。应用程序中每个Applet构成一个业务控制单元,每个业务单元由组件对象组成,实现基本的控制业务需求。同时该开发框架提供了一系列的基本功能模块,如消息队列、定時器等基础服务,实现应用程序的快速开发。

    关键词 DAREE Applet 消息队列 定时器

    中图分类号:TP249 文献标识码:A 文章编号:1007-0745(2021)02-0011-02

    1 前言

    近年来,机器人控制系统要求越来越复杂,为了简化应用程序开发过程,提高应用程序开发效率,提出一种应用程序开发框架DAREE,将控制系统中的业务进行管理和拆分,将系统资源进行统一规划。

    2 DAREE

    DAREE(Distributiion Automation Runtime Execute Environment)为Applet的运行提供一套基本的运行环境,并向应用程序提供一系列服务类库[1],该类库实现了对操作系统服务的封装。同时该框架实现了一套设备抽象层,提高应用程序的可移植性(见图2)。

    DAREE建立在Linux操作系统之上,以下是概要性描述:

    (1)DAREE基于嵌入式Linux,分成内核空间和用户空间;

    (2)最底层是硬件层,控制系统中的一些外围的器件;

    (3)内核空间为设备驱动层;

    (4)用户空间分为三层,PAL、SAL、Applet,基于组件的设计思想;

    (5)PAL是 Platform Access Layer的缩写,是移植层,操作系统相关;

    (6)SAL是Shared Access Layer 的缩写,包含一系列的类库;

    (7)应用程序层,不同的业务只需要开发不同的Applet;

    (8)3rd表示是第三方开发的组件;

    (9)用C语言进行设计[2],增强平台兼容性。

    2.1 组件对象

    组件对象分为静态和动态两种方式,静态组件的代码和框架一起参与编译,动态组件的代码独立编译。两种组件使用上并不区分,动态组件的存在是为了将组件的开发和Applet进行解耦,提高组件对象的灵活性和功能扩展性[3]。

    2.2 Applet

    Applet是DAREE上开发应用程序的最小单位,是一个业务逻辑的功能集合。Applet有stop、Starting、Run、Closing、Terminating这五种状态。见下图:

    (1)一个Applet开始于StartApplet,将Applet处于Stop状态,并开始创建Applet;

    (2)创建动作完成后,Applet处于Starting状态,并收到EVT_APP_START事件;

    (3)Applet处理完EVT_APP_START后,进入Run状态,直到用户调用CloseApplet;

    (4)Applet进入Closing状态,收到EVT_APP_STOP事件;

    (5)最后Applet会进入Terminating状态,完成Applet和内部资源的释放,结束Applet。

    2.3 消息队列

    该应用程序框架采用基于消息驱动的方式运行,Applet通过消息接口类,可以快速实现消息队列功能。用户只需要通过IHandle接口生产消息,并通过Send函数将消息发送出去,系统通过消息中的信息找到该消息的事件处理函数进行处理。

    2.4 配置管理

    配置管理接口IConfig,用于保存各个模块需要保存的配置信息,该框架提供了统一的配置管理接口IConfig, 并通过文件的形式进行配置信息的保存,系统为各个模块分配了统一的标签,模块通过标签获得私有的配置信息。

    2.5 定时器

    定时器在Applet开发过程中是一种常用功能,提供了延迟服务和异步处理的功能。Timer的实现是通过生成Message并带上时间参数,加入到IMessageQueue队列中,实现了Timer的延时处理能力。

    2.6 异步事件

    异步事件Resume是DAREE提供的另一个异步事件处理功能,比如用户需要读取一个大数据量文件,可以通过Resume功能分步进行读取。本框架将Resume异步事件设计在DAREE的主线程空闲时进行操作,避免对主业务功能的影响。

    2.7 日志管理

    日志管理是“查看我关心的信息”。本系统日志管理通过日志等级和过滤字符完成日志管理,通过LOG_V,LOG_D,LOG_I,LOG_W,LOG_E进行日志的等级输出,并通过过滤字符串进行日志过滤来达到日志控制的目的。

    2.8 设备控制接口

    本系统由IPort接口实现统一的设备控制,并为数据传输提供了一套通用的接口函数,如Read、Write、GetLastError 等等。通过IPort接口,可以打开一个设备,通过read接口进行设备的读取,通过write进行设备的写入操作,实现对一个设备的控制操作。

    2.9 内存管理

    本系统实现了一套内存检测机制,当Applet退出时,判断Applet是否有内存泄漏现象,如果有则打印出消息,供工程师进行检查。实现原理是在应用程序分配内存时,给内存打上标记,根据标记信息判断是否有内存泄漏。

    3 总结

    本文提出了一种用于机器人控制系统中应用程序的开发框架DAREE,该框架以Applet为单位管理业务功能模块,通过DAREE提供的系统接口,可以快速实现消息队列、定时器、异步事件处理、日志管理、内存管理等基础功能。

    参考文献:

    [1] Stanley B. Lippman,Josée Lajoie,Barbara E. Moo著. C++ Primer(中文版 第5版)[M].北京:电子工业出版社, 2013.

    [2] Stanley,B.,Lippman,侯捷译.深度探索C++对象模型[M].北京:电子工业出版社,2012.

    [3] 埃里克·伽玛(Erich Gamma).设计模式:可复用面向对象软件的基础[M].北京:机械工业出版社,2019.

    (合肥科大智能机器人技术有限公司南京分公司,江苏 南京 210000)