Реализация параллельной работы механизмов

Автоматизация технологических процессов, системы управления, АСУ ТП, АСКУЭ, программирование ПЛК, человеко-машинный интерфейс, сетевое оборудование, протоколы

Реализация параллельной работы механизмов

Сообщение Автоматизатор » 29 янв 2013, 15:52

Разрабатываю программу управления станком для фрезерования надпятников хребтовой балки грузового вагона . Станок состоит из общей части: транспортной системы, механизмов центрирования балки, механизмов зажима балки. И двух фрезерных бабок, установленных на концах 13 метровой балки.

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

Вопрос тем, кто разрабатывает программы с использованием графов: у меня получаются 3 отдельных графа, которые взаимодействуют между собой. Как вы показываете взаимосвязь?
Аватара пользователя
Автоматизатор
Профессионал
 
Сообщения: 880
Зарегистрирован: 09 окт 2012, 05:18

Re: Реализация параллельной работы механизмов

Сообщение Михайло » 29 янв 2013, 16:09

Ну я знаю два метода:
1. Методом флагов. Если один граф подчинен другому, то флагов два - "сделай" и "выполнено". Могут быть другие флаги типа "разрешаю". Во всяком случае каждый флаг является выходом/действием (action) одного графа и одновременно входом/условием перехода (transition condtion) другого графа. Эти взаимодействия в принципе можно показывать линией связи.
2. Интегрированный граф. Все графы объединены в один граф. Взаимодействие показывается двойной горизонтальной линией. По-крайней мере, в ПО Феникс Контакта и в Codesys такой функционал имеется. В Кодесисе нужно добавить "параллельную ветвь" вместо обычной "альтернативной ветви". Реализация на языке LD отработана.
Михайло
Администратор
 
Сообщения: 3333
Зарегистрирован: 19 сен 2012, 19:16

Re: Реализация параллельной работы механизмов

Сообщение Михайло » 29 янв 2013, 16:18

По методу флагов... Можно показать взаимодействие, начертив схему CFC (расширенный FBD). Граф представляется в виде прямоугольника со входами и выходами. Флаги взаимодействия, как я уже говорил, являются выходом одного графа и входом другого. Такая схема наглядно представит весь список флагов в одном месте, рядышком можно расшифровать функцию каждого флага. Ну и что приятно - все три графа можно нарисовать по отдельности. Мне кажется, это будет неплохой вариант представления алгоритма.
Михайло
Администратор
 
Сообщения: 3333
Зарегистрирован: 19 сен 2012, 19:16

Re: Реализация параллельной работы механизмов

Сообщение Автоматизатор » 29 янв 2013, 16:52

Михайло писал(а):Граф представляется в виде прямоугольника со входами и выходами.
Такое видел у Сименса в Hi-Graph

групповой граф.jpg


Думал о таком, но не хочу картинки плодить. Пробую нарисовать на одном листе 3 графа и их взаимодействие. :)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Автоматизатор
Профессионал
 
Сообщения: 880
Зарегистрирован: 09 окт 2012, 05:18

Re: Реализация параллельной работы механизмов

Сообщение CHANt » 30 янв 2013, 15:51

Использую метод "флагами".
У тебя вроде работа графа идет метками перехода? Если с вложением автоматов - сложности будут со сбросом входов выходов при вложении графа в вершину вышестоящего, так как, если нет вызова FC или FB, то и остановится на середине где нибудь. Тут думать надо, ну и усложнится все.
Аватара пользователя
CHANt
Профессионал
 
Сообщения: 531
Зарегистрирован: 13 окт 2012, 15:24
Откуда: Orenburg

Re: Реализация параллельной работы механизмов

Сообщение Михайло » 30 янв 2013, 17:14

CHANt писал(а):У тебя вроде работа графа идет метками перехода?

Это как?

CHANt писал(а):Сложности будут со сбросом входов выходов при вложении графа в вершину вышестоящего, так как, если нет вызова FC или FB, то и остановится на середине где нибудь. Тут думать надо, ну и усложнится все.

