有关 Simulink MDL 和 SLX 格式的信息?
Posted
技术标签:
【中文标题】有关 Simulink MDL 和 SLX 格式的信息?【英文标题】:Information about Simulink MDL and SLX formats? 【发布时间】:2014-06-17 23:02:36 【问题描述】:关于这些文件格式有哪些可用信息?有哪些工具可用于解析这些文件?
【问题讨论】:
为什么需要这个?您是否尝试解析模型文件? @P0W 我知道解析 MDL 文件是一个坏主意,从查看 SLX 文件我可以看出解析 SLX 文件可能也是一个坏主意。不过我想知道关于这种文件格式(实际上是这两种格式)的知识,因为这已经出现在我的工作中。如果我找到一个官方的参考资料说“不要解析 SLX 文件!”那么这也很有帮助。我更新了我的问题以反映这一点。 关于文件格式的唯一“官方”位在mathworks.co.uk/help/simulink/ug/saving-a-model.html#btbr7kx-1 @DouglasB.Staple IMO 解析 .mdl 从来没有是个坏主意,直到 .slx 出现。如果可能的话,您可以从 .slx 中知道您真正需要什么,有几个 Simulink API 可以做很多的东西。 我同意@P0W 的 cmets。任何依赖于解析 Simulink 模型的程序都必然会在下一个版本中中断。文件格式没有记录,可能永远不会。使用 API 会更好。 【参考方案1】:很少有信息是公开的。这是我发现的一点:
MDL 和 SLX 是 MathWorks 用于存储 Simulink 模型的专有文件格式。 SLX 在 Simulink R2012a 中引入,并在 R2012b 中制作了默认文件格式。除了文件结构,SLX 和 MDL 文件的内容非常相似。例如,两种格式之间的键值对似乎是相同的。人们经常说解析这些文件是个坏主意,因为它们可以在 Simulink 版本之间进行更改(参见上面的 am304 和我的 cmets),但我没有看到太多这方面的证据。
MDL 格式似乎是 MathWorks 内部开发的。 There seems to have been an MDL parser for python, but it was of limited functionality 和 website is down 截至 2014 年 5 月。
SLX 文件是包含 XML 文件集合的 zip 文件,大部分模型规范存储在 simulink/blockdiagram.xml
中。 @am304 从MathWorks website 指出这条信息:
SLX 是一个符合 Open Packaging 的压缩包 公约 (OPC) 互操作性标准。 SLX商店模型 在 XML 和其他国际格式中使用 Unicode® UTF-8 的信息 格式。以 SLX 格式保存 Simulink 模型:
与 MDL 相比,通常会减小文件大小。 MDL 和 SLX 之间的文件大小缩减因型号而异。
解决了以前版本中加载和保存包含韩文和中文字符的 MDL 文件的一些问题。
启用增量加载和保存。 Simulink 通过仅加载所需的部分来优化性能和内存使用 模型并仅保存模型的修改部分。
除了上面的文字之外,还有一些参考资料:How convert simulink files to XML http://www.scootersoftware.com/vbulletin/showthread.php?t=11568 http://blog.xogeny.com/blog/dont-zip/ http://blog.developpez.com/matlab/p11469/simulink-2/nouveau-format-slx-pour-les-modeles-simulink
【讨论】:
【参考方案2】:更新 (2015/04/02)
Simulink Library for Java 的新版本具有完整的 SLX 格式支持。文档不明确,但源代码包含解析它的所有细节。
旧答案
正如 rob 所回答的,Simulink Library for Java 支持 Simulink 的 MDL 文件格式,还可以解析 Stateflow 内容。该库是开源的,但唯一的文档是源代码。
我们目前(截至 2014 年 9 月)致力于 SLX 支持,预计将在未来 1 或 2 个月内发布。如果您在此之前需要代码,请随时与我联系。
确实,在使用该库时,您的代码可能会因新的 Simulink 版本而中断,因为文件格式没有记录,我们不得不对其中的大部分进行逆向工程。但是,我们目前正在积极更新库以防出现问题,并且即使我们不在,您也可以使用源代码修复它。
PS:我会将此作为对 rob 答案的评论发布,但似乎我没有足够的声誉这样做:(
披露:我是上述库的开发者之一。
【讨论】:
我可以使用 Simulink Library for Java 从 slx 文件中获取元数据吗?我使用下一个 MATLAB 代码将元数据写入 slx 文件:h = load_system(pathToFile); set_param(h, 'Metadata', properties)
【参考方案3】:
关于这些文件格式有哪些可用信息?
MathWorks 确实有一些 documentation 用于 R2007b 中的 MDL 文件格式。
SLX 文件是 zipfile 容器,其内部结构基于 OOXML 的 OPC 格式。 SLX 文件包含一个或多个 XML 文件,其内部结构类似于 MDL 文件,但采用 XML 格式。此外,图形等二进制资源可以存储在单独的 JPG 文件中,而不是像在 MDL 文件中那样进行文本编码并直接嵌入。
随着向 Simulink 添加新功能,这两种格式都会发生变化,但您可以预期 SLX 会因为 MathWorks 重构 SLX 的内部文件结构而变得不太稳定。例如,在 R2014b 中,MathWorks 已开始将传统的整体式 blockdiagram.xml 的部分拆分为单独的文件,例如 stateflow.xml 和 graphicsInterface.xml。
有哪些工具可用于解析这些文件?
有一些用于解析 Simulink 的公开可用的库/API,但我没有使用过其中任何一个,所以我不确定它们的工作情况。
Simulink Library for Java (formerly called ConQAT) (Java) - MDL、SLX TSMP - Tiny Simulink Model Parser (.NET) - MDL Simulink-Model-Parsing-Tools (Python) - MDL您也可以通过搜索Simulink parser找到其他人。
如果这些都不起作用,一些商业工具会直接解析 MDL 和 SLX,而不是依赖 MATLAB API。您可能会询问有关某些商用 Simulink 工具中使用的解析器的许可。
【讨论】:
非常感谢。您写的内容与我的理解一致并建立在我的理解之上。以上是关于有关 Simulink MDL 和 SLX 格式的信息?的主要内容,如果未能解决你的问题,请参考以下文章
MATLAB从入门到精通:Simulink仿真必看——连续模块之PID控制器(PID Controller)