вопрос про побитовые логические функции

Автор Dima Haus1, 23 апреля 2026, 13:25:36

« назад - далее »

Dima Haus1

    В языке ST имеется возможность побитово сравнивать целочисленные типы данных с помощью AND, OR, XOR, но нет возможности с помощью NOT инвертировать все биты в  целочисленной переменной.
    Будет ли добавлена такая возможность?

teplocom

#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::
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)

Также тут сказано про VAR_OUTPUT.
А VAR_TEMP сохраняет свои значения в каждом цикле?
Также пока не поняли можно ли и как использовать приведенные в ПРИМЕРе:
VAR_IN_OUT VAR_EXTERNAL VAR_GLOBAL VAR_ACCESS

Появится ли  VAR_CONSTANT?