В языке ST имеется возможность побитово сравнивать целочисленные типы данных с помощью AND, OR, XOR, но нет возможности с помощью NOT инвертировать все биты в целочисленной переменной.
Будет ли добавлена такая возможность?
1) Побитовое 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 только для BOOL, хотя документация описывает побитовый NOT).
Очистка бита: new_out := new_out AND (4294967295 XOR bit_mask); — XOR с маской всех единиц вместо инверсии.
2) Документация ST сильно отстает от реализации, многим пользуемся, а может о чем-то даже не догадываемся, а оно есть и работает..
Вызов FUNCTION, CASE, ELSIF, EXIT, TIME.
Не хватает примеров синтаксиса R_TRIG/F_TRIG/CTU/CTD/CTUD/TP/TON/TOF/MOD/SHL/SHR/CASE - все наугад пробуем. Что-то нативно понятно, что-то с особенностями:
2.1) SHL(K, value) вместо SHL(value, K) — первым идёт значение (документация противоречит: value, K).
2.2) Знаковый MOD — MOD может вернуть отрицательный результат; для кольцевых индексов нужно добавлять коррекцию.
2.3) Пропущенный ; после UNTIL <условие> — наоборот: там ; НЕ нужна, а после END_REPEAT; — нужна.
3) Из пожеланий еще: реализация обратного отсчета 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?