Вход

Просмотр полной версии : SIZEOF в codesys 2.3



leoSMD
29.10.2014, 12:03
Всем привет!
Что то у меня с функцией SIZEOF ерить творится

VAR_GLOBAL CONSTANT
stNameCmd : ARRAY[1..6] OF STRING := 'eAir' , 'inAir' , 'sInAir' , 'alarm', 'mode' , 'water' ;
END_VAR

В самой программе
test := SIZEOF(stNameCmd) ;

Почему то size возвращается какой-то жутко цифрой (вроде 486) . Что не так я делаю?

capzap
29.10.2014, 12:06
ну почему, почти совпадает, по умолчанию стринг занимает 80 байт, напишите STRING(20) размер уменьшится

leoSMD
29.10.2014, 12:14
ну почему, почти совпадает, по умолчанию стринг занимает 80 байт, напишите STRING(20) размер уменьшится

Так вот, что он выдает...
Вообще цель была - получить количество элементов массива. Т.е. я надеялся получить 6 .

capzap
29.10.2014, 12:21
в кдс гет понятия динамически расширяемый массив, какое кодичество задали такое и будет, в оскат это сделано проще, верхняя граница указана не цифрой а переменной, которая кпк раз и может являтся количеством элементов

leoSMD
29.10.2014, 12:39
в кдс гет понятия динамически расширяемый массив, какое кодичество задали такое и будет, в оскат это сделано проще, верхняя граница указана не цифрой а переменной, которая кпк раз и может являтся количеством элементов

Благодарю за помощь.

lara197a
29.10.2014, 13:33
но в кдс есть удобная фишка, в массиве можно в скобках использовать переменную
[N]
при обработке и цикле

Yegor
29.10.2014, 15:55
получить количество элементов массиваSIZEOF(stNameCmd) / SIZEOF(stNameCmd[1])

Schneider
17.04.2023, 18:48
SIZEOF(stNameCmd) / SIZEOF(stNameCmd[1])

а как это работает? объясните. аааа, типа размер всего массива в байтах поделить на размер одного элемента получим размер ячеек в массиве.