Назад
ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ
- 58 -
Рис.3.4. Шаги и переходы в программе SFC
Дивергенция и конвергенция.
Одинарная дивергенцияэто множественное соединение в
направлении от одного шага к нескольким переходам. Она позволяет
маркеру активации переходить в одну из ветвей. Условия, связанные с
различными переходами в начале одинарной дивергенции, не
являются взаимоисключающими по умолчанию. Взаимоисключение
должно быть явно задано в условиях переходов, чтобы гарантировать,
что во время выполнения программы активируется одна конкретная
ветвь.
Одинарная конвергенцияэто множественное соединение,
направленное от нескольких переходов к одному и тому же шагу. Она
обычно используется для группирования ветвей SFC – программы,
которые берут начало из одинарной дивергенции. Два варианта
одинарной дивергенции и конвергенции показаны на рис.3.5.
Двойная дивергенцияэто множественное соединение,
направленное от одного перехода к нескольким шагам. Она
соответствует параллельному выполнению операций процесса.
Двойная конвергенцияэто соединение нескольких шагов к одному и
тому же переходу. Обычно она используется для группирования
ветвей, взявших начало из двойной дивергенции.
1
2
3
комментарий
текст программы на ST
4
ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ
- 59 -
Двойная дивергенция и конвергенция изображаются на схеме SFC
двойными горизонтальными линиями (рис.3.6).
Рис.3.5. Одинарная дивергенция и конвергенция на языке SFC
Рис.3.6. Двойная дивергенция и конвергенция на языке SFC
1
2 3
4 5
1
2
4
3
1
инициализация
Начало процесса
Процесс 1 Процесс 2
Конец процесса 1
Конец процесса
2
Ожидание процесса 2
Ожидание процесса 1
1
2
3 4
1
2 3
4 5
5
6
1
1
2
3 4
1
2 3
4 5
1
1
одинарная
дивергенция
одинарная
конвергенция
ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ
- 60 -
Действия внутри шагов.
Второй уровень программирования шага на языке SFC является
детальным описанием действий, выполняемых во время активности
шага. К действиям внутри шагов относятся:
булевы действия и SFC – действия (управление дочерними SFC
программами);
«Pulse» и «Non-stored» – действия, программируемые на языках
ST и IL;
вызов подпрограмм, написанных на любом языке ISaGRAF
кроме SFC.
В одном и том же шаге может быть описано несколько действий
одного или разных типов. Булевы действия присваивают входной или
внутренней булевой переменной bo значение активности шага каждый
раз, когда текущий шаг активируется или деактивируется. Булевы
действия имеют следующий синтаксис:
bo(N); bo; - присваивает переменной bo значение сигнала
активности шага (атрибут N является необязательным);
/bo; - присваивает переменной bo отрицание значения сигнала
активности шага;
bo(S); - устанавливает переменную bo в TRUE, когда шаг
активируется;
bo(R); - устанавливает переменную bo в FALSE, когда шаг
активируется.
На рис.3.7 приведен фрагмент программы на языке SFC и
временная диаграмма изменения значений дискретных (булевых)
переменных..
Рис.3.7. Фрагмент программы на языке SFC и временная диаграмма
изменения значений дискретных (булевых) переменных
20
(*булевы действия*)
bdirect(N);
/binvert;
bset(S);
breset( R );
GS20.x
(активность шага)
bdirect
binv
ert
bset
breset
t
t
t
t
t
ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ
- 61 -
На рис.3.8 приведена программа на языке SFC, использующая
булевы действия. На втором, третьем и четвертом переходах в
качестве условий используются операторы задержки действий,
выполняемых внутри второго, третьего и четвертого шагов.
«Pulse» – действия это список команд на языке ST или IL,
которые выполняются только один раз в момент активации шага.
Синтаксис «Pulse» – действий следующий:
Action(P):
(*операторы языка ST или блок команд на языке IL*)
End_Action;
Рис.3.8. Программа на языке SFC, использующая булевы действия
На рис.3.9 показан пример программы на языке SFC,
использующий «Pulse» – действия. Как правило, на переходах стоят
условиявыражения, в которых переменные имеют атрибут входных
или внутренних.
1
2
Action(P);
Led_1:=false; Led_2:=false;
End_Action;
Action(P);
Led_3(N); /Led_4;
End_Action;
3
Action(P);
Bo_3(S); Bo_101( R );
End_Action;
GS2.t>1s
4
Action(P);
/Bo_3 AND Bo_101;
End_Action;
GS3.t>2s40ms;
GS4.t>0.5s
1
ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ
- 62 -
Рис.3.9. Программа на языке SFC, использующая действие «Pulse»
При этом временная диаграмма выполнения «Pulse» – действия в
рамках шага имеет следующий вид:
«Non-stored»-действиеэто список команд на языке ST или IL,
которые выполняются на каждом цикле в течение всего периода
активности шага. Синтаксис описания этих действий следующий:
Action(N):
(*операторы языка ST или блок команд на языке IL*)
активность
шага
t
t
Выполнение
«Pulse» –
действия
1
2
3
Action(P):
sub:=0.0;
End_Action;
cm=true
Action(P):
sub:=sub+1.0;
End_Action;
NOT(cm)
cm(S)
1
ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ
- 63 -
End_Action;
Пример программы на языке ST, использующей «Non-stored»-
действия внутри шага 2, показан на рис.3.10.
Рис.3.10. Программа на языке SFC, использующая действие «Non-
stored»
При этом временная диаграмма выполнения «Non-stored» –
действия в рамках шага имеет следующий вид:
активность
шага
t
t
Выполнение
«Non-stored» –
действия
1
2
Action(P):
sub:=0.0;
End_Action;
начало
вычислений
Action(N):
if cm AND NOT(cm_1)
then
sub:=sub+1.0;
End_if;
cm:=cm_1;
End_Action;
конец
вычислений
1
длительность цикла
ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ
- 64 -
Подпрограммы на языке ST могут быть вызваны непосредственно
из блока SFC-действий с использованием следующего синтаксиса:
Action(P): (*или Action(N):*)
<результат>:=<имя подпрограммы>( );
End_Action;
Пример вызова подпрограмм показан в блоке действий шага
инициализации на рис.3.11.
Условия переходов.
На втором уровне программирования SFC к каждому переходу
может быть прикреплено булево выражение, которое и обуславливает
поведение перехода. Условие может быть описано на языках ST, IL
или из перехода может быть вызвана подпрограмма на любом языке,
кроме SFC, возвращающая булево значение.
На языке ST условие представляется в виде булева выражения с
точкой с запятой на конце, содержащего булевы константы, входные и
внутренние булевы переменные или комбинацию переменных,
результатом которой является булево значение (см. условия
переходов, обрамляющих шаг 20 на рис.3.11).
Рис.3.11. Программа на языке SFC – ST, использующая различные
условия переходов
1
Action(P):
init:=SPinit( );
run:=SPRun( );
err:=Error( );
End_Action;
20
init=1
Anv OR (GS20.t>3s);
40
EvalCond( );
EndEval( );
1
ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ
- 65 -
Для вычисления условия может быть вызвана любая подпрограмма
в соответствии с синтаксисом: <имя подпрограммы>( );. Условие
будет равно TRUE, если возвращаемое значение программой не равно
нулю, и FALSE в противном случае. На рис.3.11 вызов подпрограммы
используется для вычисления условий перехода, обрамляющих шаг
40.
Динамические правила языка SFC.
В языке SFC можно выделить следующие динамические правила:
выполнение перехода осуществляется, если он разрешен, и
соответствующее ему условие перехода имеет значение TRUE;
считается, что переход разрешен, когда все предшествующие ему
шаги, присоединенные к символу данного перехода, активны (в
противном случае переход запрещен);
для указания переходов, которые должны выполняться
одновременно, можно использовать двойную дивергенцию; если такие
переходы показаны на схеме отдельно, то для задания условий
перехода можно использовать состояние активности предшествующих
шагов (GSnnn.x);
выполнение перехода немедленно приводит к деактивации
непосредственно предшествующих ему шагов и активации шагов,
непосредственно следующих за ним;
если во время выполнения шаг одновременно активируется и
переводится в пассивное состояние, то приоритет отдается активации.
Иерархия программ на языке SFC и SFC-действия.
В системе ISaGRAF каждая программа на языке SFC может
управлять (запускать, уничтожать, приостанавливать) другими
программами на том же языке, которые называются дочерними
программами той программы, которая ими управляет. SFC-программы
объединяются в иерархическое дерево. К основным правилам этой
иерархической структуры относятся следующие:
программы на языке SFC, не имеющие родительской
программы, называются главными программами;
главные программы на языке SFC активируются системой при
запуске прикладной программы;
программа может иметь несколько дочерних программ;
дочерняя программа не может иметь более одной родительской
программы и управляется только родительской программой;
ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ
- 66 -
программа не может управлять дочерними программами одной
из своих дочерних программ.
Дочерняя программа с именем <child_prog> может быть запущена
или уничтожена в соответствии с изменением сигнала активности
шага. Для этого можно воспользоваться SFC – действиями, имеющими
следующий синтаксис:
<child_prog> (N); запускает дочернюю последовательность,
когда шаг становится активным и уничтожает ее, когда шаг
становится пассивным (атрибут N является необязательным);
<child_prog> (S); запускает дочернюю последовательность,
когда шаг становится активным и не реагирует на переход
шага в пассивное состояние;
<child_prog> (R); уничтожает дочернюю последовательность
при активизации шага и не реагирует на его деактивизацию.
На рис.3.12 приведен пример иерархического SFC-дерева c
головной программой Father, имеющей дочерние программы с
именами SeqMix и SeqPump, а также пример родительской
программы. В таблице приведены операторы и функции языка ST для
управления дочерними программами. Эти операторы могут
выполняться в рамках действий «Pulse» и «Non-stored» и все, кроме
функции GSTATUS, имеют общий синтаксис:
<оператор>(<child_prog>);
Синтаксис использования функции GSTATUS:
<переменная>GSTATUS(<child_prog>);
Действие Оператор языка
ST
Семантика
Запуск
GSTART
Запускает дочернюю
программу, активируя все ее шаги
инициализации. Дочерние
программы указанной дочерней
программы автоматически не
запускаются.
Уничто
жение
GKILL
Уничтожает дочернюю
программу, деактивируя все ее
активные шаги. Все дочерние
программы этой дочерней
ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ
- 67 -
программы также уничтожаются.
Приоста
новка
GFREEZ
Деактивирует все активные
шаги дочерней программы и
запоминает их таким образом, что
программа может быть
перезапущена с точки
приостановки. Все дочерние
программы указанной дочерней
программы также
приостанавливаются.
Перезап
уск
GRST
Перезапускает
приостановленную программу на
языке SFC, вновь активируя все
приостановленные шаги. Дочерние
программы указанной программы
автоматически не
перезапускаются.
Получе
ние
состояния
GSATUS
Возвращает текущее состояние
указанной дочерней программы (1
активная, 0 – пассивная, 2 –
приостановленная).