
Votaykov
.pdf
прямоугольники, в которых отображается имя переменной или значение константы.
Наиболее понятно все сказанное выше станет после того, как мы рассмотрим небольшую программу на FBD и попробуем разобраться в ней (рис. 0.1). Эта программа представляет собой модель работы PID-регулятора: на вход подается значение регулируемой величины x, требуемое значение регулируемой величины х0, а выход поступает в переменную yOut.
|
|
- |
|
|
|
x |
IN1 |
|
PID_RgS |
|
|
|
|
|
|
||
x0 |
IN2 |
Q |
Eps |
|
|
true |
|
|
IsOn |
Y |
yOut |
Рис. 0.1
Начнем разбираться слева направо и сверху вниз. Т.о. первые два прямоугольных блока с надписями «х» и «х0» и самый правый прямоугольник с надписью «yOut» представляют собой переменные, которые будут использоваться в программе. Блок с надписью true представляет логическую константу true (истина). Оставшиеся два блока «-» и «PID_RgST» представляют функциональные блоки. Также внутри этих двух блоков перечислены названия входов и выходов. Т.о. блок «-» имеет два входа и один выход. То же самое со вторым блоком. Линии между блоками показывают связи между ними. Так линия от блока с надписью «х» к блоку с надписью «-» показывает, что значение переменной х будет передано на вход блока «-». Линия, проведенная от правого края блока «-» к левому краю блока PID_RgST, показывает, что выход блока «-»
(Q) будет подаваться на вход блока PID_RgST (Eps).
Основная работа ПИД-регулятора заключена в блоке PID_RgST. Именно в теле этого блока происходит регулирование. На вход Eps блока PID_RgST подается разница между значением регулируемой величины х и требуемым
20
значением этой величины х0, вычисленная блоком «-». Результат работы ПИД-регулятора поступает в переменную yOut. Также на вход ПИД-регулятора подается константа true, которая «включает» регулирование. Стоит отметить, что функциональный блок «-» является стандартным блоком ISaGRAF, а блок PID_RgST – функциональный блок, определенный в том же проекте, что и данная программа (в секции функциональных блоков). Т.о. можно отметить, что в программе на FBD нет принципиальной разницы между тем, где находится определение тела функционального блока: в этом же проекте, в библиотеке или это стандартный блок ISaGRAF.
Также предоставленная программа позволяет показать, что программирование на FBD представляет собой ни что иное как рисование диаграмм с так называемыми «черными ящиками» и связями между ними, где в качестве «черных ящиков» выступают функциональные блоки. Здесь под «черным ящиком» подразумевается блок, внутреннее содержание которого не имеет значения, а имеют значение только содержание его входов и выходов.
Язык релейных диаграмм (Ladder Diagram – LD)
Прообразом языка релейных диаграмм стали электрические схемы с релейной логикой. Дело в том, что язык LD предназначен для вычисления только логических уравнений, а программы этого языка очень похожи на упомянутые схемы. Основными объектами языка являются силовые шины, линии связи, контакты и витки.
Силовые линии (силовые шины, силовые рельсы) представляют собой вертикальные линии, которыми ограничена диаграмма LD. Левая силовая линия несет сигнал TRUE.
Соединительные линии предназначены для соединения остальных объектов схемы между собой. Эти линии несут один из двух сигналов TRUE или FALSE. Линия, присоединенная к левой силовой шине, имеет значение TRUE. Две соединенные непосредственно линии несут одинаковый сигнал.
21

