Факультет Электротехники и автоматики
Кафедра Систем автоматического управления
КУРСОВОЙ ПРОЕКТ
по дисциплине
«Проектирование автоматизированных производственных комплексов и систем»
на тему
РАЗРАБОТКА АВТОМАТИЗИРОВАННОЙ СИСТЕМЫ УПРАВЛЕНИЯ КОЗЛОВЫМ КРАНОМ
Студент гр. № 0492 (Суслов М.В)
Преподаватель:
доц., к.т.н. (Филатов Д.М.)
Санкт-Петербург,
2015г.
Задание на курсовое проектирование
Объект автоматизации
Название: Кран козловой перегрузочный общего назначения
Назначение: кран козловой предназначен для перемещения грузов внутри цеха.
Функции: кран козловой перемещается вдоль направляющих (рельсы) во всю их длину. Тележка, подвешенная к мосту крана может передвигаться вдоль моста. На тележке установлен подъемный механизм, способный опускать и поднимать груз.
Контролируемые параметры: Координаты положения моста крана,
тележки на мосту, а также высота положения крюка подъемного механизма –
измеряются линейным расстоянием от точки отсчета (крайнее положение). Концевые
выключатели сигнализируют о достижении крайних положений перемещения подвижных
элементов
Исполнительные устройства: реверсивные электродвигатели, приводящие в движение подъемное устройство, тележку и мост козлового крана
Требования к автоматизированной системе управления:
Автоматизированная система управления должна обеспечивать возможность ручного управления перемещением крана при помощи кнопок «Влево», «Вправо», «Вверх», «Вниз», отображения текущего положения на пользовательском графическом интерфейсе, а также возможность задания координат, в которые должен переместиться кран.
Студент ________________ Преподаватель ____________________
(Суслов М.В.) (Филатов Д.М.)
Содержание
СОДЕРЖАНИЕ. 2
ВВЕДЕНИЕ. 2
1 Описание объекта автоматизации. 2
2 Разработка программы логического контроллера. 2
2.1. Конфигурация контроллера. 2
2.2 Написание программы в ОрепРСS. 2
2.3 Настройка протокола МоdВиsТСР в режиме Маster. Организация связи с верхним уровнем. 2
3 Разработка человеко-машинного интрефейса. 2
ЗАКЛЮЧЕНИЕ. 2
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ.. 2
ПРИЛОЖЕНИЕ А.. 2
ПРИЛОЖЕНИЕ Б. 2
Введение
Цель курсового проекта «Разработка автоматизированной системы управлением техническим объектом» состоит в повышении уровня знаний студентов в области построения систем промышленной автоматизации, в изучении основных этапов разработки автоматизированных систем, применении программируемых логических контроллеров (ПЛК) для управления технологическим процессом.
В результате выполнения курсового проекта студенты приобретают навыки составления программ на языках стандарта МЭК 61131-3 для ПЛК, навыки создания многоуровневых автоматизированных систем, а также навыки по описанию, оформлению и представлению результатов проделанной работы.
В процессе выполнения курсового проекта необходимо составить описание объекта автоматизации, определить требования к составу модулей ПЛК, составить алгоритм управления техническим объектом и реализовать его языках программирования стандарта МЭК 61131-3, создать человеко-машинный интерфейс средствами SCADA-системы и организовать взаимосвязь ПЛК и SCADA-системы.
1 Описание объекта автоматизации
В качестве объекта автоматизации в данной курсовой работе рассматривается козловой кран общего назначения. Козловой кран состоит из следующих элементов:
· металлический мост;
· тележка, установленная или подвешенная на мосту и способная по нему передвигаться;
· две опоры, каждая из которых включает одну или две стойки;
· платформы опор для передвижения по подкрановому пути;
· механизм подъёма груза;
· механизм передвижения тележки;
· механизм передвижения крана.
Типовой козловой кран имеет следующие характеристики:
· грузоподъемность: 3,2-50 т;
· пролет: 10-40 м;
· Высота подъема: 7-16 м.
Управление краном производится подачей сигналов в модули управления электроприводами моста, тележки и грузоподъемного механизма. Таким образом, в рассматриваемой системе имеется 6 управляющих сигналов, обеспечивающих передвижение по трем осям.
Для обеспечения управления, необходимо использование датчиков положения, выход которых пропорционален координатам положения подвижных элементов крана. Для ограничения перемещений по координатам необходимы датчики концевого положения, по два на каждую координату. Таким образом, для реализации управления системой, необходимо обработка сигналов трех аналоговых и шести дискретных датчиков.
Автоматизированная система должна обеспечивать возможность управления перемещением подвижных элементов крана по заданию в ручном режиме при помощи кнопок «Вверх», «Вниз» (для подъемного механизма), «Вправо», «Влево» (для тележки и для моста). Также должна быть предусмотрена возможность по позиционированию крана по заданным координатам.
Графический интерфейс оператора крана должен содержать элементы управления движением (кнопки задания направления движения, кнопки остановки), а также поля ввода координат позиционирования крана. Кроме того, необходим вывод на экран текущего положения подвижных элементов крана. При достижении крайних позиций, сигнал управления должен автоматически сниматься, на экране должно появиться информационное сообщение о срабатывании концевого датчика, а кнопка движения в эту сторону должна быть неактивна. Перемещение в заданное положение должно осуществляться по введенным координатам положения по нажатию кнопки «Установить».
2 Разработка программы логического контроллера
2.1. Конфигурация контроллера
Первым шагом при конфигурировании контроллера является определение количества и типа модулей, необходимых для выполнения поставленной задачи. Для реализации автоматизированного управления козловым краном, необходимо использовать модули аналогового и дискретного ввода, а также модуль дискретного вывода. Для реализации пользовательского графического интерфейса используем модуль связи по протоколу ModBUS TCP. Используемые модули представлены в таблице 2.1.
Таблица 2.1 Используемые модули в конфигурации
Название модуля |
Краткое описание |
00_main |
Процессорный модуль |
01_mbm2h |
Коммуникационный модуль ТN 503 СОМ 485 |
03_a516 |
Интеллектуальный модуль аналогового ввода TA 516 |
04_d501 |
Модуль дискретного ввода ТD 501 |
05_d502 |
Модуль дискретного вывода ТD 502 |
12_mbstcp |
Программный модуль Моdbus ТСР |
15_opcs |
Программный модуль для работы с ОреnРСS |
При настройке модулей указываются требуемые параметры. В модуле 00_main задан необходимый IР адрес контроллера (192.168.10.18), а в модуле 12_mbstcp – IP адрес компьютера, опрашивающего контроллер (192.168.10.38).
Создадим новые выходные сигналы и установим их маршруты в соответствии с таблицей 2.2
Таблица 2.2 Сигналы модулей программируемого логического контроллера
Вых. сигнал |
Вых. Модуль |
Вых. адрес |
Тип |
Вх. модуль |
Вх. адрес |
Комментарий |
AnalIn_1 |
03_a516 |
I:12 |
F4 |
15_opcs |
N:0:1 |
Датчик полож. крана |
AnalIn_2 |
03_a516 |
I:13 |
F4 |
15_opcs |
N:0:2 |
Датчик полож. Тележки |
AnalIn_3 |
03_a516 |
I:14 |
F4 |
15_opcs |
N:0:3 |
Датчик полож. подъемного устройства |
DigIn_1 |
04_d501 |
I:12 |
B1 |
15_opcs |
N:0:0 |
Байт состояния концевых выкл. |
cabine_mov |
12_mbstcp |
N:0:16:31 |
U2 |
15_opcs |
N:0:4 |
Ручн. управ. тележкой |
cargo_mov |
12_mbstcp |
N:0:16:32 |
U2 |
15_opcs |
N:0:5 |
Ручн. управ. подъ. мех. |
lifter_mov |
12_mbstcp |
N:0:16:33 |
U2 |
15_opcs |
N:0:6 |
Ручн. управ. Краном |
Set_pos_cabine |
12_mbstcp |
N:0:16:34 |
U2 |
15_opcs |
N:0:7 |
Авт. управ. тележкой |
Set_pos_lifter |
12_mbstcp |
N:0:16:36 |
U2 |
15_opcs |
N:0:8 |
Авт. управ. Краном |
Set_pos_cargo |
12_mbstcp |
N:0:16:35 |
U2 |
15_opcs |
N:0:9 |
Авт. управ. подъ. мех. |
Set_pos |
12_mbstcp |
N:0:15:37 |
Bool |
15_opcs |
N:0:10 |
Разрешение на авт. позицир. |
moves |
15_opcs |
N:1:41 |
B1 |
05_d502 |
I:2 |
Выход управ-я |
BotEndCarg |
15_opcs |
N:1:42 |
Bool |
12_mbstcp |
N:0:2:11 |
Ниж концев. |
TopEndCarg |
15_opcs |
N:1:43 |
Bool |
12_mbstcp |
N:0:2:14 |
Верх. концев. |
LEndCab |
15_opcs |
N:1:44 |
Bool |
12_mbstcp |
N:0:2:12 |
Лев. Концев. Тележки |
REndCab |
15_opcs |
N:1:45 |
Bool |
12_mbstcp |
N:0:2:15 |
Прав. концев. Тележки |
LEndLift |
15_opcs |
N:1:46 |
Bool |
12_mbstcp |
N:0:2:13 |
Лев. Концев. Крана |
REndLift |
15_opcs |
N:1:47 |
Bool |
12_mbstcp |
N:0:2:16 |
Прав. концев. Крана |
cabine_pos |
15_opcs |
N:1:22 |
U2 |
12_mbstcp |
N:0:4:21 |
Текущ. Коорд. тележки |
cargo_pos |
15_opcs |
N:1:23 |
U2 |
12_mbstcp |
N:0:4:22 |
Текущ. Коорд. подъем. |
lifter_pos |
15_opcs |
N:1:24 |
U2 |
12_mbstcp |
N:0:4:23 |
Текущ. Коорд. крана |
По умолчанию в настройках модуля ТD502 время удержания выходов в состоянии «ВКЛЮЧЕНО» равно 3 c, после чего сигнал сбрасывается в ноль. Чтобы сигнал постоянно удерживался в состоянии «ВКЛЮЧЕНО», необходимо в основных параметрах модуля d502 установить значения для параметров TimeCnl1... TimeCnl32 равными нулю.
Полученные переменные ОРСS сгенерируем в буфер обмена.
2.2 Написание программы в ОрепРСS
Переменные, созданные при конфигурации контроллера, поместим в область локальных переменных программы. Добавим в программу переменные, содержащие вычисленные значения координат по датчикам (или вычисленные в режиме симуляции – при отладке программы). Также для симуляции необходим набор переменных, которые представляют собой моделирование срабатывания концевых датчиков.
Условно все расстояния приведены к шкале 0…100, где 0 означает крайнее начальное положение: для подъемника – нижнее, для тележки и крана – крайние левые положения. Противоположные крайние положения, соответственно, на данной шкале будут иметь значение 100.
Основной цикл работы программы начинается с проверки состояния датчиков. Затем проверяется условие – при наличии сигнала Set_pos работает блок программы, отвечающий за достижение текущей позиции крана заданного оператором значения, т.е. автоматизированного управления. При опущенном флаге Set_pos, движения крана по непосредственным командам оператора. Управляющие воздействия формируются при учете формата работы, а также принимается во внимание возможность движения в заданном направлении, т.е. проверяется срабатывание концевых выключателей. При сработавшем концевом выключателе продолжение движения в этом направлении не допустимо.
В цикле работы программы также формируются выходные переменные, передаваемые в графический интерфейс посредством Modbus, необходимые для отображения текущего положения и состояния козлового крана и его элементов.
Для отладки программы реализован режим симуляции. В данном режиме формируются выходные переменные и сигналы управления, но входные сигналы датчиков заменены на переменные, вычисляемые в ходе основного цикла. Тем самым появляется возможность имитации работы крана для отладки программы и разработки пользовательского интерфейса.
Полный листинг программы приведен в приложении А.
2.3 Настройка протокола МоdВиsТСР в режиме Маster. Организация связи с верхним уровнем
Для организации связи с верхним уровнем, необходимо настроить сервер OPC. В конфигураторе сервера создадим новую конфигурацию.
Добавим модуль «Модуль МоdВus ТСР/IР Маster Моdule», сделаем его активным и перейдите к настройке конфигурации модуля. Во вкладке «Общие параметры» укажем номер логического канала - 0. Во вкладке «Маршруты» добавим новый маршрут под номером 1 с IР-адресом контроллера, с которым работаем (192.168.10.38).
В конфигураторе сервера ввода/вывода в папке Lifter создадим сигналы и настроим для этих сигналов протокол МоdВus. Для этого на вкладке «Редактор адреса» в поле «Доступные протоколы» выберем МоdВus, в поле «Устройство» выберем «Канал МоdBus 0». Настройки сигналов приведены в табл. 2.3.
Таблица 2.3 Настройка сигналов OPC-сервера
Имя |
Тип |
Протокольный |
Адрес |
Номер |
Тип сегмента |
сигнала |
данных |
Тип |
сигнала |
маршрута |
|
Передаваемые переменные |
|||||
Set_pos_cabine |
U2 |
Телерегулирование |
35 |
1 |
4-x регистры |
Set_pos_cargo |
U2 |
Телерегулирование |
36 |
1 |
4-x регистры |
Set_pos_lifter |
U2 |
Телерегулирование |
37 |
1 |
4-x регистры |
cargo_mov |
U2 |
Телерегулирование |
33 |
1 |
4-х регистры |
cabine_mov |
U2 |
Телерегулирование |
32 |
1 |
4-х регистры |
lifter_mov |
U2 |
Телерегулирование |
34 |
1 |
4-х регистры |
Set_pos |
Boolean |
Телеуправление |
38 |
1 |
2-х ячейки |
Принимаемые переменные |
|||||
cargo_pos |
U2 |
Телеизмерения |
22 |
1 |
3-х регистры |
cabine_pos |
U2 |
Телеизмерения |
21 |
1 |
3-х регистры |
lifter_pos |
U2 |
Телеизмерения |
23 |
1 |
3-х регистры |
LEndLift |
Boolean |
Телесигнализация |
13 |
1 |
1-x ячейки |
REndLift |
Boolean |
Телесигнализация |
16 |
1 |
1-x ячейки |
LEndCab |
Boolean |
Телесигнализация |
12 |
1 |
1-x ячейки |
REndCab |
Boolean |
Телесигнализация |
15 |
1 |
1-x ячейки |
TEndCarg |
Boolean |
Телесигнализация |
14 |
1 |
1-x ячейки |
BotEndCarg |
Boolean |
Телесигнализация |
11 |
1 |
1-x ячейки |
В данной таблице приведены передаваемые в контроллер и принимаемые из него переменные, которые будут использованы для создания пользовательского интерфейса.
3 Разработка человеко-машинного интрефейса
Графический интерфейс пользователя содержит две функциональные области:
· Область анимированного отображения текущего состояния управляемого объекта (отображение в пространстве расположения движущихся элементов);
· Область элементов управления и информационно-сигнальных элементов.
Область анимированного отображения включает в себя:
· фронтальное изображение козлового крана, на котором показывается текущее расположение кабины и подъемного устройства
· профильное изображение козлового крана на фоне схематично изображенного цеха, разделенного на производственные участки. При этом показывается текущая позиция крана на рельсах цеха.
Область элементов управления и информационно-сигнальных элементов включает в себя три сгруппированных и разграниченных области:
1. Управление подъемником состоит из элементов:
· Динамический объект "Значение параметра", отображающее текущее значение сигнала позиции положения подъемника по формуле:
x = 100-{{Infinity.OPCServerLifter.cargo_pos}}
· Кнопка "Вверх". Динамическое действие – передача значения в переменную {{Infinity.OPCServerLifter.cargo_mov}}. Значение "Если нажато" = 1 при обычном нажатии левой клавишей мыши. Кроме того к этому объекту применено динамическое действие "Скрыть/Блокировать": при значении True переменной {{Infinity.OPCServerLifter.TEndCarg}} происходит блокировка объекта.
· Кнопка "Вниз". Динамическое действие – передача значения в переменную {{Infinity.OPCServerLifter.cargo_mov}}. Значение "Если нажато" = 2 при обычном нажатии левой клавишей мыши. Кроме того к этому объекту применено динамическое действие "Скрыть/Блокировать": при значении True переменной {{Infinity.OPCServerLifter.BEndCarg}} происходит блокировка объекта.
· Кнопка "Стоп". Динамическое действие – передача значения в переменную {{Infinity.OPCServerLifter.cargo_mov}}. Значение "Если нажато" = 0 при обычном нажатии левой клавишей мыши.
· Надпись "Верхний концевой выключатель". К этому объекту применено динамическое действие "Скрыть/Блокировать": при значении False переменной {{Infinity.OPCServerLifter.TEndCarg}} происходит скрытие объекта.
· Надпись "Нижний концевой выключатель". К этому объекту применено динамическое действие "Скрыть/Блокировать": при значении False переменной {{Infinity.OPCServerLifter.BEndCarg}} происходит скрытие объекта.
2. Управление кабиной
· Динамический объект "Значение параметра", отображающее текущее значение сигнала позиции положения кабины {{Infinity.OPCServerLifter.cabine_pos}}
· Кнопка "Влево". Динамическое действие – передача значения в переменную {{Infinity.OPCServerLifter.cabine_mov}}. Значение "Если нажато" = 2 при обычном нажатии левой клавишей мыши. Кроме того к этому объекту применено динамическое действие "Скрыть/Блокировать": при значении True переменной {{Infinity.OPCServerLifter.LEndCabine}} происходит блокировка объекта.
· Кнопка "Вправо". Динамическое действие – передача значения в переменную {{Infinity.OPCServerLifter.cabine_mov}}. Значение "Если нажато" = 1 при обычном нажатии левой клавишей мыши. Кроме того к этому объекту применено динамическое действие "Скрыть/Блокировать": при значении True переменной {{Infinity.OPCServerLifter.REndCabine}} происходит блокировка объекта.
· Кнопка "Стоп". Динамическое действие – передача значения в переменную {{Infinity.OPCServerLifter.cabine_mov}}. Значение "Если нажато" = 0 при обычном нажатии левой клавишей мыши.
· Надпись "Левый концевой выключатель". К этому объекту применено динамическое действие "Скрыть/Блокировать": при значении False переменной {{Infinity.OPCServerLifter.LEndCabine}} происходит скрытие объекта.
· Надпись "Правый концевой выключатель". К этому объекту применено динамическое действие "Скрыть/Блокировать": при значении False переменной {{Infinity.OPCServerLifter.REndCabine}} происходит скрытие объекта.
3. Управление краном
· Динамический объект "Значение параметра", отображающее текущее значение сигнала позиции положения крана {{Infinity.OPCServerLifter.lifter_pos}}
· Кнопка "Влево". Динамическое действие – передача значения в переменную {{Infinity.OPCServerLifter.lifter_mov}}. Значение "Если нажато" = 2 при обычном нажатии левой клавишей мыши. Кроме того к этому объекту применено динамическое действие "Скрыть/Блокировать": при значении True переменной {{Infinity.OPCServerLifter.LEndLift}} происходит блокировка объекта.
· Кнопка "Вправо". Динамическое действие – передача значения в переменную {{Infinity.OPCServerLifter.lifter_mov}}. Значение "Если нажато" = 1 при обычном нажатии левой клавишей мыши. Кроме того к этому объекту применено динамическое действие "Скрыть/Блокировать": при значении True переменной {{Infinity.OPCServerLifter.REndLift}} происходит блокировка объекта.
· Кнопка "Стоп". Динамическое действие – передача значения в переменную {{Infinity.OPCServerLifter.lifter_mov}}. Значение "Если нажато" = 0 при обычном нажатии левой клавишей мыши.
· Надпись "Левый концевой выключатель". К этому объекту применено динамическое действие "Скрыть/Блокировать": при значении False переменной {{Infinity.OPCServerLifter.LEndLift}} происходит скрытие объекта.
· Надпись "Правый концевой выключатель". К этому объекту применено динамическое действие "Скрыть/Блокировать": при значении False переменной {{Infinity.OPCServerLifter.REndLift}} происходит скрытие объекта.
Внешний вид интерфейса приведен в приложении Б.
Заключение
В ходе работы над курсовым проектом был реализован алгоритм управления козловым краном на базе программируемого логического контроллера. Также был разработан человеко-машинный интерфейс, позволяющий задавать управляющие воздействия на систему и наблюдать ее состояние.
Алгоритм работы описан на языке ST, который по структуре напоминает Pascal. В этом заключается его преимущество, как для тех, кто начинает осваивать программирование ПЛК, так и для разработчиков, читающих и отлаживающих написанный код.
В проекте был реализован как рабочий режим, когда данные, необходимые для управления и определения текущей позиции, принимаются от датчиков, так и режим симуляции. Режим симуляции необходим для проверки и отладки кода, причем в данном варианте управляющие воздействия формируются, а движение подвижных частей крана и работа датчиков моделируется.
Таким образом, применение ПЛК на среднем уровне АСУТП позволяет реализовывать требуемые режимы работы системы в целом. Применение ПЛК позволяет гибко взаимодействовать с элементами нижнего уровня, а также осуществляет связь с верхним уровнем, в частности со SCADA-системой.
Список использованных источников
1. Методические указания к выполнению курсового проекта по дисциплине «Проектирование автоматизированных производственных комплексов и систем» / Сост.: Е. С. Анушина, Д. М. Филатов – 2012 г.
2. Стандарт МЭК 61131-3
3. User Manual Open PCS 5.2.2 Infoteam Software GmbH, 2006
4. Петров И. В., «Программируемые контроллеры. Стандартные языки и приемы прикладного проектирования» / Под ред. проф. В. П. Дьяконова.-М.:СОЛОН-Пресс, 2004. — 256с
приложение а
Листинг программы
PROGRAM main
VAR
moves AT %QB0.0 :BYTE; (*N:1:41*)
moves_St AT %QW1.0 :INT;
moves_Fl AT %MX0.0 :BOOL;
BotEndCarg AT %QX3.0 :BOOL; (*N:1:42*)
BotEndCarg_St AT %QW4.0 :INT;
BotEndCarg_Fl AT %MX0.1 :BOOL;
TopEndCarg AT %QX3.1 :BOOL; (*N:1:43*)
TopEndCarg_St AT %QW6.0 :INT;
TopEndCarg_Fl AT %MX0.2 :BOOL;
LEndCab AT %QX3.2 :BOOL; (*N:1:44*)
LEndCab_St AT %QW8.0 :INT;
LEndCab_Fl AT %MX0.3 :BOOL;
REndCab AT %QX3.3 :BOOL; (*N:1:45*)
REndCab_St AT %QW10.0:INT;
REndCab_Fl AT %MX0.4 :BOOL;
LEndLift AT %QX3.4 :BOOL; (*N:1:46*)
LEndLift_St AT %QW12.0:INT;
LEndLift_Fl AT %MX0.5 :BOOL;
REndLift AT %QX3.5 :BOOL; (*N:1:47*)
REndLift_St AT %QW14.0:INT;
REndLift_Fl AT %MX0.6 :BOOL;
cabine_pos AT %QW16.0:UINT; (*N:1:22*)
cabine_pos_St AT %QW18.0:INT;
cabine_pos_Fl AT %MX0.7 :BOOL;
cargo_pos AT %QW20.0:UINT; (*N:1:23*)
cargo_pos_St AT %QW22.0:INT;
cargo_pos_Fl AT %MX1.0 :BOOL;
lifter_pos AT %QW24.0:UINT; (*N:1:24*)
lifter_pos_St AT %QW26.0:INT;
lifter_pos_Fl AT %MX1.1 :BOOL;
AnalIn_1 AT %ID0.0 :REAL; (*N:0:1*)
AnalIn_1_St AT %IW4.0 :INT;
AnalIn_1_Fl AT %MX1.2 :BOOL;
AnalIn_2 AT %ID6.0 :REAL; (*N:0:2*)
AnalIn_2_St AT %IW10.0:INT;
AnalIn_2_Fl AT %MX1.3 :BOOL;
AnalIn_3 AT %ID12.0:REAL; (*N:0:3*)
AnalIn_3_St AT %IW16.0:INT;
AnalIn_3_Fl AT %MX1.4 :BOOL;
DigIn_1 AT %IB18.0:BYTE; (*N:0:0*)
DigIn_1_St AT %IW19.0:INT;
DigIn_1_Fl AT %MX1.5 :BOOL;
cabine_mov AT %IW21.0:UINT; (*N:0:4*)
cabine_mov_St AT %IW23.0:INT;
cabine_mov_Fl AT %MX1.6 :BOOL;
cargo_mov AT %IW25.0:UINT; (*N:0:5*)
cargo_mov_St AT %IW27.0:INT;
cargo_mov_Fl AT %MX1.7 :BOOL;
lifter_mov AT %IW29.0:UINT; (*N:0:6*)
lifter_mov_St AT %IW31.0:INT;
lifter_mov_Fl AT %MX2.0 :BOOL;
Set_pos_cabine AT %IW33.0:UINT; (*N:0:7*)
Set_pos_cabine_St AT %IW35.0:INT;
Set_pos_cabine_Fl AT %MX2.1 :BOOL;
Set_pos_lifter AT %IW37.0:UINT; (*N:0:8*)
Set_pos_lifter_St AT %IW39.0:INT;
Set_pos_lifter_Fl AT %MX2.2 :BOOL;
Set_pos_cargo AT %IW41.0:UINT; (*N:0:9*)
Set_pos_cargo_St AT %IW43.0:INT;
Set_pos_cargo_Fl AT %MX2.3 :BOOL;
Set_pos AT %IX45.0:BOOL; (*N:0:10*)
Set_pos_St AT %IW46.0:INT;
Set_pos_Fl AT %MX2.4 :BOOL;
pos_cabine :UINT; (*Позиция тележки*)
pos_cargo :UINT; (*Позиция подъемника*)
pos_lifter :UINT; (*Позиция крана*)
(*для симуляции*)
pos_cabine_sim :REAL :=0.0; (*Расч.Позиция тележки*)
pos_cargo_sim :REAL :=0.0; (*Расч.Позиция подъем.*)
pos_lifter_sim :REAL :=0.0; (*Расч.Позиция крана*)
RECab_sim :BOOL; (*симул. концевого выкл.*)
LECab_sim :BOOL; (*симул. концевого выкл.*)
TECar_sim :BOOL; (*симул. концевого выкл.*)
BECar_sim :BOOL; (*симул. концевого выкл.*)
RELift_sim :BOOL; (*симул. концевого выкл.*)
LELift_sim :BOOL; (*симул. концевого выкл.*)
END_VAR
(*Чтение датчиков - работа*)
(*pos_cabine := REAL_TO_UINT(AnalIn_1);
pos_cargo := REAL_TO_UINT(AnalIn_2);
pos_lifter := REAL_TO_UINT(AnalIn_3);
BotEndCarg := DigIn_1.3;
TopEndCarg := DigIn_1.2;
LEndCab := DigIn_1.0;
REndCab := DigIn_1.1;
LEndLift := DigIn_1.4;
REndLift := DigIn_1.5;*)
(*Чтение датчиков - симуляция*)
pos_cabine := REAL_TO_UINT(pos_cabine_sim);
pos_cargo := REAL_TO_UINT(pos_cargo_sim);
pos_lifter := REAL_TO_UINT(pos_lifter_sim);
BotEndCarg := BECar_sim;
TopEndCarg := TECar_sim;
LEndCab := LECab_sim;
REndCab := RECab_sim;
LEndLift := LELift_sim;
REndLift := RELift_sim;
(* описание битов управления
moves.0 - лево кабина (-)
moves.1 - право кабина (+)
moves.2 - вверх подъемник (+)
moves.3 - вниз подъемник (-)
moves.4 - лево кран (-)
moves.5 - право кран (+) *)
(*Движение или задание позиции*)
if (Set_pos = 1) then (*Задание позиции*)
if (abs(Set_pos_cabine - pos_cabine)<1) then (*достигнуто*)
moves.0 := 0;
moves.1 := 0;
elsif (Set_pos_cabine > pos_cabine) then (*кабина левее*)
moves.0 := 0;
moves.1 := 1;
else (*кабина правее*)
moves.0 := 1;
moves.1 := 0;
end_if;
if (abs(Set_pos_lifter - pos_lifter)<1) then(*достигнуто*)
moves.4 := 0;
moves.5 := 0;
elsif (Set_pos_lifter > pos_lifter) then (*Кран левее*)
moves.4 := 0;
moves.5 := 1;
else (*Кран правее*)
moves.4 := 1;
moves.5 := 0;
end_if;
if (abs(Set_pos_cargo - pos_cargo)<1) then(*достигнуто*)
moves.2 := 0;
moves.3 := 0;
elsif (Set_pos_cargo < pos_cargo) then (*подъемник выше*)
moves.2 := 0;
moves.3 := 1;
else (*подъемник ниже*)
moves.2 := 1;
moves.3 := 0;
end_if;
else (*ручной режим*)
if (cabine_mov = 1)and(REndCab = 0) then (*кабина вправо*)
moves.0 := 0;
moves.1 := 1;
elsif (cabine_mov = 2)and(LEndCab = 0) then (*кабина влево*)
moves.0 := 1;
moves.1 := 0;
else (*достигнуто*)
moves.0 := 0;
moves.1 := 0;
end_if;
if (lifter_mov = 1)and(REndLift = 0) then (*кран вправо*)
moves.5 := 0;
moves.6 := 1;
elsif (lifter_mov = 2)and(LEndLift = 0) then (*кран влево*)
moves.5 := 1;
moves.6 := 0;
else (*достигнуто*)
moves.5 := 0;
moves.6 := 0;
end_if;
if (cargo_mov = 1)and(BotEndCarg = 0) then (*крюк вниз*)
moves.2 := 0;
moves.3 := 1;
elsif (cargo_mov = 2)and(TopEndCarg = 0) then (*крюк вверх*)
moves.2 := 1;
moves.3 := 0;
else (*достигнуто*)
moves.2 := 0;
moves.3 := 0;
end_if;
end_if;
cabine_pos := pos_cabine;
cargo_pos := pos_cargo;
lifter_pos := pos_lifter;
(*симуляция*)
if (moves.1 = 1)and(REndCab = 0) then (*кабина вправо*)
pos_cabine_sim := pos_cabine_sim+0.005;
elsif (moves.0 = 1)and(LEndCab = 0) then (*кабина влево*)
pos_cabine_sim := pos_cabine_sim-0.005;
else (*достигнуто*)
pos_cabine_sim := pos_cabine_sim;
end_if;
if (moves.5 = 1)and(REndLift = 0) then (*кран вправо*)
pos_lifter_sim := pos_lifter_sim+0.005;
elsif (moves.4 = 1)and(LEndLift = 0) then (*кран влево*)
pos_lifter_sim := pos_lifter_sim-0.005;
else (*достигнуто*)
pos_lifter_sim := pos_lifter_sim;
end_if;
if (moves.3 = 1)and(BotEndCarg = 0) then (*крюк вниз*)
pos_cargo_sim := pos_cargo_sim-0.005;
elsif (moves.2 = 1)and(TopEndCarg = 0) then (*крюк вверх*)
pos_cargo_sim := pos_cargo_sim+0.005;
else (*достигнуто*)
pos_cargo_sim := pos_cargo_sim;
end_if;
if (pos_cabine>100) then (*Правый концевик кабины*)
RECab_sim := 1;
else
RECab_sim := 0;
end_if;
if (pos_cabine<3) then (*Левый концевик кабины*)
LECab_sim := 1;
else
LECab_sim := 0;
end_if;
if (pos_cargo>100) then (*Верхний концевик крюка*)
TECar_sim := 1;
else
TECar_sim := 0;
end_if;
if (pos_cargo<3) then (*Нижний концевик крюка*)
BECar_sim := 1;
else
BECar_sim := 0;
end_if;
if (pos_lifter>100) then (*Правый концевик крана*)
RELift_sim := 1;
else
RELift_sim := 0;
end_if;
if (pos_lifter<3) then (*Левый концевик крана*)
LELift_sim := 1;
else
LELift_sim := 0;
end_if;
END_PROGRAM
приложение б
Графический пользовательский интерфейс
Рисунок Б.1 - Внешний вид мнемосхемы (в режиме редактирования)
Рисунок Б.2 - Внешний вид мнемосхемы (в режиме исполнения)