Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Votaykov

.pdf
Скачиваний:
11
Добавлен:
16.03.2015
Размер:
472.48 Кб
Скачать

К общим объектам относятся: основные типы, переменные, константы и предопределенные слова. Также к особому типу общих объектов следует отнести комментарии.

Все языки среды ISaGRAF являются строго типизированными, то есть каждая переменная, выражение или константа имеет свой строго заданный тип.

Все типы должны быть согласованы во всех операциях. В среде ISaGRAF

поддерживается четыре основных типа:

o BOOLEAN – логическая величина;

oANALOG – целая (integer) или действительная (real) непрерывная величина;

o TIMER –временная величина (для хранения времени); o MESSAGE – строка символов.

Как и в других системах программирования, в ISaGRAF используется понятие переменной. Каждая переменная имеет определенный тип и должна быть объявлена перед использованием. Но в отличие от многих других языков и систем программирования, объявление переменных в ISaGRAF производится не непосредственно в программе (т.к. программ много), а в специальном словаре переменных Dictionary (подробнее об этом ниже).

Отличительной особенностью переменных в среде ISaGRAF является то, что они могут быть внешними или внутренними. Внутренняя переменная хранится в памяти и может обрабатываться программой. Внешние переменные – это переменные, связанные с входом или выходов устройства ввода–вывода, поэтому они могут быть соответственно входными (доступные только для чтения) или выходными (для чтения и записи). Кроме того, переменные могут иметь различные области видимости: локальную и глобальную. Локальная переменная доступна только в программе, в которой была создана. Глобальная переменная доступна в любой программе текущего проекта. Стоит отметить, что внешняя переменная может иметь только глобальную область видимости. Ко всему прочему переменные (как локальные, так и глобальные) могут быть

10

объявлены только для чтения (Constant). Не стоит путать переменныеконстанты с константами, к рассмотрению которых мы сейчас перейдем.

Следующими общими объектами являются константы, то есть числовые и текстовые величины. Константы, как и переменные, имеют тип, который зависит от их написания (так 1.0 – действительная аналоговая константа, а 1 –

целая аналоговая константа). Текстовые константы в ISaGRAF заключаются в одинарные кавычки (апострофы) и не могут содержать более 255 символов.

Действительные аналоговые константы могут записываться в двух формах:

десятичной и экспоненциальной. В первой форме признаком действительного числа является наличие десятичной точки, разделяющей целую и десятичную часть. Во второй форме число представляется в виде мантисса E ± экспонента, что математически записывается в виде мантисса*10экспонента. Целочисленные

константы представляются 32 битами

и должны находиться

в диапазоне

от –2 147 483 648 до +2 147 483 647.

ISaGRAF предоставляет

возможность

записывать целочисленные константы по одному из четырех оснований:

десятичному, шестнадцатеричному, восьмеричному и двоичному. Для последних трех оснований требуется перед числом поставить префикс 16#, 8#

или 2# соответственно. Например, 255 – десятичная константа, 16#FF – та же константа, но по основанию 16, 2#1111_1111_1111_1111 – двоичная константа.

Для удобства представления разряды в аналоговых константах по любому из оснований могут разделяться символом подчеркивания (‘_’). (Это особенно существенно при использовании двоичных констант.) Логические константы представляются всего двумя значениями True (1) и False (0). Последний

интересный вид

констант – таймерные

константы. Эти

константы

предназначены для

представления времени

в часах, минутах,

секундах

и миллисекундах. Они записываются в формате:

 

 

T#часыHминутыMсекундыSмиллисекундыMS.

Каждая из частей может быть опущена. Префиксом для обозначений таймерной константы является T# или TIME#. Регистр значения не имеет.

11

Особым типом общих объектов являются предопределенные слова или макроопределения. Макроопределения предназначены для поименованного использования констант и целых блоков программ языка ST.

Макроопределения, как и переменные, объявляются в словаре переменных

Dictionary (см. ниже). Можно привести интересный пример использования предопределенных слов. Объявив в словаре переменных целую переменную а и два предопределенных слова:

t1

a:=

t2

2

можем записать в программе на ST следующую строку: t1 t2;

С точки зрения транслятора эта строка будет вполне правильной, так как перед ее трансляцией он вместо каждого макроопределения подставит соответствующее значение и будет транслировать выражение:

a:=2;

Наиболее частым использованием предопределенных слов является

именование констант, например, Yes и No вместо True

и False и т.п.

Хотя приведенный выше пример также имеет право на

существование

в некоторых случаях.

 

Язык структурного текста (Structured Text – ST)