Контакты предназначены для проведения логических операций между состоянием соединительной линии, присоединенной слева к контакту,
ипеременной, ассоциированной с контактом. Имеется несколько видов контактов.
1.Прямой контакт представлен на рис. 0.2 и производит логическую операцию «И» между состоянием левой соединительной линии и переменной, результат поступает в правую соединительную линию.
логическая
переменная
Рис. 0.2
На рис. 0.2 «логическая переменная» – имя логической переменной, ассоциированной с контактом.
2. Инвертированный контакт производит операцию логического И между состоянием левой соединительной линии и отрицанием состояния логической переменной, ассоциированной с контактом. Общий вид инвертированного контакта представлен на рис. 0.3.
логическая
переменная
Рис. 0.3
3. Контакт с определением переднего фронта выдает сигнал TRUE в правую линию связи, если левая линия связи TRUE и значение переменной, привязанной к контакту, переходит с FALSE на TRUE (передний фронт). В остальных случаях результат контакта FALSE. Контакт с определением переднего фронта представлен на рис. 0.4а.
4. Контакт с определением заднего фронта выдает TRUE, если левая линия связи TRUE и значение переменной меняется с TRUE на FALSE (задний фронт). Контакт с определением заднего фронта представлен на рис. 0.4б.
22

лог. перем. |
|
лог. перем. |
||||
|
P |
|
|
|
N |
|
а) |
|
|
|
|||
|
|
|
|
|
|
|
передний |
|
б) задний |
||||
фронт. |
|
фронт. |
Рис. 0.4
Витки предназначены для присвоения значения левой соединительной линии витка логической переменной, связанной с витком. При этом сигнал с левой соединительной линии распространяется без изменений на правую соединительную линию. Также как и для контактов имеется несколько видов витков:
1)прямой и инвертированный витки (рис. 0.5а,б) присваивают связанной с ними логической переменной соответственно прямое инвертированное состояние левой соединительной линии.
2)SET/RESET витки (рис. 0.5в,г) предназначены для присвоения логической переменной соответственно TRUE или FALSE в тот момент, когда левая соединительная линия принимает значение TRUE. При смене состояния левой соединительной линии на FALSE значение переменной не меняется.
логическая |
|
логическая |
логическая |
|
логическая |
|||||||||
переменная |
|
переменная |
переменная |
|
переменная |
|||||||||
|
|
|
|
|
|
|
|
|
S |
|
|
|
R |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
а) прямой |
б) инвертированный |
в) SET виток |
|
г) RESET |
||||||||||
виток |
|
виток |
|
|
|
|
виток |
Рис. 0.5
3)виток с определением переднего фронта (рис. 0.6а) присваивает переменной значение TRUE, когда значение левой соединительной линии меняется с FALSE на TRUE. В остальных случаях – FALSE.
4)виток с определением заднего фронта (рис. 0.6б) присваивает переменной значение TRUE, когда значение левой соединительной линии меняется с TRUE на FALSE. В остальных случаях – FALSE.
23

