Как установить значения ввода / вывода в устройстве ПЛК siemens?
Я создаю веб-API для локальной сети на платформе .net(C#). В этом случае пользователь может импортировать / экспортировать теги ввода-вывода из Excel или устанавливать их как статический массив строк. Я добавил (Siemens.Engineering.Hmi.dll), но все же он показывает ошибку времени компиляции не найдена.
Мы также подключились к TIAPortal, и он работает хорошо, единственными препятствиями являются импорт / экспорт тегов ввода-вывода или установка статических значений и HMISoftware.
Проект: веб-API(.Net Framework 4.6.1)
Портал Tia: v16.0
Тип лицензии: пробная
Пожалуйста, верните меня, если у кого-то есть идея или предложение. Было бы очень полезно.
2 ответа
Проблема, с которой вы столкнулись, заключается в том, что (скорее всего) вы не установили
copy local
свойство Siemens.Engineering.Hmi.dll, на которое имеется ссылка, равным false. Таким образом, зависимости указанного Siemens.Engineering.Hmi.dll не могут быть найдены. В качестве примечания: добавьте Siemens.Engineering.dll в качестве ссылки помимо Siemens.Engineering.Hmi.dll
Тогда для нелокальной сборки требуется
AssemblyResolving
. Самый простой способ сделать это - использовать файл App.config.
См. Эту тему на странице Siemens: support.industry.siemens.com
Вторая проблема, которую я вижу, - это доступ к тегам. Как вы наверняка знаете, существуют теги HMI и теги PLC. Доступ к ним возможен через соответствующий. Эти
DeviceItems
выставляйте разные. Вы можете получить доступ к
Services
сквозь
<YourEngineeringObject>.GetService<T>()
метод. В этом случае вам понадобится
SoftwareContainer
услуга.
Чтобы ознакомиться с моделью данных TIA Openness, ознакомьтесь с TIA Openness Explorer.
Кроме того, для более глубокого понимания работы с TIA Openness, пожалуйста, обратитесь к SIMATIC TIA Portal Openness: API для автоматизации инженерных рабочих процессов.
Решение, которое я импортирую теги ввода-вывода, - использовать файлы .xml.
Его преимущество заключается в том, что он может получать доступ и устанавливать свойства тегов ввода-вывода, такие как имя тега ввода-вывода, тип данных, имя внешнего, внешний доступ, внешний вид, внешний доступ, логический адрес, имя тега, комментарий.
Например .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, включая значение идентификатора. Например, первый идентификатор тега = 1, а второй идентификатор тега = 2. Значение идентификатора не может повторяться!
Например .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.
Если у вас есть какие-либо вопросы, пожалуйста, свяжитесь со мной.