Simulink MDL和SLX格式的信息是什么?

15

有哪些关于这些文件格式的信息可用?有哪些解析这些文件的工具可用?


1
你为什么需要这个?你是在尝试解析模型文件吗? - P0W
1
@P0W 我知道解析 MDL 文件是个坏主意,从查看 SLX 文件来看,我也可以看出解析 SLX 文件也可能是个坏主意。尽管如此,我还是想了解关于这些文件格式(实际上是这两种格式)的已知信息,因为这在我的工作中出现过。如果我找到一个官方参考,说“不要解析 SLX 文件!”那也会很有帮助。我更新了我的问题以反映这一点。 - Douglas B. Staple
该文件格式唯一的“官方”说明在http://www.mathworks.co.uk/help/simulink/ug/saving-a-model.html#btbr7kx-1。 - am304
1
在我看来,解析.mdl文件从来都不是一个坏主意,直到出现了.slx。如果可能的话,您可以告诉我们您实际上需要从.slx中获取什么,因为有几个Simulink API可以做很多事情。 - P0W
我同意@P0W的评论。任何依赖于解析Simulink模型的程序都有可能在下一个版本中出现问题。该文件格式未经记录,而且可能永远不会被记录。最好使用API。 - am304
@am304,我认为P0W并没有说要避免解析Simulink模型。是我说的。但是,根据我的经验,Simulink版本之间的文件差异比人们通常所说的要小。我想了解有哪些信息和工具可用。 - Douglas B. Staple
3个回答

12
很少有公开可用的信息。以下是我找到的一点内容: MDLSLX是MathWorks专有的文件格式,用于存储Simulink模型。SLX是在Simulink R2012a中引入的,并在R2012b中成为默认文件格式。除了文件结构外,SLX和MDL文件的内容非常相似。例如,在两种格式之间,键值对似乎是相同的。人们经常说解析这些文件是个坏主意,因为它们可以在Simulink版本之间发生变化(请参见am304和我上面的评论),但我没有看到太多这方面的证据。

MDL格式似乎是MathWorks内部开发的。有一个Python的MDL解析器,但功能有限, 而且网站已于2014年5月关闭

SLX文件是一个包含一系列XML文件的压缩文件,其中大部分模型规格存储在simulink/blockdiagram.xml中。@am304从MathWorks网站中指出了这些信息:

SLX是符合开放式包装约定(OPC)互操作性标准的压缩包。SLX使用Unicode® UTF-8和其他国际格式以XML形式存储模型信息。将Simulink模型保存为SLX格式:
- 通常可以减小文件大小,与MDL相比。文件大小的减小取决于模型的情况。 - 解决了先前版本中加载和保存包含韩文和中文字符的MDL文件时出现的一些问题。 - 启用增量加载和保存。Simulink通过仅加载所需部分并仅保存修改后的部分来优化性能和内存使用。
以下是除文本中提到的参考资料外的几个参考资料:
如何将Simulink文件转换为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

5

更新(2015/04/02)

Java Simulink库的新版本具备完整的SLX格式支持。虽然文档没有明确说明,但源代码包含了解析的全部细节。

旧答案

正如rob所回答的那样,Java Simulink库支持Simulink的MDL文件格式,并且还可以解析Stateflow内容。该库是开源的,但唯一的文档就是源代码。

我们目前(截至2014年9月)正在开发SLX支持,预计在接下来的1到2个月内发布。如果您需要在此之前获得代码,请随时与我联系。

当使用该库时,可能会出现代码无法兼容新的Simulink版本的情况,因为文件格式没有文档记录,我们不得不进行反向工程以获取大部分信息。但是,我们目前正在积极更新该库以解决问题,而有了源代码,即使我们不在身边,你也有可能修复它。

附:我本人是上述库的开发人员。


我能否使用Simulink Java库从slx文件中获取元数据?我使用下面的MATLAB代码将元数据写入slx文件: h = load_system(pathToFile); set_param(h,'Metadata',properties) - Oleksiy Kovalchyk

4

这些文件格式有哪些信息可用?

MathWorks在R2007b中为MDL文件格式提供了一些文档

SLX文件是zip文件容器,其内部结构基于OOXMLOPC格式。SLX文件包含一个或多个XML文件,其内部结构类似于MDL文件,但以XML格式表示。此外,二进制资源(如图形)可能存储在单独的JPG文件中,而不像在MDL文件中直接嵌入并进行文本编码。

SLX和MDL都会随着新特性的添加而变化,但是可以预期SLX不太稳定,因为MathWorks正在重构SLX的内部文件结构。例如,在R2014b中,MathWorks开始将传统的单块blockdiagram.xml的一部分拆分成单独的文件,如stateflow.xml和graphicalInterface.xml。
有一些公开可用的库/ API用于解析Simulink,但我没有使用过它们,所以不确定它们的工作效果如何。
- Java的Simulink Library (前身为ConQAT) - MDL、SLX - TSMP - 超小型Simulink模型解析器 (.NET) - MDL - Simulink-Model-Parsing-Tools (Python) - MDL

如果以上方法都无法解决问题,一些商业工具可以直接解析MDL和SLX,而不依赖于MATLAB API。您可以考虑咨询一下某些商业可用Simulink工具中使用的解析器的许可证。

您还可以通过搜索Simulink解析器来寻找其他解决方案。


非常感谢。你写的内容与我的理解一致,并且进一步加深了我的认识。 - Douglas B. Staple

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接