CODESYS форум

Добро пожаловать на официальный форум CODESYS
Deutsche Version English version russian version 
Текущее время: Пн окт 23, 2017 12:19 pm

Часовой пояс: UTC+01:00




Начать новую тему  Ответить на тему  [ 47 сообщений ]  На страницу 1 2 3 4 След.
Автор Сообщение
СообщениеДобавлено: Вт июн 07, 2011 11:16 am 
Не в сети
Site Admin

Зарегистрирован: Ср июл 20, 2005 2:32 pm
Сообщения: 153
SFC штука сильная и красивая. Правильную SFC программу легко читать, легко менять, легко обучить сопровождению заказчика. Он позволяет программисту проводить выходные и даже вечера далеко от работы. Такова цель. :wink:

Проблема с SFC в том, что он резко не похож на все остальные МЭК языки. Его нужно понять и почувствовать. Получается всегда, но требует времени на размышления совсем свежей головой. К сожалению, она обычно забита кучей более срочных дел :(

Начинающие не понимают SFC, а опытные авторы документации не понимают, что тут вообще можно не понимать?

Предлагаю помочь начинающим силами самих начинающих. Начну плавно поэтапно, а вы подключайтесь с вопросами. Вмешательство имеющих опыт, крайне приветствуется.

Возьмем очень простую общепонятную задачу. Начнем издалека и постепенно придем в SFC. Этот пример был рассмотрен на конференции 2011. Постараемся пока не отвлекаться на приемы отладки, моделирования и др. и пр. Потом, если будет интерес.

Итак, снова наш старый светофор. В них еще была фаза красно-желтого перед зеленым. В виде картинки это выражается так:

Изображение

По оси X время в секундах. Общий цикл 40 секунд. Все фазы по 10 сек.

Возьмем любознательного школьника Вову, владеющего азами информатики, но не проходившего ПЛК. Попросим его записать этот алгоритм словами. Получится нечто типа:

Код:
ВКЛ xGreen
ЖДАТЬ 10
ВЫКЛ xGreen
ВКЛ xYellow
ЖДАТЬ 10
ВЫКЛ xYellow
ВКЛ xRed
ЖДАТЬ 10
ВКЛ xYellow
ЖДАТЬ 10
ВЫКЛ xYellow
ВЫКЛ xRed
ПЕРЕХОД на начало


Изображение Все очень просто и интуитивно понятно. К этой программе мы еще вернемся. Придумаем ей имя. Пусть будет ‘Интуитивный Алгоритм’, сокращенно метод ‘Иа’.

Вова легко сможет реализовать метод ИА на языке Бейсик или Си с использованием функции задержки sleep. Даем ему мануал на ПЛК. Он шустро начинает искать функцию задержки выполнения. Ее нет принципиально! :evil: Очевидное предложение: 1) никчемный девайс об стену, 2) мануал в топку.

:?: Но, Вова парень наш. Сдаваться он не обучен. В его голове засел вопрос : ‘Почему в ПЛК нет команды приостановки программы?’


Вернуться к началу
СообщениеДобавлено: Ср июн 08, 2011 2:15 pm 
Не в сети
Site Admin

Зарегистрирован: Ср июл 20, 2005 2:32 pm
Сообщения: 153
Отступление: о таймерах принципах ПЛК

Смотрим на алгоритм Иа. Он прекрасен для одного светофора. А если добавить второй с циклом вдвое больше? Ну, тогда вставим еще несколько команд ЖДАТЬ и включений. А если таких светофоров сто или тысяча и с разными временами. Проблема, однако. Правильный ПЛК должен быть устроен так, чтобы ее не возникало.

Он работает как автомат. Программа получает значения всех входов, вырабатывает решение и выдает его на выход. Классический цикл ПЛК.

