Файл: Системы реального времени.docx

Добавлен: 13.02.2019

Просмотров: 1488

Скачиваний: 17

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

---| |---: (Нормально открытый контакт) когда управляющий бит равен 1, контакт будет замыкаться (пропускать ток). (пример- нереверсивный запуск асинхронного двигателя)

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

Если к катушке подводится ток, то управляющий бит катушки устанавливается в "1". Если к катушке не подводится ток, то управляющий бит катушки устанавливается в "0". (пример- нереверсивный запуск асинхронного двигателя)

---| / |---: (Нормально замкнутый контакт). Когда управляющий бит равен 0, то контакт замкнут (т.е. будет пропускать ток).

---(S): (Катушка установки). Эта команда устанавливает катушку с помощью короткого импульса лог. 1 на входе этой команды. Если на входе этой команды лог. 0, то эта команда не изменяет состояние катушки.

---(R): (Катушка сброса). Эта команда обнуляет катушку с помощью короткого импульса лог. 1 на входе этой команды. Если на входе лог. 0, то эта команда не изменяет состояние катушки.

---|Р|---: (Команда Выделение положительного фронта). Эта команда обнаруживает изменение сигнала на входе команды с 0 на 1 (положительный фронт) и формирует короткий импульс лог. 1 на один цикл контролера.

---| N|---: (Команда Выделение отрицательного фронта). Эта команда обнаруживает изменение сигнала на входе команды с 1 на 0 (отрицательный фронт) и формирует короткий импульс лог. 1 длиной один цикл контроллера.

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

8) Команды счетчиков: Использование команд счетчика на примере промежуточного склада.

Находятся под узлом Counter operations. При создании счётчиков необходим блок данных.

Команда CTU (прямой счет). Является инкрементным счётчиком. Имеет входы: CU, RESET, PV(word) и выходы: Q(bool), CV(word). На входе CU (переход из false -> true) выход CV увеличивается на 1. Выход Q устанавливается в true, когда счётчик достигнет значения заданного в PV. Счётчик CV сбрасывается в 0 по входу RESET = true.

Команда CTD (обратный счет). Является декрементным счётчиком. Имеет входы: CD, LOAD, PV(word) и выходы: Q(bool), CV(word). На входе CV (переход из false -> true) выход CV уменьшается на 1. Когда счётчик достигнет 0, счёт останавливается, выход Q переключается в true. Счётчик CV загружается начальными значениями, равными PV по входу LOAD = true.

Команда CTUD (реверсивный счетчик). Является инкрементным/декрементным счётчиком. Имеет входы: CU, CD, Reset, Load и выходы: QU and QD(bool), PV and CV(word). По входу RESET счетчик CV сбрасывается в 0, по входу LOAD загружается значением PV. По фронту на входе CU счетчик увеличивается на 1. По фронту на входе CD счетчик уменьшается на 1 (до 0). QU устанавливается в TRUE, когда CV больше или равен PV. QD устанавливается в TRUE, когда CV равен 0.


9) Таймерные команды:

Находятся под узлом Timer operations.

Команда S_PULSEТаймер «Импульс». Запускается, если имеется положительный фронт(изменение из 0 в 1) на входе S(start). Таймер продолжает работать с заданным временем, указанным на входе TV(time value) до тех пор, пока не истечет запрограммированное время, и при условии, что состояние сигнала на входе TV=1. Пока таймер работает, состояние сигнала на выходе Q = 1. Если на входе S изменение с 1 до 0 до истечения заданного времени, таймер останавливается, тогда Q=0, а значение времени запоминается, чтобы потом вести счёт от него (если R(reset) не изменяется с 0 на 1 -> сбрасывание таймера).

Команда S_PEXTТаймер, запускаемый коротким импульсом. Запускается, если имеется положительный фронт(изменение из 0 в 1) на входе S(start). Таймер продолжает работать с заданным временем, указанным на входе TV(time value), даже если состояние на входе S меняется на 0 до истечения времени. Пока таймер работает, Q=1. Таймер перезапускается с заданным временем, если состояние сигнала на входе S меняется с 0 на1 во время работы таймера. Изменение с 0 на 1 на входе R во время работы таймера сбрасывает таймер + сбрасывает в ноль время и базу времени. Выходы BI и BCD используются для чтения текущего времени. На выходе BI текущее время представлено в двоичном формате, а на выходе BCD – в двоично-десятичном формате.

Команда S_OFFDT Таймер «Задержка выключения». Запускается, если имеется отрицательный фронт (с 1 на 0). Состояние сигнала на выходе Q = 1 тогда, когда S = 1 или если таймер работает. Если время в TV истекло, то состояние на выходе Q = 0. Если состояние сигнала на выходе S изменяется с 0 на 1 во время работы таймера, то значение времени запоминается. Если после этого S изменить с 1 на 0, то отсчёт времени будет вестись от запомненного. Изменение с 0 на 1 на входе R во время работы сбрасывает таймер, если же, когда таймер не работает, то Q = 0 и происходит сброс времени.

