Tag Archives: проект ПЛК

Компоненты проекта CoDeSys

Проект

Проект включает следующие объекты: POU, типы данных, визуализации, ресурсы, библиотеки. Каждый проект сохраняется в отдельном файле.

POU (Program Organization Unit)

К программным компонентам (POU) относятся функциональные блоки, функции и программы. Отдельные POU могут включать действия (подпрограммы). Каждый программный компонент состоит из раздела объявлений и кода. Для написания всего кода POU используется только один из МЭК языков программирования (IL, ST, FBD, SFC, LD или CFC). CoDeSys поддерживает все описанные стандартом МЭК компоненты. Для их использования достаточно включить в свой проект библиотеку standard.lib. POU могут вызывать другие POU, но рекурсии недопустимы.

Функция

Функция – это POU, который возвращает только единственное значение (которое может состоять из нескольких элементов, если это битовое поле или структура). В текстовых языках функция вызывается как оператор и может входить в выражения.При объявлении функции необходимо указать тип возвращаемого значения. Для этого после имени функции нужно написать двоеточие и тип.

Имя функции используется как выходная переменная, которой присваивается результат вычислений.

Объявление функции должно начинаться с ключевого слова FUNCTION и заканчиваться ключевым словом END_FUNCTION.

В языке ST вызов функции может присутствовать в выражениях как операнд.

В SFC функция вызывается только из шага или перехода.

Функция не имеет внутренней памяти. Это означает, что функция с одними и теми же значениями входных переменных всегда возвращает одно и то же значение.

 

Функциональный блок

Функциональный блок — это POU, который принимает и возвращает произвольное число значений. В отличие от функции функциональный блок не формирует возвращаемое значение. Объявление функционального блока начинается с ключевого слова FUNCTION_BLOCK и заканчивается ключевым словом END_FUNCTION_BLOCK.

Ниже приведен пример функционального блока, написанного на IL, который имеет две входных и две выходных переменных. Значение выходной переменной MULERG равно произведению значений двух входных переменных, а значение VERGL определяется в результате сравнения значений входных переменных.

Экземпляры функционального блока

Определение функционального блока подобно определению типа данных. Для работы с функциональным блоком необходимо объявить (создать) его экземпляр. Один функциональный блок может иметь произвольное число экземпляров, каждый из которых имеет собственные независимые данные (память). Каждый экземпляр функционального блока получает свой собственный идентификатор (имя экземпляра) и свои данные, содержащие входные, выходные и внутренние переменные. Экземпляры функционального блока объявляются глобально или локально как переменные, имеющие тип соответствующего функционального блока.

Вызов экземпляра функциональный блока происходит с помощью его имени. Входные и выходные переменные доступны вне функционального блока, а внутренние переменные доступны только в самом блоке.

Экземпляры функционального блока могут быть объявлены в другом функциональном блоке или в программе. Объявлять экземпляр функционального блока в теле функции нельзя. Экземпляры функционального блока доступны в том POU, в котором они объявлены, если они не объявлены глобально.

Экземпляры функциональных блоков могут быть использованы в качестве входных переменных других функциональных блоков или функций.

 

Вызов функционального блока

Для обращения к входным и выходным переменным функционального блока извне необходимо указать имя экземпляра функционального блока, следующей за ней точкой и именем переменной:

<Имя экземпляра>.<Имя переменной >

Присваивание параметров при вызове:

В текстовых языках (IL, ST) задать актуальные параметры и считать значения выходов можно непосредственно при вызове экземпляра функционального блока. Для входных переменных применяется присваивание «:=», выходы считываются при помощи «=>». Этот процесс упрощается, если использовать ассистент ввода (<F2>) с включенной опцией вставки с аргументами (With arguments).

 

Программа

Программа – это POU, способный формировать произвольное значение во время вычислений. Значения всех переменных программы сохраняются между вызовами. В отличие от функционального блока экземпляров программы не существует. Программа является глобальной во всем проекте. Нельзя вызывать программу из функции.

Если вызвать программу, которая изменит значения своих переменных, то при следующем вызове ее переменные будут иметь те же значения, даже если она вызвана из другого POU.

В этом заключается главное различие между программой и функциональным блоком, в котором изменяются только значения переменных данного экземпляра функционального блока.

Объявление программы начинается ключевым словом PROGRAM и заканчивается ключевым словом END_PROGRAM.

Так же, как и для экземпляров функциональных блоков, в текстовых языках (IL, ST) задать актуальные параметры и считать значения выходов можно непосредственно при вызове программы. Для входных переменных применяется присваивание «:=», выходы считываются при помощи «=>».

 

PLC_PRG

Программа PLC_PRG – это специальный POU, который должен быть в каждом проекте. Эта программа вызывается один раз за цикл управления.

При создании нового проекта автоматически открывается диалог «Project» «Object Add», предлагающий создать новый POU — программу с именем PLC_PRG.

Не следует менять предложенные установки. Если определить последовательность выполнения задач в Task Configuration, то проект может не содержать PLC_PRG.

Действие

Программы или функциональные блоки могут быть дополнены действиями. Фактически действия – это дополнительный набор встроенных в POU подпрограмм. Действия могут описываться на языке, отличном от того, на котором выполняется соответствующий функциональный блок или программа. Действие оперирует с теми же данными, что и функциональный блок или программа, к которой оно принадлежит.