В идеале, допустимое число разных вычислений (обслуживаний разных светофоров и пр.), в одной программе, которые делаются одновременно, должно стремиться к бесконечности. Соответственно время цикла должно стремиться к нулю. Тогда программировать будет очень легко. Отсюда следует мысль: затормаживать выполнение программы ПЛК нельзя. Оно должно быть максимально коротким.
Задача ПЛК реагировать на выходы в реальном времени. Застрять в программе и делать там нечто громадное и долгое, типа сортировки массива методом пузырька, нельзя. Программа должна коротко поработать, отдать управление на выходы, еще немного посчитать, опять отдать на выходы и так далее. (Это упрощенно, для начинающих, прошу не пинать). Она должна выполняться не монолитным блоком, а небольшими шажками. Не стоит все вычисления повторять постоянно. Делаем только то, что нужно сейчас.

Отсюда растет проблема А – декомпозиции программы, ее разбиения на компактные кусочки. Это вызывает затруднения у начинающих и часто обсуждается (например, сегодня). Из этих же рассуждений следует проблема Б – цикл должен быть коротким. Именно он определяет время реакции на внешние события! Это важно для ПЛК. Неважно сколько умножений или делений способен сделать процессор в секунду. ПЛК должен строчить как швейная машинка – частыми короткими стежками. Не нужно пытаться пришить весь рукав одним движением.

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

Ну и как же быть с таймерами, если тормозить работу нельзя?

Да точно так, как это делаем мы сами! Заводим таймер (будильник) или кучу таймеров и занимаемся другими делами, пока не будет пора. Таймер для ПЛК это практически внешний прибор с выходом готовности.

Возьмем таймер TON. Он может иметь много независимых экземпляров. Каждый работает сам по себе.

Утомил теориями? Переходим к практике. Для разминки, создаем пустой проект и делаем в нем 1 таймер так, чтобы он отсчитывал 4 секунды, сбрасывался в 0 и так крутился бесконечно. На любом языке, SFC пока не трогаем.


Вернуться к началу
СообщениеДобавлено: Вт июн 14, 2011 11:39 am 
Не в сети
Site Admin

Зарегистрирован: Ср июл 20, 2005 2:32 pm
Сообщения: 153
Для ускорения отладки светофора поделим времена на 10. Т.е. будем переключаться раз в секунду. Общее время таймера 4 секунды.

Создадим пустой проект. Вариантов программирования таймера много. Я объявил в разделе объявлений переменную для времени процесса и экземпляр таймера :

