Занятие 2. Разработка систем логического управления электроприводами — КиберПедия 

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

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

Занятие 2. Разработка систем логического управления электроприводами

2017-11-16 551
Занятие 2. Разработка систем логического управления электроприводами 0.00 из 5.00 0 оценок
Заказать работу

 

Рассмотрим структуру логического управления на примере электропривода позицирования. В данном примере требуется создать систему логического управления, позволяющую автоматически производить останов при достижении одного из двух заданных положений механизма. В качестве реального механизма будет служить задвижка трубопровода (рис.1), где требуется производить автоматическое отключение двигателя при достижении положения «Открыто» при открытии и положения «Закрыто» при закрытии.

 

 

Рис. 1.

 

 

Техническое задание для рассматриваемого примера будет следующее:

1. Электропривод должен отрабатывать команды «Открыть», «Закрыть», «Стоп» с остановом при достижении заданного положения.

2. Электропривод должен выдавать сигнализацию о достижении конечных положений «Открыто» и «Закрыто»

3. Электропривод должен выдавать сигнализацию о своем состоянии – «Движение на открытие», «Движение на закрытие», «Остановлен».

 

Для разработки систем логического управления Симулинк предлагает модуль Stateflow (найдите его группу в библиотеке компонентов).

В группе Stateflow находится единственный компонент под именем Chart. Данный компонент позволяет реализовывать конечный автомат - одно из самых широкоприменяемых устройств для логического управления.

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

Например, при управлении двигателем в реверсивном режиме можно выделить 3 логических состояния:

1. Остановлен

2. Движение вперед

3. Движение назад

Событиями управления, по которым происходит смена указанных состояний, служат команды «Остановить», «Двигаться вперед» и «Двигаться назад».

Каждое состояние предполагает выполнение каких-то специфичных действий, характерных для данного состояния: в состоянии «Остановлен» необходимо снять напряжение с двигателя, в состоянии «Движение вперед» необходимо подать напряжение прямой последовательности, в состоянии «Движение назад» необходимо подать напряжения обратной последовательности. Пример графического представления данного конечного автомата показан на рис.2.

 

 

Рис.2

 

Откройте окно редактирования модели и поместите компонент Chart из группы Stateflow. Сделайте двойной клик по компоненту, и перед вами откроется редактор диаграмм, в котором определяются все состояния и устанавливаются переходы между ними.

 

 

Рис.3

 

 

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

В результате вы должны получить диаграмму, аналогичную с рис.3.

Кликните в прямоугольнике по знаку «?» и получите возможность задания имени состояния (рис.4.). Назовем одно состояние stop (остановлен), другое move (движение)

 

 

Рис.4

 

 

Для того, чтобы осуществлялись переходы между состояниями, необходимо обеспечить ввод событий в систему. Выполните через меню окна редактора диаграмм команду Add-Event-Input from Simulink… (Рис.5), т.е. события мы будем имитировать средствами Симулинка.

В появившемся окне (рис.) задайте имя события (my_event_1) и тип события в поле Trigger (по нарастающему фронту, т.е. Rising), нажмите кнопку ОК.

 

 

Рис.5

 

Аналогичным образом добавьте событие my_event_2 и тип события Falling (спадающий фронт).

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

 

 

Рис.6

 

