Переменные

Переменная – сигнал, именованная ячейка памяти, в которую можно записать или из которой можно прочитать значение. Переменные могут быть созданы при помощиключевых слов var, const, init, output, input или автоматически, в соответствии с выражением, которое присваивается переменной, а также получены из Глобальных Параметров субмодели. Переменные могут иметь один из перечисленных ниже стандартных типов.
Тип Описание
integer Целое значащее 32-битное число. По-умолчанию задание целого числа происходит в десятичном представлении (x = 15). Также доступен ввод в бинарном (x = 0b1111) и шестнадцатиричном представлении (x = 0xF) с испльзованием префиксов 0b и 0x соответственно.
double 64-разрядные числа двойной точности стандарта IEEE-754 с плавающей запятой и знаком.
complex Комплексное 128-битное число. Имеет формат вывода a±bi, где a – действительная часть, b – комплексная часть. Можно задать комплексное число также в виде (a,b).
intarray Массив (вектор-строка) целых чисел.
array Массив (вектор-строка) действительных чисел.
carray Массив (вектор-строка) комплексных чисел.
matrix Матрица действительных чисел.
cmatrix Матрица комплексных чисел.
boolean Двоичное 1-битное значение, может иметь значение 0 или 1.
color Цвет – эквивалентен типу integer (см rgbtocolor).
point Геометрическая точка – эквивалентна комплексному числу, имеет формат вывода (a,b), где a – абсцисса, b –ордината.
string Строка символов.
tEnum Перечисление - имеет несколько возможных значений, задается индексом необходимого значения в списке возможных.
Прим.: Далее под вектором понимается массив (вектор-строка) чисел, а вектор-столбец – это матрица, состоящая из нескольких строк и одного столбца.

Кроме стандартных типов переменных могут быть переменные сложного типа – записи.

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

"имя поля" 1>{:"тип поля 1"}{="начальное значение поля 1"}{…}

Пример:

var newrec :(x = 0.0, y = 0.0); 
Прим.: Поля внутри декларации сложного типа определяются аналогично ключевому слову var.

Доступ к полю сложной переменной производится при помощи оператора « -> » в соответствии со следующим форматом:

Пример:

А = newrec -> x; 

Пример задания некоторых типов переменных из скрипта

Задание булевского числа:

var bool_value: boolean;
bool_value = TRUE; //или FALSE

Задание целого числа в двоичном формате:

var binary_value: integer;
binary_value = 0b101;

Задание целого числа в шестнадцатеричном формате:

var hex_value: integer;
hex_value = 0x1F;

Задание целого числа в десятичном формате

var dec_value: integer;
dec_value = 100;

Задание вещественного числа:

var real_value: double;
real_value = -100.5e3;

Задание комплексного числа:

var comp_value: complex; //Точка эквивалентна комплексному
comp_value = -100.5e3 + 5i;
//или
comp_value = (-100.5e3, 5);

Задание строки:

var str_value: string;
str_value = "строка 123";

Задание вектора:

var vec: array;
vec = [1, 3, 5, 7.0e1];

Задание вектора нулевой длины:

var x[], y[];

Задание целочисленного вектора:

var intvec: intarray;
intvec = [2,0x4,6,0b1000];

Задание матрицы:

var m: matrix;
m = [[1, 2], [3, 4]];

Задание комплексной матрицы:

var cm: cmatrix;
cm = [[1 + 2i, (2, 3)], [(3, 7), 4 + 10i]];

Задание перечисляемого типа:

var z: TENUM;
initialization
// Присвоение перечисляемого списка для отображения
z->items = "a1"+CLRF+"a2";
end;
// Присвоение номера
z = 1;
// тоже самое другим способом
z->value = 0;

Системные переменные

В блоке "Язык программирования" доступны следующие системные переменные, касающиеся расчетного ядра:

Переменная Тип данных Назначение
isgetcount Двоичное (Boolean) Флаг определения размерностей блока
time Вещественное (double) Модельное время
stepsize Вещественное (double) Шаг интегрирования
goodstep Двоичное (Boolean) Флаг «хорошего» шага
getderi Двоичное (Boolean) Флаг вычисления значений производных
setstepflag Двоичное (Boolean) Флаг принудительного присвоения шага
newstepvalue Вещественное (double) Принудительное значение шага при setstepflag = 1

Переменная goodstep принимает значение 1, если вычисления производятся в конечной точке шага интегрирования, и при этом удовлетворяется условие заданной точности; во всех других случаях переменная goodstep принимает значение 0. Переменная getderi принимает значение 1 при вычислении матрицы Якоби посредством численного дифференцирования; во всех других случаях переменная goodstep принимает значение 0.

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

