許志瑜
(合肥科大智能機器人技術有限公司南京分公司,江蘇 南京 210000)
近年來,機器人控制系統要求越來越復雜,為了簡化應用程序開發過程,提高應用程序開發效率,提出一種應用程序開發框架DAREE,將控制系統中的業務進行管理和拆分,將系統資源進行統一規劃。
DAREE(Distributiion Automation Runtime Execute Environment)為Applet 的運行提供一套基本的運行環境,并向應用程序提供一系列服務類庫[1],該類庫實現了對操作系統服務的封裝。同時該框架實現了一套設備抽象層,提高應用程序的可移植性(見圖2)。

圖2 DAREE 系統架構圖
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],增強平臺兼容性。
組件對象分為靜態和動態兩種方式,靜態組件的代碼和框架一起參與編譯,動態組件的代碼獨立編譯。兩種組件使用上并不區分,動態組件的存在是為了將組件的開發和Applet 進行解耦,提高組件對象的靈活性和功能擴展性[3]。
Applet 是DAREE 上開發應用程序的最小單位,是一個業務邏輯的功能集合。Applet 有Stop、Starting、Run、Closing、Terminating 這五種狀態。見下圖:

圖1 Applet 狀態遷移圖
(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。
該應用程序框架采用基于消息驅動的方式運行,Applet通過消息接口類,可以快速實現消息隊列功能。用戶只需要通過IHandle 接口生產消息,并通過Send 函數將消息發送出去,系統通過消息中的信息找到該消息的事件處理函數進行處理。
配置管理接口IConfig,用于保存各個模塊需要保存的配置信息,該框架提供了統一的配置管理接口IConfig,并通過文件的形式進行配置信息的保存,系統為各個模塊分配了統一的標簽,模塊通過標簽獲得私有的配置信息。
定時器在Applet 開發過程中是一種常用功能,提供了延遲服務和異步處理的功能。Timer 的實現是通過生成Message 并帶上時間參數,加入到IMessageQueue 隊列中,實現了Timer 的延時處理能力。
異步事件Resume 是DAREE 提供的另一個異步事件處理功能,比如用戶需要讀取一個大數據量文件,可以通過Resume 功能分步進行讀取。本框架將Resume 異步事件設計在DAREE 的主線程空閑時進行操作,避免對主業務功能的影響。
日志管理是“查看我關心的信息”。本系統日志管理通過日志等級和過濾字符完成日志管理,通過LOG_V,LOG_D,LOG_I,LOG_W,LOG_E 進行日志的等級輸出,并通過過濾字符串進行日志過濾來達到日志控制的目的。
本系統由IPort 接口實現統一的設備控制,并為數據傳輸提供了一套通用的接口函數,如Read、Write、GetLastError 等等。通過IPort 接口,可以打開一個設備,通過Read 接口進行設備的讀取,通過Write 進行設備的寫入操作,實現對一個設備的控制操作。
本系統實現了一套內存檢測機制,當Applet 退出時,判斷Applet 是否有內存泄漏現象,如果有則打印出消息,供工程師進行檢查。實現原理是在應用程序分配內存時,給內存打上標記,根據標記信息判斷是否有內存泄漏。
本文提出了一種用于機器人控制系統中應用程序的開發框架DAREE,該框架以Applet 為單位管理業務功能模塊,通過DAREE 提供的系統接口,可以快速實現消息隊列、定時器、異步事件處理、日志管理、內存管理等基礎功能。