Автор работы: Пользователь скрыл имя, 27 Октября 2013 в 20:20, курсовая работа
Создать систему управления подъемным краном склада на базе PLC Modicon M340, используя операторскую панель Magelis. В проекте должно присутствовать моделирование пути, анимированная панель управления для операторской панели.
1. Постановка задачи..……………………………………………………….3
2. Техническое задание…………...………….……….……………………..3
3. Функциональная спецификация……………………………………........4
4. Диаграмма разгона-торможения крана.…………..…….……....…….....5
5. Проектирование аппаратной части..……………………………..………6
6. Проектирование программной части..…………………………..………7
7. Таблица переменных..…………………………..…………………...…8-9
8. Скрипты..…………………………..………………………….…...…10-13
9. Примеры работы программы..…..………………………….………..…14
10. Заключение……………………..………………………….………..…15
САНКТ-ПЕТЕРБУРГСКИЙ
ФАКУЛЬТЕТ ТЕХНИЧЕСКОЙ КИБЕРНЕТИКИ
КАФЕДРА САУ
Курсовая работа
«Разработка HMI для системы управления складским краном на базе PLC Modicon M340 и операторской панели Magelis»
Проверил: Щербина А.Н.
Выполнил: студент гр.4083/11
Дегтярев Д.С.
САНКТ-ПЕТЕРБУРГ 2010 г.
1. Постановка задачи..……………………………………………………….
2. Техническое задание…………...………….……….…………………
3. Функциональная спецификация……………………………………....
4. Диаграмма разгона-торможения крана.…………..…….……....…….....5
5. Проектирование аппаратной части..……………………………..………6
6. Проектирование программной части..…………………………..………7
7. Таблица переменных..…………………………
8. Скрипты..…………………………..………………………
9. Примеры работы программы..…..…
10. Заключение……………………..…………………………
Постановка задачи
Создать систему управления подъемным краном склада на базе PLC Modicon M340, используя операторскую панель Magelis. В проекте должно присутствовать моделирование пути, анимированная панель управления для операторской панели.
Техническое задание
Функциональная спецификация
Диаграмма разгона-торможения крана
На диаграмме представлены зависимости пути, скорости, ускорения и рывка от времени (S(t), V(t), a(t), r(t) соответственно). Все время «поделено» на отрезки , которые обозначены
Общая формула для вычисления перемещения крана на любом отрезке времени будет выглядеть так:
Проектирование аппаратной части
Для реализации курсовой работы мною была выбрана операторская панель Magelis XBTGT4000 series, диагональю 7.5 дюймов и разрешением экрана 640х480 пикселей. Общую схему подключения панели к ПЛК можно представить так:
Проектирование программной части
Вся программная часть курсовой работы была создана в программе Vijeo Designer, которая является средой разработки для операторских панелей Magelis.
Основная задача, которая стояла передо мной – это создать визуализацию работы складского крана. Для это я создал три рабочих панели: «Меню», «Управление краном» и «Настройки».
На каждой панели дублируются:
Панель «Меню» содержит:
Панель «Управление краном» содержит:
Панель «Настройки» содержит:
Таблица переменных
№ |
Имя тега |
Тип |
Его описание, комментарий |
1 |
a |
real |
Величина ускорения в данный момент времени |
2 |
auto |
bool |
Режим управления (автоматический или ручной) |
3 |
By_box_mess |
bool |
Вывод всплывающего окна, если выбор координат «По ячейке» |
4 |
done |
bool |
Вывод всплывающего окна, если кран завершил работу |
5 |
error |
bool |
Вывод всплывающего окна, если не введены параметры крана |
6 |
go |
bool |
Запуск крана, если введенные параметры устраивают пользоват. |
7 |
Kran_ready |
bool |
Состояние крана («готов», «не готов») |
8 |
Open_go |
bool |
Вывод всплывающего окна перед запуском крана |
9 |
Ostanov |
bool |
Аварийный останов |
10 |
Rasst_mes |
bool |
Вывод всплывающего окна, если выбор координат «По координате» |
11 |
rivok |
real |
Величина рывка в данный момент времени |
12 |
s |
real |
Величина перемещения крана в данный момент времени |
13 |
Sbros |
bool |
Сброс введенных координат |
14 |
Show_correct |
bool |
Вывод всплывающего окна, если введенный параметрв верны |
15 |
Speed |
real |
Максимальное значение скорости (вводится пользователем) |
16 |
Start |
bool |
Пуск крана |
17 |
Start_Manual |
bool |
Ручной пуск крана |
18 |
Synhronize |
bool |
Синхронизация крана |
19 |
T |
real |
Величина времени (переменная, по которой идет счетчик) |
20 |
T1 |
real |
Время, за которое был пройден первый отрезок из диаграммы |
21 |
T2 |
real |
Время, за которое был пройден второй отрезок из диаграммы |
22 |
T3 |
real |
Время, за которое был пройден третий отрезок из диаграммы |
23 |
T4 |
real |
Время, за которое был пройден четвертый отрезок из диаграммы |
24 |
T5 |
real |
Время, за которое был пройден пятый отрезок из диаграммы |
25 |
T6 |
real |
Время, за которое был пройден шестой отрезок из диаграммы |
26 |
T7 |
real |
Время, за которое был пройден седьмой отрезок из диаграммы |
27 |
Uskor |
real |
Максимальное значение ускорения (вводится пользователем) |
28 |
V |
real |
Величина скорости в данный момент времени |
29 |
X_dest |
real |
Координата Х (вводится пользователем) |
30 |
X_move |
bool |
Движение крана по оси Х |
31 |
X1 |
real |
Величина координаты Х в данный момент времени |
32 |
X1_1 |
real |
Путь по Х, который пройден за первый отрезок из диаграммы |
33 |
X2_1 |
real |
Путь по Х, который пройден за второй отрезок из диаграммы |
34 |
X3_1 |
real |
Путь по Х, который пройден за третий отрезок из диаграммы |
35 |
X4_1 |
real |
Путь по Х, который пройден за четвертый отрезок из диаграммы |
36 |
X5_1 |
real |
Путь по Х, который пройден за пятый отрезок из диаграммы |
37 |
X6_1 |
real |
Путь по Х, который пройден за шестой отрезок из диаграммы |
38 |
X7_1 |
real |
Путь по Х, который пройден за седьмой отрезок из диаграммы |
39 |
Y |
real |
Величина координаты Y в данный момент времени |
40 |
Y_dest |
real |
Координата Y (вводится пользователем) |
41 |
Y_move |
bool |
Движение крана по оси Y |
42 |
Y1_1 |
real |
Путь по Y, который пройден за первый отрезок из диаграммы |
43 |
Y2_1 |
real |
Путь по Y, который пройден за второй отрезок из диаграммы |
44 |
Y3_1 |
real |
Путь по Y, который пройден за третий отрезок из диаграммы |
45 |
Y4_1 |
real |
Путь по Y, который пройден за четвертый отрезок из диаграммы |
46 |
Y5_1 |
real |
Путь по Y, который пройден за пятый отрезок из диаграммы |
47 |
Y6_ |
real |
Путь по Y, который пройден за шестой отрезок из диаграммы |
48 |
Y7_1 |
real |
Путь по Y, который пройден за седьмой отрезок из диаграммы |
49 |
Z |
real |
Величина координаты Z в данный момент времени |
50 |
Z_dest |
bool |
Координата Z (вводится пользователем) |
51 |
Z_move |
bool |
Движение крана по оси Z |
52 |
Z1_1 |
real |
Путь по Z, который пройден за первый отрезок из диаграммы |
53 |
Z2_1 |
real |
Путь по Z, который пройден за второй отрезок из диаграммы |
54 |
Z3_1 |
real |
Путь по Z, который пройден за третий отрезок из диаграммы |
55 |
Z4_1 |
real |
Путь по Z, который пройден за четвертый отрезок из диаграммы |
56 |
Z5_1 |
real |
Путь по Z, который пройден за пятый отрезок из диаграммы |
57 |
Z6_1 |
real |
Путь по Z, который пройден за шестой отрезок из диаграммы |
58 |
Z7_1 |
real |
Путь по Z, который пройден за седьмой отрезок из диаграммы |
Для того, чтобы правильно моделировать движение крана, программу нужно писать в контроллере, а не в среде Vijeo Designer.
Для построения диаграммы разгона-торможения крана из контроллера нам надо будет взять переменные «X», «Y», «Z», и «t». Кроме этого, нужны будет переменные, отвечающие за «Пуск/стоп», «Аварийный останов» и т.д.
Скрипты
Для моделирования работы крана я использовал триггер, который с шагом 0,1 секунда вычисляет текущее значение координат X,Y,Z.
К сожалению, этот шаг работы триггера очень велик для точного расчета координаты, поэтому это ведет к «пропуску» значений и большим погрешностям. Лучше всего писать код в контроллере, а потом из контроллера посылать значения в операторскую панель.
Скрипт – «По условию» - (Start==1||Start_manual==1)&&
Данный скрипт вычисляет время t1,t2,t4,v,x2_1 перед запуском программы:
t1.write(uskor.getFloatValue()
v.write(rivok.getFloatValue()*
t2.write((speed.getFloatValue(
x1.write(rivok.getFloatValue()
x2_1.write(uskor.
t4.write((x_dest.
open_go.write(1); // вызываем всплывающее окно перед запуском крана
Скрипт – «По триггеру
с шагом 0.1 сек» - Start==1&&Start_manual!=1&&go=
Данный скрипт вычисляет координату Х, скорость v, ускорение a на каждом отрезке времени t.
float t0,t2_1,t3_1,t4_1,t5_1,t6_1,
t0=0;
t2_1=0;
t3_1=0;
t4_1=0;
t5_1=0;
t6_1=0;
t7_1=0;
x_all=0;
t.write(t.getFloatValue()+0.1)
if (t.getFloatValue()< t1.getFloatValue()) // условие, если время первого отрезка диаграммы
{
a.write(t.getFloatValue()*
v.write(a.getFloatValue()*t.
x1.write(v.getFloatValue()*t.
x1_1.write(x1.getFloatValue())
}
t2_1=t1.getFloatValue()+t2.
if (t1.getFloatValue()<t.
{
a.write(uskor.getFloatValue())
v.write(v.getFloatValue()+(a.
x1.write(x1.getFloatValue()+v.
x2_1.write(x1.getFloatValue()-
}
t3.write(t1.getFloatValue());/
t3_1=t1.getFloatValue()+t2.
if (t2_1<t.getFloatValue()&& t.getFloatValue()<=t3_1) // условие, если время третьего отрезка диаграммы
{
a.write(a.getFloatValue()-(
v.write(v.getFloatValue()+a.
x1.write(x1.getFloatValue()+v.
x3_1.write(x1.getFloatValue()-
}
t5.write(t3.getFloatValue());/
t6.write(t2.getFloatValue());/
t7.write(t1.getFloatValue());/
x7_1.write(x1_1.getFloatValue(
x6_1.write(x2_1.getFloatValue(
x5_1.write(x3_1.getFloatValue(
t4_1=t1.getFloatValue()+t2.
if (t3_1<t.getFloatValue()&& t.getFloatValue()<=t4_1) // условие, если время четвертого отрезка диаграммы
{
a.write(0); // ускорение на этом отрезке равно 0
x1.write(x1.getFloatValue()+(
}
t5_1=t1.getFloatValue()+t2.
if (t4_1<t.getFloatValue()&& t.getFloatValue()<t5_1) // условие, если время пятого отрезка диаграммы
{
a.write(a.getFloatValue()-(
v.write(v.getFloatValue()+(a.
x1.write(x1.getFloatValue()+v.
}
t6_1=t1.getFloatValue()+t2.
if (t5_1<t.getFloatValue()&& t.getFloatValue()<=t6_1) // условие, если время шестого отрезка диаграммы
{
a.write(-uskor.getFloatValue()
v.write(v.getFloatValue()+(a.
x1.write(x1.getFloatValue()+v.
}
t7_1=t1.getFloatValue()+t2.
if (t6_1<t.getFloatValue()&& t.getFloatValue()<=t7_1) // условие, если время седьмого отрезка диаграммы
{
a.write(a.getFloatValue()+(
v.write(v.getFloatValue()+(a.