Приветствую Вас, Гость · Вход · Регистрация

Главная » Файлы » MicroSCADA » Scil

5. Переменные в Scil
[ ] 18.12.2008, 21:35

5. Переменные

Данная глава описывает использование переменных в SCIL:

5.1 Общие правила: имена переменных и контексты переменных

5.2 Использование переменных: как присваивать значения переменным, как использовать переменные, индексирование переменных

5.3 Некоторые предопределенные переменные изображений

5.1 Общие правила

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

При присвоении переменная автоматически получает тип данных, соответствующий типу присвоенного значения. В качестве значений переменных допускаются все типы данных SCIL (Глава 3). Значения переменных, и также их типы данных, могут быть изменены новыми присвоениями в любое время.

Имена переменных

Имена переменных могут выбираться произвольно, в соответствии с правилами, приведенными в разделе 2.2. Имена переменных могут содержать до 63 символов.

Окружение переменных
Переменные не хранятся на диске. Переменные существуют, пока в основной памяти существует окружение, в котором эти переменные определены. Переменная может использоваться только в пределах окружения, в котором она была определена (присвоено значение). Следующие объекты формируют окружение переменных:
  • Изображение. Все программы, окна и под-изображения в рамках одного и того же изображения имеют свои общие переменные. Переменная, определенная в изображении окна, например, может использоваться в основном изображении, и наоборот. Если есть необходимость в специфических переменных для окна, используйте атрибуты окна, определяемые пользователем, вместо переменных (смотрите Главу 4).
  • Система диалогов. Все диалоги и изображения в пределах одной диалоговой системы имеют свои общие переменные. Следовательно, например, переменные, определенные в изображении (контейнере изображения) могут использоваться во всех диалогах, открытых из этого изображения. Если необходимы специфические переменные диалогов или элементов диалогов, используйте атрибуты, определяемые пользователем (смотрите Главу 4).
  • Каждая отдельная командная процедура, объект данных и канал времени, запускаемые командами #EXEC, #EXEC_AFTER или каналом событий.
  • Командные процедуры и объекты данных, запускаемые одним и тем же каналом времени. Объекты данных и командные процедуры, связанные с каналом времени, могут использовать переменные. Эти переменные должны быть определены в командных процедурах, выполненных ранее тем же самым каналом времени (то есть процедуры с большим приоритетом).

Программы, выполняемые командой #DO (раздел 7.3) или функцией DO (Глава 8), принадлежат окружению переменной, в котором расположены эта команда или функция.

Передача значений переменных между окружениями
Имеются следующие возможности для передачи значений переменных между различными окружениями:
  • Значения переменных могут быть переданы в командные процедуры, в объекты данных и в изображения формата (изображения печати) посредством команд #EXEC и #PRINT (раздел 7.3).
  • Каналы событий передают значения атрибутов объекта процесса в автоматически созданные переменные ("переменные кадра") с такими же именами, как у атрибутов. Эти имена переменных могут использоваться в связанных объектах данных и командных процедурах.
  • Изображения, напечатанные автоматически как результат события процесса, либо командой #LIST, могут использовать некоторые автоматически определяемые переменные ("переменные кадра"), которые получают имена и значения из атрибутов напечатанного объекта процесса.

Имеются некоторые предопределенные переменные изображений, которым значения присваиваются автоматически. Они могут использоваться в изображениях в любом месте приложения (раздел 5.3).

Некоторые атрибуты объектов базовой системы были зарезервированы для использования в качестве "глобальных переменных" в программах приложения: SYS:BUV, APLn:BUV и MONn:BUV.

5.2 Использование переменных

Присвоение значений переменной

Присвоение значения переменным осуществляется с помощью оператора следующего формата:

@V = выражение

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

В случае если переменной присвоено значение типа ‘список’, будет создан переменный объект с именем ‘V’.

Если выражение является вектором, например, обозначение объекта, другая векторная переменная или векторное множество (раздел 3.6), переменная становится переменной векторного типа. Кроме того, переменной можно присваивать отдельные элементы вектора, индексируя имя переменной:

@V(i) = выражение

@V(i1..i2) = выражение

где

‘i’, ‘i1’ и ‘i2’- индексы, смотрите "Индексация" ниже.

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

Правила индексирования переменных описаны ниже.

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

@V строка символов

что аналогично оператору @V = «строка символов», за исключением того, что в первом случае символы нижнего регистра будут преобразованы в символы верхнего регистра. Имя переменной не должно индексироваться.)

Примеры

Оператор Объяснение
@VAR = ABC:PAI Значение объекта процесса считывается из базы данных процесса и присваивается переменной.

@TEXT = "ABC:PAI" Значение объекта не считывается. Переменная принимает текстовое значение «ABC:PAI».

@LIST = PROD_QUERY(20) Переменной LIST присваивается значение списка, сформированного функцией PROD_QUERY. Одновременно создается переменный объект LIST:V .

@A = FALSE Переменной A задано булево значение FALSE.

@V = DATA:D(1..20) Переменная V становится вектором, содержащим первые 20 зарегистрированных значений объекта данных DATA.

@V(1..5) = D1:D(1..5) + D2:D(1..5) Первым пяти элементам переменной V присваиваются значения сумм первых пяти зарегистрированных значений объектов данных D1 и D2.

@A = (5,4,OBJ:POV3,CLOCK) Переменная A становится вектором из четырех элементов.
Использование переменных в выражениях

После того, как переменной было присвоено значение, ссылка на это значение осуществляется как:

%V

т.е. имя переменной, которому предшествует знак процента.

