Профиль должен быть заполнен на русском языке кириллицей. Заполнение профиля заведомо ложными или некорректными данными - причина возможного отказа в регистрации на форуме.

Step 7, Программирование на языке GRAPH

PLC, прочие контроллеры, промышленные компьютеры, операторские панели

Автор темы
Большой Зелёный
здесь недавно
здесь недавно
Сообщения: 38
Зарегистрирован: 05 июл 2011, 15:03
Ф.И.О.: Леонов Александр Сергеевич

Step 7, Программирование на языке GRAPH

Сообщение Большой Зелёный » 05 июл 2011, 15:40

Здравствуйте. Потребовалось написать программу на языке GRAPH. Раньше я на этом языке не писал и спросить не у кого.
На языке SCL есть такая конструкция:

K1:=0;K2:=0;A:=0;

CASE STATE OF
1 : // Стоп
IF A THEN STATE:=2;END_IF; //
IF B THEN STATE:=3;END_IF; //
2 : // Режим 1
IF D THEN STATE:=1;END_IF; //
IF C THEN STATE:=4;END_IF; //
3 : // Режим 2
IF D THEN STATE:=1;END_IF; //
IF C THEN STATE:=4;END_IF; //
4 : // Авария
IF D THEN STATE:=1;END_IF; //
END_CASE;

IF C THEN STATE:=4; END_IF; //
IF D THEN STATE:=1; END_IF; //

CASE STATE OF
1 :
2 : K1:=1;
3 : K2:=1;
4 : A:=1;
END_CASE;

Как видно, при таком построении выход в стоп и в аварию осуществляется в блоке CASE и сразу после него. Причём если писать сразу после него, то прописать этот переход надо только один раз, а не n-раз.
ВОПРОС:
- можно ли так же сделать и на языке GRAPH?
- если можно, то как?

Уж больно не хочется тащить одни и те же связи из 20-30 состояний :ges_no:


Василий Иванович
авторитет
авторитет
Сообщения: 872
Зарегистрирован: 21 авг 2009, 13:25
Ф.И.О.: Василий Иванович
Благодарил (а): 1 раз
Поблагодарили: 3 раза

Re: Step 7, Программирование на языке GRAPH

Сообщение Василий Иванович » 05 июл 2011, 16:43

Делается элементарно. 20-30 состояний там городить не надо, достаточно и четырех состояний (шагов), соответствующим переменной STATE.
Переход из одного состояния в другое осуществляем альтернативным ветвлением, условия которого можно легко прописать. Например, во втором состоянии ставите на событие S1 присваивание K1 := 1. На выходе из этого состояния повесите два альтернативных перехода: первый срабатывает на D и прыгает в первое состояние, а второй - соответственнно на С и в четвертое. И тд и тп.


Автор темы
Большой Зелёный
здесь недавно
здесь недавно
Сообщения: 38
Зарегистрирован: 05 июл 2011, 15:03
Ф.И.О.: Леонов Александр Сергеевич

Re: Step 7, Программирование на языке GRAPH

Сообщение Большой Зелёный » 05 июл 2011, 17:03

Ммм. Вот есть у меня 20 состояний. К примеру режим-1, режим-2,...,режим-20. И есть такое состояние как АВАРИЯ. Переход в аварию происходит по определённому биту (общий для всех режимов). Так вот, тащить из каждого состояния "режим-n" альтернативную связь в состояние АВАРИЯ очень не хочется. Так как их получится аж 20 штук и программа приобретет неудобочитаемый вид. Хочется где-то в одном месте прописать этот переход, чтобы из любого состояния по выставленному биту происходил переход в состояние АВАРИЯ.

Аватара пользователя

san
преподаватель
преподаватель
Сообщения: 1400
Зарегистрирован: 01 сен 2008, 17:32
Ф.И.О.: Пупена Александр
Откуда: Киев, Украина
Поблагодарили: 1 раз
Контактная информация:

Re: Step 7, Программирование на языке GRAPH

Сообщение san » 05 июл 2011, 17:16

Не знаю как в GRAPH, но в некоторых средах есть возможность управлять шагами из других частей программы, написаных например не на SFC. То есть отслеживание аварий происходит всегда, независимо от номера активного шага, а потом идет внешнее управление шагами, например активация нужного шага.


Василий Иванович
авторитет
авторитет
Сообщения: 872
Зарегистрирован: 21 авг 2009, 13:25
Ф.И.О.: Василий Иванович
Благодарил (а): 1 раз
Поблагодарили: 3 раза

Re: Step 7, Программирование на языке GRAPH

Сообщение Василий Иванович » 06 июл 2011, 09:46

Большой Зелёный писал(а):Ммм. Вот есть у меня 20 состояний. К примеру режим-1, режим-2,...,режим-20. И есть такое состояние как АВАРИЯ. Переход в аварию происходит по определённому биту (общий для всех режимов). Так вот, тащить из каждого состояния "режим-n" альтернативную связь в состояние АВАРИЯ очень не хочется. Так как их получится аж 20 штук и программа приобретет неудобочитаемый вид. Хочется где-то в одном месте прописать этот переход, чтобы из любого состояния по выставленному биту происходил переход в состояние АВАРИЯ.


