Здравствуйте.
Для этого можно добавить виртуальную переменную таймер vrTime с типом данных Integer. Затем создать один скрипт с типом события "Прошла секунда" и написать такой код:
var
aSetValue: Integer;
begin
aSetValue := 0;
{ меняем переменную vrTime от 0 до 3 }
vrTime.Value := vrTime.AsInt + 1;
if vrTime.AsInt > 3 then
vrTime.Value := 0;
{ если солнечная батарея выключена }
if Sun.AsInt <= 100 then
begin
aSetValue := 0;
{ если выключился ветрогенератор, то включаем мигание
диода }
if Wind.AsInt > 100 then
case vrTime.AsInt of
0..1: aSetValue := 0;
2..3: aSetValue := 150;
end;
end else
{ если солнечная батарея включена, то включаем диод
без мигания и прерываем скрипт }
aSetValue := 150;
ArduinoSerial0_D3.Value := aSetValue;
end.
Получается следующее:
- когда солн. батарея включена диод будет гореть всегда;
- когда солн. батарея выключена и ветрогенератор включен - диод будет мигать;
- диод будет выключен когда солн. батарея выключена и ветрогенератор выключен.
Здравствуйте.
Для извлечения битов можно использовать функцию GetBit. С её помощью можно извлечь биты из любой численной переменной. Например у нас есть переменная vrMy с типом данных Integer (целое число), которая читается OPC-сервером из контроллера в скаду. Тогда, для извлечения бита номер 3 (биты считаются с нуля), можно использовать такой скрипт:
var
aBit: Boolean;
begin
aBit := GetBit(vrMy.AsInt, 3); // получаем состояние бита номер 3 (с нуля) из vrMy в локальную переменную aBit.
end.
Некоторые объекты поддерживают автоматическую работу с битами и у них для этого есть отдельное свойство Бит. Например Кнопка, Флажок, Сообщение. Т.е. объект связывается с переменной, в свойство "Бит" вводится номер бита с которым нужно работать и скада сама будет извлекать заданный бит из значения переменной и работать с ним.