Код:
tProcessTime : TIME;
mTimer : TON := (PT:= T#60s);


Здесь сразу ему на вход задается заведомо большое время. Мы будем сбрасывать его раньше.
На ST:
Код:
tmTimer(IN := tProcessTime < T#4s, ET => tProcessTime);


Если время процесса меньше 4 секунды, то на входе таймера логическая единица. Иначе, ноль, формирующий рестарт.

На FBD : Изображение

Собственно все. Подключаемся к эмулятору или ПЛК и проверяем работу циклического таймера.


Вернуться к началу
СообщениеДобавлено: Пт июн 17, 2011 10:50 am 
Не в сети

Зарегистрирован: Пт апр 22, 2011 8:46 am
Сообщения: 20
Спасибо!)

Цитата:
Начинающие не понимают SFC, а опытные авторы документации не понимают, что тут вообще можно не понимать?
-именно так!
Цитата:
Утомил теориями?
-ничуть нет. Как раз, очень доступное объяснение «философии» SFC.
После предыдущих Ваших подсказок я постепенно сам к этому пришел. И данная статья – дополнительное подтверждение для меня того, что я начинаю правильно понимать концепцию работы SFC.
Пример со светофором, ранее, оказался мне, признаюсь, «не по зубам». Я добросовестно пытался его осилить. Но, вот беда: по отдельности, по блокам - что, как и для чего работает – конечно же, понятно. Однако, каким образом эти отдельные компоненты взаимодействуют между собой, образуя целостную программу – «схватить» умом, такому новичку, как я, увы, оказалось не под силу. Тем более, что, написана программа не на 2-х, а сразу на 3-х языках. Не хватило, наверное, детального и последовательного «разжевывания» цепочки происходящих событий. Причем, не только «со стороны» (красный, синий, зеленый), а именно в программе (…присваиваем переменной X1 значение «TRUE». Так как X1 находится на входе таймера Т1, таймер начинает считать… маркер пошел дальше… классификатор S оставляет действие «в работе» пока его не прервет классификатор R в шаге Step11 … - и так далее). Я утрирую.
Даже, может быть, сначала, лучше взять пример совсем простой. Из 3-х блоков, например. И показать, как они ведут себя в том или ином случае. Чтобы человек понял «природу» SFC. Пусть это удлинит самый начальный этап знакомства с продуктом, зато, обучающийся поймет основной принцип его работы (а не «свернет шею» и не пойдет искать чего-нибудь попроще). А дальше ему сразу становится значительно легче и усваивается все быстрее. Как только принцип действия ясен, остальное – уже накопление информации и опыта. Какие есть команды, блоки и переменные – лезь в библиотеку и находи! Даже то, как управляется действие – безусловно, важная информация – но, она нужна уже после того, как человек понял главный смысл работы программы.
Извините за общую длину высказывания, но, может быть, это поможет Вам в работе с такими, как я)).
Пример «кашеварки», кстати, уже гораздо доступнее для понимания. Однако, все-таки, даже в нем, мне кажется, можно было акцентировать внимание именно на принципе работы SFC. Ведь пример как раз для «чайников», которые не знают о программе «ну, совсем ничего…». Внимание читающего последовательность и смысл шагов «ловит», а принцип работы – упускает. Т.е., здесь нужно «носом ткнуть».
Просто потому, что не способен ребенок сразу и ноги переставлять, и равновесие держать.

И, если можно, вопрос. Искал и в книжке и в статьях, не попалось мне.
Если я ставлю в действие счет (Х1:=Х1+1;), то, за каждый цикл у меня прибавляется не 1, как мне хочется, а 2 (по причине, о которой я уже прочитал; действие такого рода выполняется дважды: при активации и при отключении его). Как сделать, чтобы считало по одному?


Вернуться к началу
СообщениеДобавлено: Пт июн 17, 2011 1:05 pm 
Не в сети
Site Admin

