2

我正在为 .net 框架(C#)中的本地网络创建一个 Web API。在该用户可以从 excel 导入/导出 IO 标签或将它们设置为静态字符串数组。我添加了(Siemens.Engineering.Hmi.dll),但仍然显示未找到编译时错误。

我们还连接到 TIAPortal,它运行良好,唯一的障碍是 I/O 标签导入/导出或设置静态值和 HMI 软件。

  • 项目:Web API(.Net Framework 4.6.1)

  • 蒂亚门户:v16.0

  • 许可证类型:试用

如果有人有想法或任何建议,请回复我。这将是高度赞赏。

4

2 回答 2

1

您遇到的问题是(很可能)您没有copy local将引用的 Siemens.Engineering.Hmi.dll 的属性设置为 false。因此,无法找到引用的 Siemens.Engineering.Hmi.dll 的依赖关系。备注:除了Siemens.Engineering.Hmi.dll之外,添加 Siemens.Engineering.dll 作为参考

拥有一个非本地程序集则需要AssemblyResolving. 最简单的方法是使用 App.config 文件。

请参阅 Siemens 关于此主题的此页面: support.industry.siemens.com

我看到的第二个问题是标签的访问。您肯定知道,有 HMI 标签和 PLC 标签。可以通过各自的DeviceItems. 这些DeviceItems暴露不同Services。您可以Services通过该<YourEngineeringObject>.GetService<T>()方法访问。在这种情况下,您将需要该SoftwareContainer服务。

要熟悉 TIA Openness 的数据模型,请查看TIA Openness Explorer

此外,为了加深您对使用 TIA Openness 的理解,请参阅SIMATIC TIA Portal Openness:用于工程工作流自动化的 API

于 2021-06-15T16:43:25.960 回答
0

我正在导入 IO 标签的解决方案是使用 .xml 文件

它的优点是可以访问和设置IO标签的属性,比如IO标签表的名字,datatypename,externalaccessible,externalvisible,externalwritable,logicaladdress,tagName,comment。

例如 .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中的tags属性,包括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 的目标,这取决于您使用的 PLC 型号,以 s7-1516 为例。

如果您有任何问题,请与我联系。</p>

于 2021-06-26T23:47:44.910 回答