Использование команды таймеров для задержки выключения света в комнате.

10) Обзор блоков проекта.

Организационные блоки (OB) и прерывания. Образуют интерфейс между операционной системой CPU и программой пользователя.

ОВ1(блок циклического выполнения программы)

Главная циклическая программа, исполняется непрерывно. Имеет самый низкий приоритет, т.е. все остальные ob могут прерывать его выполнение. Обычно в нём организовывают последовательность выполнения операций тех процесса.

ОВ10– ОВ17(блоки прерываний по времени)

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

ОВ20-ОВ23(блоки прерываний с задержкой)

По истечении запрограммированного времени, управляется из пользовательской программы. OB прерываний с задержкой исполняются только в том случае, когда CPU находится в режиме RUN.

ОВ30– ОВ38(блоки циклических прерываний)

Регулярно, через запрограммированные интервалы времени (например, каждые 10 мс). Нужно позаботиться о том, чтобы время работы этих блоков было значительно меньше интервала времени, через который он вызывается.Циклические прерывания удобно использовать для симуляции работы устройств управления: задвижек, дозаторов и т.д.

ОВ40– ОВ47(блоки аппаратных прерываний)

Аппаратные прерывания (по сигналу прерывания от I/O –модуля), возникновения ошибки.

ОВ100 –ОВ102

При запуске программируемого контроллера. ОВ100 для включения питания.



Создание и вызов функций (FC). Используется при вычислениях по мат-формулам. Создаётся в узле Program Blocks, содержит в себе раздел описания интерфейса и раздел кода программы. В первом определяются входы и выходы + временные данные функции. Во втором используют мат-функции, например на языке LAD это раздел Math functions. Вызываться могут в операционных блоках, в других функциях и функциональных блоках.

Создание и вызов функциональных блоков (FB). Создание функциональных блоков аналогично созданию функций. Единственным различием функциональных блоков от функций является то, что значений входов и выходов функционального блока можно задавать в виде блоков данных DB. Это удобно при вызове одного функционального блока для различных однотипных объектов.

Глобальные и экземплярные блоки проекта. Эти блоки хранят в себе информацию о состоянии объектов управления и доступны всем объектам программы. Однако экземплярные привязаны к функциональным блокам, поэтому они имеют такие же поля, что и входы/выходы FB.

11) Создание функционального блока для задвижки.

Определение входов и выходов функционального блока задвижки. Аналоговая задвижка открывается и закрывается за счет реверсивного включения асинхронного двигателя. Для открытия задвижки контроллер должен подавать команду Открыть и двигатель вращается в сторону открытия задвижки. Для закрытия задвижки контроллер должен подавать команду Закрыть и двигатель вращается в сторону закрытия задвижки. При полном открытии или закрытии срабатывают дискретные датчики положения Открыто или Закрыто. Промежуточное положение задвижки определяется аналоговым датчиком положения. Создаются параметры Open/Close (команды на открытие/закрытие задвижки), являющиеся параметрами типа Input. Датчики открытости и закрытости задвижки (Opened/Closed) определены как выходные параметров, так как полное открытие/закрытие задвижки эмулируется в коде функционального блока. Положение задвижки определяется параметром Position типа Int. Этот параметр является типа InOut, так как в программе эмуляции работы задвижки приходится считывать и устанавливать значение аналогового датчика положения.

Определение логики работы задвижки. Работу задвижки можно эмулировать за счет циклического вызова функционального блока FB_Zadv. Например, открытие и закрытие задвижки можно эмулировать за счет увеличения или уменьшения показаний аналогового датчика положения при каждом вызове функционального блока FB_Zadv.



Циклически вызов блока FB_Zadv.Как видно из кода FB_Zadv, если имеется команда на открытие или закрытие, то увеличивается или уменьшается значение аналогового датчика положения. Чтобы эти изменения произошли циклически с определенной частотой, функциональный блок FB_Zadv следует вызывать в обработчике циклического прерывания, например, в ОВ35. После необходимо привязать блок данных к функциональному блоку и в организационном блоке OB1 определить код для запуска двигателя задвижки.


Мониторинг состояния задвижки. Состояние задвижки удобно посмотреть с помощью блока данных функционального блока (экземплярный бд). Значение поля Position, при нажатии Открыть, увеличивается до 100% и процесс открытия задвижки останавливается автоматически. При Закрыть - уменьшается до 0% и процесс открытия задвижки останавливается автоматически.

12) Использование маркерных битов для реализации последовательности выполнения операций технологического процесса (на примере бетоносмесительной установки). Просмотр работы программы управления БСУ. ХУЁВЫЙ БИЛЕТ!