Зарегистрирован: Ср июл 20, 2005 2:32 pm
Сообщения: 153
Спасибо за отклик. Я уж думал не актуальная тема. Буду продолжать, пока цейтнот :(

Дмитрий К писал(а):
Если я ставлю в действие счет (Х1:=Х1+1;), то, за каждый цикл у меня прибавляется не 1, как мне хочется, а 2


Видимо имеется в виду МЭК действие с классификатором P? Тут есть предложение, обсужденное и принятое в работу в ‘кулуарах конференции’. Отложим ближе к концу темы.

X+1 нужно написать во входное или выходное действие. Получим число проходов


Вернуться к началу
СообщениеДобавлено: Пт июн 24, 2011 2:06 pm 
Не в сети
Site Admin

Зарегистрирован: Ср июл 20, 2005 2:32 pm
Сообщения: 153
Итак, имеем циклический таймер. Остается по нему включать выходы в определенных комбинациях. Тут большого ума не нужно. Элементарные логические операции. На ST:
Код:
xGreen :=  tProcessTime < T#1S;
xRed :=  tProcessTime > T#2S;
xYellow  :=  (tProcessTime > T#1S [b]AND[/b] tProcessTime < T#2S) [b]OR[/b] tProcessTime > T#3S;

Это классическая программа для ПЛК. Обычно оформляется функциональным блоком (ФБ). В сравнении с программой Иа тут есть большой прогресс – нет никакой сложности сделать сотню экземпляров ФБ и асинхронно управлять кучей светофоров. Программа стала масштабируемой! Однако, что-то мне в ней не нравится.

Попробуем на FBD:
Изображение

На LD:
Изображение

Очень даже неплохо. В режиме Онлайн видно как ‘складываются’ ветви, в каком порядке и почему. В Оффлайне не так все очевидно.

Логический подход хорош для огромного числа случаев. Как видите, применим он и для последовательностных задач. Однако, невооруженным глазом быстро ухватить последовательность работы тут не просто. Может ли загореться желтый и красный одновременно? А зеленый и желтый? Мгновенно и не ответишь, нужно сложить цепочки в голове. Проблема В: последовательность действий должна быть выражена наглядно.

На практике приходится программировать последовательности гораздо сложнее, чем светофор. С ними будет совсем тяжело. Нужно придумать какой-то способ выражения этапов/состояний процесса в виде программы более выразительным способом.

Хорошо, зайдем с этой стороны. Состояний у этого процесса всего 4. Так? В каждом выходы заданы однозначно. Когда менять состояние вопросов нет. Надо подумать. Поставим Вове задачу нарисовать это к понедельнику на бумаге.


Вернуться к началу
СообщениеДобавлено: Пт июл 01, 2011 2:34 pm 
Не в сети
Site Admin

Зарегистрирован: Ср июл 20, 2005 2:32 pm
Сообщения: 153
Итак, была задача нарисовать алгоритм светофора в виде набора состояний и условий перехода между ними. Получается такой автомат:
Изображение
Тут все понятно. Состояния можем пронумеровать. Пусть одна переменная iState определяет состояние. Крутимся в каждом состоянии, держим выходы, контролируем условия перехода в другое состояние. Напрашивается сделать это на ST с оператором CASE.
Да, про таймер забыли. Это еще один автомат с одним состоянием:
Изображение
Его обслуживаем отдельно. Получается вот такая программа:
Код:
tmTimer(IN := tProcessTime < T#4S, ET => tProcessTime);

CASE iState OF
 1: 
   xGreen := TRUE;   
    xRed := xYellow := FALSE;
   
   IF tProcessTime > T#1S THEN iState := 2; END_IF

2:   xYellow := TRUE;
   xRed := xGreen := FALSE;
   
   IF tProcessTime > T#2S THEN iState := 3; END_IF

3:   xRed := TRUE;
   xYellow := xGreen := FALSE;
   
   IF tProcessTime > T#3S THEN iState := 4; END_IF
   
4:    xRed := xYellow := TRUE;
   xGreen := FALSE;
   
   IF tProcessTime > T#4S THEN iState := 1; END_IF
      
END_CASE


Что сказать про эту программу?
    Четко выраженные состояния
    Строгая регулярная структура
    Простота кодирования
    Простота сопровождения
    Очевидное быстродействие
Красота, лепота :D

Надеюсь с автоматным подходом примерно понятно. Это хороший и полезный подход. Очень рекомендую новичкам попрактиковаться в нем. Например, реализовать ее в FBD или LD. Можно даже развить тему и применить мой любимый табличный метод программирования. Делаем массив выходов, массив состояний и по индексу (состоянию) присваиваем все переменные. Автомат реализуется в 1 строчку кода, а вся логика работы кодируется исключительно в таблице. (Такая программа наверняка есть в тетрадке Михаила Швецова ‘101 способ программирования светофора’).

:arrow: Сильная штука автомат, однако..


Вернуться к началу
СообщениеДобавлено: Вс июл 03, 2011 8:33 am 
Не в сети

Зарегистрирован: Пт апр 22, 2011 8:46 am
Сообщения: 20
Здорово!
Очень полезный материал. Спасибо!


Вернуться к началу
СообщениеДобавлено: Пн июл 04, 2011 2:20 pm 
Не в сети
Site Admin

Зарегистрирован: Ср июл 20, 2005 2:32 pm
Сообщения: 153
Мы подобрались к самому ключевому моменту. Программы на всех языках МЭК (SFC пока не трогаем) в каждом рабочем цикле выполняются сверху до низу! Что мы сделали в автоматной программе? Мы искусственно сделали так, что в одном цикле вызова выполнятся только нужный маленький кусок кода!!! Конкретно при iState = 2 будет работать только кусок:

Код:
CASE iState OF
...
2:   xYellow := TRUE;
   xRed := xGreen := FALSE;
   
   IF tProcessTime > T#2S THEN iState := 3; END_IF[/color]
...
...
END_CASE


Мы не скачем по вс6ему кейсу, а совершенно осмысленно умышленно крутим одно состояние – делаем нужную работу и контролируем условия ухода. Действуем как в известном анекдоте про молодого и старого быков – ‘никаких быстренько сбегаем, мы закончим начатую трапезу, спокойно спустимся и ..’ :)
Чтобы перепрыгнуть дальше, на следующий шаг, нужно увеличить iState и отдать управление системе. Она приведет в порядок в/в и сразу же вызовет наш POU, но активным будет уже другое состояние. Мы умышленно крутимся в одном состоянии, пока оно активно, игнорируя код всех других состояний. Каждое состояние – это как отдельный маленький ПЛК. Поработал один, выключился, отдал эстафету другому.
Дмитрий, что Вы думаете насчет в одной из следующих работ применить автоматный подход? Я не намекаю на SFC, до него еще далеко. Иногда автомат предпочтительнее. Пока вопрос только по нему. Насколько автоматный подход понятен? Что смущает?


Вернуться к началу
СообщениеДобавлено: Пн июл 04, 2011 4:26 pm 
Не в сети

Зарегистрирован: Пт апр 22, 2011 8:46 am
Сообщения: 20
Игорь, принцип понятен!
Правда, процесс усвоения у меня в голове происходит как-то постепенно. Понять – это ведь одно. А понять так, чтобы эффективно использовать – это другое. Однако, все, что узнаю, пытаюсь, для начала, применить к одной своей полутренировочной программе, которая должна запускать бензогенератор (пропадание основной сети – зажигание – старт – неудачная попытка – еще раз старт - … - подключение нагрузки – или, авария – переключение на сеть - предусмотреть экономичный режим и всякие защиты – ну и еще мелочи и т.д.). Некоторое время назад я сделал такую программу на FBD для SIEMENS LOGO. Она получилась сложной, запутанной и не идеальной. И я решил взяться за более интересные варианты программирования и контроллеры.
Данный автоматный подход с таким кодированием таймера, конечно же, оказался мне очень интересен, и я попытался «сделать» таким образом участок программы «старт – стоп» с передышками и с отключением действия в случаях: появление сети; перебор по счетчику неудачных запусков…. Наверное, поспешил. Пока не понял. Нужно еще посидеть, повозиться – тогда отрапортую!). Вообще, я сразу начал делать эту программу в SFC, т.к., почему-то, изначально мне показалось, что SFC для такого рода задач должен быть просто идеален. Нагляден, все по ветвям, из разных участков можно включать и выключать одни и те же действия и т.д. И принцип автомата – конечно, нужно бы мне еще «разглядеть» получше)


