Tag Archives: SFC

Стиральная машинка (SFC, задачи, типы данных)

Пожалуй, самый простой случай, когда многозадачность может быть полезна – это моделирование объекта управления. Классическая простейшая задача на применение языка SFC – это стиральная машина, основные этапы работы которой: контроль закрытия дверки, ожидание нажатия кнопки пуск, наполнение бака водой, нагрев, стирка, слив воды.

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

Для описания режима определим структуруWashPara:

TYPE WashPara :

STRUCT

WaterIn: TIME;

WashTime: TIME;

WashTemp: WORD;

WaterOut: TIME;

END_STRUCT

END_TYPE

Это ничто иное, как новый тип данных. Такие определения делаются в проекте централизованно на вкладке Data types (типы данных) менеджера проекта. Теперь мы можем объявлять в проекте переменные типа WashPara.

Создадим в проекте новый POU типа программа (PROGRAM), назовем его Wash и выберем упрощенный язык SFC. В разделе объявлений Wash объявим константу для числа режимов:

VAR CONSTANT

maxProgNr :BYTE:= 5;

END_VAR

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

MyWashPara: ARRAY [0..maxProgNr] OF WashPara;

Обращение к элементам структуры происходит через точку после указания элемента массива, например:

MyWashPara[i].WaterOut := T#5s;

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

временам шага показана на рис. 1. Переходы после выполняемых по времени шагов всегда разрешены, то есть им присвоены константы TRUE. Этим собственно все программирование и исчерпывается.

Рис. 1. Временные атрибуты шагов SFC

 Для наглядной демонстрации работы нашей машины удобно использовать встроенную графическую визуализацию CoDeSys. Ее возможный вариант показан на рис. 2.

 

Рис. 2. Визуализация модели

Наша визуализация слишком уж статична, хотелось бы отобразить вращение барабана. Это можно сделать при помощи закрашенного сегмента. Напишем отдельную программу Motor, ее задача плавно циклически изменять переменную wAngle от 0 до 360 градусов, которую мы свяжем с углом сектора соответствующего элемента визуализации. Например, так:

IF xMotOn THEN

wAngle := wAngle + 5;

IF wAngle > 359 THEN

wAngle := 0;

END_IF

ELSE

wAngle := 180;

END_IF

Как видите, здесь нет таймеров, обеспечивающих достаточно медленную для зрительного восприятия скорость вращения барабана. Мы можем поступить проще, создадим для целей моделирования циклическую задачу с достаточно медленным циклом работы, который легко регулировать. После отладки эту задачу можно будет просто отключить, не изменяя ничего в основных программах. По умолчанию CoDeSys создает новый проект с единственной программой PLC_PRG, которая неявно включена в единственную циклическую задачу. Чтобы сделать многозадачный проект, необходимо использовать конфигуратор задач (Task configuration), расположенный на вкладке ‘Ресурсы’ менеджера проектов. Щелкните правой кнопкой мыши по элементу Task configuration и в появившемся контекстном меню выберете команду Append task. Сначала создадим главную задачу, она будет назваться Main, ее тип – циклический (cyclic) и интервал работы T#10ms. Аналогичным способом откройте контекстное меню для нашей новой задачи и добавьте в нее (Append program call) программу PLC_PRG();. Теперь создайте еще одну циклическую задачу MotorSim с интервалом T#100ms, в нее вставьте вызов программы Motor();. Теперь конфигурация задач должна выглядеть так, как показано на рис.3.

Рис.3. Конфигурация задачи

Язык последовательных функциональных схем (SFC)

Язык последовательных функциональных схем (SFC)

SFC – это графический язык, который позволяет описать хронологическую последовательность различных действий в программе. Для этого действия связываются с шагами (этапами), а последовательность работы определяется условиями переходов между шагами.

Пример SFC диаграммы:

 

пример программы SFC

пример программы SFC

 

Шаг

SFC POU состоит из набора шагов, связанных переходами. Существуют 2 вида шагов:

  • Шаг простого типа (упрощенный SFC) может включать единственное действие. Графический флажок (небольшой треугольник в верхнем углушага) показывает, пустой шаг или нет.
  • МЭК шаг (стандартный SFC) связан с произвольным числом действий или логических переменных. Связанные действия располагаются с правой стороны от шага.

 

