一种用于汽车仪表的嵌入式图形框架的设计方法及系统与流程

文档序号:26543541发布日期:2021-09-07 22:46阅读:146来源:国知局
一种用于汽车仪表的嵌入式图形框架的设计方法及系统与流程

1.本发明涉及汽车仪表技术领域,尤其涉及一种用于汽车仪表的嵌入式图形框架的设计方法及系统。


背景技术:

2.随着科技的发展,汽车仪表领域也得到了快速发展,液晶仪表已经普遍的应用于汽车上,由于汽车更加的智能化,辅助功能越来越多,液晶仪表上所要呈现的图形元素的数量也随之增多,例如:车速表、电量、能量流、行车信息等。对于图形元素数量众多的图形用户界面,实现对图形元素的高效控制变得更加复杂,尤其是对具有同种属性的图形元素进行统一控制效率很低。
3.为了使液晶仪表的图形元素控制更加高效,本发明提出一种用于汽车仪表的嵌入式图形框架的设计方法及系统,可以按照不同图形元素的控制关系对其进行分类,建立树形结构框架,通过树形结构中的父子关系完成对图形元素的统一控制。


技术实现要素:

4.本发明的目的是针对现有技术的缺陷,提供了一种用于汽车仪表的嵌入式图形框架的设计方法及系统。
5.为了实现以上目的,本发明采用以下技术方案:
6.一种用于汽车仪表的嵌入式图形框架的设计方法,包括步骤:
7.s1.建立汽车仪表的图形元素相对应的树形结构;
8.s2.对建立的树形结构进行解析,生成解析后的文件;
9.s3.将描述节点间通信的自定义语句添加至解析后的文件中,得到中间文件;
10.s4.对中间文件进行解析,生成最终用于编译的文件;
11.s5.将所有工程文件进行打包,生成可执行的程序。
12.进一步的,所述步骤s1中建立液晶仪表的图形元素相对应的树形结构是使用xml语言建立的。
13.进一步的,所述步骤s1具体为:
14.s11.对汽车仪表图形元素进行分类,并用树形结构中的节点表示图形元素分类后的各图层;
15.s12.分配id至树形结构中的每个节点,并通过绑定id的形式表示各节点间父子关系;
16.s13.对树形结构中的节点所代表的图形元素的属性进行描述,得到汽车仪表的图形元素相对应的树形结构。
17.进一步的,所述步骤s2和步骤s4中进行解析均是通过python脚本进行解析的。
18.进一步的,所述步骤s2具体为:通过python脚本的xml.etree.elementtree标准库对树形结构的内容进行解析,生成c文件;其中,进行解析的内容包括对预处理xml文件、初
始化xml文件、解析xml文件、将xml文件转换为c文件、将xml文件打包生成可执行程序。
19.进一步的,所述步骤s3具体为:
20.s31.描述图形元素间通信的自定义语句,其中自定义语句为send_txnodeto_rxnode,txnode表示源节点,rxnode表示目标节点;
21.s32.将源节点的属性值赋值给目标节点;
22.s33.在某节点的回调函数中自定义接收消息语句;
23.s34.基于自定义接收消息语句,将源节点的某个属性值赋值给当前节点的某个属性。
24.进一步的,所述步骤s4具体为:通过python脚本解析c文件中出现的描述图形元素间通信的自定义语句,生成相对应的源文件与头文件;其中,源文件中包括相对应的结构体指针数组。
25.进一步的,所述步骤s5具体为:使用pip install安装pyinstaller将python脚本打包成exe可执行文件。
26.相应的,还提供一种用于汽车仪表的嵌入式图形框架的设计系统,包括:
27.建立模块,用于建立汽车仪表的图形元素相对应的树形结构;
28.第一解析模块,用于对建立的树形结构进行解析,生成解析后的文件;
29.添加模块,用于将描述节点间通信的自定义语句添加至解析后的文件中,得到中间文件;
30.第二解析模块,用于对中间文件进行解析,生成最终用于编译的文件;
31.打包模块,用于将所有工程文件进行打包,生成可执行的程序。
32.进一步的,所述建立模块中建立液晶仪表的图形元素相对应的树形结构是使用xml语言建立的;所述第一解析模块和第二解析模块中进行解析均是通过python脚本进行解析的。
33.与现有技术相比,本发明通过python脚本解析xml文件自动生成所需要的代码,避免了使用动态内存分配机制建立树形结构所带来的内存泄漏、产生内存碎片等问题,当项目的代码量比较大时也具有较好的控制力,所以本发明具有高效、安全、轻量化的特点。
附图说明
34.图1是实施例一提供的一种用于汽车仪表的嵌入式图形框架的设计方法流程图;
35.图2是实施例一提供的xml文件描述的树形结构图;
36.图3是实施例一提供的树形结构中父子节点间坐标属性关系框图;
37.图4是实施例一提供的树形结构中父子节点间是否可见属性关系框图;
38.图5是实施例二提供的汽车仪表上图形元素的初始界面图;
39.图6是实施例二提供的位置改变后的界面图。
具体实施方式
40.以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离
本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。
41.本发明的目的是针对现有技术的缺陷,提供了一种用于汽车仪表的嵌入式图形框架的设计方法及系统。
42.实施例一
43.本实施例提供一种用于汽车仪表的嵌入式图形框架的设计方法,如图1所示,包括步骤:
44.s1.建立汽车仪表的图形元素相对应的树形结构;
45.s2.对建立的树形结构进行解析,生成解析后的文件;
46.s3.将描述节点间通信的自定义语句添加至解析后的文件中,得到中间文件;
47.s4.对中间文件进行解析,生成最终用于编译的文件;
48.s5.将所有工程文件进行打包,生成可执行的程序。
49.在步骤s1中,建立汽车仪表的图形元素相对应的树形结构。
50.本实施例使用xml语言描述树形结构。具体为:
51.s11.对汽车仪表图形元素进行分类,并用树形结构中的节点表示图形元素分类后的各图层;
52.按照图形元素的控制关系对图形进行分类,例如汽车仪表中的六个图标分别定义为icon1、icon2、icon3、icon4、icon5、icon6,如图2所示,六个图标在位置控制关系上具有相同的需求,则可分别将icon1、icon4设为父节点,icon2和icon3设为icon1的子节点,icon5和icon6设为icon4的子节点;子节点的坐标将由父节点的绝对坐标和子节点的相对坐标共同决定。若三个坐标在显示关系上具有相同的需求,则节点间建立父子关系并设定好属性后,如icon2和icon3会随icon1显示而显示,icon1不显示则icon2和icon3也会随着不显示;icon4、icon5、icon6同理。
53.本实施例可以按照实际的应用环境添加不同的属性建立父子关系,由于xml语言是一种固有的分层数据格式,所以比较适合用xml语言描述树形结构,并将分类后的图形元素建立起树形结构进行管理。
54.s12.分配id至树形结构中的每个节点,并通过绑定id的形式表示各节点间父子关系;
55.基于树形结构中的节点,在xml文件中为各节点分配id,在父节点下添加表示子节点id的属性,并通过绑定id的形式表示其父子关系。
56.s13.对树形结构中的节点所代表的图形元素的属性进行描述,得到汽车仪表的图形元素相对应的树形结构。
57.基于树形结构中的节点,对其代表的图形元素的属性进行描述,比如图形元素的坐标信息、图形元素是否可见等属性;并在节点属性中添加回调函数名称,用于解析后生成回调函数,在回调函数中完成对各节点的逻辑控制。
58.图形元素的坐标信息如图3所示,图3为树形结构中父子节点间坐标属性关系框图。其中,父节点icon1中的x、y绝对坐标:ui框架会将父节点的绝对坐标和该对象的相对坐标相加,计算出本对象的绝对坐标。如果某个对象没有父对象,那么相对坐标等于绝对坐标。子节点icon2、icon3的x、y绝对坐标:父对象绝对坐标加该对象的相对坐标。
59.图形元素是否可见等属性如图4所示,图4为树形结构中父子节点间是否可见属性关系框图。父节点icon1、子节点icon2、icon3的m_visible相对是否可见属性:int=0,具体由本对象赋值,0为不可见,1为可见,如果某个对象没有父对象,那么相对是否可见属性值等于绝对是否可见属性值。父节点icon1、子节点icon2、icon3的m_visible绝对是否可见属性:int=1,0为不可见,1为可见。ui框架会将父对象的绝对是否可见属性值与该对象的相对是否可见属性值相乘,若相乘后为0,则该对象不可见;若相乘后为1,则该对象可见。
60.在步骤s2中,对建立的树形结构进行解析,生成解析后的文件。
61.通过python脚本的xml.etree.elementtree标准库对xml文件内容进行解析,生成c文件;xml.etree.elementtree可以实现一个简单而高效的api,用于解析和创建xml数据,import xml.etree.elementtree as et导入xml解析库,elementtree表示整个xml文档为树,元素表示此树中的单个节点,与整个文档的交互(读取和写入文件)通常是在elementtree级别上完成的,与单个xml元素及其子元素的交互是在元素级别上完成的。每个element对象都具有以下属性,tag(string对象)表示数据代表的种类,attrib(dictionary对象)表示附有的属性,text(string对象)表示element的内容,tail(string对象)表示element闭合之后的尾迹,还包括若干子元素。
62.element对象在xml文件中的表现形式如<tag attrib=1>text</tag>tail,使用xml.etree.elementtree标准库解析语句如下,tree=et.parse(xmlpath),其中xmlpath为预解析的xml文件名,根据节点之间的父子关系建立对象树,root=tree.getroot(),xml解析库解析xml文件获得根结点,并赋值给root。
63.在本实施例中,进行解析的内容包括预处理xml文件、初始化xml文件、解析xml文件、将xml文件转换为c文件、将xml文件打包生成可执行程序。
64.预处理xml文件是对xml文件进行预处理,包括为新添加的节点进行id补全;若本地未发现xml文件,则自动生成xml模板。
65.初始化xml文件是更新父子节点id的相关信息,完成id的绑定。
66.解析xml文件是用来获取xml中的有用信息供其他模块使用,比如提取出xml文件中各节点的属性名和属性类型,遍历所有属性,将属性名和属性类型作为键值对存入字典,用于生成c文件中描述节点属性的结构体,由于python中字典的内容不会重复,所以解析后会在c文件中得到一个包含各节点所有属性的结构体;按照父子节点关系层序遍历提取节点名,用于生成c文件中的数组便于后续遍历数据;提取出各节点相对应的回调函数名称,用于生成c文件中的回调函数,在回调函数中完成对各节点的逻辑控制。
67.将xml文件转换为c文件是将解析xml文件中获取的节点信息转化为相对应的c代码,包括生成描述节点属性的结构体、用于层序遍历的节点数组、用于对节点逻辑控制的回调函数等。
68.将xml文件打包生成可执行程序是使用pip install安装pyinstaller将python脚本打包成exe可执行文件。
69.本实施例经过python解析后生成的用于描述节点逻辑控制的钩子函数的源文件。实际完成节点逻辑控制的代码将在钩子函数中进行编写,其中phook钩子函数是每次都被调用的,而vhook钩子函数可以通过改变周期和节点是否可见属性选择性调用,一般phook钩子函数中进行不受其他节点影响的逻辑功能控制代码编写。
70.python脚本解析xml文件后自动生成的c文件中对父子节点间属性关系的描述,此处仅是对于坐标和是否可见属性的描述,子节点的绝对坐标等于父节点的绝对坐标与子节点相对坐标相加的和,子节点的绝对是否可见属性值等于父节点的绝对是否可见属性值与子节点相对是否可见属性值相乘的积,也可根据实际不同的项目环境下,在xml中编辑不同的属性关系。
71.在步骤s3中,将描述节点间通信的自定义语句添加至解析后的文件中,得到中间文件。
72.在步骤s2中生成的c文件中添加自定义语句描述图形元素间的通信,具体为:
73.s31.描述图形元素间通信的自定义语句,其中自定义语句为send_txnodeto_rxnode,txnode表示源节点,rxnode表示目标节点;
74.在步骤s2中python脚本第一次解析后自动生成的c文件(用于描述节点实际逻辑控制的文件)中添加描述节点间通信的自定义语句,由于节点的phook钩子函数不受其他节点属性影响,每次都会被调用,而vhook函数会受节点的周期和是否可见属性等控制,所以在phook函数下添加描述节点通信的自定义语句send_txnodeto_rxnode,该自定义语句应在源节点的钩子函数下编写。
75.s32.将源节点的属性值赋值给目标节点;
76.基于上述自定义语句,将源节点的属性值赋值给目标节点,进行通信的两节点是任意的,比如可以由一个节点传递消息给其兄弟节点,也可以由子节点传递消息给其父节点。
77.s33.在某节点的回调函数中自定义接收消息语句;
78.在某节点的回调函数中自定义接收消息语句为this(属性)=txnode(属性);其中,this指的是当前节点,this的括号中为当前节点的属性值,txnode指的是源节点,txnode的括号中为源节点的属性值。
79.s34.基于自定义接收消息语句,将源节点的某个属性值赋值给当前节点的某个属性。
80.将源节点的某个属性值赋值给当前节点的某个属性。传递的消息内容是任意的,比如目标节点的坐标属性值随着源节点的坐标属性值变化,就可以将源节点的坐标属性值作为消息传递给目标节点。
81.在步骤s4中,对中间文件进行解析,生成最终用于编译的文件。
82.使用python脚本再解析步骤s3中添加自定义语句后的中间文件生成最终用于编译的c文件;具体为:
83.利用python脚本再解析中间文件后生成的最终可用于编译的c文件,其中描述节点通信的自定义语句被删除掉,描述接收消息的自定义语句替换成可编译的语句,同时会自动生成如下存放和声明消息数组的源文件message.c和头文件message.h,并在最终可用于编译的c文件中引用声明消息数组的头文件message.h,通过python解析生成代码即可省去重复性的编码过程,使开发更加高效。
84.源文件中包括相对应的结构体指针数组nodeinfo_t*messagearr_rxnode[]={&txnode1,&txnode2},数组是发送消息给目标节点的各源节点的集合,自定义节点赋值语句会被解析成*this