Область маркерной памяти расположена в системной области памяти процессора и доступна как для записи, так и для чтения. Элементы маркерной памяти предназначены для хранения промежуточных результатов вычислений и использование этих результатов в дальнейшем. Результат вычисления, выведенный на катушку маркерной памяти, помещается в нее сразу и становится доступным для считывания уже в следующей строке. В релейной логике STEP7 биты маркерной памяти используются одновременно для вывода результата на катушки реле и для ввода значений с контактов этих катушек. Основное назначение битов маркерной памяти:

1)сохранять промежуточный результат при разбиении длинных релейных цепочек или в некоторых команд;

2)организовывать обратные связи или проверки условий в тактируемых схемах (в многотактных схемах).

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

Крч 18 задвижек (см.билет 11), 6 дозаторов, 2 смесителя.

Дозатор для набора определённого количества материала (песок, щебень и проч). Для работы нужно открыть одну из входных задвижек, проследить за состоянием весом, закрыть задвижку. Затем песок+щебень+цемент+минеральный порошок ->открыть выходную задвижку и высыпать всё в смеситель.

  1. Создаём FB (FB_Dozat) из узла Program Blocks на языке LAD.

  2. Определяем входы/выходы блока. Входы Load/UnLoad - команды загрузки и выгрузки дозатора. Выходы Full и Empty - дискретные датчики уровня (дозатор Полный и Пустой). Датчики уровня приходится определить как выходы, ибо их состояние приходится эмулировать программно. Параметр Wes типа InOut представляет собой датчик веса. Состояние веса также приходится эмулировать в коде функционального блока.

  3. Если дана команда на загрузку дозатора значение датчика веса будет увеличиваться, за счет циклического вызова функционального блока FB_Dozat. Если дана команда на выгрузку дозатора - будет уменьшаться. Для каждого дозатора определите экземплярный блок данных DB_Dozat. Эти блоки данных будут хранить состояние соответствующего дозатора.


  1. Вызываем блок в OB35.

  2. МАРКЕРНЫЕ БИТЫ. Создаём теги в таблице Markers, которую тоже создаём в узле PLC tags. Адреса определены так, чтобы теги включались друг за другом.


Они для реализации этапов приготовления бетона.

  1. В OB1 прописываем:

  1. Запускаем симулятор в режиме выполнения программы. В блоках данных задвижки и дозатора вкл мониторинг. Нажимаем Пуск. ОДНАКО! Для удобства создаём таблицу для просмотра из узла Watch and force tables, в которую добавляем поля датчиков задвижки и дозатора (position, wes). И вот, моня мониторить норм.

13) Использование редактора Graph для реализации программы управления процессом приготовления и розлива сока.

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

Откройте узел Program blocks.

Выполните двойной щелчок на строке Add new block.

При этом появляется окно создания блока проекта (рис. 7.3). В этом окне выберите тип блока Function block, введите имя блока GRAPH_Sequence и выберите язык программирования GRAPH. После нажатия кнопки OK, откроется в рабочей области откроется окно редактора GRAPH, которое содержит код созданного функционального блока.

П ока функциональный блок GRAPH_Sequence содержит только один шаг. Теперь добавьте шаги и переходы для процесса приготовления и розлива сока. Для этого выделите двойную стрелку шага и из контекстного меню выполните команду Insert element/Step and transition.

Как видно, после шага 7 определено разветвление потока выполнения. Для создания разветвления выделите шаг S7 и из контекстного меню выполните команду Insert element/Open Alternative branch. После этого разместите шаг S8 – Fill Complete.

Как было указано выше, когда заполнено менее 10 бутылок, процесс заполнения бутылок повторяется с шага S4 – Trans Filling. Когда 10 бутылок заполнены, тогда выполняется шаг S8 – Fill Complete и далее происходит переход на начало последовательности (шаг S1 Home) для запуска процесса приготовления сока по новой.

Для вставки перехода выделите конец стрелки после шага S7 – Labeling и из контекстного меню выполните команду Insert element/Jump. При этом появляется список шагов.


Выберите из этого списка шаг перехода S4 – Trans Filling. При этом двойная стрелка преобразуется на одинарную стрелку и рядом со стрелкой появляется надпись S4. Также на верху шага S4 появляется стрелка с надписью Т7.

Аналогично размещайте другой переход: после шага S8 выполните переход на шаг S1 – Home.


14) Программирование действий шагов в редакторе Graph: квалификаторы действий N, R, S, L и события S0 и S1


Действия, которые зависят от событий

Действия могут быть логически скомбинированы с событиями. Событие – это изменение состояния шага или супервизора, блокирование, квитирование, сообщение или установка регистрации.

S1: Шаг активируется.

S0: Шаг деактивируется.

15) Программирование условий перехода на следующий шаг на примере индивидуального задания по СРВ. Создание разветвлений в программе Graph

Откройте в редакторе программ шаг S1-Home. Разместите нормально замкнутый контакт в области T1–Trans1. Введите имя тега Group_Fault – тег, который предназначен для хранения групповой ошибки. Пока этот тег не определен. Для определения этого тега из контекстного меню выполните команду Define tag. При этом появляется диалоговое окно создания тега