Разработка HMI для системы управления складским краном на базе PLC Modicon M340 и операторской панели Magelis

Автор работы: Пользователь скрыл имя, 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

Файлы: 1 файл

Управлени краном.docx

— 166.06 Кб (Скачать файл)

САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАСТВЕННЫЙ ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

ФАКУЛЬТЕТ ТЕХНИЧЕСКОЙ  КИБЕРНЕТИКИ

КАФЕДРА САУ

 

 

 

 

 

 

 

 

 

Курсовая работа

«Разработка HMI для  системы управления складским краном на базе PLC Modicon M340 и операторской панели Magelis»

 

 

 

 

 

 

 

 

Проверил: Щербина А.Н.

Выполнил: студент гр.4083/11

Дегтярев Д.С. 

 

 

 

 

 

 

САНКТ-ПЕТЕРБУРГ 2010 г.

Содержание


 

1. Постановка задачи..……………………………………………………….3

2. Техническое задание…………...………….……….……………………..3

3. Функциональная спецификация……………………………………........4

4. Диаграмма разгона-торможения крана.…………..…….……....…….....5

5. Проектирование аппаратной части..……………………………..………6

6. Проектирование программной  части..…………………………..………7

7. Таблица переменных..…………………………..…………………...…8-9

8. Скрипты..…………………………..………………………….…...…10-13

9. Примеры работы программы..…..………………………….………..…14

10. Заключение……………………..………………………….………..…15

 

 

 

 

Постановка задачи

Создать систему управления подъемным краном склада на базе PLC Modicon M340, используя операторскую панель Magelis. В проекте должно присутствовать моделирование пути, анимированная панель управления для операторской панели.

 

Техническое задание

  • Склад представляет собой помещение в форме параллелепипеда, длиной 100 метров, шириной 37 метров и высотой 12 метров. Предполагается складирование кубических объектов таким образом, чтобы по длине помещалось 47 объектов, по ширине 16 и по высоте 6
  • Кран представляет собой грузоподъемный механизм, который ездит по направляющим вдоль и поперек склада. Кран предназначен для складирования в автономном режиме, приема изделий
  • Погрешность установки изделия не должна превышать 5мм
  • Ускорение крана не должно превышать норм, принятых для складских кранов
  • Реализовать два режима управления краном: автоматический и ручной.
  • Реализовать регулирование скорости движения приводом крана для осуществления плавного старта и останова.
  • Реализовать аварийную остановку крана и светозвуковую сигнализацию при серьезных неисправностях
  • Система должна быть работоспособна в диапазоне температур от -40 до 60 градусов Цельсия
  • После запуска программа должна автоматически определить местоположение крана исходя из заданных параметров расстояния
  • Контроллер системы управления размещен на расстоянии >150 метров от рабочей станции оператора
  • Связь управляющего контроллера с компьютером оператора осуществляется по сети Ethernet.
  • Монтаж и техническая наладка производится в соответствии с функциональной схемой, которая представлена в данном проекте

 

Функциональная спецификация

  • Реализовать данный проект на ПЛК Modicon M340, с использованием операторской панели Magelis
  • В системе должно быть реализовано два режима управления: автоматический и ручной. В автоматическом режиме задаются точки позиционирования при складировании и приеме груза и далее без участия оператора выполняется манипулирование грузов. В ручном режиме выполняется независимое управление по любой координате перемещения крана (груза). Задание позиции выполняется по номеру ячейки или по пути перемещения
  • Предусмотреть влияние «рывка» на изделие. При рывке ускорение крана резко возрастает, что приводит к возникновению аварийно-опасной ситуации. Необходимо скомпенсировать явления рывка путем плавного пуска и останова
  • Обычно для связи контроллера с операторской панелью используются промышленные шины и сети (ModBus, ProfiBus, Ethernet). Современное состояние HMI, контроллеров и интерфейсов преобразователей частоты таково, что для реализации моего варианта с отображением процесса на панели Magelis целесообразно выбрать Ethernet. Для связи будем использовать блоки удлинителей, обеспечивающие надежное соединение на расстоянии до 13 километров
  • Для лучшего понимания задачи я построил диаграмму разгона-торможения крана, которая приведена на следующем листе

 

Диаграмма разгона-торможения крана












 





На диаграмме представлены зависимости пути, скорости, ускорения и рывка от времени (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)&&go==0

Данный скрипт вычисляет время t1,t2,t4,v,x2_1 перед запуском программы:

t1.write(uskor.getFloatValue()/rivok.getFloatValue()); //вычисляем t1=(Amax/Rmax)

v.write(rivok.getFloatValue()*t1.getFloatValue()*t1.getFloatValue()/2+uskor.getFloatValue()*t1.getFloatValue()); //вычисляем

t2.write((speed.getFloatValue()-v.getFloatValue())/uskor.getFloatValue());//вычисляем

x1.write(rivok.getFloatValue()*t1.getFloatValue()*t1.getFloatValue()*t1.getFloatValue()/6+uskor.getFloatValue()*t1.getFloatValue()*t1.getFloatValue()/2); //вычисляем

