当前位置:广昱文档网 >专题范文 > 公文范文 >

一种飞控系统参数管理的嵌入式解决方案

时间:2023-10-11 12:15:04 来源:网友投稿

詹福宇*,徐 亮,陈 林

(中电科特种飞机系统工程有限公司,四川 成都)

大多数软件都会涉及到参数的存储与读取,小至运行单片机的软件,大至操作系统级别的软件,均会有专门的子程序或者模块进行参数的读写和存储。不同开发平台下,参数管理会存在一定的差异化,例如Windows 和Linux 下的软件则会以ini、xml 或json 等配置文件的形式保存参数;
而单片机等嵌入式环境下,由于资源的限制无法使用这些功能接口,需要另外设计,一般将参数是保存EEPROM或ROM等。

文献[1]和文献[2]中介绍了嵌入式平台中参数存储介质、数据类型设计、读写接口设计等。文献[3]发明了一种应用于呼吸机的嵌入式设备的参数管理方法、嵌入式设备的参数管理系统、计算机可读存储介质以及嵌入式设备,但是该专利中没有涉及上位机通信、数据存储结构、多线程通信等功能,另外飞控系统相对呼吸机更加复杂。

飞控系统是一个复杂、高效、可靠的嵌入式系统[4],针对飞行参数记录仪的研究工作[5-6]很多,但是涉及飞控系统参数管理的资料相对很少。本研究提出一种飞控系统参数管理的完整解决方案,包括参数的定义、获取、更新、保存,跨线程支持以及上位机通信协议等。

(1)高效性,参数修改必须及时通知并更新所用应用该参数的模块。

(2)可靠性,飞控参数会直接影响飞行安全,因此参数更新过程必须可靠,尤其是在多线程访问的情况下。

(3)模块化,每个模块具备独立定义自己参数,不影响其他模块,参数可以在所有C 文件定义。

(4)扩展性,产品升级,若涉及增加、删除、修改参数,应不影响其它参数,不影响上位机通信协议。

2.1 飞控参数管理框架

飞控参数管理系统框架(见图1),主要包含三层:

图1 飞控参数管理框架

(1)存储介质,可以是EPPEOM、FLASH、FILE等永久存储介质。

(2)参数管理配置模块,提供了一套API 接口用于管理飞控参数。

(3)上位机通信模块,可以通过上位机进行参数查询和修改等。

本研究方案中每一个飞控参数都可能存在多份拷贝:

(1)参数管理模块维护一份包含所有参数的元数据和当前值的表__param_table。

(2)每个模块独立保存所使用参数的副本,运行过程中检测PARAM_UPDATE 事件则将副本同步为__param_table 中的值。

2.2 飞控参数结构设计

参数结构设计由param_info_t 和param_data_t 两个结构体定义:

(1)param_info_t,结构体,包括分组名、变量名(全局唯一)、默认值、类型、标志位(修改需要重启、解锁后禁止修改、是否系统预留等)和真实值地址。

(2)param_data_t,结构体,包括参数当前使用值、状态位(表征参数是否修改,是否保存,是否启用等)等。

2.3 飞控参数变量定义

参数变量定义包括param_info_t 和param_data_t两部分,前者用于存储参数元数据,后者用于存储参数使用值。为了便于用户使用,一般通过PARAM_DEFINE_FLOAT/INT32 等一系列宏来简化参数定义,比如:

其中PARAM_EXPORT 宏将param_info_t 变量定义到lds 文件指定的ParamTab section 区域,这样参数可以定义在任意*.c 文件,但均可统一通过section 地址来索引和查找,便于软件模块化开发。

通过以下方式获取参数表格的首地址和数量,其中__param_section_start 和__param_section_end 是lds文件中ParamTab 区域的首尾地址:

2.4 飞控参数读写流程

飞控参数通过唯一变量名进行索引, 一个典型的参数读写流程见图 2。param_find 函数从__param_table 中搜索第一个与name 相匹配的参数,返回其句柄,并将该参数的状态设置为“已使用”;
param_get函 数 将 参 数 当 前 值param_info_ptr->data->value 拷贝到本地,用于飞控计算。运行过程如果检测到PARAM_UPDATE 事件,则重新拷贝。

图2 飞控参数典型读写流程

