Аргументы:
IN REAL любая знаковая аналоговая величина
Q REAL модуль аналоговой величины
Описание:
Дает абсолютное значение действительной величины.
(*FBD пример блока “ABS”*)
(* ST Эквивалент: *)
over := (ABS (delta) > range);
(* IL Эквивалент: *)
LD delta
ABS
GT range
ST over
Аргументы:
IN REAL должен быть в диапазоне [-1.0..+1.0]
Q REAL арккосинус входа в диапазоне [0.0..Pi]
0.0 для неверного входа
Описание:
Вычисляет арккосинус действительной величины.
(*FBD пример блока “COS” и “ACOS”*)
(* ST Эквивалент: *)
cosine := COS (angle);
result := ACOS (cosine); (*результат равен углу *)
(* IL Эквивалент: *)
LD angle
COS
ST cosine
ACOS
ST result
Этот модуль нужен всегда при любой конфигурации целевой задачи ISaGRAF и должен быть первым среди загружаемых модулей ISaGRAF. Он обеспечивает управление работающими одновременно нескольким целевыми задачами.
“Сетевые адреса” ISaGRAF часто используются для установления связи между системой ISaGRAF и SCADA на основе Modbus. В этом случае, SCADA является мастером Modbus, а целевая задача ISaGRAF действует как подчиненный Modbus. Сетевые адреса используются для создания виртуальной карты Modbus для всех переменных ISaGRAF, которые должны управляться из SCADA. “Инструменты / Карта адресов Modbus для SCADA" создает виртуальную карту Modbus с переменными приложения.
Средства карты показывают два списка. Верхний список – это сегмент (положения 4096) карты Modbus, показывающий нанесенные на карту переменные (имеющие сетевые адреса). Нижний список показывает не нанесенные на карту переменные (без определенных сетевых адресов). Адрес "0" не может использоваться в карте для переменной.
Используйте команды "Поместить на карту выбранную переменную" и "Удалить переменную из карты" меню "Редактор", чтобы перемещать переменные из одного списка в другой, и строить, таким образом, карту. Такие же действия могут быть выполнены путем двойного щелчка на символе переменной в списке, чтобы послать ее в другой список. В любой момент вы можете использовать список "Сегмент", чтобы посмотреть другой сегмент в карте.
Команды меню "Опции" могут быть использованы для того, чтобы показать адреса в десятичном или шестнадцатеричном виде.
Команда "Редактор / Заменить" используется для поиска объявленной переменной, нанесена она на карту или нет.
Аргументы:
IN ANY любая нецелая аналоговая величина
Q INT 0 if IN = FALSE / 1 if IN = TRUE
число миллисекунд для таймера
целая часть действительного
аналогового
десятичное число представленное
строкой
Описание:
Превращает переменную в целую.
(*FBD пример блоков ANALOG*)
(* ST эквивалент: *)
bres := ANA (true); (* bres равно 1 *)
tres := ANA (t#1s46ms); (* tres равно 1046 *)
mres := ANA ('0198'); (* mres равно 198 *)
(* IL эквивалент: *)
LD true
ANA
ST bres
LD t#1s46ms
ANA
ST tres
LD '0198'
ANA
ST mres
Аналоговые означает - непрерывные. Такие переменные могут принимать значения знаковых целых или действительных (плавающих). Возможны следующие форматы:
Integer 32 битовое знаковое целое: от -2147483647 до +2147483647
Real стандартное 32 битовое IEEE плавающее значение (одиночная точность)
1 знаковый + 23 бита мантиссы + 8 бит экспоненты
Значение экспоненты аналоговой переменной типа Real не может быть меньше -37 и больше +37.
Аналоговые переменные могут иметь один из следующих атрибутов:
Внутренняя: переменная, хранящаяся в памяти, изменяемая программой
Константа: неизменяемая переменная, хранящаяся в памяти, с начальным значением
Вход: переменная, связанная с устройством ввода (обновляется системой)
Выход: переменная, связанная с устройством вывода
Замечание:
Когда действительная переменна, привязана к устройству В/В, соответствующий драйвер В/В работает с эквивалентным целым значением.
Предупреждение:
Целые и действительные аналоговые переменные или константы не могут смешиваться в одном и том же аналоговом выражении.
Замечание: Для этого оператора количество входов может быть больше чем два.
Аргументы:
(inputs) BOOLEAN
output BOOLEAN логическое И двух или более входов
Описание:
Логическое И двух или больше значений.
(*FBD пример блоков “AND”*)
(* ST эквивалент: *)
bo10 := bi101 AND NOT (bi102);
bo5 := (bi51 AND bi52) AND bi53;
(* IL эквивалент *)
LD bi101 (* текущий результат := bi101 *)
ANDN bi102 (*текущий результат:= bi101 AND not(bi102) *)
ST bo10 (* bo10 := текущий результат *)
LD bi51 (*текущий результат:= bi51;
& bi52 (*текущий результат:= bi51 AND bi52 *)
& bi53 (* тек. результат := (bi51 AND bi52) AND bi53 *)
ST bo5 (* bo5 := текущий результат *)
Аргументы:
IN INT целый формат
MSK INT целый формат
Q INT побитовый логический AND между IN и MSK
Описание:
Целый аналоговый побитовый И.
(*FBD пример блоков AND_MASK*)
(* ST эквивалент: *)
parity := AND_MASK (xvalue, 1); (* 1 if xvalue is odd *)
result := AND_MASK (16#abc, 16#f0f); (* equals 16#a0c *)
(* IL эквивалент: *)
LD xvalue
AND_MASK 1
ST parity
LD 16#abc
AND_MASK 16#f0f
ST result
Аргументы
ID INT идентификатор массива (должен быть в пределах [0..15])
Size INT количество элементов в массиве
Q INT результат исполнения
1 = если массив был успешно создан
2 = неправильный идентификатор массива или массив уже создан
3 = неправильный размер
4 = не хватило памяти
Описание:
Создание массива целых.
Предупреждение:
В приложении может быть не более 16 массивов. Массив содержит целые аналоговые значения. Если размер массива близок к размеру имеющейся свободной памяти, то эта функция может вызвать системную ошибку при захвате памяти.
(*FBD программа, создающая массив целых*)
(* ST Эквивалент: *)
array_error := (ARCREATE (ident, 16) <> 1));
(* IL Эквивалент: *)
LD ident
ARCREATE 16
NE 1
ST array_error
Проект ISaGRAF разделен на несколько программных модулей, называемых программами. Программы проекта связаны друг с другом в древовидную структуру. Программы могут быть описаны с помощью графических или текстовых языков SFC, FBD, LD, ST или IL.
Аргументы:
ID INT идентификатор массива (должен быть в пределах [0..15])
Pos INT позиция элемента в массиве
(должна быть в пределах [0..size-1])
value INT значение считанного элемента
0 = если аргумент неправильный
Описание:
Читает элемент массива целых.
(*FBD программа, использующая блок управления массивом*)
(* ST Эквивалент: *)
If (array_error) Then Return; End_if;
read_value := ARREAD (ident, index);
(* array_error приходит от ARCREATE call *)
(* IL Эквивалент: *)
LD array_error
RETC
LD ident
ARREAD index
ST read_value
Аргументы:
ID INT идентификатор массива (должен быть в пределах [0..15])
Pos INT позиция элемента в массиве
(должна быть в пределах [0..size-1])
IN INT новое значение элемента
ok INT результат исполнения
1 = запись была успешно выполнена
2 = неправильный идентификатор массива
3 = неправильный индекс
Описание:
Запоминает (записывает) значение в массив целых.
(*FBD программа, использующая блок управления массивом*)
(* ST Эквивалент: *)
If (array_error) Then Return; End_if;
write_status := ARWRITE (Ident, Index, value);
(* array_error приходит от ARCREATE *)
(* IL Эквивалент: *)
LD array_error
RETC
LD ident
ARWRITE index,value
ST write_status
Аргументы:
IN MSG любая непустая строка
Pos INT позиция выбранного символа
в диапазоне [1..len] (len - длина сообщения IN)
Code INT код выбранного символа
(в диапазоне [0..255])
возвращает 0 если Pos вне строки
Описание:
Дает ASCII код символа в строке.
(*FBD пример блока “ASCII”*)
(* ST Эквивалент: *)
FirstChr := ASCII (message, 1);
(* FirstChr - это ASCII код первого символа строки *)
(* IL Эквивалент: *)
LD message
ASCII 1
ST FirstChr
Аргументы:
IN REAL должен быть в диапазоне [-1.0..+1.0]
Q REAL арксинус входа в диапазоне [-PI/2..+Pi/2]
0.0 для неверного входа
Описание:
Вычисляет арксинус действительной величины.
(*FBD пример блоков “SIN” и “ASIN”*)
(* ST Эквивалент: *)
sine := SIN (angle);
result := ASIN (sine); (*результат равен углу *)
(* IL Эквивалент: *)
LD angle
SIN
ST sine
ASIN
ST result
Аргументы:
IN REAL любая действительная аналоговая
Q REAL арктангенс входа в диапазоне [-PI/2..+PI/2]
0.0 для неверного входа
Описание:
Вычисляет арктангенс действительной величины.
(*FBD пример блока “TAN” и “ATAN”*)
(* ST Эквивалент: *)
tangent := TAN (angle);
result := ATAN (tangent); (*результат равен углу *)
(* IL Эквивалент: *)
LD angle
TAN
ST tangent
ATAN
ST result
Аргументы:
RUN BOO TRUE=запустить/FALSE=сбросить
XIN REAL любая аналоговая переменная
N INT количество образцов, заданное
приложением
XOUT REAL среднее значение XIN
Описание:
Запоминает значение на каждом цикле и вычисляет среднее значение всех уже запомненных величин. Запоминает только N последних значений.
Количество образцов не может превосходить 128.
Если команда “RUN” равна FALSE, то значение на выходе равно значению на входе.
Когда достигнуто максимальное значение N сохраненных величин, первое запомненное значение вытесняется последним.
(*FBD пример блоков “AVERAGE” *)
(* ST Эквивалент: Мы предполагаем, что AVERAGE1 - это экземпляр блока AVERAGE *)
AVERAGE1((auto_mode & store_cmd), sensor_value, 100);
ave_value:= AVERAGE1.XOUT;
(* IL Эквивалент: *)
LD auto_mode
AND store_cmd
ST AVERAGE1.run
LD sensor_value
ST AVERAGE1.xin
LD 100
ST AVERAGE1.N
CAL AVERAGE1
LD AVERAGE1.XOUT
ST ave_value
Аргументы:
RUN BOO режим : TRUE=мигать/FALSE=сброс выхода в FALSE
CYCLE TMR период мигания
Q BOO выходной мигающий сигнал
Описание:
Генерирует мигающий сигнал.
Временная диаграмма:
Используя Быстрый LD редактор, вы подключаете функциональные блоки к логическим линиям. Функция, в действительности, может быть оператором, функциональным блоком или функцией. Так как блоки не всегда имеют логические входы и/или логические выходы, введение блоков в LD диаграммы приводит к добавлению нескольких новых параметров EN, ENO в интерфейс блока. Параметры EN, ENO не добавляются, если вы используете FBD/LD редактор, и вы можете подключить переменные требуемого типа.
Вход "EN"В некоторых операторах, функциях или функциональных блоках первый вход не булевский. Так как первый вход всегда должен быть подключен к шине, на первую позицию автоматически вводится другой вход, называемый “EN”. Блок выполняется только тогда, когда вход EN равен TRUE. Ниже представлен пример оператора сравнения и эквивалентный код на ST:
IF rung_state THEN
q := (value1 > value 2); ELSE q := FALSE; END_IF; (* продолжить шину с состоянием q *) |
В некоторых операторах, функциях или функциональных блоках первый выход не булевский. Так как первый выход всегда должен быть подключен к шине, на первую позицию автоматически вводится другой выход, называемый “ENO”. Выход ENO всегда имеет то же значение, что и первый вход блока. Ниже представлен пример функционального блока AVERAGE и эквивалентный код на ST:
AVERAGE(rung_state, Signal, 100);
OutSignal := AVERAGE.XOUT; eno := rung_state; (* продолжить шину с состоянием eno*) |
В некоторых случаях требуются EN и ENO. Ниже представлен пример с арифметическим оператором и эквивалентный код на ST:
IF rung_state THEN
result := (value1 + value2); END_IF; eno := rung_state; (* продолжить шину с состоянием eno *) |
Аргументы:
IN ANY любое не булевское значение
Q BOO TRUE для ненулевого значения
FALSE для нулевого значения
TRUE для сообщения 'TRUE'
FALSE для сообщения 'FALSE'
Описание:
Превращает переменную в булевскую.
(*FBD пример блоков BOO*)
(* ST эквивалент: *)
ares := BOO (10); (* ares равно TRUE *)
tres := BOO (t#0s); (* tres равно FALSE *)
mres := BOO ('false'); (* mres равно FALSE *)
(* IL эквивалент: *)
LD 10
BOO
ST ares
LD t#0s
BOO
ST tres
LD 'false'
BOO
ST mres
Булевские действия присваивают значение логической переменной при активизации шага. Логические переменные могут быть выходными или внутренними. Им присваивается значение каждый раз, когда шаг становится активным или перестает быть активным. Синтаксис основных логических действий:
<boolean_variable> (N) ; присвоить переменной сигнал активности шага
<boolean_variable> ; тот же эффект (N не обязательно)
/ <boolean_variable> ; присвоить переменной отрицание сигнала активности шага
Есть другие возможности установки и сброса логических переменных, когда шаг становится активным. Синтаксис установки и сброса логических действий:
<boolean_variable> (S) ; присваивает переменной значение TRUE, когда шаг
<boolean_variable> (R) ; присваивает переменной значение FALSE, когда шаг
Логические переменные должны быть выходными (OUTPUT) или внутренними (INTERNAL). Следующая программа ведет себя таким образом:
Пример:
(* Программа SFC использующая булевские действия *)
Булевские означает логические. Такие переменные могут принимать одно из двух булевых значений: TRUE (ИСТИНА) или FALSE (ЛОЖЬ). Обычно, булевские переменные используются в логических выражениях. Булевские переменные могут иметь один из следующих атрибутов:
Внутренняя: переменная, хранящаяся в памяти, изменяемая программой
Константа: неизменяемая переменная, хранящаяся в памяти, с начальным значением
Вход: переменная, связанная с устройством ввода (обновляется системой)
Выход: переменная, связанная с устройством вывода
Предупреждение:
При объявлении логической переменной, могут быть определены строки, заменяющие ‘true’ или ‘false’ во время отладки. Эти строки не могут быть использованы в программах, если они не введены как ‘предопределенные слова’ для языка.
Команда "Инструменты / Быстрое объявление " позволяет вам объявить несколько переменных одновременно. Переменным, созданным с помощью быстрого объявления, присваиваются имена в соответствии с числовым соглашением. Для этого, вы должны определить:
- индекс (число) первой и последней переменной,
- текст, который должен быть добавлен перед или после числа в символе переменной
- количество цифр, используемое для выражения числа в символах переменных.
Дополнительно, вы можете определить основные атрибуты созданных переменных (внутренняя, вход или выход...), плюс некоторые свойства, зависящие от типа переменной (атрибут "Хранить", целый или действительный формат, максимальная длина строки сообщения).
Вы всегда должны определять текст, который нужно вводить перед номером переменной так, как символ переменной не может начинаться с цифры. Если "количество переменных" установлено в "Auto", ISaGRAF форматирует количество переменных к минимальному необходимому количеству цифр. Когда определено количество цифр, ISaGRAF форматирует все числа, к определенной длине добавляя спереди символы '0'. Установка фиксированного количества цифр для номеров переменных может быть полезна для предотвращения неправильной лексикографической сортировки. Ниже дан пример.
Пример: Это установка для быстрого объявления:
будут созданы три следующие переменные:
Var9xx Var10xx Var11xx
Пример: Это установка для быстрого объявления:
будут созданы 100 переменных с именами от MyVar001 до MyVar100
“C” функции используются для расширения стандартных возможностей языков ST и FBD. Они могут быть использованы для реализации специфических вычислений, системных вызовов, связи или для установки набора средств диалога между приложением ISaGRAF и другими задачами. Функции, написанные на языке “C” компилируются и линкуются с ядром ISaGRAF. Приращенное ядро должно быть инсталлировано на целевой PLC прежде, чем функция будет использована в проекте ISaGRAF.
Новые функции не могут быть интегрированы в симулятор ISaGRAF. Приложения ISaGRAF нужно симулировать до ввода нестандартных функций.
Предупреждение:
Функции - это синхронные операции, вызывающиеся менеджером В/В ISaGRAF, в цикле приложения во время ввода или вывода. Время, затраченное на выполнение функции, включается во временной цикл ISaGRAF. В функции не должно быть “операций ожидания”, которые неоправданно растягивают временной цикл ISaGRAF.
Добавление функции в библиотеку ISaGRAFДля добавления функции в библиотеку ISaGRAF нужно использовать менеджер библиотек ISaGRAF (Library Manager). Используется команда “Новый” из меню “Файл”, когда выбрана библиотека “C” функций. Когда новая “C” функция создана, должно быть написано ее техническое замечание. Скелет исходного текста новой “C” функции автоматически генерируется менеджером библиотек ISaGRAF.
Для того чтобы определить параметры вызова и возврата новой функции используется команда “Parameters” из меню “Редактировать”.
Использование “C” функций в проекте ISaGRAFЛюбая интегрированная “C” функция может быть использована как стандартная функция в программах проекта ISaGRAF. “C” функции могут быть вызваны из языков ST и FBD и из специальных операторов языка SFC.
Вызов “C” функций из языка ST следует соглашениям языка по вызову функций. Параметры вызова функции записываются после имени функции, между скобок, и разделяются запятыми. Выражение представляет значение, возвращаемое функцией. Вызов “C” функции может быть введен в любой оператор присвоения или сложное выражение.
Вот пример вызова “C” функции в операторе присвоения:
result := ProcName (par1, par2, ... parN);
Программа FBD может вызывать любую “C” функцию. Функция используется как стандартный функциональный ящик. Ее параметры вызова соединяются с левой стороной функционального ящика. Возвращаемый параметр соединяется с правой стороной ящика. Вот стандартный вид такого функционального ящика:
BOOLEAN |
unsigned long |
32 битное беззнаковое слово: 1=true / 0=false |
ANALOG |
long |
32 битное знаковое целое слово |
REAL |
float |
плавающее значение с одиночной точностью |
TIMER |
unsigned long |
32 битное беззнаковое слово (единица - это 1 миллисекунда) |
MESSAGE |
char * |
строка символов |
boolean |
T_BOO |
long (32 бита) |
Integer analog |
T_ANA |
long |
Real analog |
T_REAL |
float (32 бита, плавающее значение с одиночной точностью) |
timer |
T_TMR |
long |
message |
T_MSG |
char* (32 битный указатель) |
Система разработки ISaGRAF включает утилиту линейного преобразования для выполнения простого преобразования В/В во время работы ISaGRAF на целевой машине. Эта утилита не требует никакой “C” разработки, так как она ограничивается прямым увеличением или уменьшением непрерывных функций.
Функции преобразования позволяют пользователю применять любые сложные преобразования, с специфическими операциями описанными на языке “C”. Обычно, функции преобразования определяются как для входов, так и для выходов. Даже если одно из направлений не используется, его необходимо реализовать и протестировать прежде, чем интегрировать преобразование в ядро ISaGRAF, во избежание сбоя системы, обусловленного неправильным вызовом.
Функции преобразования, написанные на языке “C” компилируются и линкуются с ядром ISaGRAF. Приращенное ядро должно быть инсталлировано на целевой PLC прежде, чем функция преобразования будет использована в проекте ISaGRAF. Новая функция преобразования не может быть интегрирована в симулятор ISaGRAF. Приложения ISaGRAF нужно симулировать до ввода нестандартных функций преобразования.
Исходные коды "C" стандартных преобразований написанный CJ International инсталлируется вместе с системой разработки ISaGRAF. Они могут быть использованы как примеры для создания новых функций. Не рекомендуется изменять
стандартные функции, так как они могут быть использованы в любом приложении ISaGRAF. Стандартные преобразования, поставляемые с системой разработки ISaGRAF поддерживаются симулятором ISaGRAF.
Предупреждение:
Функции преобразования - это синхронные
операции, вызывающиеся менеджером В/В ISaGRAF, в цикле приложения во время ввода или вывода. Время, затраченное на выполнение функции преобразования, включается во временной цикл ISaGRAF. В функции преобразования не должно быть “операций ожидания”, которые неоправданно растягивают временной цикл ISaGRAF.
Добавление функции в библиотеку ISaGRAF Для добавления функции в библиотеку ISaGRAF нужно использовать менеджер библиотек ISaGRAF (Library Manager).
Используется команда “Новый” из меню “Файлы”, когда выбрана библиотека функций преобразования. Никаких параметров в системе разработки определять не надо потому, что функции преобразований используют стандартный предопределенный интерфейс.
Когда новая функция преобразования создана, должно быть написано ее техническое замечание. Скелет исходного текста новой функции преобразования автоматически генерируется менеджером библиотек ISaGRAF.
“C” функциональные блоки объединяют операции и статические данные. Они дополняют набор “C” функций, допуская обработку статических объектов. “C” функции, обычно, используются для расширения стандартных возможностей языков ST и FBD. В отличие от функций, они могут работать со статическими данными. Это означает, что алгоритм функционального блока может меняться с течением времени.
Функциональные блоки, написанные на языке “C” компилируются и линкуются с ядром ISaGRAF. Приращенное ядро должно быть инсталлировано на целевой PLC прежде, чем функция будет использована в проекте ISaGRAF. Новые функциональные блоки не могут быть интегрированы в симулятор ISaGRAF. Приложения ISaGRAF нужно симулировать до ввода нестандартных функций.
Предупреждение:
Функциональные блоки выполняют синхронные
операции, вызывающиеся ядром ISaGRAF, в цикле приложения. Время, затраченное на выполнение функции, включается во временной цикл ISaGRAF. В функциональном блоке не должно быть “операций ожидания”, которые неоправданно растягивают временной цикл ISaGRAF.
Объявление экземпляров функционального блокаФункциональный блок - это объект, который объединяет операции и статические данные. Ниже представлен пример функционального блока R_TRIG, который определяет передний фронт булевского выражения. Вот его описание:
Скрытая статическая переменная “previous_state”
нужна для определения фронта. Эта переменная должна быть различной в каждом использовании функционального блока “R_TRIG” в приложении. Экземпляр функционального блока, используемого в языке ST, должен быть объявлен в словаре. Так как функциональный блок имеет внутренние скрытые данные, каждая копия (экземпляр) функционального блока должна быть идентифицирована уникальным именем. Наименование типа блока осуществляется при помощи менеджера библиотек. Наименование экземпляров осуществляется при помощи редактора словаря.
Функциональные блоки, использующиеся в языке FBD не нужно объявлять, потому что редактор FBD автоматически объявляет экземпляры используемых блоков.
Экземпляры функциональных блоков автоматически объявленные редактором FBD всегда локальные для редактируемой программы.
BOOLEAN |
unsigned long |
32 битовое беззнаковое слово: 1=true / 0=false |
ANALOG |
long |
32 битное знаковое целое слово |
REAL |
float |
плавающее значение с одиночной точностью |
TIMER |
unsigned long |
32 битное беззнаковое слово (единица - это 1 миллисекунда) |
MESSAGE |
char * |
строка символов |
boolean |
T_BOO |
long (32 бита) |
analog |
T_ANA |
long |
real |
T_REAL |
float (32 бита, плавающее значение с одиночной точностью) |
timer |
T_TMR |
long |
message |
T_MSG |
char* (32 битный указатель) |
boolean |
long |
32 битное беззнаковое слово: 1=true / 0=false |
analog |
long |
32 битное знаковое целое слово |
real |
float |
плавающее значение с одиночной точностью |
timer |
long |
32 битное беззнаковое слово (единица - это 1 миллисекунда) |
message |
char * |
строка символов |
Замечание: Для этого оператора количество входов может быть больше чем два.
Аргументы:
(inputs) MSG (сумма длин всех сообщений не должна
превышать емкости выхода)
output MSG соединение всех входных сообщений
Описание:
Соединяет несколько сообщений в одно.
(*FBD пример блоков CAT*)
(* ST эквивалент: use the + operator *)
myname := ('Mr' + ' ') + 'Jones';
(* means: myname := 'Mr Jones' *)
(* IL эквивалент: *)
LD 'Mr'
ADD ' '
ADD 'Jones'
ST myname
Целые константы представляются знаковыми длинными целыми (32 бита) величинами:
от -2147483647 до +2147483647
Целые аналоговые константы могут быть представлены с одной из следующих баз. Целые константы должны начинаться с префикса, который определяет используемую базу:
База | Префикс | Пример | |||
DECIMAL | (none) | -908 | |||
HEXADECIMAL | "16#" | 16#1A2B3C4D | |||
OCTAL | "8#" | 8#1756402 | |||
BINARY | "2#" | 2#1101_0001_0101_1101 |
Символ подчерк (‘_’) может быть использован для того, чтобы разделить группы цифр. Он не имеет особенного значения и используется для улучшения читаемости констант.
Аргументы:
Code INT код в диапазоне [0..255]
Q MSG строка из одного символа
символ имеет ASCII код заданный на входе
(используется ASCII код по модулю 256)
Описание:
Дает строку из одного символа с заданным ASCII кодом.
(*FBD пример блока “CHAR”*)
(* ST Эквивалент: *)
Display := CHAR ( value + 48 );
(* значение в диапазоне [0..9] *)
(* 48 - это ascii код '0' *)
(* result - строка из одного символа от '0' до '9' *)
(* IL Эквивалент: *)
LD value
ADD 48
CHAR
ST Display
Иерархия программ разделена на четыре основных секции или группы:
Begin программы, выполняемые в начале каждого цикла целевой задачи
Sequential программы, определяемые динамическими правилами SFC
End программы, выполняемые в конце каждого цикла целевой задачи
Функции набор подпрограмм
Программы секций Begin и End описывают циклические операции и не зависят от времени. Программы секции Sequential описывают последовательные операции, где временная переменная явно синхронизирует основные действия. Основные программы секции Begin систематически выполняются в начале каждого цикла. Основные программы секции End систематически выполняются в конце каждого цикла. Основные программы секции Sequential выполняются в соответствии с динамическими правилами SFC.
Программы секции Функции - это подпрограммы, которые могут быть вызваны любой другой программой в проекте. Программы секции Функции могут вызывать другие программы этой же секции.
Основные программы и дочерние программы секции Sequential должны быть описаны при помощи языка SFC. Программы циклических секций (Begin и End) не могут быть описаны при помощи языка SFC.
Программы секции Begin обычно используются для того чтобы описать предварительные операции с устройствами ввода и определить значения отфильтрованных переменных верхнего уровня. Такие переменные обычно используются программами секции Sequential. Программы секции End обычно используются для того, чтобы выполнить защитные операции с переменными прежде, чем отправить их значения в устройства вывода.
Аргументы:
VAL1 INT любое знаковое целое аналоговое значение
VAL2 INT любое знаковое целое аналоговое значение
LT BOO TRUE если val1 меньше чем val2
EQ BOO TRUE если val1 равно val2
GT BOO TRUE если val1 больше чем val2
Описание:
Сравнивает две величины: сообщает они равны или первая больше или меньше второй.
(*FBD пример блоков CMP*)
(* ST Эквивалент: Мы предполагаем, что CMP1 - это экземпляр блока CMP *)
CMP1(level, max_level);
pump_cmd:= CMP1.LT OR CMP1.EQ;
alarm := CMP1.GT AND NOT(manual_mode);
(* IL Эквивалент: *)
LD level
ST CMP1.val1
LD max_level
ST CMP1.val2
CAL CMP1
LD CMP1.LT
OR CMP1.EQ
ST pump_cmd
LD CMP1.GT
ANDN manual_mode
ST alarm
Аргументы:
IN REAL любая действительная аналоговая
Q REAL косинус входа в диапазоне [-1.0..+1.0]
Описание:
Вычисляет косинус действительной величины.
(*FBD пример блока “COS” и “ACOS”*)
(* ST Эквивалент: *)
cosine := COS (angle);
result := ACOS (cosine); (*результат равен углу *)
(* IL Эквивалент: *)
LD angle
COS
ST cosine
ACOS
ST result
isaker &
isatst -t=/t0
Эти команды запускают:
Ядро ISaGRAF с номером подчиненного 1 по умолчанию
Коммуникационную задачу через последовательный порт на /t0 с номером подчиненного 1 (по умолчанию) и логическим номером 1 (последний указанный подчиненный=подчиненный по умолчанию=1)
isaker &
isanet -t=1100
Starts:
Ядро ISaGRAF с номером подчиненного 1 по умолчанию
Коммуникационную задачу по Ethernet через порт 1100 с номером слева 1 (по умолчанию) и логическим номером 1 (последний указанный подчиненный=подчиненный по умолчанию=1)
isaker -s=2 &
isanet -t=/t0 -s=2 (Соответственно isanet -t=1100 -s=2)
Эти команды запускают:
Ядро ISaGRAF с номером подчиненного 2
Коммуникационную задачу по последовательному порту /t0 (Ethernet порт 1100) с номером слева 2 и логическим номером 2 (последний указанный подчиненный=2)
Isaker -s=1 &
isaker -s=2 &
isanet -t=/t0 -s=1 -s=2 (Соответственно isanet -t=1100 -s=1 -s=2)
Эти команды запускают:
Ядро ISaGRAF с номером подчиненного 1
Ядро ISaGRAF с номером подчиненного 2
Коммуникационную задачу по последовательному порту /t0 (Ethernet порт 1100), взаимодействующую с подчиненными с номерами 1 и 2, и логическим номером 2 (последний указанный подчиненный=2)
isaker -s=1 &
isatst -t=/t0 -s=1 -c=1 &
(Соответственно isanet -t=1100 -s=1 -c=1 &)
isatst -t=/t1 -s=1 -c=2 (Соответственно isanet -t=1100 -s=1 -c=2)
Эти команды запускают:
Ядро ISaGRAF с номером подчиненного 1
Коммуникационную задачу по последовательному порту /t0 (Ethernet порт 1100), взаимодействующую с подчиненным номер 1, и логическим номером 1
Коммуникационную задачу по последовательному порту /t1 (Ethernet порт 1101), взаимодействующую с подчиненным номер 1, и логическим номером 2
Замечание:
Коммуникационные задачи по последовательному порту и Ethernet могут работать вместе.
Для того чтобы начать работу с целевой задачей ISaGRAF нужно выполнить несколько команд в системе VxWorks для настройки параметров среды перед запуском целевых задач ISaGRAF. Эти команды можно выполнить из файла сценария. Они описываются в следующих разделах.
Редактор переменных системы разработки поддерживает атрибут ‘сохранять’ для каждой внутренней переменной (т.е. не входной и не выходной).
В конце каждого цикла целевой задачи значения сохраняемых переменных копируются в специальную область памяти. Этой областью обычно является питаемая от батареи RAM.
Во время старта если хотя бы одна переменная имела атрибут сохраняемой, ISaGRAF ищет сохраняемые переменные:
- Если данное приложение уже запускалось ранее, ISaGRAF находит сохраненные значения и присваивает их соответствующим сохраняемым переменным.
- Если ранее работало другое приложение или не было никакого, то ISaGRAF понимает, что сохраненные значения недействительны и переустанавливает все сохраняемые переменные в 0.
Область памяти для сохранения переменных определяется в системе разработки в меню Make/Опции выполнения приложения/Сохраняемые переменные. Указанная строка должна иметь следующий формат:
boo_add , boo_size , ana_add , ana_size , tmr_add , tmr_size , msg_add , msg_size
где:
boo_add Шестнадцатеричный адрес, используемый для сохранения булевских переменных. Должен быть отличен от 0.
boo_size Шестнадцатеричный размер памяти в байтах, выделяемый по этому адресу. Для хранения булевской переменной требуется 1 байт.
ana_add Шестнадцатеричный адрес, используемый для сохранения аналоговых переменных. Должен быть отличен от 0.
ana_size Шестнадцатеричный размер памяти в байтах, выделяемый по этому адресу. Всегда требуется минимум 4 байта плюс 4 байта для хранения каждой аналоговой переменной.
tmr_add Шестнадцатеричный адрес, используемый для сохранения таймерных переменных. Должен быть отличен от 0.
tmr_size Шестнадцатеричный размер памяти в байтах, выделяемый по этому адресу. Для хранения таймерной переменной требуется 5 байт.
msg_add Шестнадцатеричный адрес, используемый для сохранения строковых переменных. Должен быть отличен от 0.
msg_size Шестнадцатеричный размер памяти в байтах, выделяемый по этому адресу.
Для хранения таймерной переменной требуется 256 байт.
Требования
- Должны быть специфицированы все поля для всех типов даже если Вы не собираетесь сохранять все типы переменных. В таком случае для неиспользуемого типа переменных Вы должны указать нулевой размер (за исключением аналогов, где минимальный размер - 4) и любой отличный от нуля адрес.
Пример:
Предположим, требуется резервирование
20 булевских переменных
0 аналоговых переменных
0 таймерных переменных
3 строковых переменных
Пусть память, питаемая от батареи, находится по адресу 0xA2F200.
Предположим, что:
Булевские переменные будут храниться, по адресу 0xA2F200 и будут занимать в точности 20 байт.
Аналоги будут по адресу 0xA2F214, и для них нужно 4 байта.
Фиктивный адрес для таймеров будет 0xA2F200, т.к. размер памяти - нулевой.
Строковые переменные будут храниться по адресу 0xA2F218, причем им требуется 3*256 байт.
Таким образом, в системе разработке должна быть введена строка
A2F200,14,A2F214,4,A2F200,0,A2F218,300
Команда |
Значение |
|
Ключевое слово |
Значение |
|
SYS_INITBOO |
16#20 |
Инициал. Резервирование булевских |
SYS_SAVBOO |
16#21 |
Сохранить булевские |
SYS_RESTBOO |
16#22 |
Восстановить булевские |
SYS_INITANA |
16#24 |
Инициал. Резервирование аналогов |
SYS_SAVANA |
16#25 |
Сохранить аналоги |
SYS_RESTANA |
16#26 |
Восстановить аналоги |
SYS_INITTMR |
16#28 |
Инициал. Резервирование таймеров |
SYS_SAVTMR |
16#29 |
Сохранить таймеры |
SYS_RESTTMR |
16#2A |
Восстановить таймеры |
SYS_INITALL |
16#2C |
Инициал. Резервирование всех типов |
SYS_SAVALL |
16#2D |
Сохранить все типы |
SYS_RESTALL |
16#2E |
Восстановить все типы |
Команда (ключевое слово) |
Аргумент |
Возвр. Значение |
SYS_INITxxx |
адрес памяти |
след. свободный адрес |
SYS_SAVxxx |
0 |
0 если успех |
SYS_RESTxxx |
0 |
0 если успех |
Аргументы:
CD BOO вход для счета (считать вниз когда CD равно TRUE)
(счет вниз если CD равно TRUE)
LOAD BOO команда загрузить (доминанта)
(CV = PV если LOAD равно TRUE)
PV INT планируемое максимальное значение
Q BOO переполнение: TRUE если CV = 0
CV INT результат счета
Предупреждение:
Блок CTD не определяет передний и задний фронты входа (CD). Для того чтобы создать импульсный счетчик, его нужно связать с блоками “R_TRIG” или “F_TRIG”.
Описание:
Считает от заданного значения вниз до 0 по 1.
(*FBD пример блоков CTD*)
(* ST Эквивалент: Мы предполагаем, что R_TRIG1 - это экземпляр блока R_TRIG и CTD1 - это экземпляр блока CTD *)
CTD1(F_TRIG1(command),load_cmd,100);
underflow := CTD1.Q;
result := CTD1.CV;
(* IL Эквивалент: *)
LD command
ST F_TRIG1.clk
CAL F_TRIG1
LD F_TRIG1.Q
ST CTD1.cd
LD load_cmd
ST CTD1.load
LD 100
ST CTD1.pv
CAL CTD1
LD CTD1.Q
ST underflow
LD CTD1.cv
ST result
Аргументы:
CU BOO вход для счета (считать когда CU равно TRUE)
RESET BOO команда сброса (доминанта)
PV INT планируемое максимальное значение
Q BOO переполнение: TRUE если CV = PV
CV INT результат счета
Предупреждение:
Блок CTU не определяет передний и задний фронты входа (CU). Для того чтобы создать импульсный счетчик, его нужно связать с блоками “R_TRIG” или “F_TRIG”.
Описание:
Считает от 0 до заданного значения по 1.
(*FBD пример блоков CTU*)
(* ST Эквивалент: Мы предполагаем, что R_TRIG1 - это экземпляр блока R_TRIG и CTU1 - это экземпляр блока CTU *)
CTU1(R_TRIG1(command),NOT(auto_mode),100);
overflow := CTU1.Q;
result := CTU1.CV;
(* IL Эквивалент: *)
LD command
ST R_TRIG1.clk
CAL R_TRIG1
LD R_TRIG1.Q
ST CTU1.cu
LDN auto_mode
ST CTU1.reset
LD 100
ST CTU1.pv
CAL CTU1
LD CTU1.Q
ST overflow
LD CTU1.cv
ST result
Аргументы:
CU BOO вход для счета вверх (считать когда CU равно TRUE)
CD BOO вход для счета вниз (считать когда CD равно TRUE)
RESET BOO команда сброса (доминанта)
(CV=0 когда RESET = TRUE)
LOAD BOO команда загрузить (CV=PV когда LOAD = TRUE)
PV INT планируемое максимальное значение
QU BOO переполнение: TRUE если CV = PV
QD BOO переполнение: TRUE если CV = 0
CV INT результат счета
Предупреждение:
Блок CTUD не определяет передний и задний фронты входа (CU и CD). Для того чтобы создать импульсный счетчик, его нужно связать с блоками “R_TRIG” или “F_TRIG”.
Описание:
Считает от 0 до заданного значения по 1 или от заданного значения вниз до 0 по 1.
(* FBD программа использующая блок "CTUD" *)
(* ST Эквивалент: Мы предполагаем, что R_TRIG1 и R_TRIG2 - это экземпляры блока R_TRIG и CTD1 - это экземпляр блока CTUD *)
CTUD1(R_TRIG1(add_elt), R_TRIG2(sub_elt), reset_cmd, load_cmd,100);
full := CTUD1.QU;
empty := CTUD1.QD;
nb_elt := CTUD1.CV;
(* IL Эквивалент: *)
LD add_elt
ST R_TRIG1.clk
CAL R_TRIG1
LD R_TRIG1.Q
ST CTUD1.cu
LD sub_elt
ST R_TRIG2.clk
CAL R_TRIG2
LD R_TRIG2.Q
ST CTUD1.cd
LD reset_cmd
ST CTUD1.reset
LD load_cmd
ST CTUD1.load
LD 100
ST CTUD1.pv
CAL CTUD1
LD CTUD1.QU
ST full
LD CTUD1.QD
ST empty
LD CTUD1.CV
ST nb_elt
Значение: Подвешивает исполнение скрипта до выполнения следующего цикла ISaGRAF.
Синтаксис: Cycle
Замечание: Инструкции скрипта исполняются в начале цикла ISaGRAF. Если симулятор в пошаговом режиме, за инструкцией "cycle" следует сразу цикл. Следующие инструкции цикла будут выполнены на следующей команде отладчика "Выполнить один цикл".
Пример: (* программа ISaGRAF копирует A в B *)
A := 0
Cycle
Print B
A := 1
Print B (* цикл не выполнен/B не установлено в 1 *)
Cycle
Print B
Выход: B = 0
B = 0
B = 1
Эта опция определяет номер целевой задачи. Он может принимать значения от 1 до 255, исключая 13 ($0D). Этот номер используется в протоколе связи. Он нужен для того, чтобы различать целевые задачи друг от друга, когда запущено несколько задач.
По умолчанию
номер подчиненного равен 1 (как и в системе разработки).
Задача isanet использует ETHERNET для связи с отладчиком. Номер порта определяется при помощи опции -t.
Нет значения по умолчанию: Если эта опция не использована, то связь с целевой задачей невозможна. В таком случае может быть выдано сообщение об ошибке номер 7.
При использовании отладчика убедитесь в соответствии параметров.
Для ISaGRAF целевая задача OS-9 является сервером, а отладчик - клиентом, который подсоединяется к указанному порту. Прежде чем начать первую сессию отладки по Ethernet необходимо убедиться, что сетевые средства OS-9 сконфигурированы правильно.
Номер подчиненного: -s ключЭта опция определяет номер целевой задачи. Он может принимать значения от 1 до 255, исключая 13 ($0D). Этот ключ может быть повторен в командной строке до 4 раз (по числу подчиненных, работающих через данную задачу). Этот номер используется в протоколе связи. Он нужен для того, чтобы различать целевые задачи друг от друга, когда запущено несколько задач. Когда используется отладчик, убедитесь, что его подчиненный параметр соответствует номеру целевой задачи.
По умолчанию
номер подчиненного равен 1.
Логический номер задачи связи: -cЭта опция определяет логический номер задачи связи. Он используется для того, чтобы работать одновременно с несколькими задачами связи. Он принимает значения от 1 до 255 и должен быть различным у различных задач.
По умолчанию:
используется значение последнего из ключей -s. Тем самым обеспечивается совместимость с предыдущей версией ISaGRAF 3.0.
Коммуникационная задача isatst использует последовательный порт для связи с отладчиком. Название порта определяется при помощи ключа -t.
Нет значения по умолчанию: Если эта опция не использована, то связь с целевой задачей невозможна. В таком случае может быть выдано сообщение об ошибке номер 7.
При реализации, использующей isatst связь через Ethernet невозможна.
Последовательный порт открывается в режиме передачи двоичных данных (нет управляющих данных, нет XON/XOFF). Другие параметры порта должны быть установлены до запуска ISaGRAF. При использовании отладчика убедитесь в соответствии параметров, устанавливаемых для него и для целевой задачи.
Пример:
xmode /t0 baud=19200
Установить скорость передачи 19200 бит/с. на устройстве /t0.
Номер подчиненного: -s ключЭта опция определяет номер целевой задачи. Он может принимать значения от 1 до 255, исключая 13 ($0D). Этот ключ может быть повторен в командной строке до 4 раз (по числу подчиненных, работающих через данную задачу). Этот номер используется в протоколе связи. Он нужен для того, чтобы различать целевые задачи друг от друга, когда запущено несколько задач. При использовании отладчика убедитесь в соответствии параметров, устанавливаемых для него и для целевой задачи.
По умолчанию
номер подчиненного равен 1.
Логический номер задачи связи: -cЭта опция определяет логический номер задачи связи. Он используется для того, чтобы работать одновременно с несколькими задачами связи. Он принимает значения от 1 до 255 и должен быть различным у различных задач.
По умолчанию:
используется значение последнего из ключей -s. Тем самым обеспечивается совместимость с предыдущей версией ISaGRAF 3.0.
Аргументы:
SEL INT выбор выхода
0=текущая дата
1=текущее время
2=день недели
Q MSG время/дата, выраженные символьной строкой
‘YYY/MMM/DDD’ если SEL = 0
‘HH:MM:SS’ если SEL = 1
имя дня если SEL = 2 (например: ‘Monday’)
Описание:
Возвращает дату или время дня, выраженные символьной строкой.
(*FBD пример блока “DAY_TIME”*)
(* ST Эквивалент: *)
Display := Day_Time (0) + ' ; ' + Day_Time (1);
(*Формат текста: 'YYYY/MM/DD ; HH:MM:SS' *)
(* IL Эквивалент: Сначала вызывается day_time(1) *)
LD 1
DAY_TIME
ST hour_str (* промежуточный результат *)
LD 0
DAY_TIME
ADD ' ; '
ADD hour_str
ST Display
SFC действие - это дочерняя последовательность SFC, стартующая и убивающаяся в соответствии с изменением сигнала активности шага. SFC действие может иметь признак N (не запоминаемый ), R (установить), S (сбросить). Вот синтаксис основных SFC действий:
<child_prog> (N); запустить дочернюю последовательность, когда шаг становится активным и убить ее, когда шаг становится пассивным
<child_prog> ; тот же эффект (N не обязательно)
<child_prog> (S); запустить дочернюю последовательность, когда шаг становится активным и ничего не делать, когда шаг становится пассивным
<child_prog> (R); убить дочернюю последовательность, когда шаг становится
активным и ничего не делать, когда шаг становится пассивным
SFC последовательность, определенная как действие, должна быть дочерней SFC
программой редактируемой программы. Заметим, что использование признаков S
и R для SFC действия имеет тот же эффект, что и операторы GSTART и GKILL
в импульсном действии на языке ST.
Ниже представлен пример SFC действия. Основная SFC программа называется Father. Она имеет два SFC наследника - SeqMix и SeqPump. Текст родительской SFC программы:
(* Программа SFC использующая действия SFC *)
Уровень 2 шага SFC представляет собой детальное описание действий в период активности шага. Это описание может использовать текстовые дополнения языка SFC и другие языки, такие как Структурный Текст (ST). Основные типы действий:
- Булевские действия
- Импульсные действия, запрограммированные на ST
- Не сохраняемые действия, запрограммированные на ST
- SFC действия
Несколько действий одинаковых или разных типов могут быть описаны в одном шаге. Средства, позволяющие использовать любой другой язык:
- Вызовы подпрограмм
- Соглашения языка инструкций (IL)
Действительные аналоговые константы могут быть записаны в десятичном
или научном представлении. Десятичная точка (‘.’) разделяет целую и десятичную части. Десятичную точку нужно использовать, для того чтобы отличить действительную константу от целой. Научное представление использует буквы ‘E’ или ‘F’ для того, чтобы отделить мантиссу
от экспоненты. Экспоненциальная часть в научном представлении должна быть знаковой целой величиной от -37 до +37. Ниже приведены примеры действительных аналоговых констант:
3.14159 -1.0E+12
+1.0 1.0F-15
-789.56 +1.0E-37
Выражение ‘123’ не представляет действительную константу. Ее правильное представление ‘123.0’.
Аргументы:
IN MSG любая непустая строка
NbC INT количество символов, которые нужно удалить
Pos INT позиция первого символа для удаления
(позиция первого символа строки - 1)
Q MSG измененная строка
пустая строка если Pos < 1
первоначальная строка если Pos > длина IN
первоначальная строка если NbC <= 0
Описание:
Удаляет часть строки.
(*FBD пример блока “DELETE”*)
(* ST Эквивалент: *)
complete_string := 'ABCD' + 'EFGH'; (* полная строка - это 'ABCDEFGH' *)
sub_string := DELETE (complete_string, 4, 3); (* sub_string is 'ABGH' *)
(* IL Эквивалент: *)
LD 'ABCD'
ADD 'EFGH'
ST complete_string
DELETE 4,3
ST sub_string
Аргументы:
RUN BOO режим: TRUE=нормальный/FALSE=сброс
XIN REAL вход: любая действительная аналоговая величина
CYCLE TMR период дифференцирования
XOUT REAL интегрированный выход
Описание:
Дифференцирование действительной величины
Если величина параметра CYCLE меньше чем время цикла приложения ISaGRAF, то период дифференцирования будет равен времени цикла приложения ISaGRAF.
(*FBD пример блока “DERIVATE” *)
(* ST Эквивалент: Мы предполагаем, что DERIVATE1 - это экземпляр блока DERIVATE *)
DERIVATE1(manual_mode, sensor_value, t#100ms);
derivated_value := DERIVATE1.XOUT;
(* IL Эквивалент: *)
LD manual_mode
ST DERIVATE1.run
LD sensor_value
ST DERIVATE1.XIN
LD t#100ms
ST DERIVATE1.CYCLE
CAL DERIVATE1
LD DERIVATE1.XOUT
ST derivated_value
Вот пять динамических правил языка SFC:
Начальная ситуацияНачальная ситуация характеризуется начальными шагами, которые, по определению, находятся в активном состоянии в начале работы. По крайней мере, один начальный шаг должен быть в каждой SFC программе.
Освобождение переходаПереход либо разрешен,
либо запрещен. Говорят, что переход разрешен, если все непосредственно предшествующие шаги, связанные с соответствующим символом перехода, активны, в противном случае, переход запрещен. Переход не может быть освобожден, если :
- он не разрешен и
- соответствующее условие перехода не true.
Изменение состояния активного шагаОсвобождение перехода одновременно ведет к активному состоянию непосредственно следующего шага и пассивному состоянию непосредственно предшествующего шага.
Одновременное освобождение переходовДля того чтобы определить переходы, которые должны освобождаться одновременно, могут быть использованы двойные линии. Если такие переходы изображены отдельно, то активное состояние предшествующих шагов (GSnnn.x) может быть использовано, чтобы выразить их условия.
Одновременная активизация и дезактивация шагаЕсли во время работы шаг одновременно активизируется и дезактивируется, о приоритет отдается активизации.
Исполнение Потоковой Диаграммы может быть представлено следующим образом:
- Символ Begin занимает один целевой цикл.
- Символ Конец занимает один целевой цикл и заканчивает исполнение схемы. После того, как этот символ достигнут, никаких действий на схеме не выполняется.
- Исполнение действия занимает один целевой цикл.
Замечание: В противоположность SFC, действие не постоянное состояние. Инструкции не повторяются, пока символ выделен.
ISaGRAF обеспечивает способ ввода других команд в меню "Инструменты". Определенные пользователем команды, которые должны быть добавлены, описаны в текстовом файле "\ISAWIN\COM\ISA.MNU". Вы можете добавить до 10 команд. Комментарии, начинающиеся с символа «;», могут быть вставлены в любой строке. Каждая команда описана в двух текстовых строках в соответствии со следующим синтаксисом :
M=строка_меню
C=командная_строка
Строка меню - это текст, который должен быть изображён в меню. Командная строка - это команда MS-DOS или Windows, которая может завершаться аргументами. В командной строке Вы можете использовать символ «%А» вместо имени открытого проекта и символ «%P» вместо имени открытой программы. Следующий пример запускает для редактирования выбранной программы ( для использования с программами IL и ST ) :
M=Edit with Notepad
C=Notepad.exe \isawin\apl\%A\%P.lsf
Любая программа SFC последовательной секции может управлять другой программой SFC. Такие программы низкого уровня называются дочерними SFC программами. Дочерние SFC программы - это параллельные программы, которые могут быть запущены, убиты, заморожены и перезапущены своей родительской программой. Родительская программа и дочерняя программа могут быть описаны при помощи языка SFC. Дочерняя SFC программа может иметь локальные переменные и предопределенные слова.
Когда родительская программа запускает дочернюю SFC программу, она устанавливает SFC маркер (активизирует) на каждом начальном шаге дочерней программы. Эта команда описывается оператором GSTART. Когда родительская программа убивает SFC дочернюю программу, она очищает все существующие маркеры на шагах дочерней программы. Такая команда описывается оператором GKILL.
Когда родительская программа замораживает SFC дочернюю программу, она очищает все значения в дочерней программе, и сохраняет их состояние в памяти. Такая команда описывается оператором GFREEZE. Когда родительская программа перезапускает SFC дочернюю программу, она восстанавливает все значения SFC, которые были очищены при замораживание программы. Такая команда описывается оператором GRST.
Любая программа FC последовательной секции может управлять другими FC
подпрограммами. Родительская программа FC
блокируется (ждет) пока не выполнится подпрограмма FC. Одновременная работа родительской программы FC и подпрограммы невозможна.
Этот раздел содержит полезную информацию о возможностях редактирования, общих для всех программных редакторов ISaGRAF. Это главным образом касается связи различных инструментов ISaGRAF и окон диалога.
Меню содержит команды, которые вызывают средства ISaGRAF для выделенного проекта. Обратитесь к соответствующим разделам этого документа за более подробным описанием этих средств.
Привязка переменных ввода-выводаКоманда "Соединение В/В" запускает редактор соединения переменных ISaGRAF. Этот инструмент используется для создание связей между объявленными в словаре проекта переменными ввода-вывода и соответствующей аппаратурой.
Редактор перекрестных ссылокКоманда "Перекрестные ссылки " позволяет пользователю определить таблицы преобразования для целого проекта. Таблица преобразования это множество точек, которое определяет множество исправленных значений для аналоговых величин. Преобразование может быть непосредственно присоединено к аналоговым переменным ввода или вывода, позволяя пользователю фильтровать физические величины ввода-вывода или преобразовывать электрические величины составляющих ввода-вывода в логические значения, значительно упрощая программирование уравнений в приложении.
Ввод описания проектаКоманда «Дескриптор проекта» используется для редактирования текстового описания проекта. Этот документ полностью характеризует проект. В него можно вносить записи, описывающие изменения в ходе работы с проектом. Он отображается в окне Менеджера Проектов.
Печать завершённого документаКоманда «Печать документа проекта» позволяет создать и напечатать завершённый документ по выделенному проекту. Этот документ может содержать любые компоненты ( программы, переменные, параметры ) выделенного проекта. Для создания незавершённого документа нужно только определить его содержание.
История измененийЭта команда открывает диалог, в котором представлена история изменений проекта. Смотрите главу "Управление проектами" для более подробных разъяснений.
Список “Система” показывает объекты, существующие на ISaGRAF Workbench, установленные на жестком диске. Список “Архив” показывает объекты, сохраненные на указанном архивном диске и каталоге.
ДублированиеСохранение объекта в архиве достигается выбором объекта в списке слева
(объекты ISaGRAF Workbench) и нажатием кнопки “Сохранить”. Более одного объекта может быть выбрано в списке. Кнопка “Сохранить” запрещается, когда элемент выбран в списке справа
(режим восстановления).
ВосстановлениеКопирование объекта из архива в ISaGRAF Workbench достигается путем выбора объекта в списке справа (архивные объекты), и нажатием кнопки “Восстановить”. Более одного объекта может быть выбрано в списке. Кнопка “Восстановить” запрещается, когда элемент выбран в списке слева (режим дублирования).
Двойное расхождение - это множественная связь от одного перехода к нескольким шагам. Она соответствует параллельной работе процесса. Двойное схождение - это множественная связь от нескольких шагов к одному и тому же переходу. Одиночное схождение, обычно, используется для того, чтобы объединить несколько ветвей SFC, начавшихся из двойного расхождения. Двойные расхождения и схождения обозначаются двойными горизонтальными линиями.
Пример двойного схождения и расхождения:
Значение: Заканчивает скрипт
Синтаксис: End
Замечание: Инструкция "End" должна быть в последней строке скрипта
Пример: (* Этот виток работает до тех пор пока MyVar не равно TRUE *)
Loop:
If MyVar = FALSE Goto Continue
End
Continue:
Print MyVar
Goto Loop
Аргументы:
IN REAL любая знаковая аналоговая величина
EXP INT целая аналоговая экспонента
Q REAL (INexp)
Описание:
Дает действительный результат операции: (база экспонента) ‘база’ - первый аргумент, экспонента - второй.
(*FBD пример блока “EXPT”*)
(* ST Эквивалент: *)
tb_size := ANA (EXPT (2.0, range) );
(* IL Эквивалент: *)
LD 2.0
EXPT range
ANA
ST tb_size