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

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

Автор Тема: Скрипты, работа с переменными  (Прочитано 2508 раз)

Алексей_26

  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Скрипты, работа с переменными
« : 04 Июля 2024, 09:40:16 »
Добрый день. Подскажите как можно во внутреннюю перемененную собрать биты из переменных OPC сервера?
 к примеру:
Есть внутренняя переменная MyVariable. Мне из переменной OPC1 нужно присвоить значение бита 1 и 2  в бит 3 и 4  переменной MyVariable.

Simple Scada

  • Глобальный модератор
  • *****
  • Сообщений: 285
    • Просмотр профиля
    • Simple-Scada
Re: Скрипты, работа с переменными
« Ответ #1 : 04 Июля 2024, 12:12:20 »
Здравствуйте.

Методы для работы с битами переменной рассмотрены по ссылке. Чтобы извлечь нужный бит из значения переменной, нужно использовать функцию GetBit. Чтобы записать значение бита в переменную, нужно использовать функцию SetBit.

Для написания универсального скрипта нужно создать внутренние переменные с именами, как у внешних переменных + приставка (например "_FilterBit"). Например, для переменной "vrMyVar" -> "vrMyVar_FilterBit" и т.д. Далее создать скрипт с типом события "Изменились переменные", добавить в список скрипта все необходимые внешние переменные и использовать следующий код скрипта:
Код: (delphi)
var
  aSetBit : integer;
  aVar: TM_Variable;
begin
  aSetBit := 0;
  aVar := GetVariableByName(Variable.Name + '_FilterBit');
  if aVar <> nil then        // если переменная существует
  begin
    aSetBit := SetBit(aSetBit, 2, GetBit(Variable.Value, 0));   // записать значение 1 бита переменной "vrMyVar" в 3 бит переменной aSetBit
    aSetBit := SetBit(aSetBit, 3, GetBit(Variable.Value, 1));   // записать значение 2 бита переменной "vrMyVar" в 4 бит переменной aSetBit
    aVar.Value := aSetBit;                                   // записать полученный результат в переменную "vrMyVar_FilterBit"
  end;
end.

Также обратите внимание, что при необходимости целочисленные внешние переменные можно разбить на биты и работать с каждым битом отдельно.
« Изменён: 04 Июля 2024, 12:15:26 от Simple-Scada »