>(当前节点属性)=(*(messagearr_txnode[index])).(源节点属性);
其中index表示该源节点在当前节点的消息数组中的下标值。
[0085]
在步骤s5中,将所有工程文件进行打包,生成可执行的程序。
[0086]
使用pip install安装pyinstaller将python脚本打包成exe可执行文件。
[0087]
与现有技术相比,本实施例通过python脚本解析xml文件自动生成所需要的代码,避免了使用动态内存分配机制建立树形结构所带来的内存泄漏、产生内存碎片等问题,当项目的代码量比较大时也具有较好的控制力,所以本发明具有高效、安全、轻量化的特点。
[0088]
实施例二
[0089]
本实施例提供的一种用于汽车仪表的嵌入式图形框架的设计方法与实施例一的不同之处在于:
[0090]
本实施例将该框架移植到实际的工程项目中验证功能。
[0091]
如图5所示为汽车仪表上图形元素的初始界面图,将左上角方框内的三个图形元素建立树形结构中的父子关系,其中左数第一个图形为根结点,后两个为其子结点,通过调整根结点的坐标位置root.m_x=250;改变其相对坐标,那么后两个坐标的绝对坐标也会跟着发生变化。
[0092]
如图6所示为位置改变后的界面图,通过改变根结点的是否显示属性,将其属性设为不可见root.m_visible=0;其子结点也会跟着变化。
[0093]
实施例三
[0094]
本实施例提供一种用于汽车仪表的嵌入式图形框架的设计系统,包括:
[0095]
建立模块,用于建立汽车仪表的图形元素相对应的树形结构;
[0096]
第一解析模块,用于对建立的树形结构进行解析,生成解析后的文件;
[0097]
添加模块,用于将描述节点间通信的自定义语句添加至解析后的文件中,得到中间文件;
[0098]
第二解析模块,用于对中间文件进行解析,生成最终用于编译的文件;
[0099]
打包模块,用于将所有工程文件进行打包,生成可执行的程序。
[0100]
进一步的,所述建立模块中建立液晶仪表的图形元素相对应的树形结构是使用xml语言建立的;所述第一解析模块和第二解析模块中进行解析均是通过python脚本进行解析的。
[0101]
需要说明的是,本实施例提供的一种用于汽车仪表的嵌入式图形框架的设计系统与实施例一类似,在此不多做赘述。
[0102]
与现有技术相比,本实施例通过python脚本解析xml文件自动生成所需要的代码,避免了使用动态内存分配机制建立树形结构所带来的内存泄漏、产生内存碎片等问题,当项目的代码量比较大时也具有较好的控制力,所以本发明具有高效、安全、轻量化的特点。
[0103]
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1