В Вашем требовании есть изначальное противоречие. Вы хотите создать 20 состояний, но не тянуть из них связи. Переход из одного состояние в другое подразумевает связь между ними. Если состояния не связаны, то перепрыгнуть все-таки можно, но для этого нужно включить ручной режим и указать, куда перепрыгнуть. Это можно реализовать, как уже указали выше, извне графа с помощью вызова экземплярного FB. Этот FB позволяет управлять графом из другой программы. Только вряд ли это добавит прозрачности в программу. Правильным решением было бы не создавать 20 состояний, а создать три - стоп, авария и работа, а в шаге для работы писать во внешнюю переменную битмаску, по которой потом включать выходы. Эту битмаску можно установить с помощью действия N в зависимости от состояния входов. Если все же хотите сохранить 20 состояний, тогда придется отказаться либо от стопа, либо от аварии, и отрабатывать соответствующие действия в рабочих режимах, используя условия блокировки (L) и/или контроля (V).


Василий Иванович
авторитет
авторитет
Сообщения: 872
Зарегистрирован: 21 авг 2009, 13:25
Ф.И.О.: Василий Иванович
Благодарил (а): 1 раз
Поблагодарили: 3 раза

Re: Step 7, Программирование на языке GRAPH

Сообщение Василий Иванович » 06 июл 2011, 09:59

Еще можно вываливаться тупо из каждого рабочего режима в стоп, а потом незамедлительно, т.е. не исполняя стоповых действий, из стопа проваливаться в аварийное состояние - это конфигурируется установкой специального ключика типа "перепрыгивать шаги".


Автор темы
Большой Зелёный
здесь недавно
здесь недавно
Сообщения: 38
Зарегистрирован: 05 июл 2011, 15:03
Ф.И.О.: Леонов Александр Сергеевич

Re: Step 7, Программирование на языке GRAPH

Сообщение Большой Зелёный » 06 июл 2011, 10:16

Понятно. Значит решить эту задачу так же легко, как в текстовом примере на языке SCL, не получится. Попробовал порыться на эту тему в блоке Permanent Instructions, но там, судя по всему, нельзя задать номер состояния.


Михайло
почётный участник форума
почётный участник форума
Сообщения: 2220
Зарегистрирован: 10 ноя 2009, 04:58
Ф.И.О.: Толмачев Михаил Алексеевич
Благодарил (а): 1 раз
Поблагодарили: 22 раза
Контактная информация:

Re: Step 7, Программирование на языке GRAPH

Сообщение Михайло » 06 июл 2011, 15:44

Язык-то GRAPH симатиковский? У Сименса Hi-Graph еще более-менее гибок, а простой GRAPH достаточно убог...


Автор темы
Большой Зелёный
здесь недавно
здесь недавно
Сообщения: 38
Зарегистрирован: 05 июл 2011, 15:03
Ф.И.О.: Леонов Александр Сергеевич

Re: Step 7, Программирование на языке GRAPH

Сообщение Большой Зелёный » 06 июл 2011, 16:02

Язык симатиковый. К сожалению, использование Hi-Graph не желательно, так как там нельзя (?) задавать условия перехода с помощью LAD. А желательно именно на LAD.

Аватара пользователя

Barsik
освоился
освоился
Сообщения: 294
Зарегистрирован: 02 фев 2010, 22:28
Ф.И.О.: Корнеев Дмитрий
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

Re: Step 7, Программирование на языке GRAPH

Сообщение Barsik » 06 июл 2011, 18:13

Для подобных случаев у сименса вроде есть две возможности - интерлок и супервижн (сверху каждого шага), там можно на LAD прописать набор условий, которые или прекращают отсчет времени на шаге, или еще что то делают, уже не помню :ges_slap: Еще имеется возможность по интерлоку изменять состояния выходов данного шага. Как то так..

ЗЫ: Если есть какой нибудь аппарат с большим числом шагов, то очень классная вещь. На пищевке часто встречаются алгоритмы с 10 - 50 шагов, причем не всегда линейные, очень хорошо реализуется.
Запуск и модернизация оборудования без проекта и документации. Дорого.

Аватара пользователя

CHANt
эксперт
эксперт
Сообщения: 1246
Зарегистрирован: 25 июл 2008, 09:25
Ф.И.О.: Гринев Эдуард Владимирович
Откуда: Оренбург
Благодарил (а): 11 раз
Поблагодарили: 37 раз
Контактная информация:

Re: Step 7, Программирование на языке GRAPH

Сообщение CHANt » 06 июл 2011, 20:53

Наверное все же лучше обойти автомат, как писали ранее.
Есть полученный из GRAPH функциональный блок FB,у него есть экземплярный блок данных. До выполнения FB, проверяем условия, если СТОП, то исключаем из обработки FB и обнуляем экземплярное DB с помощью какой-то функции, например SFC21. Чтобы привести граф в исходное состояние.
Изображение
--------------------------------------------------------------------------------------------
"Почти все начальники - дилетанты." © цитата из поста hell_boy )))


Вернуться в «Средний уровень автоматизации»



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

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