Точно! Существуют еще вложенные графы. Не сказать, что это удобная штука, но работает. В институте на дипломе я баловался такими в программе MATLAB/Simulink/Stateflow. Там была придумана специальная нотация... Два вида вложения графов...
В итоге можно симулировать работу графов, если создать модель объекта управления. Примерно так:
Михайло
Администратор
 
Сообщения: 3333
Зарегистрирован: 19 сен 2012, 19:16

Re: Реализация параллельной работы механизмов

Сообщение CHANt » 30 янв 2013, 17:46

Михайло писал(а):Это как?

Я, все же подожду ответа Автоматизатора )
Мог и не правильно понять его...Просто, когда разбирался с его программой по ПЧ Омрона, там автомат был реализован на переходах (GoTo).
Михайло писал(а):Точно! Существуют еще вложенные графы. Не сказать, что это удобная штука, но работает.

Работает, но тут работа с оператором GoTo накладывает определенные ограничения. Методы есть, у того же Шалыто и практическая реализация такого автомата расписана у Вавилова, как для S7 MicroWin, так и для SCL Step7. Работы взять можно здесь - http://is.ifmo.ru/progeny/ ... Да Вы их видели!
А может еще -я не все правильно понял :D
Аватара пользователя
CHANt
Профессионал
 
Сообщения: 531
Зарегистрирован: 13 окт 2012, 15:24
Откуда: Orenburg

Re: Реализация параллельной работы механизмов

Сообщение Автоматизатор » 30 янв 2013, 18:01

CHANt писал(а):У тебя вроде работа графа идет метками перехода?
Да
Аватара пользователя
Автоматизатор
Профессионал
 
Сообщения: 880
Зарегистрирован: 09 окт 2012, 05:18

Re: Реализация параллельной работы механизмов

Сообщение Автоматизатор » 30 янв 2013, 18:12

Набросал шаблон для реализации графа:

FUNCTION_BLOCK FB 1
TITLE =Автоматическая работа
VERSION : 0.1


VAR
WDtimer : "TON"; //Контроль времени исполнения состояний
AlwaysOFF : BOOL ; //Всегда выключен
AlwaysOn : BOOL ; //Всегда включен
State : INT ; //Текущее состояние
StateTime : ARRAY [0 .. 3 ] OF //Время работы
TIME ;
END_VAR
BEGIN
NETWORK
TITLE =Контроль времени исполнения состояний

SET ;
= #AlwaysOn; // всегда включен
CLR ;
= #AlwaysOFF; // всегда отключен

CALL #WDtimer (// запускаем таймер
IN := #AlwaysOn,
PT := T#59M);

NETWORK
TITLE =Сброс команд

CLR ;
= Q 0.0;
= Q 0.1;
= Q 0.2;
= Q 0.3;

NETWORK
TITLE =Переход к метке текущего состояния

L #State;
JL _S;
JU S_0;
JU S_1;
JU S_2;
JU S_3;
_S: NOP 0;
NETWORK
TITLE =State=0

S_0: NOP 0;
// Действие с блокировкой
AN M 0.0;
= Q 0.0;

// Переход
A M 0.0; // если условие выполняется
JCN _001;

L 1; // переход в State=1
T #State;

L #WDtimer.ET; // сохраняем время работы
T #StateTime[0];

CALL #WDtimer (// сбрасываем таймер
IN := #AlwaysOFF);

// выход
_001: NOP 0;
BE ;
NETWORK
TITLE =State=1

S_1: NOP 0;
// Действие с блокировкой
AN M 0.1;
= Q 0.1;

// Переход
A M 0.1; // если условие выполняется
JCN _002;

L 2; // переход в State=2
T #State;

L #WDtimer.ET; // сохраняем время работы
T #StateTime[1];

CALL #WDtimer (// сбрасываем таймер
IN := #AlwaysOFF);

// выход
_002: NOP 0;
BE ;
NETWORK
TITLE =State=2

S_2: NOP 0;
// Действие с блокировкой
AN M 0.2;
= Q 0.2;

// Переход
A M 0.2; // если условие выполняется
JCN _003;

L 3; // переход в State=3
T #State;

L #WDtimer.ET; // сохраняем время работы
T #StateTime[2];

CALL #WDtimer (// сбрасываем таймер
IN := #AlwaysOFF);

