我正在为.net框架(C#)中的本地网络创建Web。在这种情况下,用户可以从excel导入/导出IO标记,或者将它们设置为静态字符串数组。我已经添加了(Siemens.Engineering.Hmi.dll),但是仍然显示了一个未找到的编译时错误。
我们还连接到TIAPortal,它工作得很好,唯一的障碍是I/O标记、导入/导出或设置静态值和HMISoftware。
如果有人有任何想法或建议,请回复我。会很有见地的。
发布于 2021-06-15 16:43:25
您所遇到的问题是(很可能)您没有将引用的Siemens.Engineering.Hmi.dll的Siemens.Engineering.Hmi.dll属性设置为false。因此,无法找到引用的Siemens.Engineering.Hmi.dll的依赖项。备注:添加Siemens.Engineering.dll作为参考,除了 Siemens.Engineering.Hmi.dll
拥有一个非本地程序集则需要AssemblyResolving。最简单的方法是使用App.config文件。
请参阅西门子有关此主题的网页:support.industry.siemens.com
我看到的第二个问题是标签的访问。如您所知,有HMI标签和PLC标签。可以通过各自的DeviceItems访问它们。这些DeviceItems公开了不同的Services。您可以通过Services方法访问<YourEngineeringObject>.GetService<T>()。在这种情况下,您将需要SoftwareContainer服务。
要熟悉TIA开放的数据模型,请看一下TIA开放探索者。
此外,要加深您对使用TIA开放的理解,请参阅SIMATIC门户开放:用于工程工作流自动化的API。
发布于 2021-06-26 23:47:44
导入IO标记的解决方案是使用.xml文件
它的优点是可以访问和设置IO标记的属性,例如IO标签的名称、数据类型名称、外部访问性、外部可见性、外部可写性、逻辑地址、tagName、注释。
例如,.xml
<?xml version="1.0" encoding="utf-8"?>
<Document>
<Engineering version="V16" />
<SW.Tags.PlcTagTable ID="0">
<AttributeList>
<Name>IO Table</Name>
</AttributeList>
<ObjectList>
<SW.Tags.PlcTag ID="1" CompositionName="Tags">
<AttributeList>
<DataTypeName>Bool</DataTypeName>
<ExternalAccessible>true</ExternalAccessible>
<ExternalVisible>true</ExternalVisible>
<ExternalWritable>true</ExternalWritable>
<LogicalAddress>%I0.0</LogicalAddress>
<Name>Tag</Name>
</AttributeList>
<ObjectList>
<MultilingualText ID="2" CompositionName="Comment">
<ObjectList>
<MultilingualTextItem ID="3" CompositionName="Items">
<AttributeList>
<Culture>en-US</Culture>
<Text>Tag</Text>
</AttributeList>
</MultilingualTextItem>
</ObjectList>
</MultilingualText>
</ObjectList>
</SW.Tags.PlcTag>
</ObjectList>
</SW.Tags.PlcTagTable>
</Document>您只需要修改标记属性。XML,包括ID值。例如,第一个标记ID = 1,第二个标记ID =2.id的值是不可重复的!
例如,.cs
var fileInfo = new FileInfo(@"IO MAP.xml");
SoftwareContainer softwareContainer = Project.Devices[0].DeviceItems[1].GetService<SoftwareContainer>();
Software softwareBase = softwareContainer.Software;
PlcSoftware plcSoftware = softwareBase as PlcSoftware;
PlcTagTableGroup PlcTagTableGroup = plcSoftware.TagTableGroup;
PlcTagTableGroup.TagTables.Import(fileInfo, ImportOptions.Override);您只需要修改SoftwareContainer的目标,这取决于您使用的可编程控制器模型,在s7-1516的情况下。
如果您有任何问题,请与我联系。
https://stackoverflow.com/questions/67225040
复制相似问题