一种模型文件解析方法、装置、设备及存储介质与流程

摘要: 本技术涉及计算机软件,尤其涉及一种模型文件解析方法、装置、设备及存储介质。背景技术:1、图形化仿真模型被广泛应用于系统设计、仿真验证与代码生成。在模型迁移、第三...
一种模型文件解析方法、装置、设备及存储介质与流程

本技术涉及计算机软件,尤其涉及一种模型文件解析方法、装置、设备及存储介质。

背景技术:

1、图形化仿真模型被广泛应用于系统设计、仿真验证与代码生成。在模型迁移、第三方建模平台集成、持续集成流水线等场景中,需要在不运行建模软件的环境中读取模型文件的内容。例如,将simulink模型迁移至其他建模平台时,目标平台需要获得模型的结构与参数。

2、相关技术中,读取模型文件内容的方式包括两类。第一类方式依赖建模软件提供的接口读取模型信息,此类方式在未安装或者未运行建模软件的环境中无法使用。第二类方式针对某一种文件封装格式进行离线解析,例如将压缩容器格式的模型文件解包,得到其中的结构化描述文件并进行解析。此类解析工具按照其所针对的封装格式的结构进行定制开发。

3、模型文件的封装格式并非单一。不同版本的建模软件采用不同的封装形式,既有压缩容器格式的模型文件,也有以分界标记分隔各部分内容的文本容器格式的模型文件。并且,模型文件的封装格式仍在随着建模软件的版本更新而持续变更。

4、由于现有离线解析手段针对特定封装格式定制开发,每当建模软件引入新的封装格式或者变更既有封装格式时,既有解析手段即告失效。此时需要重新理解新格式的完整结构,并重新开发整套解析逻辑,适配周期长、维护成本高,难以以统一的方式持续解析不同封装格式的模型文件。上述问题影响了离线解析工具在模型文件格式持续演进环境下的可用性与可维护性。

技术实现思路

1、本技术实施例提供了一种模型文件解析方法、装置、设备及存储介质,能够在不运行目标建模软件的环境中,以同一套解析逻辑持续解析封装格式不断演进的模型文件。本技术的技术方案如下。

2、第一方面,提供了一种模型文件解析方法。该方法由计算设备执行。计算设备包括而不限于服务器、工作站、个人计算机或者持续集成流水线中的构建节点。该方法包括如下处理。

3、计算设备在未运行目标建模软件的环境中,获取待解析模型文件。待解析模型文件为目标建模软件生成的图形化仿真模型的模型文件。目标建模软件为simulink。

4、计算设备识别待解析模型文件的封装格式类型。封装格式类型用于区分模型文件的物理存储形态。识别结果决定模型文件进入哪一条解析分支。

5、响应于封装格式类型为第一封装格式,计算设备将待解析模型文件作为压缩容器文件解包,得到结构化描述文件,并解析结构化描述文件,还原图形化仿真模型的模型结构数据。第一封装格式为压缩容器格式。结构化描述文件以结构化的文本标签描述模型的图形结构。

6、响应于封装格式类型为第二封装格式,计算设备按照分界标记将待解析模型文件拆分为各部分,并将拆分得到的各部分重组为第一容器文件。第一容器文件的封装格式为第一封装格式。随后,计算设备将第一容器文件作为压缩容器文件解包,得到结构化描述文件,并解析结构化描述文件,还原模型结构数据。其中,第二封装格式为文本容器格式。分界标记用于标识文本容器格式的模型文件内部各部分内容的边界。第一容器文件的解包与解析处理复用针对第一封装格式的解包与解析路径。也就是说,第二封装格式的模型文件在重组之后,与第一封装格式的模型文件走完全相同的后续处理流程。

7、计算设备输出模型结构数据。模型结构数据用于描述图形化仿真模型的图形结构,以供基于模型结构数据进行图形化仿真模型的迁移、仿真或代码生成。

8、通过该方法,由于计算设备直接依据模型文件自身的物理存储结构完成解析,整个解析过程不调用目标建模软件的任何编程接口,因此解析程序的部署不再以安装建模软件并持有许可证为前提,从而任意未安装建模软件的服务器或者持续集成节点都能够执行批量模型解析任务,降低了模型解析的部署成本。进一步地,由于文本容器格式的模型文件被重组为与压缩容器格式一致的容器文件,两种物理形态的模型文件在重组之后共享同一条解包与解析路径,因此计算设备只需维护一套解析逻辑即可覆盖两种封装格式,从而避免了为每种封装格式分别开发解析流程所带来的适配周期与维护成本,解析工具得以持续跟随建模软件的格式演进。同时,两条格式分支输出统一结构的模型结构数据,下游环节面对的是同一种数据形态,上层应用无需感知模型文件的原始封装格式,上层应用的设计随之简化。

