Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Автор Тема: Интересные скрипты  (Прочитано 2595 раз)

Teodor

  • Старожил
  • ****
  • Сообщений: 256
    • Просмотр профиля
Интересные скрипты
« : 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)

ВСЕ! Наше поле меняет и отображает только заданную часть ОРС переменной
« Изменён: 13 Июня 2017, 15:54:58 от Teodor »