如何在西门子 PLC 设备中设置 I/O 值?

问题描述

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

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

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

  • Tia 门户:v16.0

  • 许可类型:试用

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

解决方法

您遇到的问题是(很可能)您没有将引用的 Siemens.Engineering.Hmi.dll 的 copy local 属性设置为 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 Openness 的数据模型,请查看 TIA Openness Explorer

此外,为了加深您对与 TIA Openness 合作的理解,请参阅SIMATIC TIA Portal Openness: API for automation of engineering workflows

,

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

它的优点是可以访问和设置IO标签的属性,如IO标签表的名称、数据类型名称、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 为例。

如果您有任何问题,请联系我。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...