Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: Corpus от 18 Апреля 2019, 09:56:41

Название: Деление в скаде
Отправлено: Corpus от 18 Апреля 2019, 09:56:41
   День добрый.
  С OPC сервера приходит INT (кратное 64). Это число нужно поделить в скаде на 64 и вывести на экран.
  Не подскажете как?
Название: Re: Деление в скаде
Отправлено: Simple-Scada от 18 Апреля 2019, 11:12:07
Здравствуйте.

Способ 1. Создать универсальный скрипт для компонентов Текст с таким кодом:
Код: (delphi)
var
  aText: TM_Text;
begin
  if not (Sender is TM_Text) then Exit;
  aText := Sender as TM_Text;
  aText.Text := IntToStr(aText.AsInt64 div 64);
end.
Далее можно создать на мнемосхеме любое количество компонентов Текст и связать каждый такой компонент со своей переменной. Всем компонентам на событие OnDataChange назначить универсальный скрипт. В результате каждый компонент будет отображать значение привязанной к нему переменной деленное на 64.


Способ 2. Перейти в меню "Переменные - Редактировать", создать новую внутреннюю переменную с типом Int64, например с именем vrDiv. Далее создать скрипт с типом события "изменились переменные" (https://simple-scada.com/help/script/changemulvar.html) и добавить в него переменную по изменению которой нужно выполнять пересчет. И написать такой код:
Код: (delphi)
begin
  vrDiv.Value := Variable.AsInt64 div 64;
end.
В результате переменная vrDiv будет содержать пересчитанное значение и её можно вывести куда угодно, например в компонент Поле.
Название: Re: Деление в скаде
Отправлено: Corpus от 18 Апреля 2019, 12:34:10
Спасибо. Скрипт выполняется один раз и на этом останавливается. Мне надо изменению события. В справке по скриптам - создать новый скрипт - отсутствует вкладка  "выбрать переменную". Может у меня версия древняя? У меня 2.2.1. Обновить нужно?

Вопрос решил. Обновил версию. Все заработало.
Название: Re: Деление в скаде
Отправлено: Corpus от 10 Июля 2019, 19:38:03
  День добрый. Продолжу тему.
  Теперь надо сделать наоборот. Если этот код работает:
Код: (delphi)
begin
  vrDiv.Value := Variable.AsSingle / 64;
end.
  то
Код: (delphi)
begin
  Variable.Value :=vrDiv .AsSingle * 64;
end.
  не работает. Хотя компилятор не ругается.
Пардон за глупые вопросы. Информатику проходил в 91 году.
Название: Re: Деление в скаде
Отправлено: Corpus от 10 Июля 2019, 22:25:53
  Спасибо. Решил задачу.
При создании нового скрипта, надо было выбрать OnDataChange, а не "Изменились переменные".