Это обозначение может использоваться в качестве операнда в выражениях, в которых значение переменной заменяет обозначение. Тип данных переменной определяет, какие операции могут быть выполнены над ней (Глава 6). Никакие операции с переменными типа ‘список’ не выполняются. Их можно только копировать в новое имя переменной.

Если переменная 'V' является вектором, обращение к отдельным элементам осуществляется через индексы. Обозначение %V без индекса ссылается на весь вектор. Правила индексации смотрите ниже.

Примеры

Инструкция Объяснение
@NEW = 30 * %OLD Переменной NEW присваивается значение переменной OLD, помноженное на 30.

@NUMBER = %NUMBER + 1 Старое значение переменной увеличивается на единицу.
@LIST2 = %LIST Если LIST - переменная типа ‘список’, LIST2 становится переменной этого же типа, и создается объект переменной LIST2:V .

!SHOW WIN %VAR Весь вектор отображается в окне WIN одного из следующих типов: MULTIFIELD, BAR или CURVE.

@A = %A(1) + %A(2) Сумма первого и второго элементов – в переменной A.
Индексирование векторных переменных

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

  • Индексы являются положительными целыми числами или целочисленными выражениями в диапазоне 1...10000.
  • Индексы всегда заключаются в круглые скобки.
  • Диапазон индексов задается как (i..j), где 'i' и 'j' - положительные целые числа или выражения. Нижний индекс ‘i’ не должен быть больше верхнего ‘j’. Запись (..) представляет все индексы векторной переменной. (i..) означает все индексы, большие или равные 'i', а (..j) - все индексы, меньшие или равные 'j'.

Имя векторной переменной без индекса относится ко всему вектору.

"Расширение переменной"

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

'V'

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

Этот способ использования переменных называется “расширение переменной”. Не только переменные, но и атрибуты объектов переменных, атрибуты окна и атрибуты объектов Visual SCIL могут быть “расширены" при условии, что они не индексированы.

Примеры

Оператор Значение
@LN = "P_METER" Переменной LN присваивается текстовое значение "P_METER", а переменной IX - целочисленное значение 22

@IX = 22
@PRESSURE = 'LN':PAI’IX’ Переменной PRESSURE присваивается значение AI-атрибута объекта процесса ‘P_METER’ с индексом 22.

@PRESSURE = P_METER:PAI22 То же самое, что в предыдущем варианте, но без использования переменных.

@QUANTITY=LIST-(QUANT1="PRESSURE",-QUANT2="TEMP",-QUANT3="CURRENT") Использование атрибутов в расширении переменной. Значение 'QUANTITY:VQUANT1' в этом случае равно “PRESSURE”. Переменной ‘A’ присваивается значение AI-атрибута объекта процесса ‘PRESSURE:P’ с индексом 22.
@A='QUANTITY:VQUANT1':PAI22

5.3 Предопределенные переменные изображения

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

VIDEO_NR Логический номер текущего монитора (сеанса приложения). Переменная аналогична MONn:BAN. Она может принимать целочисленные значения в диапазоне 1...50. Номер монитора выбирается при запуске сеанса приложения. Эта переменная не должна изменяться вручную.
PIC_NAME Имя изображения (основного изображения), отображаемого на экране в данный момент. Переменная может принимать текстовые значения, содержащие до 10 символов. Эта переменная не должна изменяться вручную.
CURSOR_POS Данная переменная содержит координаты положения курсора последнего выбора функциональной клавиши. Она всегда обновляется при выборе функциональной клавиши, за исключением случая, когда система находится в режиме ввода (после команд !INPUT_VAR, !INPUT_POS или !INPUT_KEY). Переменная используется, например, при формировании линейных командных клавиш, смотрите "Редактирование изображений", Глава 6.
Переменная является вектором из четырех элементов:
(x,y,x_rel,y_rel)

где

x, y = координаты относительно верхнего левого угла изображения, т.е. (1,1). х = 1 .. 160, y = 1 .. 96.

x_rel, y_rel = координаты относительно верхнего левого угла окна, где расположен курсор, т.е. (1,1).

KEY_POS Эта переменная содержит координаты последней выбранной функциональной клавиши относительно верхнего левого угла клавиши. Переменная обновляется при каждом выборе функциональной клавиши. Переменная является вектором из двух элементов:
(x_rel, y_rel)
где
x_rel, y_rel = координаты относительно верхнего левого угла клавиши, т.е. (1,1).
ENTER_POS Данная переменная содержит координаты последнего нажатия на клавишу ENTER. Переменная обновляется при каждом нажатии на функциональную клавишу, которая содержит команду !ENTER, завершающую команду !INPUT_VAR (независимо от того, содержит клавиша ENTER другие операторы или нет). Переменная является вектором из четырех элементов:
(x,y,x_rel,y_rel)
где
x, y = координаты относительно левого верхнего угла изображения, т.е. (1,1).
x_rel,y_rel = координаты относительно левого верхнего угла окна, в котором располагается клавиша ENTER (1,1).

Примеры

Оператор Значение
#EXEC EVENT_'VIDEO_NR':E Активизируется объект событий, содержащий номер монитора. В комбинации с последовательностями #ON, также как определено с видео номером, событие выводится на тот же монитор.

#ON EVENT_'VIDEO_NR':E !SHOW ....
#IF %CURSOR_POS(2) = 40 #THEN ..... Оператор выполняется при условии, что нажатая строка имеет номер 40.
#PRINT 1 'PIC_NAME' Печатается текущее изображение экрана.

Вернуться к оглавлению

По материалам © ABB
Категория: Scil | Добавил: RAZ
Просмотров: 1426 | Загрузок: 0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]