9、在一种可能的实现中,第二封装格式为开放打包约定(open packagingconventions,opc)文本包格式。分界标记为预设的部件起始标记。部件起始标记用于指示文本容器格式的模型文件中各部分的起始位置。计算设备在模型文件的文本内容中检索部件起始标记,将相邻两处部件起始标记之间的内容确定为一个部分。拆分得到的各部分与第一封装格式的容器文件中的包内部件一一对应。

10、通过这种实施方式,由于文本容器内部各部分由预设的部件起始标记明确分隔,且拆分得到的各部分与压缩容器中的包内部件一一对应,因此拆分过程不会产生多余的碎片,也不会将一个包内部件拆散,从而保证了重组得到的第一容器文件与建模软件直接保存的压缩容器文件在内容上等价,解析结果不会因桥接过程而丢失信息。

11、在一些实施方式中,计算设备按照开放打包约定规定的包内目录结构,将拆分得到的各部分分别作为包内部件写入压缩容器,得到第一容器文件。具体而言,计算设备根据各部分对应的路径信息在压缩容器内建立对应的目录层级,并将各部分的内容写入相应位置。

12、通过这种实施方式,由于重组严格遵循开放打包约定规定的包内目录结构,重组产物是结构合规的标准压缩容器文件,因此后续任何符合通用容器解包规范的处理组件都能够正确处理重组产物,从而保证了解析路径复用的可靠性,两种封装格式下解析结果的行为一致性也天然得到保证。

13、在一种可能的实现中,第一封装格式为基于opc的zip压缩容器格式,结构化描述文件为可扩展标记语言(extensible markup language,xml)文件。计算设备对xml文件进行文档对象模型(document object model,dom)解析,将解析得到的文档元素映射为内存对象,并基于内存对象构建内存对象树。内存对象树用于承载模型结构数据。

14、通过这种实施方式,由于zip压缩容器与xml均为遵循公开规范的通用格式,计算设备采用通用的解包组件与解析组件即可完成读取,因此解析过程不依赖建模软件的专有接口,从而保证了解析链路在任意通用计算环境中的可部署性与可移植性。同时,文档元素被逐一映射为内存对象并组织为内存对象树,模型要素之间的从属关系与连接关系被完整保留在对象引用之中,上层应用无需二次分析文本内容即可直接访问任意图形要素。

15、在一些实施方式中,计算设备识别待解析模型文件的封装格式类型之后,响应于封装格式类型为第三封装格式,按照文本模型结构对待解析模型文件进行解析,还原模型结构数据。第三封装格式为以文本形式描述模型结构的模型文件格式。早期版本建模软件保存的模型文件属于这种格式。

16、通过这种实施方式,由于传统文本模型格式被纳入与另外两类格式并列的解析分支,且该分支同样输出统一结构的模型结构数据,因此解析体系覆盖了建模软件不同历史版本产生的全部主流文件形态,从而避免了存量老版本模型需要先借助建模软件另存为新格式才能解析的问题,拓展了解析方法的适用边界。该分支仅涉及文本扫描与层级维护,同样不依赖建模软件运行环境。

17、在一种可能的实现中,计算设备读取待解析模型文件的文件头标识与文件扩展名,并检测待解析模型文件内部是否包含分界标记。随后,计算设备根据文件头标识、文件扩展名以及检测结果,确定待解析模型文件的封装格式类型。文件头标识位于待解析模型文件的起始字节,用于指示待解析模型文件所属的容器格式类别。

18、通过这种实施方式,由于判定过程综合了文件头标识、文件扩展名与分界标记检测三路信号,同一扩展名下不同物理形态的文件能够被准确区分,因此每一类模型文件都被送入与其物理结构匹配的解析分支,从而避免了因格式误判导致的解析失败或解析结果错乱。同时,文件头标识的读取开销固定且极小,分界标记检测仅针对文本形态的文件执行,识别环节在批量解析场景下不会成为性能瓶颈。

