許志瑜


摘 要 本文主要介紹了一種用于機器人控制系統(tǒng)中應用程序的開發(fā)框架DAREE。應用程序中每個Applet構(gòu)成一個業(yè)務控制單元,每個業(yè)務單元由組件對象組成,實現(xiàn)基本的控制業(yè)務需求。同時該開發(fā)框架提供了一系列的基本功能模塊,如消息隊列、定時器等基礎服務,實現(xiàn)應用程序的快速開發(fā)。
關(guān)鍵詞 DAREE Applet 消息隊列 定時器
中圖分類號:TP249 文獻標識碼:A 文章編號:1007-0745(2021)02-0011-02
1 前言
近年來,機器人控制系統(tǒng)要求越來越復雜,為了簡化應用程序開發(fā)過程,提高應用程序開發(fā)效率,提出一種應用程序開發(fā)框架DAREE,將控制系統(tǒng)中的業(yè)務進行管理和拆分,將系統(tǒng)資源進行統(tǒng)一規(guī)劃。
2 DAREE
DAREE(Distributiion Automation Runtime Execute Environment)為Applet的運行提供一套基本的運行環(huán)境,并向應用程序提供一系列服務類庫[1],該類庫實現(xiàn)了對操作系統(tǒng)服務的封裝。同時該框架實現(xiàn)了一套設備抽象層,提高應用程序的可移植性(見圖2)。
DAREE建立在Linux操作系統(tǒng)之上,以下是概要性描述:
(1)DAREE基于嵌入式Linux,分成內(nèi)核空間和用戶空間;
(2)最底層是硬件層,控制系統(tǒng)中的一些外圍的器件;
(3)內(nèi)核空間為設備驅(qū)動層;
(4)用戶空間分為三層,PAL、SAL、Applet,基于組件的設計思想;
(5)PAL是 Platform Access Layer的縮寫,是移植層,操作系統(tǒng)相關(guān);
(6)SAL是Shared Access Layer 的縮寫,包含一系列的類庫;
(7)應用程序?qū)樱煌臉I(yè)務只需要開發(fā)不同的Applet;
(8)3rd表示是第三方開發(fā)的組件;
(9)用C語言進行設計[2],增強平臺兼容性。
2.1 組件對象
組件對象分為靜態(tài)和動態(tài)兩種方式,靜態(tài)組件的代碼和框架一起參與編譯,動態(tài)組件的代碼獨立編譯。兩種組件使用上并不區(qū)分,動態(tài)組件的存在是為了將組件的開發(fā)和Applet進行解耦,提高組件對象的靈活性和功能擴展性[3]。
2.2 Applet
Applet是DAREE上開發(fā)應用程序的最小單位,是一個業(yè)務邏輯的功能集合。Applet有stop、Starting、Run、Closing、Terminating這五種狀態(tài)。見下圖:
(1)一個Applet開始于StartApplet,將Applet處于Stop狀態(tài),并開始創(chuàng)建Applet;
(2)創(chuàng)建動作完成后,Applet處于Starting狀態(tài),并收到EVT_APP_START事件;
(3)Applet處理完EVT_APP_START后,進入Run狀態(tài),直到用戶調(diào)用CloseApplet;
(4)Applet進入Closing狀態(tài),收到EVT_APP_STOP事件;
(5)最后Applet會進入Terminating狀態(tài),完成Applet和內(nèi)部資源的釋放,結(jié)束Applet。
2.3 消息隊列
該應用程序框架采用基于消息驅(qū)動的方式運行,Applet通過消息接口類,可以快速實現(xiàn)消息隊列功能。用戶只需要通過IHandle接口生產(chǎn)消息,并通過Send函數(shù)將消息發(fā)送出去,系統(tǒng)通過消息中的信息找到該消息的事件處理函數(shù)進行處理。
2.4 配置管理
配置管理接口IConfig,用于保存各個模塊需要保存的配置信息,該框架提供了統(tǒng)一的配置管理接口IConfig, 并通過文件的形式進行配置信息的保存,系統(tǒng)為各個模塊分配了統(tǒng)一的標簽,模塊通過標簽獲得私有的配置信息。
2.5 定時器
定時器在Applet開發(fā)過程中是一種常用功能,提供了延遲服務和異步處理的功能。Timer的實現(xiàn)是通過生成Message并帶上時間參數(shù),加入到IMessageQueue隊列中,實現(xiàn)了Timer的延時處理能力。
2.6 異步事件
異步事件Resume是DAREE提供的另一個異步事件處理功能,比如用戶需要讀取一個大數(shù)據(jù)量文件,可以通過Resume功能分步進行讀取。本框架將Resume異步事件設計在DAREE的主線程空閑時進行操作,避免對主業(yè)務功能的影響。
2.7 日志管理
日志管理是“查看我關(guān)心的信息”。本系統(tǒng)日志管理通過日志等級和過濾字符完成日志管理,通過LOG_V,LOG_D,LOG_I,LOG_W,LOG_E進行日志的等級輸出,并通過過濾字符串進行日志過濾來達到日志控制的目的。
2.8 設備控制接口
本系統(tǒng)由IPort接口實現(xiàn)統(tǒng)一的設備控制,并為數(shù)據(jù)傳輸提供了一套通用的接口函數(shù),如Read、Write、GetLastError 等等。通過IPort接口,可以打開一個設備,通過read接口進行設備的讀取,通過write進行設備的寫入操作,實現(xiàn)對一個設備的控制操作。
2.9 內(nèi)存管理
本系統(tǒng)實現(xiàn)了一套內(nèi)存檢測機制,當Applet退出時,判斷Applet是否有內(nèi)存泄漏現(xiàn)象,如果有則打印出消息,供工程師進行檢查。實現(xiàn)原理是在應用程序分配內(nèi)存時,給內(nèi)存打上標記,根據(jù)標記信息判斷是否有內(nèi)存泄漏。
3 總結(jié)
本文提出了一種用于機器人控制系統(tǒng)中應用程序的開發(fā)框架DAREE,該框架以Applet為單位管理業(yè)務功能模塊,通過DAREE提供的系統(tǒng)接口,可以快速實現(xiàn)消息隊列、定時器、異步事件處理、日志管理、內(nèi)存管理等基礎功能。
參考文獻:
[1] Stanley B. Lippman,Josée Lajoie,Barbara E. Moo著. C++ Primer(中文版 第5版)[M].北京:電子工業(yè)出版社, 2013.
[2] Stanley,B.,Lippman,侯捷譯.深度探索C++對象模型[M].北京:電子工業(yè)出版社,2012.
[3] 埃里克·伽瑪(Erich Gamma).設計模式:可復用面向?qū)ο筌浖幕A[M].北京:機械工業(yè)出版社,2019.
(合肥科大智能機器人技術(shù)有限公司南京分公司,江蘇 南京 210000)