Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: Drus от 07 Марта 2021, 22:50:09

Название: Обращение к переменным
Отправлено: Drus от 07 Марта 2021, 22:50:09
Здравствуйте. Подскажите пожалуйста, могу ли я в свойствах объекта (например TM_Line, TM_Shape, TM_Text) в пункте "Переменная", выбрать не всю переменную, а ее определенный бит (например через точку или как то по другому)?
Буду признателен за ответ. Спасибо.
Название: Re: Обращение к переменным
Отправлено: Simple_Scada от 07 Марта 2021, 23:21:09
Здравствуйте.

Вы задавали данный вопрос два дня назад на почту техподдержки и мы на него отвечали. Дублируем ответ ниже:

Нет, возможность работать с битами напрямую есть только у компонентов "Кнопка (https://simple-scada.com/help/manual/button.html)" и "Флажок (https://simple-scada.com/help/manual/checkbox.html)". Но можно работать с битами через скрипты (https://simple-scada.com/help/script/work-bits.html). Примеры можно найти по ссылке (https://simple-scada.com/help/script/bit-color.html). Например, можно изменять текст по биту переменной. Для этого, объекты "Текст" нужно связать с необходимыми переменными и у каждого объекта "Текст" в свойстве "Тэг" указать номер бита, по которому должен меняться текст. Далее, нужно написать универсальный скрипт приведенный ниже и установить его на событие OnDataChange требуемых объектов "Текст":
Код: (delphi)
begin
  if Sender is TM_Text then        // сначала убедимся, что скрипт вызван объектом "Текст"
    with Sender as TM_Text do      // далее будем работать с объектом Sender, как с текстом
      if GetBit(AsInt, Tag) = TRUE then
        Text := 'Работа'
      else
        Text := 'Авария';
end.
Если требуется что-то другое, опишите подробно что именно требуется и возможно мы предложим решение.
Название: Re: Обращение к переменным
Отправлено: Drus от 08 Марта 2021, 00:36:18
Спасибо большое за быстрый ответ. Я попробую изложенным Вами способом
Название: Re: Обращение к переменным
Отправлено: Drus от 08 Марта 2021, 15:35:01
Пожалуй, обрисую ситуацию более детально, так как все немного сложнее. Есть две переменные типа «WORD». В одной из этих переменных существует определенный бит, отвечающий за изменение цвета объекта, в другой – определенный бит, отвечающий за изменение видимости объекта. Эти две переменные привязываются к одному объекту (например, типа «TM_Text»). Необходимые биты из данных двух слов расположены в отличающихся позициях (например: бит цвета находится в слове №1 в позиции «13», а бит видимости находится в слове №2 в позиции «3»). Свойство «Tag» у нас одно. Если бы было два свойства «Tag» (например «Tag1» и «Tag2») то проблема была бы решена созданием двух универсальных скриптов, используя Вами предложенный метод (я это к тому, что хотелось бы создать универсальные скрипты). Предложите, пожалуйста, вариант решения.
Название: Re: Обращение к переменным
Отправлено: pan2000 от 09 Марта 2021, 09:38:09
   Здравствуйте.

  Разделение одного параметра на поля (не обязательно двоичные):
Tag = <парам.1> * 100 + <парам.2>, для Вашего примера Tag=1303. Использование:
Код: (delphi)
...
if GetBit(AsInt, Tag div 100) then            // основная переменная - парам.1
...
...
if GetBit(VariableEx.AsInt, Tag mod 100) then // дополнительная переменная - парам.2
...
Название: Re: Обращение к переменным
Отправлено: Drus от 09 Марта 2021, 10:53:14
Отличная идея. Сейчас попробую