Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: Teodor от 13 Июня 2017, 13:06:39

Название: Интересные скрипты
Отправлено: Teodor от 13 Июня 2017, 13:06:39
Я тут пробежался по граблям и решил что конечный вариант может пригодиться не только мне...

Если возникает проблема в получении из одного регистра нескольких значений и их обратной записи. Например биты управляющих сигналов, или побайтная запись в ворд... Мало ли как могут изгольнуться производители.

Предлагается построить следующую конструкцию: ОРС переменная, локальные переменные для каждого параметра, элементы управления для каждого параметра, скрипты:
OnChange
Код
var
  Mask,Pos:byte;
begin
  if not (Sender is TM_Object) then Exit;
  with Sender as TM_Object do
    if (Variable <> nil) and (VariableEx <> nil) then
    begin
      Mask:=Round(Power(2, (tag shr 4))-1); //bitMask
      Pos:= Tag and 15;
      VariableEx.Value := VariableEx.Value and ((Mask shl Pos) xor 65535) + (Value shl Pos);
     end;
end.
OnChangeEx
Код
var
  Mask,Pos:byte;
begin
  if not (Sender is TM_Object) then Exit;
  with Sender as TM_Object do
    if (Variable <> nil) and (VariableEx <> nil) then
      begin
        Mask:=Round(Power(2, (tag shr 4))-1); //bitMask
        Pos:= Tag and 15;
        Value := (VariableEx.Value shr Pos) and Mask;
      end;
end.

К управляющему элементу привязываем переменную(локальная), доп.переменную (ОРС), скрипты и устанавливаем тег:
16*к-во_бит + стартовый_бит. (например младший байт тег 16*8+0=128, старший 16*8+8=136, или побитно 16*1+х = 16,17,18...31)

ВСЕ! Наше поле меняет и отображает только заданную часть ОРС переменной