Так как события будут имитироваться средствами Симулинка, необходимо доработать модель системы в редакторе моделей (рис.7). Установите два компонента констант со значениями «1» и «-1». Установите ручной переключатель сигналов (группа Симулинк, подгруппа Signal Routing, компонент Manual Switch). В связи с тем, что в компоненте Chart мы установили 2 события (my_event_1 и my_event_2), необходимо превратить сигнал в вектор посредством мультиплексора ((группа Симулинк, подгруппа Signal Routing, компонент Mux).

Прежде чем запустить моделирование, зададим задержку при осуществлении переходов для того, чтобы существовала возможность наблюдать работу разработанного конечного автомата. Для этого необходимо подать команду Tools-Debug… (рис.8)

 

Рис.7

 

 

 

Рис.8

 

В появившемся окне необходимо включить анимацию (Animation – enabled) и установить время задержки (Delay) как 0,6 секунды (рис.9)

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

Устройство управления, не выдающее во внешнюю среду никаких сигналов, является бесполезным. Добавим выход к разработанному конечному автомату. Данный выход будет показывать необходимость включения контакторов (значение «1») или отключения (значение «0»).

Для добавления выхода необходимо подать команду Add-Data-Output to Simulink (рис.10).

 

 

Рис.9

 

 

Рис.10

В появившемся окне задайте имя выхода (поле Name) как contactor (название с маленькой буквы!). В окне редактора в компоненте Chart появится выход с именем contactor. Данный выход необходимо соединить с компонентом Display для визуализации результата работы разрабатываемого конечного автомата (рис.11). В редакторе диаграмм необходимо определить действия по отношению данного выхода. Для этого в прямоугольниках, обозначающих состояния, необходимо задать (см.рис.11):

1. en:contactor=0 для состояния stop

2. en:contactor=1 для состояния move

 

Примечание. В каждом состоянии можно задавать действия над введенными переменными, для этого необходимо поставить метку «en:» и прописать желаемое действие.

 

 

Рис.11

 

Запустите моделирование и убедитесь в изменении показания компонента Display при формировании событий с помощью компонента Manual Switch.

Усложним рассматриваемый пример за счет введения ветвления при осуществлении переходов и добавлении входа для данных. Допустим, что в системе существует датчик температуры двигателя. При превышении заданной температуры необходимо запрещать пуск двигателя. Для введения входа для датчика температуры необходимо подать команду Add-Data-Input from Simulink (рис.12)

 

 

Рис.12

 

В появившемся окне задайте имя входа (поле Name) как temperature и нажмите ОК. В окне редактора модели к появившемуся входу temperature компонента Chart прикрепите константу для задания температуры (рис.13).

В редакторе диаграмм, используя кнопку создания точек ветвления (рис.3), создайте диаграмму как на рис.13 В отличии от событий, при формировании условных переходов по входу данных (в данном случае temperature) необходимо применять знаки «[ ]» (см. рис.13).

Промоделируйте работу конечного автомата (имитируя события через Симулинк) при задании температуры более 100 градусов и менее 100 градусов.

 

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

 

 

Рис.13

 

 

Задание для самостоятельной работы.

1. Разработайте конечный автомат согласно рис.2. Для активации автомата примените синусоидальный генератор. В результате конечный автомат должен иметь 2 выхода (управление прямым и реверсивным контакторами), 1 событийный вход (для генератора синусоидальных сигналов), 3 входа данных для управления (команды «Вперед», «Назад», «Стоп») и 3 состояния.. В качестве кнопок управления для подачи команд и индикаторов состояний используйте элементы группы Dials&Gauges Blockset, библиотека Global Majic ActiveX library (Buttons – кнопку, LEDs - светоиндикаторы).

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

3. Изменение момента нагрузки в задвижке происходит согласно нагрузочной диаграмме в функции от положения клина задвижки. Модифицируйте S-функцию, отвечающую за механизм таким образом, чтобы она отражала реальную работу задвижки.

 

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

1. Метод логической функции

2. Табличный метод

3. Алгоритмический метод.

Рассмотрим создание программы логического управления алгоритмическим методом.

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

Основными средствами языка С, которые будут использоваться в данном практикуму, являются следующие:

- Операторы +, -, *, /, <, >, <=, >=, = =,!=,

- Комментарии вида / *... * /; //

- Набор встроенных функций;

- Оператор if, if … else ….

В рассматриваемом языке существует ключевые слова, которые нельзя использовать для названий переменных и функций. Эти слова следующие: var, void, main, while, return, if, else.

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

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

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

При объявлении перменных необходимо руководствоваться следующим: первый символ должен быть обязательно буквенным, или символом подчеркивания, последующие символы должны быть буквами, цифрами или символами подчеркивания.
Например: temp, count_, set523 - это правильная запись, а 5count, t!set, r...temp – неправильная
Общая форма объявления переменной имеет такой вид:

float static x = 0; - для задания переменной «x» в формате плавающей запятой и начальной инициализацией «0»

int static y; для задания переменной «y» в формате целого числа.

 

В языке предусмотрены основные математические операции:
- - Вычитание, также унарный минус (умножает операнд на -1)
+ - Сложение
* - Умножение
/ - Деление

 

Приоритет выполнения арифметических операций следующий:

Высокий: - (унарный минус)
Средний: * /
Низкий: + -
Операции с одинаковым приоритетом выполняются слева направо. Используя круглые скобки можно изменить порядок вычислений, они придают операции (или последовательности операции) наивысший приоритет.
Пример:
int x = -30, y = 0;
x = x * 5 - 7 / (35 + 6); /* Здесь переменная примет значение -150.017 */
y = x - 10 * 20; /* Здесь переменная примет значение -350.017 */

В языке предусмотрены следующие операции сравнения:
> - Больше чем
>= - Больше или равно
< - Меньше чем
<= - Меньше или равно
!= - Не равно
== - Равно

Как и в арифметических выражениях, для изменения порядка выполнения операций сравнения можно использовать круглые скобки.
Общая форма оператора if следующая:
if (выражение) { оператор; }
else { оператор; }

 

Здесь оператор может быть одним оператором или блоком операторов. Фраза else может отсутствовать.
Если выражение истинно, то выполняется оператор, следующий за if. В противном случае выполняется оператор, следующий за else.
Пример реализации оператора if:
int x = 30, y1 = 0, y2 = 0;
if (x > 0) y1 = 10; /* Переменная примет значение 10 */
if (x == 20) y2 = 5;} /* Переменная примет значение 20 */
else y2 = 20;

Разработка программы управления может быть сведена к следующему:

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

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

3. В каждом компоненте количественно определяется условие достижения цели работы компонента.

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

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

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

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

float static out_o=0;

float static out_z=0;

float static out_oing=0;

float static out_zing=0;

float static command_=0;

float static speed=0;

float static position=50;

float static mode=1;

float static a=0;

void main()

{while(1)

{ if (mode==0)

{ speed=0; out_oing=0;out_zing=0;

if (position==0) {out_z=1;out_o=0;}

if (position==100) {out_z=0;out_o=1;}

if (command_==1) {mode=1;}

if (command_==2) {mode=2;}

}

if (mode==1)

{ speed=50; out_z=0;

out_o=0; out_oing=1;

if (command_==0) {mode=0;}

position=position+1;

if (position>100) position=100;

if (position==100) { mode=0; }

}

if (mode==2)

{ speed=-50;

out_zing=1;

out_z=0;out_o=0;

if (command_==0) {mode=0;}

position=position-1;

if (position<0) position=0;

if (position==0) { mode=0;}

} command_=55; a=0; while(a<55555) { a=a+1; }

}

}

Задание для самостоятельной работы

Реализуйте данное управление в виде S-функции для управления моделью электропривода задвижки.

 

 


Поделиться с друзьями:

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

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

Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...

Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.056 с.