BLOCKRESULT Присваивание этой переменной единицы приведет к остановке выполнения расчета блока (в т.ч. промежуточных шагов). Может быть использована для принудительного прекращения выполнения работы модели. Доступна только в блоке типа 0985.dita#. Рекомендуется использовать для остановки на этапе расчета. Для остановки на этапе инициализации следует использовать переменную project_error_flag.
CHANGE Флаг принудительной перерисовки графического контейнера.
CONTAINER_NAME Имя графического контейнера, в котором написан скрипт.
CONTAINER_WIDTH Ширина текущего графического контейнера. Допускает присвоение.
CONTAINER_HEIGHT Высота текущего графического контейнера. Допускает присвоение.
CURRENT_PROJECT_FILE_NAME Имя текущего открытого файла проекта
CURRENT_SELECTED_DATA_OBJECT Содержит идентификатор данных объекта, выделенного в редакторе свойств.
CURRENT_SELECTED_PROPERTY_NAME Строковая переменная, содержит имя последнего выделенного свойства или параметра, выбранного пользователем в редакторе свойств объекта.
DYNAMIC_PROPERTY_ITEMS Переменная для указания через скрипт подсказки выбора (для скриптов внутри свойств блока)
CURRENT_REG_OBJECT_ID Идентификатор блока, из которого была вызвана форма управления. Предполагается использование в скрипте внешней (по отношению к блоку) формы управления (окна анимации).
EDITOR_MAX_ACTIONS_COUNT Глубина списка отмены действий (по Ctrl + Z)
GLOBALCOLOR Цвет фона главного окна
GROUPCOLOR Цвет фона группы
IS_REG_MODE_FLAG Переменная окна анимации, имеет значение TRUE, если окно открыто в режиме управления объектом.
IS_PROJECT_IS_LOADING_FLAG Переменная проекта, имеет значение TRUE, когда проект находится в состоянии загрузки из файла. Может применяться для оптимизации инициализации скриптов в моделях.
KLINE К-т масштабирования линий внутри контейнера
LAST_ACTIVE_HWND Указатель на последнее активное окно (хэндл)
LAST_ACTIVE_PROJECT_ID Ссылка окна последнего активного проекта
LAST_ACTIVE_SCREEN_ID screen_id последнего активного окна
NOT_BRING_TO_FRONT_SELECTED_FLAG Переменная управляет подавлением вывода объекта на передний план при выделении. Если TRUE, то объект не будет выводиться на передний план при выделении. Управление переменной можно осуществлять через меню схемного окна: Вид → Дополнительно → Не отрисовывать сверху выделенный объект.
OBJECTID_BY_MMOVE Переменная содержит идентификатор объекта, над которым находится указатель мыши (см. описание демо примера objectid_by_mmove.dita#)
OLD_PROJECT_NAME Имя предыдущего файла, загруженного в окно
PAINTSTEP Флаг, выставляемый при перерисовке изображения окна.
PARENTOBJECT Ссылка на объект-владелец контейнера (для того чтобы изнутри контейнера осуществлять операции с объектом)
PRJINITED Флаг, выставляемый в единицу после завершения инициализации проекта. Пока инициализация не завершена, флаг имеет значение ноль.
PRJINITIALIZING Флаг, выставляемый в единицу в процессе инициализации модели на расчет. Когда инициализация завершена, флаг сбрасывается в ноль.
PROJECT_ERROR_FLAG Общепроектная переменная, присваивание которой единицы приводит к остановке расчёта проекта. Эквивалентна использованию функции seterrorflag. Доступна только в блоке типа 0985.dita#. Рекомендуется использовать для остановки на этапе инициализации. Для остановки на этапе расчета следует использовать переменную blockresult.
PROJECT_NO_INIT_DATAMGR_FLAG Флаг, значение TRUE которого запрещает инициализацию meneger_dannyh.dita# менеджера данных при запуске проекта. Может быть установлен в секции initialization скрипта проекта для ускорения запуска при наличии большого колическтва элементов менеджера данных.
REG_MODAL_FLAG Флаг, указывающий, что эту форму надо открывать модально в режиме управления по ссылке. Используется для создания панелей управления, работающих в модальном режиме – для этого в их секции инициализации надо установить REG_MODAL_FLAG = 1.
RESTARTSTEP Шаг сохранения рестартов
SELF_CONTAINER_ID Идентификатор собственного графического контейнера
SCALEX К-т масштабирования контейнера по оси X
SCALEY К-т масштабирования контейнера по оси Y
SCREEN_ID Идентификатор окна редактора – произвольная строка, присваиваемая в скрипте
SNAPSTEP Шаг привязки объектов к сетке
SUBMODEL Указатель на блок-родитель субмодели
SYSTEM_DB_ROOT Путь хранения разлычных файлов данных, установленный для графической оболочки.
WIRES_START_POINTS_DEFAULT_SIZE Коэффициент масштабирования размеров точек ветвления линий связи относительно их толщины. Для каждой линии связи может быть задано индивидуальное значение в свойстве с именем StartPointSize.