19、在一些实施方式中,模型结构数据包括模块、端口、连线、子系统、库引用链接以及状态机的结构数据。其中,端口与模块之间具有从属关系。连线用于描述模块的端口之间的连接关系。子系统用于描述模块的嵌套层级关系。库引用链接用于描述图形化仿真模型对外部库模块的引用关系。状态机为stateflow状态图数据,stateflow为目标建模软件中的状态图建模组件。

20、通过这种实施方式,由于模型结构数据同时覆盖模块、端口、连线、子系统、库引用链接与状态机六类要素,且要素之间的从属关系、连接关系、嵌套关系与引用关系均被显式保留,因此还原得到的模型结构在信息维度上与建模软件内部的模型表示对齐,从而保证了迁移后的模型在图形拓扑层面与原模型一致,不会出现连线丢失或层级错乱。包含状态图的混合结构模型也无需借助专门的状态图工具单独处理,解析结果的整体性得到保证。

21、在一种可能的实现中,计算设备还获取与待解析模型文件关联的数据源。数据源包括第一路数据源、第二路数据源与第三路数据源。第一路数据源为待解析模型文件内嵌的模型工作区数据。第二路数据源为外部数据字典文件。第三路数据源为基础工作区导出数据文件。模型工作区数据与基础工作区导出数据文件均为第5版mat数据文件格式(mat5)的二进制格式数据。计算设备分别对三路数据源进行解析,得到各路数据源对应的数据定义信息,并将各路数据定义信息分别转换为统一数据条目结构的数据条目。随后,计算设备按照预设的数据源优先级,将各路数据条目合并为统一数据字典。统一数据字典用于描述图形化仿真模型的模型参数语义。

22、通过这种实施方式,由于三路异构数据源的解析结果都被转换为统一数据条目结构的数据条目,物理格式与来源的差异在归一化环节被消除,因此上层应用面对的是单一结构的数据集合,无需为每一种数据源编写适配逻辑。并且,合并过程按照预设的数据源优先级处理同名数据定义,统一数据字典中每一个名称都恰好对应一条数据条目,不存在歧义条目,从而保证了离线解析得到的模型参数语义与建模软件实际运行时的名称查找结果一致。

23、在一些实施方式中,模型工作区数据为待解析模型文件的压缩容器内的模型工作区文件。计算设备从解包待解析模型文件得到的容器内容中提取模型工作区文件,对模型工作区文件进行mat5二进制解析,得到模型工作区变量,并将模型工作区变量转换为数据条目。

24、通过这种实施方式,由于模型工作区文件直接从图形结构解析环节已完成的解包结果中提取,模型文件在整个解析过程中只被解包一次,因此避免了重复解包带来的输入输出开销,从而提升了整体解析效率。

25、在一种可能的实现中,外部数据字典文件为扩展名为sldd的数据字典文件。外部数据字典文件为压缩容器文件,其内部包含描述数据定义的xml文件。计算设备将外部数据字典文件解包,提取外部数据字典文件内部的xml文件,并解析该xml文件,得到参数、信号、总线、别名类型、枚举类型或插值表的数据定义条目,并将数据定义条目转换为数据条目。

26、通过这种实施方式,由于外部数据字典文件与模型文件同属压缩容器格式,其解包与xml解析能够复用与模型文件解析同类的通用组件,因此跨模型共享的数据定义无需建模软件接口即可离线提取。同时,解析覆盖参数、信号、总线、别名类型、枚举类型与插值表等多种条目类型,从而保证了共享数据定义获取的完整性。

27、在一些实施方式中,基础工作区导出数据文件为与待解析模型文件位于同一目录的mat数据文件。计算设备扫描待解析模型文件所在目录下的mat数据文件,对mat数据文件进行mat5二进制解析,得到基础工作区变量,并将基础工作区变量转换为数据条目。

28、通过这种实施方式,由于计算设备通过同目录扫描自动发现基础工作区导出数据文件,用户不需要在解析任务中逐个指定数据文件路径,因此批量解析场景下的任务配置被简化,从而降低了使用成本,也避免了因遗漏指定路径而丢失数据定义。

29、在一种可能的实现中,对mat5二进制格式数据的解析包括渐进式修补处理。响应于mat5二进制格式数据的对象序列化头部的段索引表与实际数据布局不一致导致解析失败,计算设备修正段索引表,并基于修正后的段索引表重新解析mat5二进制格式数据。段索引表用于指示对象序列化数据的各数据段的边界位置。对象序列化数据为按照matlab类对象系统(matlab class object system,mcos)序列化的对象数据。响应于基于修正后的段索引表重新解析失败,计算设备将mat5二进制格式数据中的压缩数据块解压为原始数据,对原始数据执行段索引表的修正,将修正后的原始数据重新压缩并替换压缩数据块,再次重新解析mat5二进制格式数据。响应于仍解析失败,计算设备跳过对象序列化数据的解析,转而解析mat5二进制格式数据中对象序列化数据以外的数据,得到可识别的数据变量。

