一种基于自定义脚本的航空显示控制方法与流程

文档序号:14653517发布日期:2018-06-08 22:28阅读:265来源:国知局
一种基于自定义脚本的航空显示控制方法与流程

本发明涉及显示控制方法,尤其涉及一种基于自定义脚本的航空显示控制方法,属于嵌入式画面显示的技术领域。



背景技术:

目前,国内军用航空领域,机载画面显示控制主要有以下两种形式,一是由显示器软件直接根据外部状态字进行画面显示和控制,二是通过ARINC661等通用标准接口由外部设备直接进行画面控制。第一种方法主机无法自主修改画面,当需要对画面进行完善修改时,首先向显示器承制方提出更改要求,再由显示器承制方按照指定要求进行显示画面更改,更改周期长、成本大,且显示器承制方需要知道画面中所有元素的显示内容和控制原理,不利于制造。第二种方法需要主机厂,按照标准设计控制模型,前期投入成本高、设计周期长、工程量大,对于中小型主机厂,短期内无法形成开发能力。



技术实现要素:

本发明的目的是解决上述现有技术的不足,传统机载画面显示投入成本高、设计周期长、工程量大的问题,提供一种基于自定义脚本的航空显示控制方法。

为了达到上述目的,本发明所采用的技术方案为:

一种基于自定义脚本的航空显示控制方法,将航空显示器作为脚本执行器,先建立脚本文件的组织,脚本文件的组织包括,

pdf.c文件,用于编译画面元素和画面控制逻辑;

normal.h文件,用于定义逻辑运算符、取位运算符合属性更改字的关键字的十六进制编码;

draw.h文件,用于定义显示控制脚本的关键字的十六进制编码;

declare.h文件,用于定义数据缓存区地址对应的关键字的十六进制编码;

warn.h文件,用于定义告警字符串、字符串显示格式和显示优先级的十六进制编码;

所述航空显示控制方法包括以下步骤,

步骤a,词法分析

将脚本中的注释行和空行剔除,获取有效的字符串;

步骤b,语法分析

引入四则运算,用于在脚本中定义数据缓存区地址时计算偏移量;

步骤c,符号表导入

建立符号表到对应十六进制编码的映射表,将normal.h,draw.h,declare.h,warn.h四个文件中的关键字导入符号表,转换pdf.c文件时,将pdf.c文件中关键字替换为对应的十六进制数值,将整个脚本文本转化为十六进制数据文件;

步骤d,创建索引目录

pdf.c文件中定义了所有需要显示的画面,区分所有画面的唯一标识符为画面号,在导出脚本文件之前,在脚本文件的前端添加了文件头,对脚本文件的日期、版本和画面索引地址进行相应描述;

步骤e,脚本导出

转换完成后,生成.dat格式的十六进制数据脚本。

本发明的有益效果主要体现在:

将航空显示元素和控制逻辑进行归纳,用户可以直接采用指令设计画面显示内容和控制逻辑,显示器通过逐条解析脚本文件中的指令,实现画面显示和逻辑控制。

附图说明

图1是本发明中脚本转换的流程图。

图2是本发明中脚本执行器运行的流程图。

具体实施方式

本发明提供一种基于自定义脚本的航空显示控制方法。以下结合附图对本发明技术方案进行详细描述,以使其更易于理解和掌握。

一种基于自定义脚本的航空显示控制方法,将显示器作为脚本执行器,所有的画面显示内容和逻辑均通过脚本文件定义,后续画面的更改和优化大多通过修改脚本文件实现,大大减轻了显示器软件维护阶段的工作量。

为了提升脚本在嵌入式平台下的执行效率,需要将文本格式的脚本转换为十六进制数据文件格式。

具体地,先建立脚本文件的组织,脚本文件的组织包括:pdf.c文件,用于编译画面元素和画面控制逻辑;normal.h文件,用于定义逻辑运算符、取位运算符合属性更改字的关键字的十六进制编码;draw.h文件,用于定义显示控制脚本的关键字的十六进制编码;declare.h文件,用于定义数据缓存区地址对应的关键字的十六进制编码;warn.h文件,用于定义告警字符串、字符串显示格式和显示优先级的十六进制编码。

