1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

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

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

Автор темы
Большой Зелёный
здесь недавно
здесь недавно
Сообщения: 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 состояний :ges_no:

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

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

Сообщение Василий Иванович »

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

Автор темы
Большой Зелёный
здесь недавно
здесь недавно
Сообщения: 53
Зарегистрирован: 05 июл 2011, 16:03
Имя: Леонов Александр Сергеевич
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 2 раза
Поблагодарили: 2 раза

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

Сообщение Большой Зелёный »

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

san
преподаватель
преподаватель
Сообщения: 1357
Зарегистрирован: 01 сен 2008, 18:32
Имя: Пупена Александр
Страна: Украина
город/регион: Киев
Поблагодарили: 6 раз

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

Сообщение san »

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

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

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

Сообщение Василий Иванович »

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

Василий Иванович
авторитет
авторитет
Сообщения: 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.
Аватара пользователя

Barsik
не первый раз у нас
не первый раз у нас
Сообщения: 353
Зарегистрирован: 02 фев 2010, 22:28
Имя: Корнеев Дмитрий
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 1 раз
Поблагодарили: 7 раз

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

Сообщение Barsik »

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

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

CHANt
эксперт
эксперт
Сообщения: 1467
Зарегистрирован: 25 июл 2008, 10:25
Имя: Эдуард Владимирович
Страна: СССР
город/регион: Оренбург
Благодарил (а): 46 раз
Поблагодарили: 105 раз

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

Сообщение CHANt »

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

Вернуться в «Средний уровень автоматизации (управляющий)»