Действие

Действие может содержать список инструкций на IL или ST, схемы на FBD или LD, или снова схемы на SFC. При использовании простых шагов действие всегда связывается с этим шагом. Для того, чтобы редактировать действие, необходимо дважды щелкнуть левой клавишей мышки на шаге. Или выделить шаг и выбрать команду меню «Extras» «ZoomAction/Transition». Помимо основного действия, шаг может включать одно входное и одно выходное действие. Действия МЭК шагов показаны в Организаторе Объектов, непосредственно под вызывающей их POU. Редактирование действия запускается двойным щелчком мыши или клавишей <Enter>. Новые действия добавляются командой главного меню «Project» «Add Action». Вы можете сопоставить одному шагу до 9 действий.

 

Входное или выходное действие

В шаг можно добавить входное и выходное действие.

Входное действие выполняется один раз при активизации шага, выходное – при деактивизации. Шаг, который имеет входное действие, обозначается буквой «Е» в левом нижнем углу, шаг с выходными действиями – буквой «Х» в правом нижнем углу.

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

Переход/условие перехода

Между шагами находятся так называемые переходы. Условием перехода может быть логическая переменная или константа, логический адрес или логическое выражение, описанное на любом языке. Условие может включать серию инструкций, образующих логический результат, в виде ST выражения (т.е.(i<= 100) AND b) либо на любом другом языке. Но условие не должно содержать присваивания, вызов программ и экземпляров функциональных блоков.

В редакторе SFC условие перехода можно записать непосредственно около символа перехода либо в отдельном окне редактора для ввода условия  Условие заданное окне редактора предпочтительнее.

 

Активный шаг

После вызова SFC POU начальный шаг (шаг, выделенный двойной рамкой) выполняется первым. Шаг, выполняемый в данный момент, называется активным. Действия, связанные с активным шагом, выполняются один раз в каждом управляющем цикле. В режиме online активные шаги выделяются синим цветом. Следующий за активным шагом шаг станет активным, только когда условие перехода к этому шагу будет истинно.

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

 

Шаг МЭК

В отличие от упрощенного SFC МЭК шаги могут включать несколько действий. Действия МЭК шагов описываются отдельно от них и могут неоднократно использоваться в пределах данного POU, для чего их надо связать с шагом с помощью команды главного меню «Extras» «Associate action».

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

С помощью так называемых классификаторов действия и логические переменные могут активироваться и деактивироваться, возможно, с задержкой времени. Например: действие может продолжать работу, даже если запустивший его шаг утратил активность; с помощью классификатора S (установка) можно программировать параллельные процессы и т.д. Логическая переменная, связанная с шагом, получает значение ИСТИНА при каждой активации шага. Действие, связанное с МЭК шагом, описывается справа от него в блоке, состоящем из двух частот. Левая часть этого блока содержит классификатор, возможно, с константой времени, а правая часть содержит имя действия или логической переменной.

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

При выполнении шага сначала производится деактивация действий, затем выполняются активные действия в алфавитном порядке. Для того чтобы использовать шаги с МЭК действиями, необходимо установить опцию «Extras» «Use IEC-Steps» и подключить к проекту специальную библиотеку Iecsfc.lib. В Организаторе объектов действия показаны непосредственно под SFC POUs, которые их вызывают. Новые действия можно создавать с помощью команды «Project» «Add Action«.

Альтернативная ветвь

Две и более ветви SFC могут быть альтернативными. Каждая альтернативная ветвь должна начинаться и заканчиваться переходом. Альтернативные ветви могут содержать параллельные ветви и другие альтернативные ветви. Альтернативная ветвь начинается горизонтальной линией (начало альтернативы), а заканчивается горизонтальной линией (конец альтернативы) или переходом на произвольный шаг (jump). Если шаг, который находится перед линией альтернативного начала, активен, то первые переходы альтернативных ветвей начинают оцениваться слева направо. Таким образом, первым активируется тот шаг, который следует за первым слева истинным переходом.

Параллельные ветви

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

Переход на произвольный шаг (Jump)

Переход на произвольный шаг — это соединение на шаг, имя которого указано под знаком «jump». Такие переходы нужны для того, чтобы избежать пересекающихся и идущих вверх соединений.

 

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