Вложений: 6
PRG#33. Что такое методы, свойства, действия и переходы?
Вопрос: если нажать ПКМ на POU и выбрать команду Добавление объекта, то появляется возможность добавить в POU Действие, Метод, Переход и Свойство.
Что это и зачем это нужно? Это имеет отношение к объектно-ориентированному подходу (ООП)?
Ответ:
1.1 Действие позволяет выделить фрагмент POU в обособленный объект с собственным названием.
В других языках программирования аналогичные объекты называются процедурами (при этом действие является процедурой без параметров).
Преимущества использования процедур описаны в этой статье:
https://ru.wikipedia.org/wiki/%D0%9F...82%D0%B2%D0%B0
Например, вы замечаете, что в разных фрагментах вашего POU, реализующего машину состояний, вам приходится дублировать один и тот же код для возвращения на шаг ожидания команды и очистки используемых ресурсов.
В этом случае вы можете оформить его в виде действия с названием SwitchToIdle:
Вложение 60714
Теперь во всех фрагментах POU вы можете заменить повторяющие строки кода вызовом действия:
Код:
// ...
SwitchToIdle();
// ...
Если вам потребуется изменить этот код - то достаточно будет поменять его в действии, а не искать по всей программе.
Кроме того, действия являются неотъемлемой частью языка SFC - они используются для описания выполняемых на конкретном шаге команд:
Вложение 60715
Действие не является элементом ООП.
За исключением языка SFC - всегда предпочтительнее использовать метод, а не действие (его функциональность перекрывает функциональность действия).
Статьи из справки CODESYS:
https://help.codesys.com/webapp/_cds...rsion=3.5.17.0
https://help.codesys.com/webapp/_cds...rsion=3.5.17.0
1.2. Переход является аналогом действия, используемым в языке SFC для описания условий переходов между шагами (см. скриншот выше).
Это удобно для описания сложных условий, состоящих из нескольких строк кода - они бы загромождали блок-схему.
На блок-схеме переход отмечается заливкой правого верхнего угла соответствующего ему прямоугольника.
Справедливый вопрос - почему переход можно добавить к POU, который реализован не на языке SFC?
Ответ есть в баг-трекере CODESYS - это необходимо в тех случаях, когда ФБ на языке SFC, наследуемый от ФБ на другом языке, должен иметь доступ к условиям перехода своего базового ФБ.
Вложение 60716
Переход не является элементом ООП.
Статья из справки CODESYS: https://help.codesys.com/webapp/_cds...rsion=3.5.17.0
1.3. Метод представляет собой функцию, встраиваемую в ФБ и имеющую доступ к его переменным.
В отличие от действия - метод может иметь собственные входные, выходные и локальные переменные (а также константы).
Возвращаясь к примеру из п. 1.1 - предположим, после очистки ресурсов в зависимости от выполнения тех или иных условий нам требуется перейти на конкретный шаг машины состояний.
Код:
// как и функция - метод может иметь аргументы и возвращать значения
xIsStateSwitched := SwitchToState(eNewState := STATE.READ);
Метод может входить в состав интерфейса.
Метод является элементом ООП, но может успешно использоваться и в структурном программировании.
Статья из справки CODESYS: https://help.codesys.com/webapp/_cds...rsion=3.5.17.0
1.4. Свойство представляет собой переменную, для которой автоматически создаются методы чтения (Get) и записи (Set).
Это позволяет при чтении или записи переменной автоматически выполнить какой-либо фрагмент кода (например, провалидировать значение или отмасштабировать его).
Пример: пусть у нас есть ФБ TEST_FB с локальной переменной iSetpoint. В рамках нашей задачи представим, что ее значение должно принадлежать диапазону -10...10.
Вложение 60711
Добавим свойство Setpoint и в методе записи обеспечим ограничение значений переменной с помощью оператора LIMIT.
Вложение 60712
Таким образом, при записи значения в свойство из кода программы произойдет автоматический вызов метода Set и обработанное (ограниченное оператором LIMIT) значение свойства будет записано в переменную iSetpoint.
Доступ к свойству не требует вызова экземпляра ФБ:
Вложение 60713
Cвойство является элементом ООП.
Статьи из справки CODESYS: https://help.codesys.com/webapp/_cds...rsion=3.5.17.0
PRG#34. Где прочитать об использовании объектно-ориентированного подхода в CODESYS?
Вопрос: где прочитать об использовании объектно-ориентированного подхода (ООП) в CODESYS V3.5?
Ответ: объектно-ориентированный подход (ООП) - это устоявшаяся и хорошая известная методология программирования, которая не является какой-то уникальной чертой CODESYS V3.5.
Если вы ранее не использовали ООП - то изучать его на примере CODESYS будет не самой лучшей идеей из-за крайне ограниченного количества методических материалов (особенно для начинающих).
Желательно ознакомиться с концепцией ООП на примере какого-то enterprise-языка - например, Java (реализация ООП в CODESYS вдохновлена Java, используются те же самые ключевые слова - interface, extends, implements, super, this).
В интернете доступно множество книг, статей, обучающих курсов и учебных видео по этому вопросу.
Применение ООП неразрывно связано с системным подходом к проектированию ПО.
Чтобы научиться оценивать, продуктивно ли будет использовать ООП в рамках вашей конкретной задачи, и применять объектно-ориентированный дизайн при проектировании ПО - необходимо изучить соответствующую литературу (например - см. Грэди Буч. Объектно-ориентированный анализ и проектирование).
С терминологический точки зрения - говорить о примении ООП в CODESYS можно только при наличии осмысленного использования в вашем приложении наследования и полиморфизма
(абстракция и инкапсуляция и так являются неотъемлемой частью продуманного приложения для ПЛК - даже созданного в типичной для них парадигме структурного программирования).
Список материалов по использованию ООП при программировании ПЛК на языках стандарта МЭК 61131-3:
1. Wolfgang Horn, Michael Braun. Object-oriented Programming in SIMOTION
Это единственная известная мне книга, системно рассматривающая вопрос использования ООП для программирования ПЛК и рассчитанная в том числе на начинающих пользователей.
2. Обучающие материалы PLCopen. Руководство по применению объектно-ориентированного подхода
3. Швецов М. Л. CoDeSys V3 и объектно-ориентированные расширения языков МЭК 61131-3. Стратегическая идея или насущная необходимость?
4. Петров И. В. Объектно-ориентированное программирование CDS V3
5. Швецов М. Л. Эффективное применение ООП CODESYS на практике
6. Кузьмина Н. С. Объектно-ориентированное программирование в стандарте МЭК 61131-3
7. Хесс Д. Объектно-ориентированные расширения МЭК 61131-3
8. CoDeSys. Object-Oriented Controller Programming
9. OOP in CODESYS (часть 1, часть 2, часть 3)
10. Статьи из блога Стефана Хеннекена
11. Информация из онлайн-справки CODESYS
12. Информация из онлайн-справки Beckhoff
13. Вебинар по ООП от Beckhoff
14. Примеры использования ООП в CODESYS:
Вложений: 1
VISU#30. Как сделать всплывающее окно при появлении тревог?
Вопрос: можно ли сделать так, чтобы при возникновении тревог на основном экране визуализации появлялось всплывающее окно с уведомлением о возникшей тревоге?
Ответ: см. пример.
Вложение 60856
Вложений: 1
PRG#35. Как определить объем используемой/свободной RETAIN-памяти?
Вопрос: как определить объем используемой/свободной RETAIN-памяти?
Ответ: после выполнения команды Компиляция - Генерировать код на панели сообщений компиляции отображается информация об общей и свободной RETAIN-памяти
(параметр Наибольший непрерывный промежуток памяти). Соответственно, определить размер используемой в проекте RETAIN-памяти можно путем вычитания объема свободной RETAIN-памяти из общей.
Вложение 60930
PRG#36. Как перенести проект из старой версии CODESYS в V3.5 SP17 Patch 3?
Вопрос: наши проекты созданы в старых версиях CODESYS (V3.5 SP16 Patch 3, V3.5 SP14 Patch 3 и т.д.).
Как перенести их в версию V3.5 SP17 Patch 3?
Ответ: см. видео.
Вложений: 1
PRG#37. Как перенести установленные плагины с одного ПК на другой?
Вопрос: я использую CODESYS V3.5 SP17 Patch 3. С помощью CODESYS Installer обновил версии некоторых плагинов.
Как теперь перенести их на другой ПК, на котором нет интернета/нет возможности использовать VPN и т.д.?
Ответ: при загрузке плагина через CODESYS Installer его пакет (.package) сохраняется в директории C:\Users\<ваш пользователь>\AppData\Local\Temp\APInstaller\<дата загрузки плагина>.
Вы можете перенести эти пакеты на другой ПК и установить их через CODESYS Installer.
Вложение 61481
Вложений: 6
OTHER#12. Как отключить диагностику дискретных выходов в ПЛК210-03?
Вопрос: в проекте используется контроллер ПЛК210-03. Дискретные выходы контроллера не будут использоваться. На контроллере они светятся красным.
С точки зрения заказчика красные светодиоды - это плохо (авария и т.д.). Как их отключить и убрать красное свечение? Питание на выходы подано согласно схеме подключения.
Ответ: цвет индикаторов выходов в выключенном состоянии определяется по следующей схеме:
Вложение 61647
Общий принцип диагностики выходов и изменения цвета индикаторов выходов следующий:
Вложение 61657
Если в проекте выходы не будут использоваться (то есть к ним не будет подключена нагрузка), и при этом красное свечение индикаторов выходов нужно отключить, то:
1. Подайте питание на выходы согласно схеме подключения из РЭ.
Вложение 61655 Вложение 61656
2. Отключите диагностику быстрых дискретных выходов (FDO) в среде CODESYS:
в узле LeftSide на вкладке Конфигурация в параметре Режим включения дискретных выходов присвойте всем выходам значение TRUE.
Это переключит их в режим Верхний и нижний ключ, в котором диагностика выходов отключена.
Вложение 61648
3. Отключите диагностику обычных дискретных выходов (DO) в среде CODESYS:
в узле RightSide на вкладке Конфигурация в параметре Диагностика работы выходов и обрыва нагрузки присвойте всем выходам значение FALSE.
Вложение 61649
VISU#31. Медленное применение настроек тренда в плагине визуализации 4.2.0.0
Вопрос: используем CODESYS V3.5 SP17 Patch 3 с плагином визуализации 4.2.0.0.
Для элемента Тренд настроено управление видимостью перьев и диапазоном по оси Y - оператор в визуализации выбирает конкретное перо, после чего оно становится видимым, все остальные перья скрываются и устанавливается подходящий диапазон по оси Y. Но применение этих настроек происходит только спустя 10...30 секунд после выбора пера. С чем может быть связана эта проблема?
Ответ: в плагине визуализации 4.2.0.0 изменился механизм обновления трендов.
Теперь на него влияет переменная VisuElems.VisuElemBase.Visu_Globals.g_VisuTrendWit hTimeSelectorUpdateBehaviour; ее значение по умолчанию - 100.
(из-за особенностей нашего форума в имени переменной отображается лишний пробел)
Перерисовка тренда происходит с периодом = (время элемента выбора интервала дат) / VisuElems.VisuElemBase.Visu_Globals.g_VisuTrendWit hTimeSelectorUpdateBehaviour.
Вот так работает клиентский проект со значением этой переменной по умолчанию = 100:
https://ftp.owen.ru/CoDeSys3/95_Inte...aviour_100.mp4
А вот что будет, если присвоить ей значение 0 (не обязательно делать это циклически - достаточно присвоить переменной 0 в первом цикле контроллера):
https://ftp.owen.ru/CoDeSys3/95_Inte...ehaviour_0.mp4
При значении 0 обновление тренда происходит максимально быстро - как в прошлых версиях плагина визуализации.
Соответственно, такое поведение приводит к увеличению нагрузки на контроллер.
Вложений: 1
OTHER#13. Как определить, можно ли перепрошить ПЛК2xx на прошивку 2.4.xxxx.xxxx?
Вопрос: В ReadMe для прошивки 2.4.xxxx.xxxx написано следующее:
Цитата:
Для ПЛК210:
Перепрошивка с версии 1.2.xxxx.xxxx / 1.3.xxxx.xxxx на версию 2.4.xxxx.xxxx поддерживается только для устройств, выпущенных начиная с июля 2020 года (с 512 Мб flash-памяти).
Для ПЛК200:
Перепрошивка с версии 1.2.xxxx.xxxx / 1.3.xxxx.xxxx на версию 2.4.xxxx.xxxx поддерживается только для устройств, выпущенных начиная с марта 2021 года (с 512 Мб flash-памяти).
Как определить дату производства ПЛК и объем его flash-памяти?
Ответ: дату производства ПЛК можно определить по заводскому номеру.
В его 7-8 разрядах указан год производства прибора, а в 9-10 - месяц.
Пример заводского номера: 103026210832371658
Этот ПЛК произведен в августе 2021 года (08.21).
Но лучше ориентироваться на объем flash-памяти.
Перезагрузите ПЛК, откройте web-конфигуратор, перейдите на вкладку Состояние/Журналы и выполните поиск по слову nand.
В выводе отобразятся сообщения, в которых указан объем flash-памяти контроллера.
Вложение 62426
Вложений: 1
PRG#38. Как использовать блок ПИД для управления охладителем?
Вопрос: есть проект, в котором используется ФБ PID из библиотеки Util.
Выход данного регулятора предназначен для управления нагревателем.
Подскажите, что нужно сделать, если требуется управлять охладителем?
Ответ: умножьте коэффициент пропорциональности (значение на входе KP регулятора) на -1.
Вложение 62728