Вернуться к началу
СообщениеДобавлено: Вт июл 05, 2011 11:09 am 
Не в сети
Site Admin

Зарегистрирован: Ср июл 20, 2005 2:32 pm
Сообщения: 153
Дмитрий К писал(а):
Правда, процесс усвоения у меня в голове происходит как-то постепенно. Понять – это ведь одно. А понять так, чтобы эффективно использовать – это другое.

+1 Иногда делаешь, делаешь а все идет не логично, как против ветра. Нужных функций нет, а есть какие-то совсем чудаческие. Потом, в голове складывается правильная картинка и ветер сам поворачивается в спину. У меня бывали такие тормоза и по году :(

По автоматам см.: 'http://ru.wikipedia.org/wiki/Автоматное_программирование'

В пятницу я писал программу ведения архива в файл на диске в формате Excel .csv. Это шкаф термопрогона радиооборудования. Контроллер формирует суточные циклы разогрева и охлаждения. Полное испытание 20 дней. Данные пишутся раз в 10 минут. Строка записи сложная. Она форматируется и собирается поэтапно, короткими кусочками в фоновой задаче. По кнопке СТОП сразу пишу в iState номер состояния ‘Закрыть файл’, вообще не думая в каком состоянии сейчас живет программа. С автоматом на ST получилось красиво. Отлаживать вообще ничего не пришлось.

В конечном автомате на CASE состояние кодируется одной переменной. Это большой плюс, он же основной минус. Хорошо когда активным может быть только одно состояние и возможны дальние переходы. Один поток выполнения = один автомат :D

Однако, как быть когда процесс распараллеливается? Т.е. надо чтобы активными могли быть несколько состояний одновременно? Требуется распараллелить работы. Конечно, можно сделать композицию автоматов, но это уже не так красиво и не интуитивно. Для этого есть другой математический аппарат.


Вернуться к началу
СообщениеДобавлено: Пн июл 11, 2011 3:23 pm 
Не в сети
Site Admin

Зарегистрирован: Ср июл 20, 2005 2:32 pm
Сообщения: 153
Конечный автомат, будь он механический, электрический или программный, имеет состояния и переключается из одного в другое. C понятием времени это не связано никак. Ход процесса не отражает.

Попробуем отобразить процесс так, как он развивается. Рисуем кружками состояния, по порядку (пусть будет сверху вниз), последовательно соединяем и на линиях переходов записываем условия перехода. Принцип передачи эстафетной палочки – маркера. Четко понятно кто и за кем бежит. Принял эстафету – беги, отдал – отдыхай. Можно бежать и группой, взяв по фрагменту эстафетной палочки. Но тут понятно, что финиш делает последний. Маркер (эстафетная палочка) должна собраться целиком.

Для нашего светофора это нарисуется в таком виде:

Изображение

Голубые кружки – это 2 маркера. Сейчас активен таймер и зеленый шаг одновременно.

Мы нарисовали сеть Петри. Она прекрасно отображает последовательностные процессы. Распараллеливание не представляет проблемы. Ветвления по условиям тоже. Все интуитивно понятно, но погуглить на досуге материалы по сетям Петри полезно. Их применение значительно шире нашей темы. Ниже мы обобщим правила SFC. Но лучше бы их не запоминать, а понять самостоятельно. Все их корни растут из сетей Петри.

В старые времена мечтать о графическом дисплее для ПЛК было бы глупой фантастикой. В лучшем случае, текстовый дисплей. ’Рисовать’ можно было только символами псевдографики. Ну, ничего страшного если вместо окружностей будут прямоугольники. Попробуем перерисовать нашу светофорную сеть в стиле кубизма.


Вернуться к началу
СообщениеДобавлено: Вт июл 12, 2011 11:08 am 
Не в сети
Site Admin

Зарегистрирован: Ср июл 20, 2005 2:32 pm
Сообщения: 153
Получается вот так:
Изображение

Уф. Наконец-то нарисовался SFC 8)