30、通过这种实施方式,由于修补处理在字节流进入解析库之前主动完成,段索引表与实际数据布局的不一致被预先消除,因此解析库在校验阶段不再触发异常,从而避免了单个变量异常导致整个mat5文件读取中断的问题。并且,三级策略按处理代价由小到大排列并形成回退链,轻量修补能够解决的问题不会触发解压重压缩的开销,重度修补仍不能解决的问题降级为部分解析,解析任务在任何情况下都能给出当前可获得的最好结果,兼顾了处理效率与结果可用性。

31、在一些实施方式中,上述修正段索引表包括:计算设备将段索引表中的末段边界校正为段索引表对应数据块的末尾位置,并清理对象序列化头部中保留字段内的数据,使保留字段满足预设的校验规则。

32、通过这种实施方式,由于末段边界校正与保留字段清理两个动作精确对应了新版建模软件引入的对象序列化头部结构变化,修补后的数据在结构上与解析库的预期对齐,因此对象类型的数据定义在新版格式下仍可被完整还原,从而延长了既有解析组件在新版本数据上的可用寿命。

33、在一种可能的实现中,计算设备输出模型结构数据之后,还将模型结构数据导入目标建模平台,在目标建模平台中重建图形化仿真模型,以实现图形化仿真模型向目标建模平台的迁移。目标建模平台为与目标建模软件不同的建模环境。

34、通过这种实施方式,由于模型结构数据覆盖了重建模型所需的图形结构信息,目标建模平台消费这一标准化输出即可完成模型重建,因此迁移过程不再依赖原建模软件的在场参与,从而使跨平台模型迁移能够在未安装建模软件的服务器环境中以批量、自动化的方式完成。

35、第二方面,提供了一种模型文件解析装置。该装置具有实现上述第一方面或第一方面任一种可选方式的功能。该装置包括至少一个单元,至少一个单元用于实现上述第一方面或第一方面任一种可选方式所提供的方法。在一种单元划分方式中,该装置包括获取模块、识别模块、第一解析模块、第二解析模块与输出模块。获取模块用于在未运行目标建模软件的环境中获取待解析模型文件。识别模块用于识别待解析模型文件的封装格式类型。第一解析模块用于对第一封装格式的模型文件执行解包与解析。第二解析模块用于对第二封装格式的模型文件执行拆分、重组以及复用解析路径的解包与解析。输出模块用于输出模型结构数据。

36、在一些实施方式中,该装置中的单元通过软件实现,该装置中的单元是程序模块。在另一些实施方式中,该装置中的单元通过硬件或固件实现。第二方面提供的模型文件解析装置的具体细节可参见上述第一方面或第一方面任一种可选方式,此处不再赘述。

37、第三方面,提供了一种计算机设备。该计算机设备包括处理器,处理器与存储器耦合。存储器中存储有至少一条计算机程序指令。至少一条计算机程序指令由处理器加载并执行,以使计算机设备实现上述第一方面或第一方面任一种可选方式所提供的方法。第三方面提供的计算机设备的具体细节可参见上述第一方面或第一方面任一种可选方式,此处不再赘述。

38、第四方面,提供了一种计算机可读存储介质。该计算机可读存储介质中存储有至少一条指令。该指令在计算机上运行时,使得计算机执行上述第一方面或第一方面任一种可选方式所提供的方法。

39、第五方面,提供了一种计算机程序产品。该计算机程序产品包括一个或多个计算机程序指令。当计算机程序指令被计算机加载并运行时,使得计算机执行上述第一方面或第一方面任一种可选方式所提供的方法。

40、综上所述,上述技术方案中的一个技术方案至少具有如下优点或有益效果之一:在不运行目标建模软件的环境中完成模型文件解析,消除了解析工具的部署前提;不同封装格式的模型文件复用同一条解包解析路径,一套解析逻辑即可持续跟随建模软件的格式演进,降低了维护成本;输出统一结构的模型结构数据,为模型迁移、仿真与代码生成提供结构完整的数据基础。