// выход
_003: NOP 0;
BE ;
NETWORK
TITLE =State=3

S_3: NOP 0;
// Действие с блокировкой
AN M 0.3;
= Q 0.3;

// Переход
A M 0.3; // если условие выполняется
JCN _004;

L 0; // переход в State=0
T #State;

L #WDtimer.ET; // сохраняем время работы
T #StateTime[3];

CALL #WDtimer (// сбрасываем таймер
IN := #AlwaysOFF);

// выход
_004: NOP 0;
BE ;
END_FUNCTION_BLOCK

Шаблон.rar
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Автоматизатор
Профессионал
 
Сообщения: 880
Зарегистрирован: 09 окт 2012, 05:18

Re: Реализация параллельной работы механизмов

Сообщение Автоматизатор » 30 янв 2013, 18:16

Сохраненное время выполнения можно использовать для получения фактической циклограммы работы и контрольных функций.
Аватара пользователя
Автоматизатор
Профессионал
 
Сообщения: 880
Зарегистрирован: 09 окт 2012, 05:18

Re: Реализация параллельной работы механизмов

Сообщение CHANt » 30 янв 2013, 18:19

CLR ;
= Q 0.0;
= Q 0.1;
= Q 0.2;
= Q 0.3;

Вот этот кусок не понял, они на каждом скане обнуляться будут. Так задумано?
Я не так реализую. В теле автомата использую временные переменные "Установить" и "Сбросить" - они существуют один скан и каждый вызов обнуляются. А в конце программы их завожу в триггер - выход триггера и есть Qx.x и только после этого команда BE, хотя она, если честно, здесь не особо и нужна, если нет кода то функция и так завершит выполнение.
Аватара пользователя
CHANt
Профессионал
 
Сообщения: 531
Зарегистрирован: 13 окт 2012, 15:24
Откуда: Orenburg

Re: Реализация параллельной работы механизмов

Сообщение Автоматизатор » 30 янв 2013, 18:25

CHANt писал(а):Вот этот кусок не понял, они на каждом скане обнуляться будут. Так задумано?

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

Тем самым я не забочусь о сбросе, только чтобы установить нужное, и то с блокировками.
Аватара пользователя
Автоматизатор
Профессионал
 
Сообщения: 880
Зарегистрирован: 09 окт 2012, 05:18

Re: Реализация параллельной работы механизмов

Сообщение Автоматизатор » 30 янв 2013, 18:29

Подсмотрел у

К. В. Вавилов
Программируемые логические контроллеры
SIMATIC S7-200 (SIEMENS)
Методика
алгоритмизации и программирования
задач логического управления
Санкт-Петербург
2005
Аватара пользователя
Автоматизатор
Профессионал
 
Сообщения: 880
Зарегистрирован: 09 окт 2012, 05:18

Re: Реализация параллельной работы механизмов

Сообщение CHANt » 30 янв 2013, 18:40

:) Я когда разрабатывал свой шаблон, переписывался с Константином Валерьевичем. Ну и делал свой вариант под STL Step7, а в основе так же - структура Вавилова из этой работы.
Ну в общем, по теме топика, проще будет работать с "флагами" - нотация CFC
Аватара пользователя
CHANt
Профессионал
 
Сообщения: 531
Зарегистрирован: 13 окт 2012, 15:24
Откуда: Orenburg

Re: Реализация параллельной работы механизмов

Сообщение Михайло » 30 янв 2013, 21:27

Автоматизатор
А какой смысл пользоваться переходами Goto/jump в таком мощном процессоре как у S7-300? Может лучше подналечь на удобочитаемость?..
Михайло
Администратор
 
Сообщения: 3333
Зарегистрирован: 19 сен 2012, 19:16

Re: Реализация параллельной работы механизмов

Сообщение Михайло » 03 фев 2013, 07:58

Предлагаю проработать последовательность несколькими способами (метод флагов+CFC, метод флагов графический, интегрированный граф/многопоточная последовательность, вложенные графы)...

Пример многопоточной последовательности.gif

Вверху показана декларация графа как функции.

