Как мы ранее написали выше, в скриптах
можно работать с битами переменной. Например, если требуется получить значение бита переменной, то можно использовать функцию
GetBit. Если Вам требуется управлять битами переменной через кнопки или флажки, то у данных компонентов для этого имеется свойство "Бит" и писать скрипты при этом не требуется.
Если обязательно нужно извлечь биты в отдельные переменные, то сделать это можно двумя способами:
1. Через OPC-сервер. Создать на OPC-сервере 16 Boolean переменных и указать для каждой требуемый бит. Затем импортировать переменные в скаду и работать с ними.
2. Через скада-систему.
Для этого, нужно создать внутренние переменные с типом данных Boolean и однотипными именами, например vrMyVar_Bit_0, vrMyVar_Bit_1 и тд., где "vrMyVar" – это имя переменной на OPC-сервере, из которой нужно извлечь биты. Затем нужно создать скрипт с типом события "
Изменились переменные", добавить переменную "vrMyVar" в список скрипта,
как это описано по ссылке и написать такой скрипт:
var
I: Integer;
aVar: TM_Variable;
begin
if not IsFirstChange then // пропускаем первое изменение(запуск, перезапуск проекта)
for I:= 0 to 15 do
begin
aVar := GetVariableByName(Variable.Name + '_Bit_' + IntToStr(I));
if aVar <> nil then // если переменная существует
aVar.Value := GetBit(Variable.AsInt,I); // извлекаем из нее биты
end;
end.
В результате выполнения данного скрипта, в переменные vrMyVar_Bit_0, vrMyVar_Bit_1 и тд. будут извлечены биты из переменной. Это универсальный скрипт, поэтому в список скрипта можно добавить другие переменные, из которых требуется извлечь биты в отдельные Boolean переменные.
Вопрос снимается, нашел
https://simple-scada.com/help/script/inttobin.html
Данная функция не предназначена для работы с битами. Если требуется извлечь биты из переменной в 16 отдельных переменных Boolean, то данная функция не подойдет.