логическая |
|
логическая |
||||
переменная |
|
переменная |
||||
|
P |
|
|
|
N |
|
|
|
|
|
|||
а) передний |
|
б) задний |
||||
фронт |
|
фронт |
Рис. 0.6
Таким образом, это все основные объекты языка LD, функционирование которых необходимо знать, чтобы создать программу на этом языке. Но надо сказать, что описание языка будет не полным, если не описать еще два вида объектов: метки и переходы по ним. Как и любой другой язык LD предоставляет возможность переходов на любую другую ветвь выполнения программы. Для этого необходимую ветвь выделяют меткой, которая присоединяется к силовой линии, начинающей соответствующую ветвь диаграммы. Метка изображается слева от силовой линии в виде «Имя_метки:». Переход на метку изображается двумя уголками (>>), справа от которых помещается имя метки. К символу перехода может быть присоединена только левая линия связи. Ее состояние и определяет возможность перехода: если линия имеет состояние TRUE, то переход осуществляется, иначе – нет.
Кроме всех указанных объектов существует также специальный объект, который позволяет прервать выполнение LD диаграммы в любом месте. Этот объект имеет имя RETURN и на диаграмме изображается так, как показано на рис. 0.7. При этом выполнение программы прекращается, если сигнал в левой линии связи равен TRUE, остальные «строки» программы не выполняются (о принципах выполнения LD программы см. ниже).
Рис. 0.7
Завершим описание языка LD принципами выполнения программы:
1) программа может иметь несколько ветвей («строк»). Строки располагаются друг под другом и выполняются последовательно сверху вниз и слева направо (сначала самая верхняя ветвь слева направо, затем следующая и т.п.). Таким
24
образом, становится ясным смысл символа RETURN (см. выше), он прерывает выполнение всех следующих за ним строк программы.
2)существует понятие множественных соединений: соединительные линии
могут связываться непосредственно между собой без участия витков и контактов. В этом случае используется следующая логика определения значения сигнала линии:
o одна соединительная линия разделяется на несколько: каждая из соединительных линий, выходящих из исходной имеет то же значение сигнала, что и исходная линия;
o несколько соединительных линий объединяются в одну: сигнал в полученной линии определяется как логическое «И» сигналов всех объединяемых линий.
Язык последовательных функциональных схем
(Sequential Function Charts — SFC)
Язык последовательных функциональных схем (SFC) – это графический язык, который используется для описания последовательных операций. Процесс представляется в виде набора определенных шагов, связанных переходами. К каждому переходу прикреплено логическое условие. Действия внутри шагов описаны более детально при помощи других языков (ST, IL, LD, FBD).
Надо отметить, что выполнение программ данного языка несколько необычно. Выше уже говорилось, что программы проекта ISaGRAF выполняются в соответствие с принципом цикличности (см. выше). При этом программы секции SEQUANTIAL, которые могут быть написаны только на SFC или FC, выполняются в середине цикла. Особенность же выполнения этих программ заключается в том, что, в отличие от программ остальных секций, программы SFC выполняются не полностью за 1 цикл, а последовательно шаг за шагом, при этом, если на выполнение очередного шага не хватает времени в данном цикле, то этот шаг будет выполнен в следующем цикле. Т.е. в каждом цикле ISaGRAF выполняется не вся программа SFC, а только то количество
25

шагов, на которое хватает время. Затем программа прерывается, а в следующем цикле она продолжит свое выполнение с прерванного места.
Программа на SFC представляет собой диаграмму, состоящую из шагов и переходов между ними. Основное правило построения SFC диаграммы гласит: шаги и переходы должны чередоваться, т.е. шаги не могут следовать подряд и, соответственно, переходы не могут следовать подряд. Т.о. основными компонентами SFC диаграммы являются шаги, переходы и «прыжки на шаг».
Шаг представляется прямоугольником. Шаги нумеруются последовательно (по мере их вставки в программу). Номер проставляется внутри прямоугольника. Действия, которые описывают шаг, отображаются в прямоугольнике комментария, присоединенном справа к прямоугольнику шага
(рис. 0.8).
Рис. 0.8
Выделяют особый вид шагов: начальные шаги. Программа ISaGRAF должна включать, по крайней мере, один такой шаг. Особенность этого вида шагов в том, что в момент старта программы SFC управление передается именно на начальные шаги. У шагов есть атрибуты, которые могут быть использованы в любой другой программе: GSnnn.x (активность шага (логическая переменная)) и GSnnn.t (продолжительность активного состояния шага (таймер)), где nnn – номер шага, который написан в его прямоугольнике.
Переходы представляют собой горизонтальные линии, пересекающие вертикальные линии связи. Переходы также нумеруются (независимо от шагов).
26
Номер перехода проставляется под его горизонтальной линией (рис. 0.8). К переходам могут присоединяться логические условия, истинность которых определяет возможность выполнить переход (т.е. если условие в переходе истинно, то выполняется следующий шаг, иначе продолжает выполняться предыдущий шаг).
Стандартно в SFC диаграмме переходы осуществляются сверху вниз. Если необходимо нарушить стандартную последовательность шагов, используется «прыжок» на шаг, который позволяет осуществлять переход на любой шаг по его номеру (рис. 0.8). При этом «прыжок» должен быть присоединен к переходу, т.е. с его помощью можно только изобразить связь от перехода к шагу, но не от шага к переходу.
Кроме указанных основных элементов SFC диаграммы используются одиночные и двойные расхождения (схождения).
Одиночные расхождения проводятся от одного шага к нескольким переходам и позволяют произвести переход на одну (или несколько) альтернативных ветвей программы. Соответственно одиночные схождения, проведенные от нескольких переходов к одному шагу, позволяют «собрать» эти ветви в одну. Например, т.о. можно смоделировать работу оператора if…then…else (рис. 0.9). Следует отметить, что если условия в переходах 1 и 2 на рис. 0.9 не являются взаимоисключающими, то программа будет выполняться параллельно по обеим ветвям.
Двойные расхождения (изображаются двойными горизонтальными линиями) проводятся от одного перехода к нескольким шагам. Они предназначены для передачи управления к нескольким параллельным ветвям выполнения программы. Соответственно двойное схождение, проведенное от нескольких шагов к одному переходу, призвано объединить несколько параллельных ветвей выполнения программы в одну.
27