Вызов действия:

Действие вызывается с помощью идентификатора:

<Имя_программы>.<Имя_действия> или <Имя_экземпляра>.<Имя_действия >.

Если нужно вызвать действие из POU, к которому оно принадлежит, то в текстовых языках используется имя действия, а в графических – функциональный блок без указания имени экземпляра.

Ресурсы

Ресурсы отвечают за конфигурацию проекта, включая:

  • Глобальные переменные, используемые во всем проекте.
  • Менеджер библиотек (Library manager) для подключения необходимых библиотек к проекту
  • Журнал записи действий во время исполнения
  • Конфигуратор тревог (Alarm Configuration) для конфигурирования обработки тревог в проекте
  • Конфигуратор ПЛК (PLC Configuration) для конфигурирования аппаратуры контроллера.
  • Конфигуратор задач (Task Configuration) для управления задачами
  • Менеджер рецептов (Watch and Receipt Manager) для просмотра и заказа наборов значений переменных
  • Опции целевой системы (Target Settings)
  • Рабочая область для отображения опций проекта

В зависимости от системы исполнения и ее опций могут подключаться дополнительные объекты:

Sampling Trace — для задания графической трассировки значений переменных.

ParameterManager — для взаимодействия с другими контроллерами в сети

PLC-Browser — монитор ПЛК

Tools – для вызова внешних, специфичных для каждой платформы инструментов

SoftMotion – компоненты системы управления движением (в соответствии с лицензией), редакторы CNC и CAM

Библиотеки

Проект может использовать несколько библиотек, в которые входят POU, необходимые им типы данных и глобальные переменные. Библиотечные POU можно использовать точно так же, как и определенные пользователем.

Библиотеки «standard.lib» и «util.lib» обязательно входят в стандартный комплект поставки.

 

Типы данных

Кроме стандартных типов данных, вы можете использовать определяемые пользователем типы данных. Ими могут быть структуры, перечисления и ссылки.

 

Визуализация

С помощью визуализации пользователь может создать графическое представление проекта. Форма и цвет графических элементов будут изменяться при работе программы в зависимости от значений переменных. Визуализация может исполнятся в системе программирования, в отдельном приложении CoDeSys HMI или как Web или целевая (в ПЛК) визуализация.

 

Мой блог находят по следующим фразам

Языки программирования ПЛК. Проект ПЛК

У ПЛК есть несколько основных языков программирования. Во-первых, это что-то похожее на языки программирования высокого уровня. Называется язык структурированного текста (по-буржуйски ST). Исключительно удобная штука, если есть навыки программирования. Собственно, для программистов и придумана. Однако когда ПЛК разрабатывался и внедрялся, профессия программиста (в смысле толкового программиста с хорошей технической подготовкой) была еще более дефицитной, чем в наши суровые времена. Посему практичные янки и весь мир следом разработали несколько видов графических языков. Для электриков создали язык релейных диаграмм (по-буржуйски LD). Ничего в общем сложного – шина входов, шина выходов, между ними – схема из релюшек, нормально замкнутых или разомкнутых, ну и таймеров, конечно, триггеров всяких. Плюс в простоте – была бы схема, а программа напишется. Минус в трудностях работы с аналоговыми сигналами.

Другой вид графических языков – язык функциональных блоков (по-буржуйски FBD). Мне он очень напоминает работу, например, с пакетом Simulink программного комплекса Matlab, товарищу напротив — Vissim. Да, в общем, получить техническое образование ни разу не столкнувшись с такого рода ПО трудно.  Основа всего — блоки, соединенные в нужной последовательности линиями связи. Если вы – технарь, пожалуй, наиболее прост для освоения и активного использования. Плюс – наглядность, интуитивная понятность реализуемых алгоритмов. Минусы – работа с циклами. Можно, конечно, но на ST такого рода программки и пишутся легче и короче.
Последний вариант графического языка – алгоритмический (SFC). Это наиболее высокий по уровню графический язык. Каждый его шаг – маленькая (или большая) программа. Очень красивый язык, справедливо обожаемый технологами всех мастей. Позволяет создавать жестко структурированные, удобные для отладки проекты. Минус всего один – браться за его изучение стоит, лишь в достаточной степени освоив язык ST, LD или FBD. Программы для отдельного шага все равно писать на них.

Ах, да. Чуть не забыл. Есть еще что-то похожее на ассемблер. Называется  списком инструкций (по-буржуйски IL). Если вы фанат бесконечной работы с аккумулятором – это для вас. Минусы – длинный программный код, хорошо смотрящийся только в приложениях к диссертации, проблемы отладки. Короче в моем понимании – пятое колесо в телеге программирования ПЛК. Могу быть не прав.

Программа или проект?

Давайте сразу отделим котлеты от мух. Тот код, который мы героически пишем – это конечно программа. Вернее, более точно, программа – это код определяющий цикл работы ПЛК.  Их у контроллера может быть не одна,  не две, а много. Меняться они могут по времени, внешнему или программному событию. То есть программа – вещь достаточно частная. Совокупность же того, что «залито» в контроллер, принято называть проект. Помимо набора программ проект включает в себя подключенные библиотеки, типы данных, визуализации, конфигурации,  настройки конкретного ПЛК и многое другое.

 

Мой блог находят по следующим фразам