@kondor3000,
Это я поправил.
Она не работает, как должно: срабатывает один раз с маской 16#0001 и значением16#1, значение ERR изменяется на 1 и на этом всё - больше значение ERR не меняется при вызове функции с другими масками и значениями.
@kondor3000,
Это я поправил.
Она не работает, как должно: срабатывает один раз с маской 16#0001 и значением16#1, значение ERR изменяется на 1 и на этом всё - больше значение ERR не меняется при вызове функции с другими масками и значениями.
Переменная ERR содержит флаги возникших ошибок вввиде битов, установленных в 1, например, при превышении уставки или при ошибке DECODE_FLOAT.
Функция set_state_value_16b() позволяет без изменения остальных битов переменной variable устанавливать (обнулять или выставлять) новые значения только для определенных битов с использованием маски.
Можно пример, пожалуйста. Или как это обзывается правильно? (чтобы загуглить)
Валенок подсказывает, что:
После точки идёт маска, если я парвильно понял, с помощью которой можно установить указанные биты в ОДНО определённое состояние за раз.Код:ERR.0 := FALSE;
С помощью функции же можно переключать биты, заданные маской, в различные состояния за раз.
Последний раз редактировалось stdenits; 23.04.2024 в 16:01.
Вроде так должно быть и функция начинает работать 1 Работа функции.jpg
Код:FUNCTION set_state_value_16b : WORD VAR_INPUT variable : POINTER TO WORD; mask : WORD; val : WORD; END_VAR VAR END_VAR set_state_value_16b := (variable^ AND NOT mask) OR (val AND mask);
Последний раз редактировалось kondor3000; 24.04.2024 в 15:22.