Проекты Codesys
Вряд ли можно вспомнить что-либо действительно яркое в области конструктивных и схемотехнических решений, появившихся в ПЛК в последнее время. Несомненно, увеличивается быстродействие процессоров, упрощается монтаж и повышается надежность промышленных контроллеров, радикально уменьшились их вес и габариты. К слову, согласно стандарту МЭК 61131-1 ПЛК весом более 3 кг должен быть оборудован ручкой для переноски.
Сейчас это требование уже вызывает лишь легкую улыбку. Основная конкуренция ПЛК сосредоточена сейчас в области прикладного программного обеспечения. Инженер-программист ПЛК - это в большей степени инженер, чем программист. Поэтому производители промышленных контроллеров не жалеют сил на разработку мощных и одновременно простых в применении средств программирования. С помощью такого прикладного программного обеспечения можно не только написать программу и загрузить ее в ПЛК, но и нарисовать мнемосхему или графически изобразить алгоритм управления перемещением. Там, где раньше использовались прерывания и ассемблерные вставки, теперь можно использовать стандартные функциональные блоки, что упростит написание программы ПЛК.
Возможно ли сохранять проект не единственным монолитным файлом, а в виде комплекта. Цель документа. Cпособы работы с Modbus в CODESYS 3.5. Добавление библиотеки в проект CODESYS. Aug 5, 2012 - ПО CoDeSys располагает несколькими инструментами отладки проекта. Их краткие описания приведены ниже. В режиме отладки ПЛК работает существенно медленнее. Из-за этого возможны прерывания связи по таймауту. Поэтому при отладке следует перенастроить таймауты в окне. Мы создали новый, в прямом смысле слова, пустой проект. CoDeSys всегда выполняет началь.
Однако за простотой использования прикладного программного обеспечения скрываются сложнейшие программные технологии. Немногие производители ПЛК имеют собственное прикладное программное обеспечение, такое как например,. В 1990-х годах компания 3S - Smart Software Solutions, выпустила на рынок программное обеспечение CoDeSys, соответствующие для программирования промышленных контроллеров. Привлекателен этот программный пакет был тем, что среда программирования распространялась бесплатно. В настоящее время CoDeSys значительно перерос функции инструмента МЭК-программирования.
Помимо традиционных интегрированных редакторов, отладчика и компилятора, в его состав входят конфигуратор для ПЛК и промышленных сетей, встроенный редактор для создания мнемосхем, OPC и DDE серверы, сервер для отладки(ENI), дополнительные библиотеки и редакторы SoftMotion, модуль SoftPLC для реализации жёсткого реального времени на операционных системах Windows XP/NT (SP, RTE) и др. Многие производители промышленных контроллеров предлагают CoDeSys как основной инструмент программирования для своих ПЛК: ABB, Beckhoff, Kontron, Eaton, WAGO, ОВЕН и др. Благодаря встроенным средствам эмуляции, отсутствию лицензионных ограничений на среду разработки и подробной документации CoDeSys исключительно популярен также в учебных лабораториях. Разработку CoDeSys версии 3.0 компания 3S начала с января 2003 г. Для обеспечения легкого перехода от предыдущей платформы разработчики CoDeSys 3.0 руководствовались следующими критериями:. проекты CoDeSys старых версий должны загружаться и исполняться без каких- либо потерь;. новая система должна быть максимально простой в освоении и использовании;.
возможность полноценного применения инструментов не только для высокопроизводительных, но и для экономичных ПЛК (на 16-разрядных процессорах, с 64 кбайт оперативной и 64 кбайт флэш-памяти). CoDeSys версии 3.0 реализует большое количество интересных новшеств. Например, возможность «сворачивать» в одну строку отображение сложных конструкций в языке ST (IF ENDIF, VAR ENDVAR и т.д.), мониторинг промежуточных значений в выражениях, МЭК-функции с переменным числом параметров и многое другое. Однако из всех новшеств стоит выделить 5 ключевых:. объектно-ориентированные расширения МЭК;. конфигурирование промышленных сетей;. профили версий;.
программирование контроллеров безопасности;. единая платформа автоматизации. Подавляющее большинство серьёзных программных проектов для ПК реализуется сегодня с помощью объектно-ориентированных языков.
Хотя поначалу некоторые программисты скептически относились к объектно-ориентированному программированию (ООП), уменьшение сроков разработки и простота повторного использования теперь уже никем не оспариваются. В CoDeSys 3.0 полноценно реализованы фундаментальные особенности объектно-ориентированного программирования: классы, интерфейсы, наследование, полиморфизм и динамическое связывание. Компания 3S расширила без его изменения, введя дополнительный набор ключевых слов. Конечно же, ООП — это не стандартное расширение. Но дело упрощается тем, что в стандарте уже заложен фундамент объекта. Это функциональный блок.
Дооснащение функциональных блоков всеми свойствами объекта выглядит как абсолютно естественное их развитие. Новые ключевые слова построены на основе языка программирования Java. Таким образом, знакомые с ООП программисты не встретят никаких затруднений при работе в CoDeSys.
В версии 3.0 появилась возможность одновременной работы с несколькими ПЛК, объединенных в промышленной сети и собранными в одном проекте. Из-за того, что промышленные контроллеры, входящие в сегмент сети могут быть от различных производителей, то конфигурирование специфических функций ПЛК предельно упрощена. Также интересным нововведением является возможность выполнения нескольких разных приложений и нескольких экземпляров одного приложения (клонов) в одном устройстве.
Помимо этого, конфигуратор промышленной сети позволяет теперь настраивать не только интеллектуальные устройства, но и дает возможность для параметрирования пассивных элементов, таких как энкодеры или исполнительные механизмы. Каждому инженеру АСУ ТП, занимающемуся обслуживанием, хорошо знаком следующий сценарий: незначительный ремонт оборудования или модернизация технологии приводят к необходимости коррекции программы ПЛК. Исходный проект сохранился, но для его правки желательно использовать именно ту версию программного обеспечения, в которой он был создан.
В результате на программаторе появляется набор дистрибутивов разных версий одного и того же программного обеспечения, регулярно теряющихся и периодически переустанавливаемых. В CoDeSys версии 3.0 эта проблема решена. Новые версии и обновления устанавливаются не поверх, а рядом с существующими версиями.
Менеджер компонентов обеспечивает сохранение и обновление соответствующих версий всех компонентов системы. Каждая инсталляция имеет собственный профиль. По умолчанию всегда используется самый свежий профиль, но есть и возможность выбрать любой необходимый. Текущий профиль сохраняется в проекте.
При повторном его открытии система запрашивает разрешение на использование нового профиля. В противном случае используются те же инструменты, что и при предыдущем редактировании и компиляции проекта. CoDeSys 3.0 включает инструменты создания систем безопасности на ПЛК. В их состав входят специализированный редактор, соответствующий компилятор и система исполнения.
Данные компоненты проходят сертификацию на соответствие стандарту МЭК 61508, SIL 3. Контроллер безопасности и стандартный ПЛК могут использовать одну и ту же аппаратную платформу и обмениваться данными посредством PROFI-Safe. Применение CoDeSys 3.0 не только удешевит разработку, но и упростит сертификацию систем безопасности. Стандартная проблема, с которой сталкиваются OEM-производители промышленных контроллеров, использующие универсальные пакеты прикладного программирования, - это интеграция в систему собственных инструментов, таких как модули низкоуровневого аппаратного конфигурирования, модули обновления системного программного обеспечения, средства поддержки собственных промышленных сетей и др. Обычно такие инструменты поставляются отдельным программным обеспечением. Понятие же программной платформы подразумевает возможность интеграции разнородных программных инструментов, необходимых на всех стадиях взаимодействия с промышленным контроллером.
Проекты Codesys
Модульная структура CoDeSys 3.0 позволяет собрать и предложить конечному пользователю расширяемую программную среду, включающую все необходимые ему инструменты. CoDeSys 3.0 легко расширяется внешними компонентами.
Все системные функции для реализации такой интеграции документированы и снабжены шаблонами, позволяющими опытному пользователю самостоятельно расширять её, создавая собственные компоненты, обеспеченные защитой авторских прав. Как производители ПЛК, так и конечные пользователи получают возможность «собрать» на программной платформе CoDeSys собственный модуль, включающий любые специфические для их задач компоненты.
Пользуйтесь реальностью процессов Одно из фундаментальных отличий от классического программирования - это обычно значительно меньший уровень абстракции. Алгоритмы определяются технологией процесса, который в свою очередь часто опирается на здравый смысл и простую логику. Об этом часто забывают увлекаясь программированием ради программирования. Не путайте причины и следствия Например, пусть при падении давления нужно выключать насос, а при выключенном насосе какой-то клапан должен быть закрыт; предположим, никаких иных условий выключения и закрытия - нет. Ошибочно при этом (даже якобы в целях оптимизации кода) закрывать клапан при падении давления, т.к. Алгоритм закрытия клапана строго привязан именно к состоянию насоса. При удлинении или изменении следственных цепочек это может привести к серьезным ошибкам в процессе или сложностям в модификации кода.
Готовые Проекты Codesys
Настройка среды CODESYS 2.3 Некоторые настройки 'по умолчанию' в CODESYS удивляют. Например, эта среда - единственная из виденных мной, в которой шрифт не моноширинный, т.е. Символы в нем имеют разную ширину.
Сразу же после установки среды заходите в Проект Опции Редактор Шрифт и выбирайте Consolas (код на всех скриншотах) или хотя бы Courier New. После этого отмените автообъявление (штука, появляющаяся когда вы вводите незнакомый Кодесису набор символов), этот адский источник всплывающих окон, которыми так любит радовать эта среда. В настройках 'Рабочего стола' уберите лишние галочки и уменьшите таймауты связи до 1000 мс - это сильно упростит вам жизнь, поверьте. Чтобы перепроверить правильность кода - после каждого изменения жмите клавишу F11 для компиляции кода. После нажатия в нижней части экрана высветятся сообщения о текущих ошибках или их отсутствии. Чтобы скрыть лишнюю плашку с этими сообщениями - нажмите SHIFT+ESC. Не стремитесь использовать чужой код Вторичное использование чужого кода в классическом программировании - норма и необходимость, обусловленная множеством причин.
В АСУ ТП же, по моему мнению, почти нет необходимости использовать сторонний код. Я не считаю себя профессионалом и не писал особо сложных программ, но для тех что писал мне вполне хватало стандартных библиотек Util.lib и Standart.lib. Те же библиотеки Oscat ( + ) шикарны и всеохватывающи, но в них нет ничего сверхестественного и, мне кажется, лучше самому писать аналогичные функции.
А на тот код, который обычно выкладывают на форумах, лучше вообще не смотреть. Даже с тем, что я выкладываю в блоге лучше просто ознакамливаться, а не использовать. Пишите свои алгоритмы и как можно больше) Примеры правильного кода внутри библиотек Чтобы понять как должен выглядеть грамотный код и узнать некоторые программистские приёмчки не нужно далеко ходить. Открывайте Кодесисом библиотеки Util.lib и Oscat.lib как обычные проекты и впитывайте мудрость строк. NB Может я и негодяй, но с помощью вы можете взломать запароленные библиотеки. Не повторяйте код Это самый распространенный косяк у неопытных программистов независимо от платформы и языка программирования.
Видите дублированный код - выносите его в отдельную функцию или функциональный блок, и/или же переводите переменные в элементы массивов и прогоняйте в цикле. Предыдущее предложение вам может быть непонятно, но подробности можно. На скриншоте код, обрабатывающий данные с Danfoss.
Переменные типа CWS1FREQ созданы в в разделе. Слева представлена первая версия кода где каждый ПЧ представлен отдельным куском из восьми строк; код в каждом куске различается только данными, а логика одинакова. Справа оптимизированная версия - логика вынесена в отдельную функцию GETPUMP (с адресацией и указателями, о которых расскажу ниже), а код для конкретного ПЧ теперь занимает одну строчку.
Если бы в Конфигурации можно было задавать переменные как элементы массива (типа FREQCWS1), то код обработки любого количества ПЧ свелся к одной строке, вложенных в два цикла (см. Сторожевой таймер и сброс ПЛК Если суперцикл выполняется слишком долго, то ПЛК производит аппаратный сброс на уровне микроконтроллера.
Такое возникает при переходе в бесконечный цикл и других зависаниях. Отвечает за анализ времени выполнения цикла сторожевой таймер, или Watchdog.
Сброс по watchdog'у отличается от любого сброса через среду CODESYS. Этим можно пользоваться. В моей практике сторожевой таймер применяется в контроллерах ОВЕН. В этих ПЛК иногда происходит неприятный момент - созданный в Конфигурации модуль ModBus (Master) перестает вести опрос Слейвов (обычно это возникает после перезаливки программы). Поначалу это решали сбросом питания, но тут возникали трудности при удаленной закачке через интернет.
Позже я обнаружил, что проблему решает искусственное заведение программы в бесконечный цикл. Я вывел сброс на кнопку в визуализации. Или же можно анализировать изменение переменной 'Опрашиваемый адрес ' в ModBus (Master) - если Slave-устройств больше одного, то она должна меняться каждый цикл. Расширенное использование функций Помимо вывода одного-единственного значения любого стандартного типа функция способна возвращать значения пользовательского типа, например структуры, которые могут состояться из любого количества переменных разного типа.
Но что интереснее, имеется возможность изменения переменных, которые являются аргументами функции, внутри самой функции. Это возможно благодаря использованию указателей и адресации на эти переменные. Понять что к чему можно по скриншоту ниже, на котором приведен код функции, инициализирующий переменную если та равна нулю. Параметр внутри функции определяется как указатель на нужный тип, а при вызове функции в параметре используется не сама переменная, а её адрес (функция ADR).