Язык Control поддерживает следующие типы данных:
Тип данных | Диапазон значений | Комментарий |
anytype (см. 5) | Тип (один из перечисленных ниже) определяется автоматически при первом присвоении переменной значения | |
atime | Время аларма, с дополнительным индексом в случае нескольких одновременных алармов | |
bit32 (см. 1) | от 0 до +4294967295 | Набор битов (32 бита) |
bit64 (см. 1) | от 0 до+10146744073709551615 | Набор битов (64 бита) |
blob (см. 9) | Binary large objects (большой двоичный объект) | |
bool | 0, 1 или true, false | Двоичное значение (1 бит) |
char | от 0 до 255 | Символ (1 байт). Также может представлять собой числовое значение в диапазоне от 0 до 255. Примером может служить атрибут конфигурационного элемента элемента точки данных _lock.._man_type |
double | от -1.79769e+308 до +1.79769e+308 | Число с плавающей точкой (64 бита) |
errClass | Класс ошибки | |
file | Указатель позиции в файле | |
float | от -1.79769e+308 до +1.79769e+308 | Значение с плавающей точкой.В «КАСКАД Цифра» тип «float» эквивалентен типу «double» (64 бита), вне зависимости от того, идет ли речь об элементе точки данных или о сценарии CTRL |
int | от -2147483648 до +2147483647 | Целое число (32 бита) |
uint | от 0 до +4294967295 | Положительное целое число (32 бита) |
long | от -9223372036854775808 до +9223372036854775807 | Целое число (64 бита) В случае константы, тип «long» задается при помощи суффикса «L» в конце константы. Пример: 0x7FFFFFFFFFFFFFFFL. |
ulong | от 0 до +18446744073709551615 | Положительное целое число (64 бита). В случае константы, тип «ulong» задается при помощи суффикса «UL» в конце константы. Пример: 0x7FFFFFFFFFFFFFFFUL |
langString | Многоязычная строка (см. раздел Поддержка многоязычности) | |
mixed (см. 7) | В отличие от переменной с типом «anytype», переменная с типом «mixed» изменяет свой тип при каждом присваивании. Таким образом, переменной с типом «mixed» может быть присвоено любое значение | |
mapping (см. 8) | Переменные данного типа используются для хранения произвольных пар ключ-значение. Пары сохраняются в двух массивах | |
va_list | Тип «va_list» используется при передаче в функцию произвольного количества аргументов при ее вызове. «va_start» обеспечивает сохранение в переменной с типом «va_list» значений тех аргументов, которые были переданы в функцию при ее вызове. «va_arg» позволяет считать следующее значение, сохраненное в переменной с типом «va_list». «va_end» прекращает работу с переменной с типом «va_list» (см. также раздел «Параметры«) | |
string (см. 1) | любое количество символов | Символьная строка |
time (см. 2) | Внутренний формат времени | |
unsigned | от 0 до 4,294,967,295 | Положительное целое числоНеобходимо отметить, что попытка присваивания переменной с типом «usigned» значения 4294967295 приводит к синтаксической ошибке. Ошибка возникает в связи с тем, что при отсутствии каких-либо признаков, указывающих на тип числа, по умолчанию все числа обрабатываются как целые числа. Для присваивания беззнаковой переменной значения 4294967295 необходимо использовать символ «u» (= без знака): unsigned f = 4294967295u;Тот же символ используется в случае с шестнадцатеричными переменными и значением 4294967295 |
dyn_anytype (см. 5) | Динамической массив элементов, имеющих тип «anytype» | |
dyn_atime (см. 3) | Динамической массив элементов, имеющих тип «atime» (atime — время аларма).Динамический массив «dyn_atime» содержит элементы с типом «atime» и представляет собой комбинацию «DpIdentifier» (ИД точки данных), времени и индекса. Включает в себя конфигурационный элемент и признак «Detail», но не элемент точки данных, например:»:_alert_hdl.2″ + 2009.08.12 19:11:54.356 (0) | |
dyn_bit32 (см. 3) | Динамический массив элементов, имеющих тип «bit32» (32 бита) | |
dyn_bit64 (см. 3) | Динамический массив элементов, имеющих тип «bit64» (64 бита) | |
dyn_blob (см. 3) | Динамический массив элементов, имеющих тип «blob» | |
dyn_bool (см. 3) | Динамической массив элементов, имеющих тип «bool» | |
dyn_char (см. 3) | Динамической массив элементов, имеющих тип «char» | |
dyn_errClass (см. 3) | Динамический массив элементов, имеющих тип «errClass» (класс ошибки «КАСКАД Цифра») | |
dyn_float (см. 3) | Динамической массив чисел с плавающей точкой | |
dyn_int (см. 3) | Динамической массив целых чисел (32 бита) | |
dyn_uint (см. 3) | Динамической массив положительных целых чисел (32 бита) | |
dyn_long (см. 3) | Динамический массив целых чисел (64 бита) | |
dyn_ulong (см. 3) | Динамической массив положительных целых чисел (64 бита) | |
dyn_langString (см. 3) | Динамический массив многоязычных строк (см. раздел «Поддержка многоязычности«) | |
dyn_mapping (см. 8) | Динамический массив элементов, имеющих тип «mapping» (mapping = ассоциативный массив). Переменные данного типа используются для хранения произвольных пар ключ-значение. Пары сохраняются в двух массивах | |
dyn_string (см. 3) | Динамической массив символьных строк | |
dyn_time (см. 3) | Динамической массив значений во внутреннем формате времени | |
dyn_dyn_anytype (см. 5) | Динамический массив из динамических массивов элементов, имеющих тип «anytype» | |
dyn_dyn_atime (см. 4) | Динамический массив из динамических массивов элементов, имеющих тип «atime» | |
dyn_dyn_bit32 (см. 4) | Динамический массив из динамических массивов элементов, имеющих тип «bit32» (32 бита) | |
dyn_dyn_bit64 (см. 4) | Динамический массив из динамических массивов элементов, имеющих тип «bit64» (64 бита) | |
dyn_dyn_blob (см. 4) | Динамический массив из динамических массивов элементов, имеющих тип «blob» | |
dyn_dyn_bool (см. 4) | Динамический массив из динамических массивов элементов, имеющих тип «bool» (двоичное значение) | |
dyn_dyn_char (см. 4) | Динамический массив из динамических массивов элементов, имеющих тип «char» (символ) | |
dyn_dyn_errClass (см. 4) | Динамический массив из динамических массивов элементов, имеющих тип «errClass» (класс ошибки) | |
dyn_dyn_float (см. 4) | Динамический массив из динамических массивов элементов, имеющих тип «float» (с плавающей точкой) | |
dyn_dyn_int (см. 4) | Динамический массив из динамических массивов элементов, имеющих тип «integer» (целые числа 32 бита) | |
dyn_dyn_uint (см. 4) | Динамический массив из динамических массивов элементов, имеющих тип «uint» (положительные целые числа 32 бита) | |
dyn_dyn_long (см. 4) | Динамический массив из динамических массивов элементов, имеющих тип «long» (целые числа 64 бита) | |
dyn_dyn_ulong (см. 4) | Динамический массив из динамических массивов элементов, имеющих тип «ulong» (положительные целые числа 64 бита) | |
dyn_dyn_langString (см. 4) | Динамический массив из динамических массивов элементов, имеющих тип «langString» (многоязычная строка, см. раздел «Поддержка многоязычности«) | |
dyn_dyn_shape (см. 4) | Динамический массив из динамических массивов элементов, имеющих тип «shape» (указатель на графический элемент) | |
dyn_dyn_string (см. 4) | Динамический массив из динамических массивов элементов, имеющих тип «string» (символьная строка) | |
dyn_dyn_time (см. 4) | Динамический массив из динамических массивов элементов, имеющих тип «time» (внутренний формат времени) | |
dbRecordset | Переменная для организации доступа с использованием интерфейса ADO (объекты данных ActiveX) | |
dbConnection | Переменная для организации доступа с использованием интерфейса ADO (объекты данных ActiveX) | |
dbCommand | Переменная для организации доступа с использованием интерфейса ADO (объекты данных ActiveX) | |
shape | Указатель на графический элемент | |
dyn_shape | Динамический массив указателей на графические элементы | |
idispatch | Тип данных для методов объектов ActiveX |
ПРИМЕЧАНИЕ
Необходимо отметить, что типы данных «dpid», «dyn_dpid», «dpidentifier» и «dyn_dpidentifier» используются только в интерфейсе прикладного программирования (API). В языке CTRL для получения информации о списке точек данных при групповом аларме следует использовать переменную с типом «dyn_string». Дополнительная информация об API представлена в разделе «API, основы«.
- Для адресации отдельных битов в наборе битов или отдельных символов в символьной строке может использоваться нотация: «pattern[i]» (набор_битов[i]) или «string[i]» (строка[i]). Наименьший индекс равен нулю. В наборах битов/строках отдельные биты/символы не могут быть записаны или перезаписаны побитово/посимвольно. В языке Control наборы битов следует изменять с использованием Функций для переменных bit32/bit64. ВНИМАНИЕ: Поскольку наборы битов имеют тип «bit32», «pattern[i]» (i-й элемент набора битов) имеет тип «bool», а «string[i]» (i-й элемент строки переменной типа «string») имеет тип «char».
- В переменных типа «time» отсчет времени ведется с 01.01.1970 г. (как в Unix-системах). Для секунд используются 32 бита. Миллисекунды сохраняются в дополнительной переменной с типом «unsigned short» (короткое целое без знака).
В ОС Windows отсутствует возможность работы с отрицательными значениями времени, например, при выполнении расчетов. Таким образом, целое число, соответствующее секундам, должно заранее преобразовываться в тип «time».
Пример 1:
int i = -86400;
time c = getCurrentTime();
DebugN((time)(period(c) + i));
Пример 2 (для времени с миллисекундами):
int i = -86400;
time c = getCurrentTime();
DebugN((time)((float)c + i));
- Для адресации отдельных элементов динамических массивов используется нотация «array[i]» (массив[i]), при этом наименьшим индексом является единица. Динамические массивы инициализируются путем присвоения значений отдельным элементам или посредством специальных функций, предназначенных для работы с массивами. Отдельные элементы массива «dyn_int» имеют тип «int», отдельные элементы массива «dyn_unint» имеют тип «uint» и т.д.
- ВНИМАНИЕ: В том случае, если атрибут элемента точки данных имеет тип динамического массива (dyn_…), отдельные элементы данного массива не могут быть заданы/установлены при помощи функций «dpSet()» и «dpSetTimed()», а также не могут быть считаны при помощи функций «dpGet()», «dpGetAsynch()» или «dpGetPeriod()». Также к отдельным элементам динамического массива не может применяться функция «dpConnect()». Исходные и текущие значения должны записываться в массив только в виде полного набора элементов массива.
- Элементы подобного динамического массива могут иметь отличающиеся друг от друга типы данных.
Пример:
anytype any1, any2;
dyn_anytype atype;
any1 = 3.14; //Тип данных переменной any1 устанавливается как «float».
any2 = atype; //Тип данных переменной any2 устанавливается как «dyn_anytype» - Числовые значения с ведущим нулем интерпретируются как восьмеричные. Числовые значения с ведущими символами 0Х интерпретируются как шестнадцатеричные. ВНИМАНИЕ: в примере ниже при втором объявлении переменной будет выводиться сообщение об ошибке, так как эти числа воспринимаются как восьмеричные. Без ошибок: dyn_int time = makeDynInt( (((04*60)+00)*60) ); с ошибкой: dyn_int time = makeDynInt( (((09*60)+00)*60) ); . Синтаксические ошибки также будут иметь место при использовании выражений iHour=09; и iMinute=08; .
- В отличие от переменной с типом «anytype», переменная с типом «mixed» изменяет свой тип при каждом присваивании значения, см. пример ниже:
examp_func()
{
anytype a;
mixed m;
a = false;
m = false;
DebugN(a); //Возвращает 0 или FALSE
DebugN(m); //Возвращает 0 или FALSE
a = «example»;
m = «example»;
DebugN(a); //Возвращает 1 or TRUE
DebugN(m); //Возвращает «example»
}
- Переменные типа «mapping» (ассоциативные массивы) используются для хранения произвольных пар ключ-значение. Ключи и значения сохраняются в двух массивах (один для ключей и один для значений). Mapping для пары ключ:значение «one»: 1, «two»: 2, «three»: 3 выглядит следующим образом:
ключ значение
«one» 1
«two» 2
«three» 3
Дополнительная информация приведена в разделе «Ассоциативные массивы«.
- Большие двоичные объекты (blob) используются в системе «КАСКАД Цифра» для передачи данных между драйвером и пользовательским интерфейсом прикладного программирования.
Преобразование десятичных чисел в числа с плавающей точкой
Стандарт IEEE 754 нормирует формат представления чисел с плавающей точкой. Кроме того, стандарт нормирует методы выполнения математических операций, таких как, например, округление. Для чисел с плавающей точкой существуют два возможных формата: 32 бита (одинарная точность) и 64 бита (двойная точность).
Также как и в языке C++, в языке CTRL системы «КАСКАД Цифра» доступны типы данных «float» и «double». Внутри системы оба этих типа сопоставляются типу «float», при этом значения сохраняется как «double». Таким образом, для чисел с плавающей точкой обеспечивается двойная точность.
Арифметические операции с числами с плавающей точкой сложнее, чем операции с двоичными значениями.
Десятичное число не может быть точно отображено в виде числа с плавающей точкой стандарта IEEE745 (из-за точности округления), вне зависимости от того, используется ли одинарная или двойная точность. В данном разделе не приводится детальное описание процесса преобразования десятичного числа в число с плавающей точкой, поскольку речь идет о базовой операции в области информатики.
При работе с периферийными устройствами, которые поддерживают работу только с числами с плавающей точкой обычной точности, или при настройке диапазонов алармов для десятичных значений, до начала промышленного применения следует оценить влияние ограничений стандарта IEEE 754 при преобразовании типов данных.