- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Step 7, Программирование на языке GRAPH
-
- здесь недавно
- Сообщения: 53
- Зарегистрирован: 05 июл 2011, 16:03
- Имя: Леонов Александр Сергеевич
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 2 раза
- Поблагодарили: 2 раза
Step 7, Программирование на языке GRAPH
Здравствуйте. Потребовалось написать программу на языке 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 состояний
На языке 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 состояний
-
- авторитет
- Сообщения: 878
- Зарегистрирован: 21 авг 2009, 14:25
- Имя: Василий Иванович
- Благодарил (а): 1 раз
- Поблагодарили: 3 раза
Re: Step 7, Программирование на языке GRAPH
Делается элементарно. 20-30 состояний там городить не надо, достаточно и четырех состояний (шагов), соответствующим переменной STATE.
Переход из одного состояния в другое осуществляем альтернативным ветвлением, условия которого можно легко прописать. Например, во втором состоянии ставите на событие S1 присваивание K1 := 1. На выходе из этого состояния повесите два альтернативных перехода: первый срабатывает на D и прыгает в первое состояние, а второй - соответственнно на С и в четвертое. И тд и тп.
Переход из одного состояния в другое осуществляем альтернативным ветвлением, условия которого можно легко прописать. Например, во втором состоянии ставите на событие S1 присваивание K1 := 1. На выходе из этого состояния повесите два альтернативных перехода: первый срабатывает на D и прыгает в первое состояние, а второй - соответственнно на С и в четвертое. И тд и тп.
-
- здесь недавно
- Сообщения: 53
- Зарегистрирован: 05 июл 2011, 16:03
- Имя: Леонов Александр Сергеевич
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 2 раза
- Поблагодарили: 2 раза
Re: Step 7, Программирование на языке GRAPH
Ммм. Вот есть у меня 20 состояний. К примеру режим-1, режим-2,...,режим-20. И есть такое состояние как АВАРИЯ. Переход в аварию происходит по определённому биту (общий для всех режимов). Так вот, тащить из каждого состояния "режим-n" альтернативную связь в состояние АВАРИЯ очень не хочется. Так как их получится аж 20 штук и программа приобретет неудобочитаемый вид. Хочется где-то в одном месте прописать этот переход, чтобы из любого состояния по выставленному биту происходил переход в состояние АВАРИЯ.
-
- преподаватель
- Сообщения: 1357
- Зарегистрирован: 01 сен 2008, 18:32
- Имя: Пупена Александр
- Страна: Украина
- город/регион: Киев
- Поблагодарили: 6 раз
Re: Step 7, Программирование на языке GRAPH
Не знаю как в GRAPH, но в некоторых средах есть возможность управлять шагами из других частей программы, написаных например не на SFC. То есть отслеживание аварий происходит всегда, независимо от номера активного шага, а потом идет внешнее управление шагами, например активация нужного шага.
-
- авторитет
- Сообщения: 878
- Зарегистрирован: 21 авг 2009, 14:25
- Имя: Василий Иванович
- Благодарил (а): 1 раз
- Поблагодарили: 3 раза
Re: Step 7, Программирование на языке GRAPH
В Вашем требовании есть изначальное противоречие. Вы хотите создать 20 состояний, но не тянуть из них связи. Переход из одного состояние в другое подразумевает связь между ними. Если состояния не связаны, то перепрыгнуть все-таки можно, но для этого нужно включить ручной режим и указать, куда перепрыгнуть. Это можно реализовать, как уже указали выше, извне графа с помощью вызова экземплярного FB. Этот FB позволяет управлять графом из другой программы. Только вряд ли это добавит прозрачности в программу. Правильным решением было бы не создавать 20 состояний, а создать три - стоп, авария и работа, а в шаге для работы писать во внешнюю переменную битмаску, по которой потом включать выходы. Эту битмаску можно установить с помощью действия N в зависимости от состояния входов. Если все же хотите сохранить 20 состояний, тогда придется отказаться либо от стопа, либо от аварии, и отрабатывать соответствующие действия в рабочих режимах, используя условия блокировки (L) и/или контроля (V).Большой Зелёный писал(а):Ммм. Вот есть у меня 20 состояний. К примеру режим-1, режим-2,...,режим-20. И есть такое состояние как АВАРИЯ. Переход в аварию происходит по определённому биту (общий для всех режимов). Так вот, тащить из каждого состояния "режим-n" альтернативную связь в состояние АВАРИЯ очень не хочется. Так как их получится аж 20 штук и программа приобретет неудобочитаемый вид. Хочется где-то в одном месте прописать этот переход, чтобы из любого состояния по выставленному биту происходил переход в состояние АВАРИЯ.
-
- авторитет
- Сообщения: 878
- Зарегистрирован: 21 авг 2009, 14:25
- Имя: Василий Иванович
- Благодарил (а): 1 раз
- Поблагодарили: 3 раза
Re: Step 7, Программирование на языке GRAPH
Еще можно вываливаться тупо из каждого рабочего режима в стоп, а потом незамедлительно, т.е. не исполняя стоповых действий, из стопа проваливаться в аварийное состояние - это конфигурируется установкой специального ключика типа "перепрыгивать шаги".
-
- здесь недавно
- Сообщения: 53
- Зарегистрирован: 05 июл 2011, 16:03
- Имя: Леонов Александр Сергеевич
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 2 раза
- Поблагодарили: 2 раза
Re: Step 7, Программирование на языке GRAPH
Понятно. Значит решить эту задачу так же легко, как в текстовом примере на языке SCL, не получится. Попробовал порыться на эту тему в блоке Permanent Instructions, но там, судя по всему, нельзя задать номер состояния.
-
- эксперт
- Сообщения: 3629
- Зарегистрирован: 10 ноя 2009, 04:58
- Имя: Толмачев Михаил Алексеевич
- город/регион: г. Чехов, МО
- Благодарил (а): 8 раз
- Поблагодарили: 284 раза
Re: Step 7, Программирование на языке GRAPH
Язык-то GRAPH симатиковский? У Сименса Hi-Graph еще более-менее гибок, а простой GRAPH достаточно убог...
-
- здесь недавно
- Сообщения: 53
- Зарегистрирован: 05 июл 2011, 16:03
- Имя: Леонов Александр Сергеевич
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 2 раза
- Поблагодарили: 2 раза
Re: Step 7, Программирование на языке GRAPH
Язык симатиковый. К сожалению, использование Hi-Graph не желательно, так как там нельзя (?) задавать условия перехода с помощью LAD. А желательно именно на LAD.
-
- не первый раз у нас
- Сообщения: 353
- Зарегистрирован: 02 фев 2010, 22:28
- Имя: Корнеев Дмитрий
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 1 раз
- Поблагодарили: 7 раз
Re: Step 7, Программирование на языке GRAPH
Для подобных случаев у сименса вроде есть две возможности - интерлок и супервижн (сверху каждого шага), там можно на LAD прописать набор условий, которые или прекращают отсчет времени на шаге, или еще что то делают, уже не помню Еще имеется возможность по интерлоку изменять состояния выходов данного шага. Как то так..
ЗЫ: Если есть какой нибудь аппарат с большим числом шагов, то очень классная вещь. На пищевке часто встречаются алгоритмы с 10 - 50 шагов, причем не всегда линейные, очень хорошо реализуется.
ЗЫ: Если есть какой нибудь аппарат с большим числом шагов, то очень классная вещь. На пищевке часто встречаются алгоритмы с 10 - 50 шагов, причем не всегда линейные, очень хорошо реализуется.
Запуск и модернизация оборудования без проекта и документации. Дорого.
-
- эксперт
- Сообщения: 1467
- Зарегистрирован: 25 июл 2008, 10:25
- Имя: Эдуард Владимирович
- Страна: СССР
- город/регион: Оренбург
- Благодарил (а): 46 раз
- Поблагодарили: 105 раз
Re: Step 7, Программирование на языке GRAPH
Наверное все же лучше обойти автомат, как писали ранее.
Есть полученный из GRAPH функциональный блок FB,у него есть экземплярный блок данных. До выполнения FB, проверяем условия, если СТОП, то исключаем из обработки FB и обнуляем экземплярное DB с помощью какой-то функции, например SFC21. Чтобы привести граф в исходное состояние.
Есть полученный из GRAPH функциональный блок FB,у него есть экземплярный блок данных. До выполнения FB, проверяем условия, если СТОП, то исключаем из обработки FB и обнуляем экземплярное DB с помощью какой-то функции, например SFC21. Чтобы привести граф в исходное состояние.
--------------------------------------------------------------------------------------------