1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
условие |
|
|
|
|
|
|
|
условие |
||
|
|
|
|
1 |
|
|
|
if |
|
|
|
|
|
2 |
|
else |
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
3 |
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
|
|
|
|
|
|
|
|
|
|
4 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 0.9 |
|
|
|
|
|
Кроме всего указанного выше в SFC программе могут также использоваться так называемые макро шаги. Основная функция этих макро шагов – более «красивое» написание программы. Макро шаг – это группа шагов и переходов, описанная в той же SFC программе, но отдельно от основных ветвей ее выполнения. В основной же ветви выполнения макро шаг представляется одним символом: прямоугольником с одинарными вертикальными и двойными горизонтальными линиями (рис. 0.10).
123
Рис. 0.10
В качестве номера макро шага используется номер первого шага в теле макро шага. Таким образом, то, что макро шаги предназначены только для «красоты» программы иллюстрируется правилом их использования: к определенному макро шагу можно обратиться только один раз внутри программы. Примером целесообразности использования макро шагов может явиться такая ситуация: имеется расхождение на две ветви программы (о расхождениях см. выше в этой главе), одна из ветвей состоит из одного блока, а другая имеет множество блоков. Визуально это может быть неудобно (если блоков достаточно много). Поэтому, перенеся все блоки второй ветви отдельно от основной линии выполнения программы и поставив макрошаг вместо них,
28
получим программу, состоящую из двух ветвей, в каждой из которых визуально по одному шагу. (Полученная программа будет лишь незначительно визуально отличаться от того фрагмента, что представлен на рис. 0.9.)
До сих пор мы рассматривали верхний уровень языка SFC, который еще называется первым уровнем. Основные же действия описываются командами второго уровня языка. Эти команды представляют собой текстовое описание действия, которые необходимо выполнить на определенном шаге, или условий, которые должны удовлетворяться, чтобы осуществился переход.
Для описания действий внутри шагов используются специальные текстовые операторы SFC (в терминах встроенной справочной системы – текстовое расширение SFC), операторы ST и операторы IL. Операторы ST могут быть непосредственно включены в тело шага, а для использования операторов IL требуется следующая конструкция:
#info=IL
<инструкция> <инструкция>
....
#endinfo
Здесь #info=IL и #endinfo являются ключевыми словами и должны быть введены именно так, как показано (прописными буквами). Перед и после ключевых слов не должно быть пробелов и знаков табуляции, слова должны находиться на отдельных строках (не допускается использование инструкций языка в той же строке, где находится одно из ключевых слов).
О языках ST и IL подробнее рассказано в главах 0 и 0, поэтому далее поговорим об операторах текстового расширения языка SFC. Существует 3 основных группы операторов этого расширения.
Булевские операторы (действия) предназначены для присваивания булевским переменным логических выражений. Общий синтаксис этих операторов следующий:
[/]<булевская переменная>[(N|R|S)]
29