Среда программирования ISaGRAF поддерживает шесть языков программирования. Наиболее легким из них представляется язык ST, поскольку, будучи похожим на язык программирования Pascal, он по своей семантике наиболее приближен к традиционным языкам программирования высокого уровня. Рассмотрим вкратце основные конструкции данного языка.

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

12

Основными операторами языка ST являются:

1)оператор присваивания, который имеет формат переменная :=

выражение;

2)оператор вызова подпрограмм и функций;

3)оператор вызова функционального блока;

4)операторы выбора (IF, THEN, ELSE, CASE);

5)операторы циклов (FOR, WHILE, REPEAT);

6)управляющие операторы (RETURN, EXIT).

Оператор присваивания, как следует из его названия, предназначен для присвоения значения переменной.

Подпрограммы, или функции, – это самостоятельные программные единицы, работа которых управляется родительской программой. Подпрограммы и функции могут иметь входные переменные и возвращают некоторое значение. Вызов функции осуществляется в виде функция (список фактических параметров), где функция – имя вызываемой функции. Оператор вызова функции может присутствовать везде, где допустимо появление константы того же типа, что и значение, возвращаемое функцией. Так, если функция возвращает целое значение, то она может использоваться в аналоговом выражении. Чтобы внутри тела функции указать возвращаемый результат, необходимо присвоить его неявно объявленному выходному параметру с именем функции. Стоит отметить, что рекурсивный вызов процедур не поддерживается.

Функциональные блоки, также как и функции, могут иметь входные параметры, но в отличие от функций могут возвращать несколько значений. Кроме того, все локальные переменные копируются для отдельного экземпляра блока. Так, если производится обращение к функциональному блоку по определенному имени, то код этого блока будет работать с набором локальных переменных, созданным специально для данного экземпляра. И если блок изменит локальные переменные, то это может отразиться на результатах следующих вызовов. При этом если другой экземпляр того же блока изменит внутренние переменные, то это не отразится на работе

13

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

c:=c+a;

test2:=c;

где c – локальная переменная функции; а – параметр.

Тогда программа со следующим текстом: f1:=test2(1); f2:=test2(1);

приведет к следующей динамике изменения значений переменных f1 и f2 (табл. 1).

Таблица 1

цикл

1

2

3

4

5

6

7

8

9

10

11

 

 

 

 

 

 

 

 

 

 

 

 

f1

1

3

5

7

9

11

13

15

17

19

21

 

 

 

 

 

 

 

 

 

 

 

 

f2

2

4

6

8

10

12

14

16

18

20

22

 

 

 

 

 

 

 

 

 

 

 

 

Эта таблица показывает, что сначала f1 принимает значение 1, равное сумме входящего параметра (1) и локальной переменной (0). Затем f2 принимает значение, равное сумме входящего параметра (1) со значением локальной переменной (1). Таким образом, предыдущий вызов функции привел к тому, что значение локальной переменной изменилось и было использовано в следующем вызове этой же функции.

Функциональные блоки, предназначенные для использования в языке ST, должны быть, как и переменные, предварительно объявлены в словаре Dictionary (см. ниже). Функциональный блок вызывается следующим образом:

имя_блока (параметры).

14

Вызов функционального блока не может осуществляться внутри выражений (т.к. во время этого вызова никаких данных не возвращается, к тому же блок может возвращать сразу несколько данных). Обращение к результату вызова блока производится в соответствии со следующим синтаксисом:

имя_блока.выходной_параметр_1,

имя_блока. выходной_параметр_N.

Операторы выбора предназначены для разветвления вычислений

всоответствии с некоторым условием. Оператор IF проверяет некоторое выражение на истинность и производит выбор одной из двух ветвей решения

взависимости от результата проверки. Этот оператор имеет две формы записи: сокращенную и расширенную. Первая форма имеет следующий синтаксис:

IF логическое выражение THEN

(блок операторов, выполняющийся при истинности логического выражения)

END_IF;

В этом случае проверяется значение логического выражения. Если оно истинно, то выполняется блок операторов после THEN, затем управление передается операторам за END_IF. Иначе управление сразу передается за END_IF. Расширенная форма оператора IF имеет следующий синтаксис:

IF логическое выражение1 THEN

(блок операторов, выполняющийся в случае истинности выражения 1)

ELSE_IF логическое выражение2 THEN

(блок операторов, выполняющийся в случае истинности выражения 2, но ложности выражения 1)

ELSE_IF логическое выражениеN THEN

(блок операторов, выполняющийся в случае истинности выраженияN, но ложности всех предыдущих выражений)

ELSE

15

(блок операторов, выполняющийся в случае ложности всех логических выражений)

END_IF;