x2_1.write(uskor.getFloatValue()*t2.getFloatValue()*t2.getFloatValue()/2+v.getFloatValue()*t2.getFloatValue());//вычисляем величину пути на втором отрезке диаграммы

t4.write((x_dest.getFloatValue() - 4*x1.getFloatValue()-2*x2_1.getFloatValue())/speed.getFloatValue());//вычисляем время на четвертом отрезке диаграммы

open_go.write(1); // вызываем всплывающее окно перед запуском крана

 

 

Скрипт – «По триггеру с шагом 0.1 сек» - Start==1&&Start_manual!=1&&go==1&&x_move==1

Данный скрипт вычисляет координату Х, скорость v, ускорение a на каждом отрезке времени t.

 

float t0,t2_1,t3_1,t4_1,t5_1,t6_1,t7_1,x_all;

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()*rivok.getFloatValue());// вычисляем ускорение

v.write(a.getFloatValue()*t.getFloatValue());// вычисляем скорость

     x1.write(v.getFloatValue()*t.getFloatValue());// вычисляем текущую координату Х

     x1_1.write(x1.getFloatValue());// вычисляем длину первого отрезка диаграммы

}

t2_1=t1.getFloatValue()+t2.getFloatValue();// вычисляем время первых двух отрезков диаграммы

if (t1.getFloatValue()<t.getFloatValue()&& t.getFloatValue()<=t2_1) // условие, если время второго отрезка диаграммы

{

     a.write(uskor.getFloatValue());// вычисляем ускорение

     v.write(v.getFloatValue()+(a.getFloatValue()*0.1)); // вычисляем скорость

    x1.write(x1.getFloatValue()+v.getFloatValue()*0.1); // вычисляем текущую координату Х

     x2_1.write(x1.getFloatValue()-x1_1.getFloatValue());// вычисляем длину второго отрезка диаграммы

}

t3.write(t1.getFloatValue());// вычисляем время третьего отрезка диаграммы

t3_1=t1.getFloatValue()+t2.getFloatValue()+t3.getFloatValue();// вычисляем время первых трех отрезков диаграммы

if (t2_1<t.getFloatValue()&& t.getFloatValue()<=t3_1) // условие, если время третьего отрезка диаграммы

{

a.write(a.getFloatValue()-(rivok.getFloatValue()*0.1)); // вычисляем ускорение

v.write(v.getFloatValue()+a.getFloatValue()*0.1); // вычисляем скорость

      x1.write(x1.getFloatValue()+v.getFloatValue()*0.1); // вычисляем текущую координату Х

      x3_1.write(x1.getFloatValue()-x1_1.getFloatValue()-x2_1.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.getFloatValue()+t3.getFloatValue()+t4.getFloatValue(); // вычисляем время первых четырех отрезков диаграммы

if (t3_1<t.getFloatValue()&& t.getFloatValue()<=t4_1) // условие, если время четвертого отрезка диаграммы

{

a.write(0); // ускорение на этом отрезке равно 0

x1.write(x1.getFloatValue()+(v.getFloatValue()*0.1)); // вычисляем текущую координату Х

}

t5_1=t1.getFloatValue()+t2.getFloatValue()+t3.getFloatValue()+t4.getFloatValue()+t5.getFloatValue(); // вычисляем время первых пяти отрезков диаграммы

if (t4_1<t.getFloatValue()&& t.getFloatValue()<t5_1) // условие, если время пятого отрезка диаграммы

{

a.write(a.getFloatValue()-(rivok.getFloatValue()*0.1)); // вычисляем ускорение

v.write(v.getFloatValue()+(a.getFloatValue()*0.1)); // вычисляем скорость

      x1.write(x1.getFloatValue()+v.getFloatValue()*0.1); // вычисляем текущую координату Х

}

t6_1=t1.getFloatValue()+t2.getFloatValue()+t3.getFloatValue()+t4.getFloatValue()+t5.getFloatValue()+t6.getFloatValue(); // вычисляем время первых шести отрезков диаграммы

if (t5_1<t.getFloatValue()&& t.getFloatValue()<=t6_1) // условие, если время шестого отрезка диаграммы

{

     a.write(-uskor.getFloatValue()); // вычисляем ускорение

v.write(v.getFloatValue()+(a.getFloatValue()*0.1)); // вычисляем скорость

    x1.write(x1.getFloatValue()+v.getFloatValue()*0.1); // вычисляем текущую координату Х

}

t7_1=t1.getFloatValue()+t2.getFloatValue()+t3.getFloatValue()+t4.getFloatValue()+t5.getFloatValue()+t6.getFloatValue()+t7.getFloatValue() ;// вычисляем время семи отрезков диаграммы

if (t6_1<t.getFloatValue()&& t.getFloatValue()<=t7_1) // условие, если время седьмого отрезка диаграммы

{

a.write(a.getFloatValue()+(rivok.getFloatValue()*0.1));  // вычисляем ускорение

v.write(v.getFloatValue()+(a.getFloatValue()*0.1)); // вычисляем скорость

Информация о работе Разработка HMI для системы управления складским краном на базе PLC Modicon M340 и операторской панели Magelis