Определение пользовательских массивов в Native Function Blocks: Практическое руководство
Зачем этот пост?
На самом деле, этот пост был создан потому, что когда я разрабатывал Native Function Block, я обнаружил, что невозможно использовать массив пользовательских структур. Иными словами, жаль, что официальный GitHub PLCnext не имеет руководств этого типа. Если вы используете C#-учебник для создания пользовательского массива в Native Function Block, вы обнаружите, что не можете скомпилировать его успешно, или установка значений массива в PLCnext Engineer не дает реакции. Пример в случае просто связан с базой данных, вот и всё.
Описание демо
- Следующий пример использует Native Function Block для создания пользовательского интерфейса Array с инструментом PLCncli toolchain
- Массив состоит из 21 элемента, каждый из которых является структурой. Структура содержит два IecString80 и перечисление, как показано на следующей диаграмме.
https://github.com/Leeable/UserDefineArray_NativeFB/tree/Master
Требования
- Убедитесь, что версия ToolChain 23.0 или выше. Этот пример использует ToolChain 23.6 для демонстрации.
- Знакомы с базовым процессом создания Native Function Block.
- Visual Studio 2019 или 2022 с плагинами ToolChain add-in
$ plcncli --version plcncli 23.6.0.1450 (23.6.0.1450)
ШАГ 1
- Создайте новый проект в Visual Studio, выберите тип проекта «Shared Native Function Block» и назовите проект «ArrayTest».
- Затем в проекте ArrayTest в Visual Studio создайте новый Native Function Block с именем «ArrayCplus».
ШАГ 2
Скопируйте этот код в ArrayCplus.cs
Из-за некоторых проблем с отображением при прямом включении исходного кода здесь, такие как & и >, я предоставил ссылку вместо этого.
например, & будет закодирован как
&в этом html.....
ArrayCplus.cs
ШАГ 3
Откройте терминал в папке ArrayTestCpp и введите следующее.
$ plcncli generate code
После генерации кода найдите файлы ArrayTest-cli32.h и ArrayTest-cli64.h в директории src и найдите места, где указано #error.
Нам нужно удалить комментарии и улучшить код. Нажмите, чтобы перейти к InArrayFB-cli.cpp и изменить реализацию.
IntArrayFB-cli.cpp
ШАГ 4
В ArrayCplus.cpp введите следующий код. Содержимое, содержащее строки, должно инициализироваться в процессе, а не в области Init; инициализация в области Init не сработает, что приведет к невозможности записи значений в sName и sAttribute через Engineer.
ArrayCplus-cli.cpp
ШАГ 5
Откройте терминал в папке ArrayTestCpp и введите следующее.
$ plcncli build all $ plcncli deploy
ШАГ 6
Откройте PLCnext Engineer и загрузите ArrayTest.pcwlx, добавьте переменную в ArrayTest с именем arr
Теперь это работает
Вопросы
- Хотя этот метод работает на практике, почему необходимо инициализировать содержимое, содержащее IecString или пользовательские строки, в void PInvoke ArrayTest::ArrayCplus::Process() вместо void PInvoke ArrayTest::ArrayCplus::Init()? не работает, если я помещаю код в void PInvoke ArrayTest::ArrayCplus::Init().
- Ясно, что на GitHub нет соответствующего учебника по пользовательским массивам для Native Function Blocks. Может кто-то дополнить и улучшить его? (способ C# пользовательского массива не работает в Native Function Block)
- Последний момент, который также сбивает с толку: почему, независимо от того, это IecString, пользовательская строка или IecStringEx*, если они содержат строки, они должны быть в форме 【InOut】 в CSharp коде при использовании в качестве Native Function Block?
Примечание:
Блог Makers демонстрирует приложения и пользовательские истории членов сообщества, которые не тестировались и не проверялись Phoenix Contact. Используйте их на свой страх и риск.
Промышленные технологии
- Программа Swanton Welding на 13abc: расширение возможностей старшеклассников через практическое обучение
- Лидеры производства выступают за восстанавливающие перерывы для навигации пандемическими вызовами
- Многоразовая 3D-печатаемая маска Fast Radius — DIY дизайн
- Искусственные нейронные сети повышают производительность беспроводной связи
- Как дизайнерам использовать текущие тренды в литье под давлением
- Лучшее MRO 2019: Топ-10 — Руководства по зарплатам, нарушения OSHA и ключевые инсайты отрасли
- Трансформация цепей поставок: раскрытие ценности через выполнение заказов и цифровую инновацию
- Промышленная автоматизация: преодоление вызовов с проверенными решениями и инструментами
- Снижение рисков при конвертации стандартных таблиц допусков в метрические
- Системы исполнения производства (MES): ключ к контролю производства в реальном времени