Выполнение этого оператора осуществляется по следующей схеме: проверяется логическое выражение 1. Если оно истинно, то выполняется первый блок операторов. Затем осуществляется передача управления за END_IF. Иначе проверяется следующее условие. Если оно истинно, выполняется второй блок операторов. Проверка условий продолжается до тех пор, пока они не закончатся или не найдется истинное. Если все логические выражения ложны, то управление передается блоку операторов, следующему за ключевым словом ELSE.

Оператор выбора CASE предназначен для выбора из нескольких альтернативных вариантов значений одного целочисленного выражения. Его общий синтаксис:

CASE целое выражение OFзначение1: операторы; значение2, значение3: операторы;

значениеN: операторы;

ELSE

операторы

END_CASE

Во время выполнения оператора производится вычисление целочисленного выражения и производится последовательное сравнение результата с заданными значениями. Если совпадение найдено, то выполнятся операторы, соответствующие совпавшему значению, после чего выполнение продолжится с оператора, следующего за END_CASE. Если совпадения не найдены, то выполнятся операторы, следующие за ELSE. Если ключевое слово ELSE опущено и не найдено ни одного совпадения, то выполнение сразу начнется с первого оператора после END_CASE.

16

Операторы циклов FOR, WHILE и REPEAT предназначены для организации циклов с параметром, предусловием и постусловием соответственно.

Оператор RETURN предназначен для досрочного окончания работы текущей программы.

Оператор EXIT позволяет выходить из циклов FOR, WHILE и REPEAT, не дожидаясь завершения их работы.

Язык ST также использует обычные логические операторы AND, OR, NOT и XOR для вычисления логических выражений.

Язык инструкций (Instruction List – IL)

Язык инструкций является аналогом низкоуровневых языков типа Ассемблера. Он задумывался комиссией IEC как язык, предназначенный для создания высокоэффективных программ. К сожалению, особенности поддержки данного языка в системе ISaGRAF, а именно, интерпретирующая среда выполнения программ, сделали данный язык скорее громоздким и ненужным атавизмом, чем действительно полезным языком программирования. Если действительно необходима большая скорость работы программы и ее малые размеры, лучше воспользоваться «родным» языком Ассемблера, того контроллера, под который делается программа. По указанным причинам в данном пособии производится очень краткий обзор языка IL. Более подробную информацию можно получить из системы встроенной справки ISaGRAF.

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

Итак, вычисления в языке IL производятся всегда над текущим результатом (регистром IL) и относятся к нему (например, оператор LD 5 загружает целое значение 5 в регистр IL).

17

Общий синтаксис языка может быть изображен следующим образом:

[метка:] [оператор параметры]

где метка – необязательная метка оператора, отделенная от самого оператора двоеточием, оператор – имя используемого оператора, параметры – список параметров, разделенных запятыми (их количество зависит от оператора). Квадратные скобки в данном случае указывают на необязательность элемента. То есть оператору не обязательно должна предшествовать метка, и метка может быть помещена на отдельную строку.

Для оператора применимы некоторые модификаторы. К ним относятся: N – отрицание операнда,

( – задержанная операция (открывающая скобка),

С– условная операция.

Водном операторе может использоваться несколько модификаторов. Модификатор N предназначен для отрицания операнда. Так оператор ANDN x1 на языке ST может быть представлен как результат:=результатAND NOT x1.

Открывающая скобка заставляет задержать выполнение оператора до появления закрывающей скобки. Например, группа операторов:

AND ( B

OR A

)

на ST может быть записан как результат:=результат AND (B OR A). То есть выполнение оператора AND открывающей скобкой как бы задерживается до выполнения группы операторов в скобках. И только после появления закрывающей скобки операторAND выполняется.

Наконец, модификатор C указывает на то, что соответствующая инструкция должна быть выполнена, только если текущий результат имеет значение TRUE (отличное от нуля). Т.о., например, оператор:

ANDC В

на ST принял бы вид if результат<>0 then

18

результат:=результат AND B; end_if;

Язык IL имеет множество операторов, позволяющие производить различные операции. Заинтересовавшиеся читатели могут получить полный список операторов, а также их описание из встроенной системы справки среды ISaGRAF, а также из других источников. Здесь же завершим рассмотрение языка IL.

Язык функциональных блоковых диаграмм

(Functional Block Diagram – FBD)

Кроме наиболее распространенных в мире программирования текстовых языков среда ISaGRAF поддерживает ряд графических языков. Основной принцип этих языков в том, что программа не пишется, а «рисуется», т.е. строится из заданного числа графических конструкций. Язык FBD один из этих языков.

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

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

На входы блоков также могут подаваться значения переменных и константы. Для этого используются блоки специального вида:

19

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]