脚本转换即是对以上文件中的内容进行分析,最终形成对应的十六进制数据文件,转换包括以下步骤:

步骤a,词法分析

词法分析主要是将脚本中的注释行和空行剔除,获取有效的字符串。注释行参考C++相应语法,支持行注释(“//”)后和块注释(“/**/”)两种注释方法,为简化设计难度,规定 “#define”字符串、以字母开头且仅包含字母、数字、下划线的字符串以及用英文双引号包括的字符串为合法关键词。

步骤b,语法分析

为保证发明的易用性,本发明中仅引入四则运算,主要用于在脚本中定义数据缓存区地址时,便于计算偏移量。

步骤c,符号表导入

本发明需要建立符号表到对应十六进制编码的映射表,将normal.h,draw.h,declare.h,warn.h四个文件中的关键字导入符号表,当最终转换pdf.c文件时,就需要将pdf.c中关键字替换为对应的十六进制数值,将整个脚本文本转化为十六进制数据文件,在符号表导入时,根据关键字对十六进制编码进行分类,并添加标志位对指令、字符。

步骤d,创建索引目录

pdf.c中定义了所有需要显示的画面,区分所有画面的唯一标识符为画面号,在导出脚本文件之前,为了便于基于画面号进行文件访问,在文件的前端添加了文件头,对脚本文件的日期、版本和画面索引地址进行相应描述。

步骤e,脚本导出

转换完成后,生成.dat格式的十六进制数据脚本。

再进行脚本运行,脚本最终在嵌入式平台下运行,运行时逐条对某一画面下的指令进行解析,完成画面的显示,并根据外部输入数据和按键实现对显示画面的逻辑控制。

如图1所示,脚本转换的具体实施步骤说明:

步骤201:选择文件,转换工具采用WIN32平台软件,通过选择窗口“打开”选项,映射到GetOpenFileName()函数,调用文件选择窗口;

步骤202:获取文件路径,此处通过读取OPENFILENAME结构的成员变量lpstrFile获取当前文件名,并根据“\”位置得到文件路径;

步骤203:检测脚本文件是否完整,本发明除pdf.c外还必须包含normal.h、declare.h、draw.h和warn.h,此处需要在pdf.c所在路径下检测上述脚本文件是否完整,若完整继续执行步骤204,否则退出;

步骤204:初始化符号表,本发明需要将“#define”定义的关键字和其十六进制编码对应起来,为了便于检索,采用C++中的map结构,定义了map<string,val>symbolTable符号表,此处需对其进行初始化;

步骤205:从normal.h中提取运算符号编码,normal.h文件中定义了逻辑运算符,取位运算符,属性更改字等运算符,本发明需要读取此文件中的运算符关键字和其对应的编码,保存到步骤203创建的符号表中;

步骤206:从declare.h中提取地址符号编码,大部分指令需要引用地址,实现外部输入到画面显示内容的映射,本发明需要读取此文件中的地址符号关键字和其对应的编码,保存到步骤203创建的符号表中;

步骤207:从draw.h中提取指令编码,指令是组成脚本的基本元素,本发明需要读取此文件中的指令关键字和其对应的编码,保存到步骤203创建的符号表中;

步骤208:创建十六进制脚本文件,在脚本文件所在路径下创建.dat文件,并向后跳转0x2000字节目录空间,准备写入脚本文件,脚本文件分为三个部分,第一部分为目录、第二部分为告警字符、第三部分为画面,目录占0x2000固定字节,告警字符和画面连续存储;

步骤209:读取warn.h文件,当读取到有效关键字时,检索符号表symbolTable,若关键字已定义,则输出关键字对应十六进制编码,否则输出提示告警信息,同时判断关键字WARN_LIN和PFL_LIB,作为一项告警的开始和结束标记,记录标记位置,待步骤211写入目录;

步骤210:读取pdf.c文件,当读取到有效关键字时,检索符号表symbolTable,若关键字已定义,则输出关键字对应十六进制编码,否则输出提示告警信息,同时判断关键字HEAD和EOF1,作为一幅画面的开始和结束标记,记录标记位置,待步骤211写入目录;

步骤211:写十六进制脚本目录,跳转到文件头部,根据步骤209和步骤210记录的标记位置,将告警项的起始结束地址以及画面的起始结束地址写入目录;

步骤212:删除临时文件,本发明在读取完脚本文件后,会对其进行预处理,删除注释和空行,并写入*.tmp临时文件,此处需要将临时文件删除,通过系统调用函数system调用"del*.tmp"命令删除临时文件。

如图2所示,为脚本执行器逐条对处理十六进制脚本文件中的数据,并生成对应显示画面的说明:

步骤301:获取画面号,除初始画面号系统设置,其余画面号均由若干画面控制指令调度时设置,在设计脚本文件时需要考虑各个画面之间的切换关系,实现画面切换闭环控制;

步骤302:判断是否首次读取脚本,脚本文件加载到目标平台运行期间是无法进行更改的,此处描述的首次读取表示系统在启动或者复位期间第一次读取脚本,若是首次读取脚本,跳转到步骤305继续执行,否则执行步骤303;

步骤303:缓存脚本目录,脚本目录包含对告警库和画面首位标记在脚本文件中的索引地址,区分告警库和画面的唯一标识分别为告警库号和画面号,为提高软件执行效率,需对其进行缓存,缓存后无需反复遍历脚本文件,即可找到告警库号和画面号对应的告警库及画面的起始地址;

步骤304:缓存告警库,告警库是一系列告警颜色、字号、优先级、告警字地址和告警字符串的集合,为提高软件执行效率,此信息仅需获取一次;

步骤305:判断主画面是否切换,判断切换的依据为前后两个显示周期显示画面号是否变化,若变化跳转至步骤307继续执行,否则执行步骤306;

步骤306:缓存主画面脚本,获取新的主画面号后,通过检索脚本目录获取该主画面在脚本中的首尾地址,根据该组地址和脚本句柄缓存主画面脚本;

步骤307:解析脚本,对缓存的主(子)画面脚本进行逐条解析,显示对应的画面;

步骤308:判断是否显示子画面,子画面是否显示取决于当前主画面中的子画面显示指令,该指令定义子画面显隐状态和初始的子画面号,若需要显示,则执行步骤309,否则回到步骤301,开启下一轮循环;

步骤309:判断子画面是否切换,子画面是否切换取决于当前子画面中的子画面切换指令,该指令定义按压按键后切换的子画面号,若子画面切换则执行步骤310,否则跳转至步骤307继续执行;

步骤310:缓存子画面脚本,获取新的子画面号后,通过检索脚本目录获取该子画面在脚本中的首尾地址,根据该组地址和脚本句柄缓存子画面脚本。

通过以上描述可以发现,本发明一种基于自定义脚本的航空显示控制方法,只要采用OpenGL/ES/SC库的图形显示的显示终端,均可适用,本发明可以方便的在PC环境下模拟运行,为主机厂在前期硬件未设计时,即可通过编写脚本开展显示画面设计工作,设计完成的脚本文件无需更改,可直接在嵌入式平台运行,缩短了开发周期。本发明还能使主机厂保留对画面显示内容和控制逻辑的变更手段,在画面再设计、再开发时,无需承制方介入。本发明相交C语言软件语法更为简单,系统设计人员简单学习既可以掌握,使系统设计人员可以在无软件专业技能的情况下即可进行画面编制。

以上对本发明的技术方案进行了充分描述,需要说明的是,本发明的具体实施方式并不受上述描述的限制,本领域的普通技术人员依据本发明的精神实质在结构、方法或功能等方面采用等同变换或者等效变换而形成的所有技术方案,均落在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1