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

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

Автор Тема: Преобразование  (Прочитано 529 раз)

Zeliboba

  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
Преобразование
« : 24 Мая 2022, 20:53:29 »
Добрый день! Потребовалось преобразовать Int из ОРС передающиеся в bool переменные. Есть для этого встроенный функционал или это возможно только скриптами?

Simple Scada

  • Глобальный модератор
  • *****
  • Сообщений: 168
    • Просмотр профиля
    • Simple-Scada
Re: Преобразование
« Ответ #1 : 25 Мая 2022, 10:19:56 »
Здравствуйте.

Вам требуется работать с битами переменной? Компоненты "Кнопка" и "Флажок" могут работать с битом переменной напрямую -  см. свойство "Бит". Поэтому, если требуется работа с битами в данных компонентах, то в этом случае можно обойтись без скриптов. Для других компонентов можно работать с битами через скрипты. См. пример изменение цвета по биту переменной по ссылке(пример №2).

Zeliboba

  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
Re: Преобразование
« Ответ #2 : 25 Мая 2022, 10:26:50 »
из ПЛК 16 бит передаются в виде int, необходимо преобразовать в скаде в 16 переменных в виде bool

« Изменён: 25 Мая 2022, 10:36:25 от Simple_Scada »

Zeliboba

  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
Re: Преобразование
« Ответ #3 : 25 Мая 2022, 11:20:06 »
Вопрос снимается, нашел

https://simple-scada.com/help/script/inttobin.html

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1178
    • Просмотр профиля
Re: Преобразование
« Ответ #4 : 25 Мая 2022, 11:49:26 »
Как мы ранее написали выше, в скриптах можно работать с битами переменной. Например, если требуется получить значение бита переменной, то можно использовать функцию GetBit. Если Вам требуется управлять битами переменной через кнопки или флажки, то у данных компонентов для этого имеется свойство "Бит" и писать скрипты при этом не требуется.

Если обязательно нужно извлечь биты в отдельные переменные, то сделать это можно двумя способами:
1. Через OPC-сервер. Создать на OPC-сервере 16 Boolean переменных и указать для каждой требуемый бит. Затем импортировать переменные в скаду и работать с ними.
2. Через скада-систему.

Для этого, нужно создать внутренние переменные с типом данных Boolean и однотипными именами, например vrMyVar_Bit_0, vrMyVar_Bit_1 и тд., где "vrMyVar" – это имя переменной на OPC-сервере, из которой нужно извлечь биты. Затем нужно создать скрипт с типом события "Изменились переменные", добавить переменную "vrMyVar" в список скрипта, как это описано по ссылке и написать такой скрипт:
Код: (delphi)
var
  I: Integer;
  aVar: TM_Variable;
begin
  if not IsFirstChange then // пропускаем первое изменение(запуск, перезапуск проекта)
  for I:= 0 to 15 do
    begin
      aVar := GetVariableByName(Variable.Name + '_Bit_' + IntToStr(I));
      if aVar <> nil then                     // если переменная существует
        aVar.Value := GetBit(Variable.AsInt,I); // извлекаем из нее биты
    end;
end.
В результате выполнения данного скрипта, в переменные vrMyVar_Bit_0, vrMyVar_Bit_1 и тд. будут извлечены биты из переменной. Это универсальный скрипт, поэтому в список скрипта можно добавить другие переменные, из которых требуется извлечь биты в отдельные Boolean переменные.

Цитировать
Вопрос снимается, нашел
https://simple-scada.com/help/script/inttobin.html
Данная функция не предназначена для работы с битами. Если требуется извлечь биты из переменной в 16 отдельных переменных Boolean, то данная функция не подойдет.
« Изменён: 25 Мая 2022, 12:20:18 от Simple-Scada »