Определение пользовательских массивов в собственных функциональных блоках – Практическое руководство
Почему этот пост?
Фактически, этот пост был создан потому, что, когда я разрабатывал собственный функциональный блок, я обнаружил, что невозможно использовать массив пользовательских структур. Или, другими словами, жаль, что на официальном GitHub PLCnext нет обучающих программ такого типа. Если вы воспользуетесь учебным пособием по C# для создания пользовательского массива в собственном функциональном блоке, вы обнаружите, что не можете его успешно скомпилировать или установка значений массива в PLCnext Engineer не дает ответа. Просто пример в данном случае связан с базой данных, вот и все.
Описание демо
- В следующем примере используется собственный функциональный блок для создания пользовательского интерфейса массива с помощью цепочки инструментов PLCncli.
- Массив состоит из 21 элемента, каждый из которых является структурой. Структура содержит две строки IecString80 и перечисление, как показано на следующей схеме.
https://github.com/Leeable/UserDefineArray_NativeFB/tree/Master
Требования
- Убедитесь, что версия ToolChain 23.0 или выше. В этом примере для демонстрационных целей используется ToolChain 23.6.
- Знаете основной процесс создания собственного функционального блока.
- Visual Studio 2019 или 2022 с плагинами надстроек ToolChain
$ plcncli --version
plcncli 23.6.0.1450 (23.6.0.1450)
ШАГ1
- Создайте новый проект с помощью Visual Studio, выберите тип проекта «Общий собственный функциональный блок» и назовите проект «ArrayTest».
- Затем в проекте ArrayTest в Visual Studio создайте новый собственный функциональный блок с именем «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 нет соответствующего руководства по пользовательским массивам для собственных функциональных блоков. Может ли кто-нибудь дополнить и улучшить его? (массив Csharp Userdefine не работает в собственном функциональном блоке)
- И последний момент, который меня также смущает:почему, независимо от того, IecString ли это, пользовательская строка или IecStringEx*, если они содержат строки, они должны быть в форме 【InOut 】в коде CSharp при использовании в качестве собственного функционального блока?
Примечание.
В блоге Makers представлены приложения и пользовательские истории членов сообщества, которые не тестировались и не проверялись Phoenix Contact. Используйте их на свой страх и риск.
Промышленные технологии
- Три главных приоритета для производственных компаний в 2019 году
- Двенадцать постпандемических тенденций в цепочке поставок на 2021 год
- Компьютер на печатной плате:применение в различных отраслях
- Промышленный IoT — это необходимость, а не «хорошо иметь»
- Минимизация риска проблем с безопасностью пищевых продуктов в перерабатывающей промышленности
- Все, что вам нужно знать о допусках обработки на станках с ЧПУ
- Роль рабочих инструкций в компании
- Безопасный отбор проб для производства хладагента
- Как сайт, торгующий предметами роскоши, направляет прибыль на благое дело
- Как сканеры штрих-кода влияют на расстояние сканирования