Верхний шаг называется Init. Он выделен двойной рамкой. Это начальный шаг (Начало). При желании его можно переименовать. (В CoDeSys V3 любой шаг можно сделать начальным).

За ним в условии перехода стоит TRUE. Это нормально и является типовым приемом. Переход безусловно разрешен. Будут выполнены действия шага и маркер отдан дальше. Кроме таких ‘пустых’ переходов могут быть и пустые шаги. Это тоже нормально. Шаг может просто ждать, без активной работы. Например, попадаем в аварийное состояние и висим там пока оператор не разрешит продолжить работу.

В других переходах условия записаны рядом. В нашем случае переходы идут по времени таймера. Для более сложных условий можно дать переходу имя и описать его в отдельном окошке. Тут может быть что угодно, главное чтобы на выходе был логический результат. На схеме будет видно только имя условия.
В наших шагах есть закрашенные уголки. Это говорит о том, что внутри шага запрятан код действия. Он может быть написан на любом языке. Я использовал ST. Для таймера код знакомый:

Код:
tmTimer(IN := tProcessTime < T#4S, ET => tProcessTime);


Для светофорных шагов он сводится к управлению выходами. Например, для зеленого:

Код:
xGreen := TRUE;   
xRed := xYellow := FALSE;


В этой SFC программе все интуитивно понятно, если есть понимание того о чем мы уже говорили выше: программа вызывается извне циклически; в каждом цикле вызова работают только те шаги, которые имеют маркеры. Программа сама разбивается на короткие кусочки. Цикл будет маленьким, реакция на выходах контроллера быстрой. Это базовые принципы. Они позволяют избежать проблем А и Б.

Все, кто первый раз пишут SFC программу, недовольны последним фактом. Они пытаются сделать цикл FOR из нескольких шагов и удивляются, почему же он не прокручивается при каждом вызове POU? Некоторые даже пишут ругательные письма в техподдержку о якобы обнаруженных страшных ошибках. Понять базовые принципы не так просто, как кажется. Если они воспринимаются как логичные и правильные, то программирование на SFC не представит сложности.

Если вы только осваиваете SFC, то тут нужно притормозить. Сделайте этот пример самостоятельно с нуля. Проект намеренно не прикладываю. Запустите его в эмуляторе в онлайн. В V3 самостоятельно изучите тему Макросов. Попробуйте левую ветку с шагами светофора разместить в макрос. Должна получиться диаграмма с Инит и двумя параллельными шагами: макросом и таймером.


Вернуться к началу
СообщениеДобавлено: Вт июл 12, 2011 11:28 am 
Не в сети
Site Admin

Зарегистрирован: Ср июл 20, 2005 2:32 pm
Сообщения: 153
Наш студент Вова изучил теорию и выполнил пример. Его выводы всегда логичны:
1) Неужели в языке, заточенном на последовательностные алгоритмы, нельзя было встроить нормальные задержки? Почему я обязан извращаться с таймерами?
2) SFC вообще языком назвать нельзя. Это пустышка. Весь код пишется на других языках. На чистом SFC ничего запрограммировать нельзя принципиально.

