Страница 1 из 2

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

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

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

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

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

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

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

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

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

Добавлено: 29 янв 2013, 16:52
Автоматизатор
Михайло писал(а):Граф представляется в виде прямоугольника со входами и выходами.
Такое видел у Сименса в Hi-Graph
групповой граф.jpg
Думал о таком, но не хочу картинки плодить. Пробую нарисовать на одном листе 3 графа и их взаимодействие. :)

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

Добавлено: 30 янв 2013, 15:51
CHANt
Использую метод "флагами".
У тебя вроде работа графа идет метками перехода? Если с вложением автоматов - сложности будут со сбросом входов выходов при вложении графа в вершину вышестоящего, так как, если нет вызова FC или FB, то и остановится на середине где нибудь. Тут думать надо, ну и усложнится все.

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

Добавлено: 30 янв 2013, 17:14
Михайло
CHANt писал(а):У тебя вроде работа графа идет метками перехода?
Это как?
CHANt писал(а):Сложности будут со сбросом входов выходов при вложении графа в вершину вышестоящего, так как, если нет вызова FC или FB, то и остановится на середине где нибудь. Тут думать надо, ну и усложнится все.
Точно! Существуют еще вложенные графы. Не сказать, что это удобная штука, но работает. В институте на дипломе я баловался такими в программе MATLAB/Simulink/Stateflow. Там была придумана специальная нотация... Два вида вложения графов...
В итоге можно симулировать работу графов, если создать модель объекта управления. Примерно так:

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

Добавлено: 30 янв 2013, 17:46
CHANt
Михайло писал(а):Это как?
Я, все же подожду ответа Автоматизатора )
Мог и не правильно понять его...Просто, когда разбирался с его программой по ПЧ Омрона, там автомат был реализован на переходах (GoTo).
Михайло писал(а): Точно! Существуют еще вложенные графы. Не сказать, что это удобная штука, но работает.
Работает, но тут работа с оператором GoTo накладывает определенные ограничения. Методы есть, у того же Шалыто и практическая реализация такого автомата расписана у Вавилова, как для S7 MicroWin, так и для SCL Step7. Работы взять можно здесь - http://is.ifmo.ru/progeny/ ... Да Вы их видели!
А может еще -я не все правильно понял :D

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

Добавлено: 30 янв 2013, 18:01
Автоматизатор
CHANt писал(а):У тебя вроде работа графа идет метками перехода?
Да

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

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

Добавлено: 30 янв 2013, 18:16
Автоматизатор
Сохраненное время выполнения можно использовать для получения фактической циклограммы работы и контрольных функций.

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

Добавлено: 30 янв 2013, 18:19
CHANt
CLR ;
= Q 0.0;
= Q 0.1;
= Q 0.2;
= Q 0.3;
Вот этот кусок не понял, они на каждом скане обнуляться будут. Так задумано?
Я не так реализую. В теле автомата использую временные переменные "Установить" и "Сбросить" - они существуют один скан и каждый вызов обнуляются. А в конце программы их завожу в триггер - выход триггера и есть Qx.x и только после этого команда BE, хотя она, если честно, здесь не особо и нужна, если нет кода то функция и так завершит выполнение.

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

Добавлено: 30 янв 2013, 18:25
Автоматизатор
CHANt писал(а):Вот этот кусок не понял, они на каждом скане обнуляться будут. Так задумано?
Да, так и задумано. Вначале все сбрасывается, потом осуществляется переход в состояние в котором устанавливается только нужный выход.

Тем самым я не забочусь о сбросе, только чтобы установить нужное, и то с блокировками.

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

Добавлено: 30 янв 2013, 18:29
Автоматизатор
Подсмотрел у

К. В. Вавилов
Программируемые логические контроллеры
SIMATIC S7-200 (SIEMENS)
Методика
алгоритмизации и программирования
задач логического управления
Санкт-Петербург
2005

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

Добавлено: 30 янв 2013, 18:40
CHANt
:) Я когда разрабатывал свой шаблон, переписывался с Константином Валерьевичем. Ну и делал свой вариант под STL Step7, а в основе так же - структура Вавилова из этой работы.
Ну в общем, по теме топика, проще будет работать с "флагами" - нотация CFC

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

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

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

Добавлено: 03 фев 2013, 07:58
Михайло
Предлагаю проработать последовательность несколькими способами (метод флагов+CFC, метод флагов графический, интегрированный граф/многопоточная последовательность, вложенные графы)...
Пример многопоточной последовательности.gif
Вверху показана декларация графа как функции.

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

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

Добавлено: 03 фев 2013, 08:35
Автоматизатор
Михайло писал(а):А какой смысл пользоваться переходами Goto/jump в таком мощном процессоре как у S7-300? Может лучше подналечь на удобочитаемость?..
Имею достаточно большой опыт написания и отладки программ, в которых графы были реализованы различными способами. Как правило уже при ПНР приходится менять алгоритм, иногда существенно. Иногда приходится участвовать в ПНР оборудования, программы для которого были разработаны несколько лет назад. Отсюда для себя сформулировал наиболее удобную для себя концепцию:
- состояние кодируется переменной типа INT,
- состояние - это то, что происходит в данный момент с механизмом, то что пишется в строке "состояние" на экране панели управления ("Выполняется центрирование", "Выполняется зажим изделия" и т.п.) - к номеру состояния привязывается TextList.
- в один момент имеется только одно активное состояние,
- все действия и переходы реализованы в программе в одном месте, переход в которое выполняется с помощью команды "Прыжок на метку". Это очень удобно - не надо прыгать по листингу.
- параллельную работу механизмов часто можно реализовать в одном состоянии, не прорисовывая на графе. (например, состояние "Зажим" - в котором могут работать несколько зажимов, которые управляются своими выходами и положения которых контролируются своими датчиками. Все это скрыто в реализации графа. Но это все просто и наглядно)

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

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

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

Добавлено: 04 фев 2013, 15:21
Автоматизатор
Михайло писал(а):Предлагаю проработать последовательность несколькими способами
Пример надуманный. Не могу решать абстрактные задачи про "сферического коня в вакууме". Столько таймеров отдельно и совместно контролировать пневмоцилиндр?!

Вот, к примеру, какой у меня получается граф.
Алгоритм работы 5.jpg
Если все подробно расписывать, то это только затруднит понимание.

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

Добавлено: 04 фев 2013, 15:35
Автоматизатор
Для сравнения расписал только один кусок. Можете заценить.
Фрагмент.jpg