param_set 函数用于修改参数的当前值,同时将该参数的状态设置为“已修改”和“未保存”,并广播一个PARAM_UPDATE 事件,其它模块收到该事件,会将最新的参数值拷贝到本地。

2.5 飞控参数存储机制

如图3 所示,飞控启动时,调用param_load 函数从默认存储介质中读取param_save_head_t 和param_save_data_t 数据并校验:如果校验失败,则调用param_save 函数将“已修改”参数来初始化存储介质;
如果校验成功,则在for 循环中调用param_find 和param_set 函数将参数修改为存储值,并广播PARAM_UPDATE 事件,通知其它模块参数已经更新了。

图3 飞控参数存储控制流程

运行过程中,PARAM_AUTO_SAVE 后台线程,如果检测PARAM_UPDATE 事件(一般调用param_set 函数时触发),则将所有标记为“已修改”的参数保存到存储介质中,同时将参数状态设置为“已保存”,但不会重置“已修改”状态,保存到存储的结构体数据为:

(1)param_save_head_t,存储头部信息,包含时间戳、参数个数,以及参数HASH 校验。

(2)param_save_data_t,存储参数内容,包含变量名和变量值,变量名作为参数的唯一索引,即使飞控软件升级了,参数列表发生了变化,仍可以通过变量名与升级后的参数列表建立一一对应关系,不会因为程序升级导致已存参数失效或丢失。

2.6 与上位机通信接口

上位机对飞控参数的操作主要是获取所有参数(见图4)、读取某个参数(见图5)、修改某个参数(见图6)。需要说明的是,通过改变PARAM_LIST 的属性值,可以下载特定属性的参数,比如只下载被修改的参数,或者只下载EKF 分组的参数,另外上位机在接收参数过程中,会进行超时和序号连续性判断。

图4 上位机获取所有参数流程

图5 上位机读取某个参数流程

图6 上位机修改某个参数流程

为了防止批量下载参数时阻塞通信链路,飞控每个发送周期(20 ms)只发送3 个参数,也就是每秒发送150 个参数,占用带宽约43.36 kbps,绝大部分数据链都能满足这个传输要求,比如Microhard P900 数传拥有57.6 kbps~276 kbps 无线速率。

某飞控系统基于RT-Thread V4.1.x[7]嵌入式实时操作系统;
编译工具链为GNU Arm Embedded Toolchain 10.3-2021.10[8];
处理器为STM32H753II,CPU 主频480 MHz,拥有2 Mb Flash 和1 Mb RAM,飞控内部运行了各种传感器驱动、姿态位置估计、航线管理、位置控制、姿态控制等30 多个模块,一共有649 个参数,其中整数132 个,浮点数517 个。

通过软件在环测试、硬件在环测试,以及真机飞行测试等,通过累积1 660 多个小时试验,参数管理模块工作正常,能够正确的读取、修改、存储飞控参数,上位机实时对参数进行管理,修改后的参数能够及时同步使用模块,试验过程没有出现参数管理故障。

本研究提出了一套完整的飞控系统参数管理解决方案,涵盖了飞控参数的读取、修改、存储以及与上位机通信等,支持多线程、支持模块化,并成功应用到某飞控系统。试验结果表明该方案完整、高效、可靠,并具备良好的扩展性,满足飞控系统嵌入式软件要求。

猜你喜欢存储介质飞控控系统关于DALI灯控系统的问答精选家庭影院技术(2021年3期)2021-05-21联调联试中列控系统兼容性问题探讨铁道通信信号(2020年5期)2020-09-21民用飞机飞控通电自检测安全性研究民用飞机设计与研究(2019年2期)2019-08-05机载飞控1553B总线转以太网总线设计测控技术(2018年8期)2018-11-25档案馆移动存储介质管理方法探讨信息记录材料(2018年7期)2018-06-1202 飞控技术与机场安保引关注中国公共安全(2017年7期)2017-10-13一种使用存储介质驱动的方式数码世界(2017年7期)2017-07-25飞控系统故障告警实时监控软件的设计与实现计算机测量与控制(2017年6期)2017-07-01一种新型列控系统方案探讨铁道通信信号(2016年10期)2016-06-01简析GSM-R在CTCS-3列控系统中的作用和故障判断处理铁路通信信号工程技术(2014年5期)2014-02-28

推荐访问:嵌入式 解决方案 参数