CN106940642B - 动态icd配置的总线模拟器*** - Google Patents
动态icd配置的总线模拟器*** Download PDFInfo
- Publication number
- CN106940642B CN106940642B CN201710026227.7A CN201710026227A CN106940642B CN 106940642 B CN106940642 B CN 106940642B CN 201710026227 A CN201710026227 A CN 201710026227A CN 106940642 B CN106940642 B CN 106940642B
- Authority
- CN
- China
- Prior art keywords
- data
- bus
- icd
- control
- dds
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/38—Creation or generation of source code for implementing user interfaces
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- User Interface Of Digital Computer (AREA)
- Digital Computer Display Output (AREA)
Abstract
本发明提出的一种动态ICD配置的总线模拟器***,旨在提供一种更具扩展性、复用性和通用性强的总线模拟器***。本发明通过下述技术方案予以实现:显示控制***和总线通信***分别是一个通过DDS通信中间件进行数据通信的单独软件;显示控制***通过加载界面配置文件动态生成界面控件,自主遍历ICD绑定的一组控件并读取控件中的数值,按照大或小端序的格式分别实现ICD数据项的自动组包与解包;对界面控件的相对布局关系及控件本身进行建模,按照界面配置文件的树形层次结构生成自动布局的控件;总线通信***实现数据在两种总线驱动之间的转发;总线数据的收发与总线数据的解析和生成通过DDS通信中间件与底层驱动解耦。
Description
技术领域
本发明涉及一种主要应用于航空电子设备联试场合的总线模拟器***。
背景技术
随着信息技术和计算机技术的发展,总线技术得到了广泛推广和应用。相比于传统的信息传递技术,总线具有信息数字化、接口标准化的特点,采用总线技术可以大大简化***的设计,因此近年来得到了很快发展。由于航空电子总线模拟器***包含的信号类型和参数类型非常复杂,而为了采集功能的全面性,方便采集多种总线类型和非总线类型的数据,总线模拟器***包含现有的绝大多数信号类型,如1553B信号、422信号、429信号、AFDX信号、CAN信号、网络信号、模拟量信号以及离散量信号;而总线模拟器系所包含的参数类型相比信号类型就要更复杂。这给总线模拟器系的界面显示模块和总线通信模块代码设计和实现造成了很大的困难,而且一旦接口控制文件(Interface Control Document,ICD)ICD发生变化,界面显示模块和总线通信模块代码就需要重新编写。
传统意义上,总线模拟器***主要采用定制化开发模式,大致分为三个步骤:总体设计人员根据项目需求编制ICD文档;软件人员按照界面显示层、业务逻辑层、总线驱动层的架构来编写总线模拟器***,然后调试总线模拟器***以达到使用要求。总线模拟器传统定制化开发过程中暴露出了人工工作量巨大、后期难以维护升级、不能有效积累工作成果、缺乏通用性等缺点,尤其是在界面显示层,由于ICD少则几十条,多则上百条,每条ICD内部又包含多个数据项,每个数据项会对应界面上的一个控件,粗略估计,往往会绘制上百甚至多达上千个控件,还要将每条ICD内部的数据项组成一包完整的数据或者将一包完整的数据拆分成ICD内部的数据项并映射到界面控件上,所有这些都要人工手动开发完成,这造成界面显示层的开发工作占整个***开工作量的一半以上。由于不同主机所、不同型号的航电及功能的硬件、总线通信、ICD差异比较大,经常发生更改和升级,这种僵硬的定制化开发模式造成总线模拟器***后期维护困难,并耗费大量人力和物力。作为总线模拟器***核心的界面控件自动生成技术,公开的有两种实现方式:
基于MFC框架,结合ICD生成rc文件,然后在微软开发平台Visual Studio的资源视图中加载生成的rc文件,软件开发人员在资源视图中以可视化的方式对界面控件进行微调,然后手动完成余下的开发工作;其次是基于WPF框架,用XAML语言描述ICD对应的控件类型和控件布局,生成XAML文件,然后在微软开发平台Visual Studio中加载生成的XAML文件,软件开发人员以可视化的方式对界面控件进行微调,然后手动完成余下的开发工作。
在上述两种实现方式中,rc文件和XAML文件都只提供对界面控件的描述,不能描述ICD内部数据项的信息(包括数据类型、数据长度、编码方式等),仍然需要开发人员手动编码建立ICD内部数据项与界面控件之间的关系,都不能实现框架复用,但使用XAML文件能够实现控件样式的复用。这两种实现方式都只在表面上部分解决了界面控件开发耗时的问题,并没有真正意义上实现界面控件的自动生成。
发明内容
为了提高航空电子总线模拟器***的开发效率和可靠性,降低测试工作的复杂度,本发明针对总线模拟器传统定制化开发过程中暴露出的人工工作量巨大、后期难以维护升级、不能有效积累工作成果、缺乏通用性等缺点,提供一种更具扩展性和复用性、适应性和通用性强、能够缩短研制周期,并能提高***性能和可靠性的动态ICD配置的总线模拟器***。
本发明的上述目的可以通过以下措施来达到。一种动态ICD配置的总线模拟器***,包括:显示控制***、总线通信***、作为通信中间件的数据分发服务***(DataDistribution Service,DDS)、界面配置文件生成工具,其特征在于:界面配置文件生成工具读入ICD文档,开发人员使用界面配置文件生成工具设计出每一条ICD中各个数据项对应的控件类型,然后生成界面配置文件;显示控制***加载界面配置文件后动态地在界面上绘制出控件,显示控制***和总线通信***之间通过DDS交互数据信息,当总线模拟器***向总线发送数据时,由使用人员在显示控制***中操作界面控件后,显示控制***自主遍历与刚才所操作的ICD绑定的一组控件并读取控件中的数值,然后按照大端序或者小端序的方式组包成DDS数据帧,DDS数据帧由通信中间件DDS发往总线通信***,总线通信***根据总线映射关系,将DDS数据帧转换成实际的总线数据并发送;当总线模拟器***接收总线数据时,总线通信***首先接收到实际的总线数据并根据总线映射关系转换成DDS数据帧,DDS数据帧由通信中间件DDS发往显示控制***,显示控制***解析出数据并显示;在显示控制***中,对界面控件的相对布局关系进行建模:三种基本的布局关系,“上下关系”、“左右关系”、“包含关系”,这三种布局关系可以相互嵌套组合成任意复杂的界面布局,界面配置文件以XML文件的格式来描述与ICD中各个数据项对应的控件之间的相对布局关系,显示控制***加载界面配置文件后解析出这种布局关系,采用递归的方式动态地绘制出控件并按照相对布局关系的约束自动地调整控件位置;显示控制***和总线通信***分别是一个单独的软件,显示控制***的输入输出总是DDS数据帧,通信中间件DDS实现显示控制***与总线通信***之间的数据通信,总线通信***根据总线映射关系实现DDS数据帧与总线数据帧的互相转换,这使得显示控制***与实际总线解耦。本发明使用的编程语言是C++,其他面向对象的语言也能用于本发明的实现。
本发明相比于现有技术具有如下有益效果。
更具扩展性和复用性。本发明根据ICD文件生成界面配置文件,总线模拟器***加载界面配置文件动态生成界面控件,自动实现ICD数据的组包和解包,通过界面配置文件生成工具可以快捷地将XML格式的ICD文件转换成界面配置文件,支持常用的控件类型,包括按钮Button、编辑框Edit、检查框CheckBox、下拉框ComboBox、列表List、按钮组RadioGroup等。采用面向对象的方式构造***,使得***便于扩展与维护,可以通过继承的方式增加能够自动生成的新控件类型与新总线驱动器。这种采用面向对象的方法对界面控件自动生成过程进行建模,同时应用了软件设计模式,相比于现有的两种界面控件自动生成技术,把ICD内部数据项的信息和界面控件的信息结合起来,自动建立ICD内部数据项与界面控件之间的数据通道,实现框架级的复用,并且通过更换界面配置文件的方式实现了显示控制***在不同项目之间的复用。这相比传统面向过程的***更具扩展性。
适应性和通用性强。本发明增加新的控件类型和总线类型十分方便。通过将界面控件生成、ICD数据组包、ICD数据解析等过程自动化,大大减少了总线模拟器***开发过程中重复性的脑力劳动,保证了软件质量,缩短了开发周期,增加了总线模拟器***在各个型号项目中的复用性。可以根据界面配置文件工具在***运行时自动绘制控件界面,不再需要手动编写界面绘制代码,ICD文件更新后只需用新的界面配置文件替换旧的界面配置文件而无需更改代码和重新编译程序就能实现总线模拟器的升级。在使用需求或ICD总线协议发生变化时,只需修改相应的界面配置文件,就可自动生成新的界面控件布局,增强了软件的适应性和通用性。
缩短了研制周期。本发明以基于ICD文件动态配置界面控件的方式实现了控件的自动生成,大大减少了人工开发工作量。由***在运行时自动关联控件和数据项,而不是在编译时由人工用代码关联,大大节省航电模拟器***开发时间,保证***运行的可靠性与一致性。通过将界面控件生成、ICD数据解包与组包等过程自动化,大大减少了总线模拟器***开发过程中重复性的脑力劳动,保证了软件质量,缩短了开发周期,增加了总线模拟器***在各个型号项目中的复用性。
提高了***性能和可靠性。本发明采用ICD数据解包接口将计算机内存中的数据按照ICD内部数据项的先后顺序,根据所占的比特位数映射到对应的控件上并显示出来;ICD数据组包与ICD数据解包互为逆过程,使用面向对象的方法对界面控件的相对布局关系及控件本身进行建模,通过读取界面配置文件,按照界面配置文件的树形层次结构生成相应的控件并进行自动布局。通过使用DDS实现总线模拟器与底层驱动的解耦,支持总线模拟器***的单机和分布式部署,提高了***性能和可靠性。
本发明可用于代替航空电子各子***产生航电总线信号,并代替这些子***处理和显示航电总线信号。
附图说明
下面结合附图对本发明专利进一步说明。
图1是本发明动态ICD配置的总线模拟器***的架构示意图。
图2是图1的工作原理示意图。
图3是图1的接口控制文件ICD结构示意图。
图4是图1的界面配置文件结构示意图。
图5是图1的控件数据映射图。
图6是图1的控件布局建模示意图。
图7是图1的实体控件数据组包/解包过程。
图8是图1的接口控制文件ICD数据组包/解包流程图。
图9是图1的控件布局类图。
图10是图1的驱动类图。
具体实施方式
参阅图1。在以下描述的实施例中,一种动态ICD配置的总线模拟器***,包括:显示控制***、总线通信***、作为通信中间件的数据分发服务***(Data DistributionService,DDS)、界面配置文件生成工具,其中:显示控制***包括:ICD数据解包器、ICD数据组包器、界面控件自动生成器、DDS通信接口组件,界面控件自动生成器又包括:Button控件生成器、CheckBox控件生成器、ComboBox控件生成器、List控件生成器、RadioGroup控件生成器,总线通信***包括:DDS通信接口组件、总线数据转发器、总线驱动器,界面配置文件生成工具包括:ICD内容解析器、界面配置文件生成器。显示控制***与总线通信***之间通过数据分发服务***DDS通信中间件交互DDS数据帧,总线通信***根据总线映射关系将DDS数据帧转换成实际的总线数据并发送;开发人员使用界面配置文件生成工具读入ICD后设计出每一条ICD中各个数据项对应的控件类型,然后生成界面配置文件,显示控制***加载界面配置文件并自动绘制控件界面。在显示控制***中,界面控件自动生成器遍历界面配置文件,根据界面配置文件中每个数据项的控件类型动态绘制出相应控件,建立数据项与控件的映射关系,以递归的方式建立控件树,以控件树为基础实现控件自动布局,注册自定义的Windows消息响应用户界面发送数据的操作。显示控制***响应用户界面发送数据的操作启动ICD数据组包器。ICD数据组包器开辟一段空闲内存块,遍历控件树,由数据项与控件的映射关系取出控件的当前值并存入数据项,以内存块的基地址为位偏移起始位置并加上数据项的位偏移量作为数据项中数据的存放地址,以数据项的位域宽度作为数据项中的数据在内存块中的存放长度。显示控制***刚启动时,以ICD名称作为主题名称向DDS通信接口组件分两类进行注册,需要发送的ICD以“发布”的方式注册,需要接收的ICD以“订阅”的方式注册。ICD数据组包器完成工作后启动DDS通信接口组件,以ICD名称、组包后的内存块首地址及内存块长度作为参数调用DDS通信接口组件的数据发布函数。当显示控制***“订阅”的数据包到来时,ICD数据解包器将会根据DDS数据帧的主题名称定位到接口控制文件ICD,再由接口控制文件ICD标识符再定位到控件树,遍历控件树,根据数据项的位域宽度、位偏移量描述从接收内存块中取出数据并存入与控件绑定的数据项中,然后刷新控件。
界面配置文件生成工具根据ICD文件生成界面配置文件,界面配置文件中包含了对ICD数据、总线、界面控件等信息的描述。在界面配置文件生成工具中,ICD内容解析器加载并分析接口控制文件ICD文档,界面配置文件生成器根据ICD内容解析器的解析结果为ICD内部数据项中的整型数据选择Edit控件,为具有3个及以上枚举值的枚举型数据选择ComboBox控件,为具有2个及以下枚举值的枚举型数据选择RadioGroup控件、为具有变长数据结构的数据类型选择List控件。这些都是默认设置,开发人员可以在操作界面上做微调,比如:改变控件的类型、改变枚举值等。界面配置文件生成器界面配置文件生成工具不仅可以生成新的界面配置文件,也能加载已有的界面配置文件以便于界面配置文件的管理与维护。
显示控制***通过加载界面配置文件动态生成界面控件并自动布局,自动实现ICD数据组包与解包,支持大端序和小端序的ICD数据格式。在总线通信***中,封装总线驱动,抽象出总线的一般接口,包含一个总线数据转发器,总线数据转发器根据数据转发规则将总线数据由一个总线接口发往另一个总线接口,借助编程语言(C++)的多态性质,具体的总线类型在总线数据转发子***运行时确定,总线数据转发器的一端确定使用DDS通信接口组件,另一端根据具体项目确定,可以是AFDX、1394、CAN、485、422等总线中的任意一种。
总线通信***封装了底层板卡驱动,发送ICD数据时,从DDS接收数据并转发到总线上,接收ICD数据时,从总线接收数据并转发到DDS;DDS通过“发布-订阅”ICD标识符的方式来实现数据的交互,发送ICD数据时,显示控制***是发布方,总线通信***是订阅方,接收ICD数据时,总线通信***是发布方,显示控制***是订阅方。显示控制***和总线通信***挂载到DDS上,DDS通过“发布-订阅”的方式作为显示控制***和总线通信***之间的数据沟通媒介;由总线通信***“订阅”的数据路由到实际的总线驱动并发送出去,由显示控制***“订阅”的数据由ICD数据解包器处理。除了使用DDS以外,还可以使用其他的进程通信方式实现显示控制***与总线通信***之间的数据交互,比如:共享内存、管道等;只要以指定格式封装总线就能支持其他的总线驱动器。
显示控制***加载界面配置文件后动态地在界面上绘制出控件,显示控制***和总线通信***之间通过DDS交互数据信息,当总线模拟器***向总线发送数据时,由使用人员在显示控制***中操作界面控件后,显示控制***自主遍历与刚才所操作的ICD绑定的一组控件并读取控件中的数值,然后按照大端序或者小端序的方式组包成DDS数据帧,DDS数据帧由通信中间件DDS发往总线通信***,总线通信***根据总线映射关系,将DDS数据帧转换成实际的总线数据并发送;当总线模拟器***接收总线数据时,总线通信***首先接收到实际的总线数据并根据总线映射关系转换成DDS数据帧,DDS数据帧由通信中间件DDS发往显示控制***,显示控制***解析出数据并显示;在显示控制***中,对界面控件的相对布局关系进行建模:三种基本的布局关系,“上下关系”、“左右关系”、“包含关系”,这三种布局关系可以相互嵌套组合成任意复杂的界面布局,界面配置文件以XML文件的格式来描述与ICD中各个数据项对应的控件之间的相对布局关系,显示控制***加载界面配置文件后解析出这种布局关系,采用递归的方式动态地绘制出控件并按照相对布局关系的约束自动地调整控件位置;显示控制***和总线通信***分别是一个单独的软件,通信中间件DDS是一个商用软件,显示控制***的输入输出总是DDS数据帧,通信中间件DDS实现显示控制***与总线通信***之间的数据通信,总线通信***根据总线映射关系实现DDS数据帧与总线数据帧的互相转换,这使得显示控制***与实际总线解耦。
参阅图2。界面配置文件生成工具将读入的接口控制文件ICD送入ICD内容解析器,ICD内容解析器将获取的ICD中数据项的数据类型、位域宽度等信息输入界面配置文件生成器,界面配置文件生成器根据上述信息得到默认配置下的控件类型界面配置文件,并送入显示控制***,通过界面配置文件生成器生成界面配置文件,并加载界面配置文件,自动布局动态地生成的控件。加载界面配置文件可以通过操作人员也可在操作界面上更改上述配置。在显示控制***中,当用户在显示控制***上选择发送ICD数据时,显示控制***的界面控件自动生成器找到与ICD对应的控件树,遍历控件树ICD数据组包,ICD数据组包数据通过DDS通信中间件接口发往DDS通信中间件,DDS通信中间件组包数据送入总线通信***。在总线通信***中。DDS通信中间件将上述组包数据送入总线通信***中的DDS驱动器,DDS驱动器将收到的DDS数据帧送入总线数据转发器,路由到实际的总线驱动器并发送到实际的总线上。实际的总线包括:429总线驱动器、AFD总线驱动器、422总线驱动器、485总线驱动器、、以太网总线驱动器和FC总线驱动器。当实际的总线数据到来时,实际的总线驱动器将会收到数据,实际的总线数据帧经总线数据转发器路由到DDS总线驱动器,DDS总线驱动器将数据发往DDS通信中间件,显示控制***的DDS通信中间件接口收到DDS数据帧,显示控制***将DDS数据帧送往界面控件自动生成器,界面控件自动生成器遍历控件树完成ICD数据解包并刷新控件。
参阅图3。ICD文件以XML方式实现原始输入文件。ICD文件由总线、消息、主题、信号组、信号,四部分组成。信号是最基本的功能单元,包括:总线编号、总线名称、总线帧头、总线帧尾和总线描述;消息包括:消息编号、引用主题编号、引用主题编号、、消息定义名称和消息定义别名;主题包括主题编号、引用信号和主题名称,引用信号包含信号和信号组;信号组包括:信号组编号、信号组名称、位域宽度和引用信号;信号包括:信号编号。信号名称、信号描述、信号类型和位域宽度。通过信号、信号组、主题、总线的复用避免了重复数据项的多次定义。引用方式的复用使得只需修改被引用项,所有引用它的地方自然而然地跟着变化不需要再手动更改,这使得ICD的更新变得更容易。
参阅图4。参阅图4。界面配置文件生成工具以XML方式生成界面配置文件,输出界面配置文件。界面配置文件生成工具由页面、ICD面板两部分组成。页面包括:页面名称、引用的ICD面板和页面别名。ICD面板包括:面板名称、面板别名、数据项、消息ID和消息长度,其中,数据项包含:数据项名称、数据项别名、枚举项、、位偏移量、域宽度、默认值和控件类型,其中,枚举项包含数值和枚举描述。页面是存放ICD面板的容器,可以引用多个ICD面板。ICD面板中包含多个数据项,每一个数据项都包含了最重要的三个属性:位偏移量、位域宽度、控件类型。位偏移量以0算起,一个数据项的位偏移量是位于它之前的所有数据项的位域宽度之和。控件类型包括:下拉框ComboBox、按钮组RadioGroup、文本框TextEdit、列表List等。
参阅图5。在控件数据映射中,控件1、控件2…控件n分别对应ICD数据项1、数据项2…数据项n。一条ICD包含多个数据项,每一个数据项对应一个控件。当操作人员在显示控制***上选择发送一条ICD时,显示控制***的ICD数据组包器根据控件与数据项的绑定关系获取到对应数据项的值,然后将所有数据项的值组包获取到一条ICD对应的二进制源码;当显示控制***解析一条ICD时,显示控制***的ICD数据解包器根据数据项在ICD中的位偏移量,操纵一个字符型指针在二进制源码上,做偏移获取对应数据项的源码值,然后据此更新与数据项绑定的控件值。
参阅图6。在控件布局建模中,控件包含:左右嵌套控件、上下嵌套控件、包含嵌套控件、实体控件。左右嵌套控件由左控件、右控件构成;上下嵌套控件由上控件、下控件构成;包含嵌套控件由外控件、内控件构成;左控件、右控件、上控件、下控件、外控件、内控件由控件构成,而控件可以是左右嵌套控件、上下嵌套控件、包含嵌套控件、实体控件中的任意一种。这种循环嵌套的结构支撑起整个控件布局。
参阅图7。显示控制***给定存放在数据内存址pBuffer、位偏移量nBitOffset、数据所占项的比特数nBit,其中,数据项的内存地址等于存放整条ICD数据的内存首地址加上位偏移量。采用,整条ICD数据的内存首地址、位偏移量nBitOffset、数据项的位域宽度为实体控件数据组包时,将与实体控件绑定的数据项内容取出并存入数据项的内存地址;实体控件数据解包时,在数据项内存地址中取出数据值,数据的取出位宽由数据项的位域宽度决定,按大端存储数据方式是则按大端方式在数据内存址pBuffer中存取数据,否则按小端方式在数据内存址pBuffer中存取数据,并更新数据内存址pBuffer与位偏移量nBitOffset,将取出的数据值存入与实体控件绑定的数据项,然后刷新控件显示新值,完成数据组包或者数据解包后,更新内存地址和位偏移量。
参阅图8。将控件树中根节点控件rootNode赋予当前处理控件pCurNode,然后定义两个控件临时变量:pNode1、pNode2。如果pCurNode是左右嵌套控件,将pCurNode嵌套的左控件赋予pNode1,将pCurNode嵌套的的右控件赋予pNode2。如果pCurNode不是左右嵌套控件,则判断pCurNode是否为上下嵌套控件。如果pCurNode是上下嵌套控件,将pCurNode嵌套的上控件赋予pNode1,将pCurNode嵌套的的下控件赋予pNode2。如果pCurNode不是上下嵌套控件,则判断pCurNode是否为包含嵌套控件。如果pCurNode是包含嵌套控件,将pCurNode嵌套的外控件赋予pNode1,将pCurNode嵌套的的内控件赋予pNode2。如果pCurNode不是左右嵌套控件、上下嵌套控件、包含嵌套控件中的任何一种则进行出错处理,然后当次处理结束。当对pCurNode的控件类型判断完成并赋予pNode1、pNode2值以后,接着对pNode1、pNode2进行控件类型判断。如果pNode1不是实体控件,则将pNode1赋予pCurNode继续做下一次递归处理。如果pNode1是实体控件,则对pNode1控件进行数据组包/解包。在pNode1是实体控件的条件下,如果pNode2不是实体控件,则将pNode2赋予pCurNode继续做下一次递归处理。在pNode1是实体控件的条件下,如果pNode2也是实体控件,则对pNode2控件进行数据组包/解包,然后当次处理结束。整个处理流程的递归调用始于对当前处理控件pCurNode控件的处理,初始状态下,pCurNode为控件树中的根节点控件,在递归处理过程中,pCurNode为控件树中的嵌套控件。
参阅图9。在显示控制***的控件树的软件实现中,对控件树的节点进行面向对象建模。控件树中有两类控件节点:实体控件节点、嵌套控件节点(包含:左右嵌套控件节点、上下嵌套控件、包含嵌套节点)。实体控件节点因为不能嵌套其他控件,所以就只能是控件树的叶节点。嵌套控件节点因为需要嵌套其他的控件,所以它必然作为控件树的中间节点,而且嵌套控件节点的子节点可以是实体控件节点也可以是另外的嵌套控件节点。因为每一个嵌套控件节点都有两个子节点,所以这样形成的控件树就是一颗二叉树。CNode是控件树中所有控件类型节点的抽象基类。包含嵌套控件类FrmCtrl、左右嵌套控件类HCatCrlCtrl、上下嵌套控件类VCatCrlCtrl、实体控件类RawCtrl都继承于CNode。Contrl是一个控件包装类,在Contrl类中有一个指向CNode型对象的指针pNode。一个Contrl类的实例化对象可以看做是一个控件,这个控件的类型由pNode实际指向的对象类型决定(可以是FrmCtrl、HCatCrlCtrl、VCatCrlCtrl、RawCtrl中任意一种,因为它们都继承于CNode,所以它们都是CNode型对象,因此指向它们的指针可以赋值给pNode)。在FrmCtrl中,pOutCtrl和pInCtrl都是指向Contrl型对象的指针,pOutCtrl指向外控件,pInCtrl指向内控件;在HCatCrlCtrl中,pLeftCtrl和pRightCtrl都是指向Contrl型对象的指针,pLeftCtrl指向左控件,pRightCtrl指向右控件;在VCatCrlCtrl中,pUpCtrl和pDownCtrl都是指向Contrl型对象的指针,pUpCtrl指向上控件,pDownCtrl指向下控件。按钮组类CRadioGroupBox、下拉框类CComboBox、文本框类CTextEdit、列表类CList都继承于通用控件基类CtrlCommClass。实体控件类RawCtrl中有一个指向通用控件基类CtrlCommClass的一个指针pCtrlComm。实体控件的具体类型由pCtrlComm实际指向的对象类型决定(可以是CRadioGroupBox、CComboBox、CTextEdit、CList中任意一种,因为它们都继承于CtrlCommClass,所以它们都是CtrlCommClass型对象,因此指向它们的指针可以赋值给pCtrlComm)。Display()是控件布局函数,在控件自动布局的过程中,在Contrl类中调用pNode->Display();在FrmCtrl类的布局函数Display()中先后调用pOutCtrl->Display()和pInCtrl->Display();在HCatCrlCtrl类的布局函数Display()中先后调用pLeftCtrl->Display()和pRightCtrl->Display();在VCatCrlCtrl类的布局函数Display()中先后调用pUpCtrl->Display()和pDownCtrl->Display();在RawCtrl类的布局函数Display()中,调用pCtrlComm->Display()。FrmCtrl类、HCatCrlCtrl类、VCatCrlCtrl类、RawCtrl类继承于CNode类并实现Display()函数,根据C++语言的多态性,Contrl类Display()中pNode->Display()执行的是pNode实际指向类型的Display()版本。CRadioGroupBox类、CComboBox类、CTextEdit类、CList类继承于CtrlCommClass类并实现Display()函数,根据C++语言的多态性,RawCtrl类Display()中pCtrlComm->Display()执行的是pCtrlComm实际指向类型的Display()版本。因此,嵌套控件的布局函数Display()会调用被嵌套控件的布局函数Display(),实体控件的布局函数Display()会将控件实际绘出,只调用控件树根节点所属类型Contrl类的布局函数Display()就会触发在控件树的每一层子节点递归调用布局函数Display()直到绘制出控件树上的所有控件,这样就实现了控件的自动布局。
参阅图10。在总线通信***的驱动类图中,DriverListenerHandler是总线监听基类,其中的虚函数OnRecvdata()用于处理接收到的总线数据,总线驱动映射器类DriverMap继承于DriverListenerHandler,实现虚函数OnRecvdata()。DriverCreator是总线驱动生成器类,函数CreateDriver()用于生成总线驱动。DriverMap中有一个指向总线驱动生成器类DriverCreator的指针pDriCrt。BusDriver是总线驱动基类,其中,SetListenerHandler()函数用于注册总线监听类对象,虚函数InitDriver()用于总线驱动的初始化,虚函数Send()用于发送总线数据。DDS驱动器类DDSDriver、AFDX总线驱动器类AFDXDriver、CAN总线驱动器类CANDriver继承于BusDriver并实现虚函数InitDriver()和Send()。每一个总线映射关系中包含一对总线驱动,一个是DDS驱动,一个是实际的总线驱动。DriverMap类建立总线映射关系表时,DriverMap类调用pDriCrt->CreateDriver()获得总线驱动器。在DriverCreator类的CreateDriver()实现中,首先定义一个BusDriver型的指针pBusDriver并赋初值为0,然后根据总线类型type生成对应的总线驱动。如果type等于DRIVER_DDS,则new一个DDSDriver对象并将其指针赋予pBusDriver;如果type等于DRIVER_AFDX,则new一个AFDXDriver对象并将其指针赋予pBusDriver;如果type等于DRIVER_CAN,则new一个CANDriver对象并将其指针赋予pBusDriver,然后返回pBusDriver。DriverMap类每获得一个总线驱动器时,DriverMap类调用BusDriver类的SetListenerHandler()函数注册自己,如此在驱动器接收到实际的总线数据时调用DriverListenerHandler类的OnRecvdata()函数,根据C++语言的多态性,实际调用的将是DriverMap类的OnRecvdata()函数。在DriverMap类的OnRecvdata()函数实现中,首先定义一个BusDriver型的指针pDestDriver并赋初值为0,然后根据源驱动器查找总线映射关系表,找到对应的目的驱动器并赋值给pDestDriver,调用pDestDriver->Send()发送数据。因为Send()是虚函数,pDestDriver->Send()执行的是pDestDriver实际指向驱动器类型的Send()函数版本。通过使用总线驱动基类BusDriver实现了总线驱动类与总线驱动映射器类DriverMap之间的解耦,总线驱动映射器类只是用总线驱动基类BusDriver提供的虚函数实现相应的业务而不关心是哪一种具体的总线驱动实现了上述的虚函数,这使得增加新的总线驱动器类十分方便,只需新增一个继承于BusDriver的类,在CreateDriver()函数中增加新总线驱动器的创建语句,总线驱动映射器类DriverMap不做任何修改。
Claims (10)
1.一种动态ICD配置的总线模拟器***,包括:界面配置文件生成工具、显示控制***、总线通信***、作为通信中间件的数据分发服务***DDS,其特征在于:显示控制***和总线通信***分别是一个通过DDS通信中间件进行数据通信的单独软件;当总线模拟器***向总线发送数据时,界面配置文件生成工具读入接口控制文档ICD,开发人员使用界面配置文件生成工具设计出每一个接口控制文档ICD中各个数据项对应的控件类型,并生成界面配置文件;显示控制***加载界面配置文件,在界面上动态生成界面控件,显示控制***自主遍历上述ICD绑定的一组控件并读取控件中的数值,然后按照大端序或者小端序的方式组包成DDS数据帧,DDS数据帧通过DDS通信中间件发往总线通信***,总线通信***根据总线映射关系,将DDS数据帧转换成实际的总线数据并发送;当总线模拟器***接收总线数据时,总线通信***接收实际的总线数据,根据总线映射关系转换成DDS数据帧,DDS数据帧经DDS通信中间件发往界面控件,显示控制***解析出数据并显示在界面上;显示控制***根据界面配置文件对界面控件的相对布局关系进行建模,建立“上下关系”、“左右关系”、“包含关系”三种基本的布局关系构成的相互嵌套组合成的任意复杂的界面布局,以及以XML文件格式来描述并与ICD中各个数据项对应控件之间相对布局关系的界面配置文件;显示控制******加载界面配置文件后解析出上述布局关系,按照相对布局关系的约束自动地调整控件位置,采用递归的方式动态地绘制出控件;总线通信***根据总线映射关系实现DDS数据帧与总线数据帧的互相转换,这使得显示控制***与实际总线解耦。
2.根据权利要求1所述的动态ICD配置的总线模拟器***,其特征在于:界面配置文件生成工具将ICD文件转换成界面配置文件,通过界面配置文件生成器遍历ICD文件的树形结构,以递归的方式生成界面配置内容项并最终形成界面配置文件,显示控制***运行加载界面配置文件并自动绘制出控件界面。
3.根据权利要求1所述的动态ICD配置的总线模拟器***,其特征在于:显示控制***解析出ICD文件的树形结构内容,显示控制***的界面控件自动生成器遍历界面配置文件,并根据界面配置文件中数据项对应的的控件类型动态绘制出相应控件,建立数据项与控件的映射关系,以递归的方式建立控件树,以控件树为基础实现控件自动布局,注册自定义的Windows消息响应用户界面发送数据的操作。
4.根据权利要求1所述的动态ICD配置的总线模拟器***,其特征在于:显示控制***进行数据组包时,准备一段内存块,遍历控件树,由数据项与控件的映射关系取出控件的当前值并存入数据项,以内存块的基地址为位偏移起始位置并加上数据项的位偏移量作为数据项中数据的存放地址,以数据项的位域宽度作为数据项中的数据,在内存块中的存放长度;显示控制***发送数据时,先完成数据组包再通过DDS将数据“发布”,数据分发服务***DDS上“订阅”了这包数据的***将会自动收到这包数据。
5.根据权利要求4所述的动态ICD配置的总线模拟器***,其特征在于:当显示控制***“订阅”的数据包到来时,显示控制***将根据数据包的主题名称定位到ICD,由ICD标识符再定位到控件树,遍历控件树,根据数据项的位域宽度、位偏移量描述,将数据存入与控件绑定的数据项中,刷新控件显示数据项中的数据值。
6.根据权利要求1所述的动态ICD配置的总线模拟器***,其特征在于:界面配置文件生成工具加载并分析ICD文档,界面配置文件生成器为ICD内部数据项中的整型数据,选择编辑框控件,为具有3个以上枚举值的枚举型数据选择下拉框控件,为具有2个以下枚举值的枚举型数据选择按钮组控件、为具有变长数据结构的数据类型选择列表控件。
7.根据权利要求1所述的动态ICD配置的总线模拟器***,其特征在于:总线通信***封装了底层板卡驱动,发送ICD数据时,从数据分发服务***DDS接收数据并转发到总线上,接收ICD数据时,从总线接收数据并转发到数据分发服务***DDS;DDS通过“发布-订阅”ICD标识符的方式来实现数据的交互,发送ICD数据时,显示控制***是发布方,总线通信***是订阅方,接收ICD数据时,总线通信***是发布方,显示控制***是订阅方。
8.根据权利要求1所述的动态ICD配置的总线模拟器***,其特征在于:显示控制***挂载到数据分发服务***DDS上,DDS通过“发布-订阅”的方式作为显示控制***和总线通信***之间的数据沟通媒介;总线通信***“订阅”的DDS数据帧根据总线映射关系路由到实际的总线驱动器上发送出去,由实际的总线驱动器接收上来的数据根据总线映射关系路由到DDS通信接口组件上“发布”出去。
9.根据权利要求1所述的动态ICD配置的总线模拟器***,其特征在于:在控件数据映射中,一条ICD包含多个数据项,每一个数据项对应一个控件;当发送一条ICD时,显示控制***根据控件与数据项的绑定关系获取到对应数据项的值,然后将所有数据项的值组包获取到一条ICD对应的二进制源码;当解析一条ICD时,显示控制***根据数据项在ICD中的位偏移量操纵一个字符型指针在二进制源码上做偏移获取对应数据项的源码值,然后据此更新与数据项绑定的控件状态。
10.根据权利要求1所述的动态ICD配置的总线模拟器***,其特征在于:在总线通信***中,总线驱动生成器DriverCreator根据总线类型生成相应的总线驱动,在总线驱动映射器DriverMap中维护着生成的总线驱动与对应DDS通信接口的映射关系,将总线驱动映射器注册到每一个总线驱动和DDS通信接口中,当某一个总线驱动接收到数据时,总线驱动映射器将收到通知并查找到对应的DDS通信接口,调用DDS通信接口的发送函数将数据发送出去,当DDS通信接口接收到DDS数据帧时,总线驱动映射器将收到通知并查找到对应的目的总线驱动,调用目的总线驱动的发送函数将数据发送到实际的总线上。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710026227.7A CN106940642B (zh) | 2017-01-13 | 2017-01-13 | 动态icd配置的总线模拟器*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710026227.7A CN106940642B (zh) | 2017-01-13 | 2017-01-13 | 动态icd配置的总线模拟器*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106940642A CN106940642A (zh) | 2017-07-11 |
CN106940642B true CN106940642B (zh) | 2020-03-31 |
Family
ID=59468640
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710026227.7A Active CN106940642B (zh) | 2017-01-13 | 2017-01-13 | 动态icd配置的总线模拟器*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106940642B (zh) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109960492A (zh) * | 2018-10-15 | 2019-07-02 | 扬州万方电子技术有限责任公司 | 一种基于qt平台的检测***及其使用方法 |
CN109510748B (zh) * | 2018-12-29 | 2021-06-29 | 北京润科通用技术有限公司 | 节点及节点交互方法和*** |
CN109558367B (zh) * | 2019-01-10 | 2022-10-28 | 西南电子技术研究所(中国电子科技集团公司第十研究所) | 多总线处理器mhal路由方法 |
CN110046452B (zh) * | 2019-04-25 | 2020-07-10 | 北京世冠金洋科技发展有限公司 | 一种数据总线管理方法、装置及电子设备 |
CN111580796A (zh) * | 2020-05-08 | 2020-08-25 | 中国北方车辆研究所 | 基于业务组件化的装甲车辆显控软件设计方法 |
CN111966613B (zh) * | 2020-07-20 | 2022-03-15 | 深圳市广和通无线股份有限公司 | 通信模块数据处理方法、装置、计算机设备和存储介质 |
CN112286512B (zh) * | 2020-10-30 | 2024-02-23 | 西南电子技术研究所(中国电子科技集团公司第十研究所) | 航空电子仿真测试平台ui管理子*** |
CN112364496B (zh) * | 2020-11-03 | 2024-01-30 | 中国航空无线电电子研究所 | 基于html5和vue技术的航电仿真面板生成*** |
KR102419119B1 (ko) * | 2020-12-16 | 2022-07-07 | 주식회사 한화 | 인터페이스 제어 문서에 따라 그래픽 유저 인터페이스를 생성하는 시험 장치 및 이의 동작 방법 |
CN112272132B (zh) * | 2020-12-23 | 2021-03-30 | 奥特酷智能科技(南京)有限公司 | 基于fpga实现can数据的dds协议实时传输方法及*** |
CN113010359B (zh) * | 2021-03-26 | 2023-03-17 | 西安航空电子科技有限公司 | 总线测试***生成方法、***、设备及存储介质 |
CN113254100B (zh) * | 2021-05-25 | 2023-08-01 | 四川虹魔方网络科技有限公司 | 基于Vue的多级路由动态加载的实现方法 |
CN114415626B (zh) * | 2021-12-23 | 2023-12-19 | 商飞软件有限公司 | 一种模块化的航空数据测试***及其测试方法 |
CN115019595B (zh) * | 2022-05-23 | 2023-06-06 | 中国电子科技集团公司第十研究所 | 基于航电仿真i/o管理的训练模拟器实现方法及*** |
CN116684725B (zh) * | 2022-10-18 | 2024-04-16 | 荣耀终端有限公司 | 应用界面的布局方法、装置、电子设备、存储介质及芯片 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2002060400A (ja) * | 2000-08-17 | 2002-02-26 | Terumo Corp | コラーゲン結合活性および血管新生調節活性を有するハイブリッドポリペプチド |
CN101706773A (zh) * | 2009-11-19 | 2010-05-12 | 北京四方继保自动化股份有限公司 | 采用xml信息重组实现变电站iec61850快速自动建模的方法 |
US8484624B1 (en) * | 2003-10-15 | 2013-07-09 | Sprint Communications Company L.P. | Test integration tool |
CN103207795A (zh) * | 2012-12-20 | 2013-07-17 | 诸暨市供电局 | 一种基于轻量级web服务器的电能量配置方法 |
CN104461881A (zh) * | 2014-12-03 | 2015-03-25 | 陕西千山航空电子有限责任公司 | 一种面向icd的arinc429总线信号仿真测试组件 |
CN104486075A (zh) * | 2014-10-13 | 2015-04-01 | 国家电网公司 | 一种智能变电站icd模型文件数字签名的验证方法 |
CN106155686A (zh) * | 2016-06-30 | 2016-11-23 | 华为技术有限公司 | 界面生成方法、装置和*** |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080059954A1 (en) * | 2002-06-18 | 2008-03-06 | Martin Joseph B | Universal system component emulator with human readable output |
US9420238B2 (en) * | 2014-04-10 | 2016-08-16 | Smartvue Corporation | Systems and methods for automated cloud-based 3-dimensional (3D) analytics for surveillance systems |
-
2017
- 2017-01-13 CN CN201710026227.7A patent/CN106940642B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2002060400A (ja) * | 2000-08-17 | 2002-02-26 | Terumo Corp | コラーゲン結合活性および血管新生調節活性を有するハイブリッドポリペプチド |
US8484624B1 (en) * | 2003-10-15 | 2013-07-09 | Sprint Communications Company L.P. | Test integration tool |
CN101706773A (zh) * | 2009-11-19 | 2010-05-12 | 北京四方继保自动化股份有限公司 | 采用xml信息重组实现变电站iec61850快速自动建模的方法 |
CN103207795A (zh) * | 2012-12-20 | 2013-07-17 | 诸暨市供电局 | 一种基于轻量级web服务器的电能量配置方法 |
CN104486075A (zh) * | 2014-10-13 | 2015-04-01 | 国家电网公司 | 一种智能变电站icd模型文件数字签名的验证方法 |
CN104461881A (zh) * | 2014-12-03 | 2015-03-25 | 陕西千山航空电子有限责任公司 | 一种面向icd的arinc429总线信号仿真测试组件 |
CN106155686A (zh) * | 2016-06-30 | 2016-11-23 | 华为技术有限公司 | 界面生成方法、装置和*** |
Non-Patent Citations (4)
Title |
---|
Towards a OMG DDS Communication Backbone for Factory Automation Applications;Isidro Calvo et al;《 IEEE ETFA"2011》;20111231;全文 * |
基于ICD配置的航电中心测试软件自动生成方法研究;韩晓东等;《测控技术》;20111130;第30卷(第11期);全文 * |
基于IEC61850的配电终端模拟器的设计和实现;辛红汪等;《电力***通信》;20130210;第33卷(第244期);全文 * |
基于中间件的动态配置容错对象管理框架;周明辉等;《计算机学报》;20050930;第28卷(第9期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN106940642A (zh) | 2017-07-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106940642B (zh) | 动态icd配置的总线模拟器*** | |
JP5204070B2 (ja) | ソフトウェア成果物の第2バージョンに移行する際に、当該ソフトウェア成果物の第1バージョンになされたカスタマイズをマージするためのツールを生成する方法、コンピュータ使用可能な媒体及びデータ処理システム | |
US8006224B2 (en) | System and method for unified visualization of two-tiered applications | |
US8321856B2 (en) | Supplying software updates synchronously | |
CN106980560B (zh) | 一种基于icd数据库多总线协议测试及仿真方法和平台 | |
US20060236307A1 (en) | System and method for transformation of wireless application definition to simplified form | |
WO2007006127A1 (en) | System and method for generating screen components | |
CA2604935A1 (en) | System and method for creating a mapping document for binding messages between an application and an associated backend server | |
CN117149301A (zh) | 基于mdf的微前端资源共享方法、***和存储介质 | |
CN104063231B (zh) | 一种基于hit‑tena的试验资源快速接入方法 | |
CN116719523A (zh) | 页面渲染方法及电子设备 | |
CN117539459B (zh) | 一种api接口配置方法、***及设备 | |
CN115964019A (zh) | 适用于工业场景的信息融合组件规范的方法和*** | |
CN113900704A (zh) | 应用程序安装包的发布方法、装置、可读介质及电子设备 | |
CN109597611B (zh) | 前端数据流控制组件开发***、方法、设备及存储介质 | |
US9830204B2 (en) | Facilitating communication between software components that use middleware | |
CN114721647B (zh) | 一种基于无代码应用开发的面向对象编程方法 | |
CN114816475A (zh) | 一种嵌入式操作***的更新方法、装置、设备和介质 | |
CA2543898A1 (en) | System and method for unified visualization of two-tiered applications | |
Halle et al. | Evaluation of the ashley seamless tool-chain on a real-world avionics demonstrator | |
CN112051990A (zh) | 网管北向接口模型适配方法及*** | |
WO2010097688A1 (en) | System and method for the generation of applications by means of a computer network | |
EP2866139A1 (en) | Method facilitating the communication between two software components that use two different middleware by automatically generating a communication layer between them | |
CN116893817A (zh) | 一种组件库构建方法、装置、设备及可读存储介质 | |
Price | Design Automation and its Challenges in AUTOSAR-Based Vehicle E/E Systems |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |