В языке ST имеется возможность побитово сравнивать целочисленные типы данных с помощью AND, OR, XOR, но нет возможности с помощью NOT инвертировать все биты в целочисленной переменной.
Будет ли добавлена такая возможность?
Побитовое NOT не работает. При применении оператора NOT любая переменная становится BOOL:
PROGRAM ALARM_MANAGER_DWORD
VAR_INPUT
bit_mask : DWORD; // битовая маска (биты 0..31)
uint_in: DWORD; // маска аварий 1 (биты 0..31)
END_VAR
VAR
bit_mask_not : DWORD; // битовая маска для примера
END_VAR
VAR_OUTPUT
out : DWORD; // выходная маска для 0..31 bit
END_VAR
bit_mask_not := NOT bit_mask; // число после операции NOT преобразуется в BOOL, в отличие от OR AND XOR
out := uint_in AND (4294967295 XOR bit_mask_not); // (4294967295 XOR bit_mask_not) - выход из положения, но строчка выше - ошибка компиляции
END_PROGRAM
Документация ST: (https://files.zentec.ru/zworkbench/doc/master/st/reference.html):
NOT Битовое NOT
Документация ST сильно отстает от реализации, многим пользуемся, а может о чем-то даже не догадываемся, а оно есть и работает..
Вызов FUNCTION, CASE, ELSIF, EXIT, TIME.
Не хватает примеров синтаксиса R_TRIG/F_TRIG/CTU/CTD/CTUD/TP/TON/TOF/MOD/CASE - все наугад пробуем. Что-то нативно понятно, что-то с особенностями.
Из пожеланий еще: реализация обратного отсчета FOR (FOR i BY -1)
Также тут (https://zentec.ru/forum/index.php?topic=917.0) сказано про VAR_OUTPUT.
А VAR_TEMP сохраняет свои значения в каждом цикле?
Также пока не поняли можно ли и как использовать приведенные в ПРИМЕРе: (https://files.zentec.ru/zworkbench/doc/master/st/example.html)
VAR_IN_OUT VAR_EXTERNAL VAR_GLOBAL VAR_ACCESS
Появится ли VAR_CONSTANT?