Минуту терпения. Счастье близко.

В каждом шаге SFC есть неявная переменная t, которая показывает время активности шага. Пишем через точку: имя_шага.t. Стоит попробовать. Таймер в топку:

Изображение

:D Вот же она нормальная задержка! Оказывается, есть она в ПЛК.

Но, обратите внимание, что ПЛК не висит тупо в задержке, он работает – крутит действие шага. Параллельно могут работать другие шаги и другие программы.


Вернуться к началу
СообщениеДобавлено: Вт июл 12, 2011 11:44 am 
Не в сети
Site Admin

Зарегистрирован: Ср июл 20, 2005 2:32 pm
Сообщения: 153
Действия в SFC не обязательно прятать внутрь шага. Существуют ‘МЭК-действия’. Они приклеиваются к шагам справа. В них присутствует индекс-классификатор, уточняющий способ приклеивания. Например, N говорит о том, что действие активно пока активен шаг. Действием может быть подпрограмма или просто логическая переменная. Таким способом мы можем приклеить выходы непосредственно к шагам. Весь ST код в топку. Только чистый SFC:

Изображение

Ничего не напоминает?
Это же метод ‘Иа’! Самое интуитивное, что только может быть.
Мы начали с элементарной программы. Потом пустились в сложности и.. Круг замкнулся :roll:

Изображение Нет ничего проще и понятнее SFC.


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 47 сообщений ]  На страницу 1 2 3 4 След.

Часовой пояс: UTC+01:00


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB