所以我致力于自动化开发用XML表示的PLC代码,为了做到这一点,我已经导出了FB块及其网络,以查看代码的样子,这样我就可以得到XML树的概念,但是有一个标签称为<SW.Blocks。CompileUnit>ID ="DD">CompositionName ="CompileUnits"比;我无法弄清楚编译器如何分配值,我试图寻找,如果它是HEX,但我没有看到的关系。下一个赋值是<SW.Blocks。CompileUnit>ID ="E6">CompositionName ="CompileUnits"比;如能对此事有所帮助,我将不胜感激。
不要太担心id !这个xml文件中的所有id都必须是唯一的。它们不需要按顺序排列。所以,当你生成代码时,使用一个简单的计数器来确保id是唯一的,就是这样。
编译器根据自己内部逻辑的智慧分配CompileUnit id,这在唯一值得考虑的应用程序中并不重要——生成要导入的块,正如IchEben正确地指出的那样。
编译单元ID必须是数字(十六进制或十进制),唯一且可能是增量的,正如西门子示例c#项目"OpennessExcelSwGenerator"中的xslt定义,SIOS ID 109770550(使用DeepL翻译的注释):
<!--Variable "pos" counts the number of networks to get a consecutive unique ID for each network within this document-->
<xsl:variable name="pos" select="position()"/>
<!--Variable "pos" used as ID-->
<SW.Blocks.CompileUnit ID="{$pos}" CompositionName="CompileUnits">
...
除此之外,文档很少——我自己也搜索过几次。如果我遗漏了什么,你可以试着查看SIOS:西门子工业支持在线
TIA编译器生成这些id时,您可以在SIOS上提出支持请求。我猜他们会把这个问题提给开发团队,但你可能会因为一些他们认为你不需要知道的事情而惹恼他们。