Описание: Имеется два пневмоцилиндра, управляемые распределителями с электромагнитами YA1, YA2 и YA3, YA4. Исходное положение цилиндров - SQ1 и SQ3. При нажатии на кнопку SB1 "Пуск" производится выдержка времени 3 секунды и после этого цилиндры начинают выдвигаться в одну сторону (необязательно синхронно!). Когда каждый из цилиндров достигнет конечной своей точки, производится дожим цилиндра до упора (конечные выключатели SQ1-SQ4 могут немного сдвинуты относительно упоров) в течение 1 секунды. После того как оба цилиндра встанут в конечном положении, производится выдержка времени 3 секунды. После этого цилиндры начинают одновременно движение в обратную сторону. В конце аналогичным образом производится дожим цилиндров до упора и система переходит в исходное состояние.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Михайло
Администратор
 
Сообщения: 3333
Зарегистрирован: 19 сен 2012, 19:16

Re: Реализация параллельной работы механизмов

Сообщение Автоматизатор » 03 фев 2013, 08:35

Михайло писал(а):А какой смысл пользоваться переходами Goto/jump в таком мощном процессоре как у S7-300? Может лучше подналечь на удобочитаемость?..

Имею достаточно большой опыт написания и отладки программ, в которых графы были реализованы различными способами. Как правило уже при ПНР приходится менять алгоритм, иногда существенно. Иногда приходится участвовать в ПНР оборудования, программы для которого были разработаны несколько лет назад. Отсюда для себя сформулировал наиболее удобную для себя концепцию:
- состояние кодируется переменной типа INT,
- состояние - это то, что происходит в данный момент с механизмом, то что пишется в строке "состояние" на экране панели управления ("Выполняется центрирование", "Выполняется зажим изделия" и т.п.) - к номеру состояния привязывается TextList.
- в один момент имеется только одно активное состояние,
- все действия и переходы реализованы в программе в одном месте, переход в которое выполняется с помощью команды "Прыжок на метку". Это очень удобно - не надо прыгать по листингу.
- параллельную работу механизмов часто можно реализовать в одном состоянии, не прорисовывая на графе. (например, состояние "Зажим" - в котором могут работать несколько зажимов, которые управляются своими выходами и положения которых контролируются своими датчиками. Все это скрыто в реализации графа. Но это все просто и наглядно)
Аватара пользователя
Автоматизатор
Профессионал
 
Сообщения: 880
Зарегистрирован: 09 окт 2012, 05:18

Re: Реализация параллельной работы механизмов

Сообщение Михайло » 03 фев 2013, 10:04

Автоматизатор писал(а):- параллельную работу механизмов часто можно реализовать в одном состоянии, не прорисовывая на графе.

Я понял, о чем ты. Не знаю насчет "просто и наглядно", но это будет неточно.
И к тому же не всегда работает: вот, например, моя предыдущая картинка... Попробуй по своим методам оформить документацию (сама реализация не нужна). Можешь разбить устройство на отдельные механизмы (пневмоцилиндры), добавить граф-координатор. В общем, что угодно делай, лишь бы логика сохранилась.
Михайло
Администратор
 
Сообщения: 3333
Зарегистрирован: 19 сен 2012, 19:16

Re: Реализация параллельной работы механизмов

Сообщение Автоматизатор » 04 фев 2013, 15:21

Михайло писал(а):Предлагаю проработать последовательность несколькими способами

Пример надуманный. Не могу решать абстрактные задачи про "сферического коня в вакууме". Столько таймеров отдельно и совместно контролировать пневмоцилиндр?!

Вот, к примеру, какой у меня получается граф.

Алгоритм работы 5.jpg


Если все подробно расписывать, то это только затруднит понимание.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Автоматизатор
Профессионал
 
Сообщения: 880
Зарегистрирован: 09 окт 2012, 05:18

Re: Реализация параллельной работы механизмов

Сообщение Автоматизатор » 04 фев 2013, 15:35

Для сравнения расписал только один кусок. Можете заценить.

Фрагмент.jpg
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Автоматизатор
Профессионал
 
Сообщения: 880
Зарегистрирован: 09 окт 2012, 05:18

След.

Вернуться в АВТОМАТИЗАЦИЯ

Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и гости: 1