Tag Archives: язык CFC

Редакторы CoDeSys

CoDeSys предоставляет встроенные специализированные редакторы для всех пяти языков МЭК 61131-3 и дополнительный CFC редактор:

  • Список Инструкций (IL)
  • Функциональные блоковые диаграммы (FBD)
  • Релейно-контактные схемы (LD)
  • Структурированный текст (ST)
  • Последовательные функциональные схемы (SFC):

—  мониторинг времени исполнения

шагов

—  автоматический анализатор причин ошибок

—  набор управляющих флагов: сброс, разрешение мониторинга, фиксация переходов и т.д.

  • Непрерывные функциональные диаграммы (CFC):

—  автоматическая расстановка и соединение

—  макро опция для структурирования больших диаграмм.

Два специальных редактора управляют прикладной средой исполнения:

  • Конфигуратор задач задает:

—  циклические задачи и задачи, исполняемые по событиям

—  параметры сторожевого таймера

—  настройку событий

 

  • Конфигуратор ввода-вывода обеспечивает:

—  Profibus конфигурирование на основе GSD файлов

—  CANopen конфигурирование на основе EDS файлов

—  ASI конфигурирование

—  специфическое конфигурирование модульных I/O систем

    Терморегулятор с ПИД-управлением в CoDeSys

    Задача: моделирование работы ПИД – регулятора температуры. По первому выходу осуществляется непосредственно ПИД-регулирование, по второму – сигнализация режима работы по гистерезисной, П или U – логике.

    Чему можно научиться: работа со стандартным ПИД-регулятором, разработка гистерезисных  алгоритмов на языках ST и CFC

    Основная программа разработана на языке CFC. Такой выбор объясняется наибольшей наглядностью работы с функциональными блоками по сравнению с другими языками программирования ПЛК.

    Итак, ПИД – регулятор.

    ПИД-регулирование является наиболее точным и эффективным методом поддержания контролируемой величины на заданном уровне. На рис. 1 приведена функциональная схема ПИД-регулятора. Основное назначение регулятора – формирование управляющего сигнала Y, задающего выходную мощность исполнительного механизма (ИМ) и направленного на уменьшение рассогласования Е или отклонения текущего значения регулируемой величины Т от величины уставки Туст.

    пропорционально-интегрально-дифференциальное регулирование

    рис1 Схема ПИД-регулятора

    ПИД-регулятор состоит из трех основных частей: пропорциональной Кп, интегральной 1/р×Ти и дифференциальной р×Тд. На практике, для формирования цифровых регуляторов используются разностные формулы, позволяющие работать не с непрерывным во времени сигналом, а с квантованным по времени. Таким образом, для расчета управляющего сигнала на выходе цифрового ПИД-регулятора  используется формула:

    Xp полоса пропорциональности;
    Ei рассогласование или разность между уставкой Туст и текущим значением измеренной величины Тi;
    tд дифференциальная постоянная;
    DEi разность между двумя соседними рассогласованиями Ei и Ei–1;
    Dtизм время между двумя соседними измерениями Ti и Ti–1;
    tи интегральная постоянная;
    накопленная в i-й момент времени сумма рассогласований (интегральная сумма).

    Пропорциональная составляющая зависит от рассогласования Ei и отвечает за реакцию на мгновенную ошибку регулирования.

    Интегральная составляющая содержит в себе накопленную ошибку регулирования и позволяет добиться максимальной скорости достижения уставки.

    Дифференциальная составляющая зависит от скорости изменения рассогласования и позволяет улучшить качество переходного процесса.

    В CoDeSys в библиотеке UTIL.lib реализован стандартный блок ПИД-регулятора, который показан на рис.2

    рис2 ПИД-регулятор в CoDeSys

    Функциональный блок реализует ПИД закон регулирования:

    где Y_OFFSET – стационарное значение, KP – коэффициент передачи, TN – постоянная интегрирования (ms), TV – постоянная дифференцирования (ms), e(t) — сигнал ошибки (SET_POINT-ACTUAL).

    Входы ACTUAL, SET_POINT, KP, Y_OFFSET, Y_MIN Y_MAX типа REAL. Входы TN и TV типа

    DWORD, RESET и MANUAL типа BOOL.

    Выходы Y – REAL, LIMITS_ACTVE и OVERFLOW типа BOOL.

    Значение выхода Y ограничено Y_MIN и Y_MAX. При достижении Y границ ограничения, выход

    LIMITS_ACTVE, (BOOL) принимает значение TRUE. Если ограничение выхода не требуется, Y_MIN

    и Y_MAX должны быть равны 0.

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

    Теперь собственно о программе.

    Для начала, как обычно – список переменных. По традиции – это самая длинная часть программы. Список переменных  включает в себя параметры 2 регуляторов (ПИД и 2-х позиционного) и входы / выходы системы управления.

    рис 3 Переменные проекта

    рис 3 Переменные проекта

    Далее собственно программа управления.

    рис4 Проект ПИД-регулятора в CoDeSys

    рис4 Проект ПИД-регулятора в CoDeSys

    В алгоритме ПИД-регулятора реализовано ограничение по мощности регулирования (0-100%). Двухпозиционный регулятор реализован в виде подпрограммы, которая выглядит, например, так:

    рис5 Переменные подпрограммы 2-х позиционного регулятора

    рис5 Переменные подпрограммы 2-х позиционного регулятора

    Программа на ST

    рис8 Подпрограмма работы 2-х позиционного регулятора на языке ST

    рис8 Подпрограмма работы 2-х позиционного регулятора на языке ST

    Ну и то же самое на языке CFC

    рис9 2-хпозиционный регулятор на языке CFC

    рис9 2-хпозиционный регулятор на языке CFC

    рис10 Подпрограмма на CFC (продолжение)

    рис10 Подпрограмма на CFC (продолжение)

     

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

    Задача на изучение блоков стандартных библиотек (управление освещением)

    Условие задачи

    Условие задачи

    Условие задачи

    На входе установлены два дискретных датчика: один снаружи комнаты, другой внутри. Когда срабатывает сначала внешний датчик, затем внутренний, это означает, что человек зашел в комнату.Когда срабатывает сначала внутренний датчик, затем внешний, это означает, что человек вышел из комнаты.

    Задача1: Если человек вошел – включить свет, Если человек вышел – выключить свет.

    Задача2: Необходимо считать количество людей, заходящих и выходящих из комнаты.

    Пока в комнате остается хотя бы один человек, свет должен быть включен.

    Реализовать задачу управления светом комнате с помощью компонентов стандартной библиотеки. Свет должен выключаться через 5 секунд, после того как последний человек покинет комнату.

     

    Рисунок 1 Визуализация задачи

    Рисунок 1 Визуализация задачи

    Рисунок 2 Добавление стандартных библиотек

    Рисунок 2 Добавление стандартных библиотек

    Программа

    Область переменных:

    PROGRAM PLC_PRG

    VAR vh_sen, vyh_sen:BOOL;(*сигналы с сенсоров на входной двери*)

    light:BOOL;(*сигнал включения света в комнате*)

    ludi:INT;(*число людей в комнате*)

    vh_sen_pred, vyh_sen_pred:BOOL;(*вспомогательные переменные: состояния сенсоров на предыдущем шаге*)

    rtr1: R_TRIG;(*детекторы передних фронтов*)

    rtr2: R_TRIG;

    tt2: TOF;(*таймер для организации задержки выключения*)

    tzad:TIME;(*текущее время задержки*)

    END_VAR

    Рисунок 3 Вид программы на языке СFC с использованием стандартных библиотек

    Рисунок 3 Вид программы на языке СFC с использованием стандартных библиотек

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

    Система пожарной сигнализации здания

    В здании две одинаковые комнаты.

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

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

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

    Сигнализация может быть включена кнопкой включения вне зависимости от состояния датчиков.

    Рисунок 1 Схема задачи

    Рисунок 1 Схема задачи

    Рисунок 2 Добавление функции или функционального блока

    Рисунок 2 Добавление функции или функционального блока

    Рисунок 3 Добавление функции срабатывания 2-х датчиков из 3-х

    Рисунок 3 Добавление функции срабатывания 2-х датчиков из 3-х

    Рисунок 4 Добавление функционального блока обработки сигналов для комнаты

    Рисунок 4 Добавление функционального блока обработки сигналов для комнаты

    Подпрограммы.

     

    Функция выбора 2 из 3 (язык ST)

    Назначение: функция имеет сигнал типа логической 1 на выходе при наличии на входе не менее 2 сигналов типа логической 1.

    Область переменных:

    FUNCTION log2_3 :BOOL

    VAR_INPUT

    in1, in2,in3: BOOL;(*входы функции*)

    END_VAR

    VAR

    END_VAR

    Программа:

    IF (in1 AND in2)OR((in1 AND in3))OR(in2 AND in3) THEN log2_3:=1;

    ELSE log2_3:=0;

    END_IF;

    Функциональный блок обработки сигналов для 1 комнаты.

     

    Область переменных:

    FUNCTION_BLOCK room

    VAR_INPUT

    dat1,dat2,dat3:BOOL;(*сигналы с датчиков пожарной безопасности в комнате*)

    knop_trevog, sbros_trevog:BOOL;(*внешние  кнопки включения и сброса тревоги*)

    logika23:BOOL;(*сигнал о срабатывании 2 пожарных датчиков*)

    END_VAR

    VAR_OUTPUT

    sign_lamp, sign_trevog:BOOL;(*сигнальная лампа комнаты и сигнал тревоги*)

    END_VAR

    VAR

    END_VAR

    Рисунок 5 Функциональный блок обработки сигналов для комнаты на языке LD

    Рисунок 5 Функциональный блок обработки сигналов для комнаты на языке LD

    Основная программа:

     

    Область переменных:

    PROGRAM PLC_PRG

    VAR

    dat11,dat12,dat13,dat21,dat22,dat23:BOOL;(*датчики пожарной сигнализации в комнатах*)

    sign1,sign2:BOOL;(*сигнальные лампы комнат*)

    alarm:BOOL;(*сигнал тревоги*)

    trevog1, sbros1,trevog2, sbros2:BOOL;(*внешние кнопки тревоги и сброса тревоги*)

    room1: room;               (*блок пожарной сигнализации 1 комнаты*)

    room2: room;               (*блок пожарной сигнализации 2 комнаты*)

    END_VAR

    Рисунок 6 Основная программа на языке CFC

    Рисунок 6 Основная программа на языке CFC

    Рисунок 7 Пример организации визуализации задачи

    Рисунок 7 Пример организации визуализации задачи

     

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

    Задача для изучения языка релейной логики (управление освещением)

    Условие задачи

    Условия задачи

    Условия задачи

    На входе установлены два дискретных датчика: один снаружи комнаты, другой внутри. Когда срабатывает сначала внешний датчик, затем внутренний, это означает, что человек зашел в комнату.Когда срабатывает сначала внутренний датчик, затем внешний, это означает, что человек вышел из комнаты.

    Задача1: Если человек вошел – включить свет, Если человек вышел – выключить свет.

    Задача2: Необходимо считать количество людей, заходящих и выходящих из комнаты.

    Пока в комнате остается хотя бы один человек, свет должен быть включен.

    Программа управления в POU

    Рисунок 1 Выбор языка программирования

     

    Рисунок 1 Выбор языка программирования
    Рисунок 2 Переменные, используемые для решения задачи

    Рисунок 2 Переменные, используемые для решения задачи

    Рисунок 3 Вид программы на языке LD

    Рисунок 3 Вид программы на языке LD

    Рисунок 4 Вид программы на языке CFC

    Рисунок 4 Вид программы на языке CFC

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

     

     

    Рисунок 5 Общий вид визуализации для задачи о включении света

    Рисунок 5 Общий вид визуализации для задачи о включении света

    Рисунок 6 Вид визуализации после запуска программы

    Рисунок 6 Вид визуализации после запуска программы

    Настройки отдельных объектов визуализации:

    Входной сенсор

    Рисунок 7 Организация связи кнопки на визуализации и переменной программы

    Рисунок 7 Организация связи кнопки на визуализации и переменной программы

    Рисунок 8 Выбор цветов заливки во включенном и выключенном режиме

    Рисунок 8 Выбор цветов заливки во включенном и выключенном режиме

    Рисунок 9 Назначение переменной изменения цвета

    Рисунок 9 Назначение переменной изменения цвета

    Настройки для кнопки выходного сенсора аналогичны.

    Лампа

    Рисунок 10 Назначение переменной переключения цветов

    Рисунок 10 Назначение переменной переключения цветов

    Рисунок 11 Создание подписи объекта "ЛАМПА"

    Рисунок 11 Создание подписи объекта "ЛАМПА"

    Рисунок 12 Выбор цветов заливки во включенном и выключенном режиме

    Рисунок 12 Выбор цветов заливки во включенном и выключенном режиме

    Счетчик

    Рисунок 13 Настройка вывода текста счетчика

    Рисунок 13 Настройка вывода текста счетчика

    Рисунок 14 Организация связи значения счетчика на визуализации и переменной программы

    Рисунок 14 Организация связи значения счетчика на визуализации и переменной программы

     

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

    Задача на переключатели и лимиты(СFC)

    Два насоса работают поочередно на одну магистраль. Переключение работающего насоса осуществляет оператор с цифровой панели (задает номер работающего насоса либо отключает заданием 0). При ошибке оператора в большую сторону работает 2 насос, в меньшую — насосы отключаются. На панель управления выдается текстовое сообщение о состоянии системы.

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

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

    Программа на языке CFC

    Программа на языке CFC

     

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

    Программа автомойки на языке CFC

    Условие. Все как всегда очень и очень просто. Есть автомойка, работающая в сугубо автоматическом режиме, т.е. пришел с утра хозяин, нажал кнопку «Пуск» и, пока не сбросит ее, мойка моет. Программа управляет двумя воротами с концевыми датчиками  (на въезд и на выезд), помывочной системой и подсчитывает число вымытых машин по сигналу с бесконтактного датчика. Помывочная платформа также оснащена двумя датчиками (в начале и конце платформы) для контроля наличия автомобиля.

    Чему можно научиться: язык CFC, работа с таймерами и переменными типа Time, set/reset.

    Решение. Как это ни парадоксально самой сложной и трудоемкой частью этой задачи является задание переменных. Итак, приступим.

    7 датчиков системы, все дискретные:

    (*датчики положения ворот*)

    dat_vorot1_open: BOOL;        (* бесконтактный датчик открытия въездных ворот *)

    dat_vorot1_close: BOOL;        (* бесконтактный датчик закрытия въездных ворот *)

    dat_vorot2_open: BOOL;        (* бесконтактный датчик открытия выездных ворот *)

    dat_vorot2_close: BOOL;        (* бесконтактный датчик закрытия выездных ворот *)

    (*датчики наличия автомобиля на помывочной платформе*)

    dat_pl_vh: BOOL;          (* бесконтактный датчик на въезде на помывочную платформу *)

    dat_pl_vyh: BOOL;        (* бесконтактный датчик на выезде с помывочной платформы *)

    (*датчик проезда автомобиля через выходные ворота*)

    dat_proezd: BOOL;

    5 сигналов управления, также дискретные:

    (*сигналы управления *)

    vorot1_open: BOOL;     (* сигнал открытия въездных ворот *)

    vorot2_open: BOOL;     (* сигнал открытия выездных ворот *)

    vorot1_close: BOOL;     (* сигнал закрытия въездных ворот *)

    vorot2_close: BOOL;     (* сигнал закрытия въездных ворот *)

    moyka: BOOL;     (* включение мойки *)

    3 временных параметра:

    (*временные задержки*)

    t_vyezd:TIME:=t#5s;      (* время задержки закрытия выходных ворот после выезда машины *)

    t_zad_vkl_moyky:TIME:=t#10S;(*время задержки включения мойки после въезда машины на платформу*)

    t_moyky:TIME:=t#2m;(*время мойки*)

    Кроме того, кнопка включения системы и счетчик:

    chislo_mashin:INT;(*счетчик*)

    pusk: BOOL;        (* кнопка запуска *)

    ну и для инициализации системы при первом запуске и события проезда:

    init: BOOL := 1;

    proezd:BOOL;

    Теперь перейдем к программе управления. Разберем ее по цепям.

    Программа управления

    Программа управления

    При срабатывании обоих датчиков положения на платформе закрывается дверь въездных ворот и после технологической задержки (выключить зажигание, двери запереть) включает на заданное время режим мойки. Через 2 минуты режим мойки отключается и открываются ворота на выезд.

    Следующая цепочка:

    Ситуация выезда машины из мойки

    Здесь обрабатывается ситуация выезда машины из мойки. После появления заднего фронта с датчика проезда инициируется событие проезда и увеличивается счетчик машин (счетчик реализован в самом простом варианте. Можно использовать стандартный счетчик CTU, тогда необязательно отлавливать фронт).

    Теперь событие выезд:

    При возникновении события проезд через заданный промежуток времени закрываются выездные ворота и открываются въездные. Для открытия въездных отрабатывается также ситуация инициализации.

    Ну и последнее – обработка сигналов концевиков:

    Обработка сигналов концевиков

    Здесь останавливаются соответствующие приводы и сбрасываются события инициализации и проезда.

     

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