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

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

Автор Тема: Деление в скаде  (Прочитано 2586 раз)

Corpus

  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Деление в скаде
« : 18 Апреля 2019, 09:56:41 »
   День добрый.
  С OPC сервера приходит INT (кратное 64). Это число нужно поделить в скаде на 64 и вывести на экран.
  Не подскажете как?

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3233
    • Просмотр профиля
    • Simple-Scada
Re: Деление в скаде
« Ответ #1 : 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. Далее создать скрипт с типом события "изменились переменные" и добавить в него переменную по изменению которой нужно выполнять пересчет. И написать такой код:
Код: (delphi)
begin
  vrDiv.Value := Variable.AsInt64 div 64;
end.
В результате переменная vrDiv будет содержать пересчитанное значение и её можно вывести куда угодно, например в компонент Поле.

Corpus

  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Re: Деление в скаде
« Ответ #2 : 18 Апреля 2019, 12:34:10 »
Спасибо. Скрипт выполняется один раз и на этом останавливается. Мне надо изменению события. В справке по скриптам - создать новый скрипт - отсутствует вкладка  "выбрать переменную". Может у меня версия древняя? У меня 2.2.1. Обновить нужно?

Вопрос решил. Обновил версию. Все заработало.
« Изменён: 18 Апреля 2019, 13:38:39 от Simple_Scada »

Corpus

  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Re: Деление в скаде
« Ответ #3 : 10 Июля 2019, 19:38:03 »
  День добрый. Продолжу тему.
  Теперь надо сделать наоборот. Если этот код работает:
Код: (delphi)
begin
  vrDiv.Value := Variable.AsSingle / 64;
end.
  то
Код: (delphi)
begin
  Variable.Value :=vrDiv .AsSingle * 64;
end.
  не работает. Хотя компилятор не ругается.
Пардон за глупые вопросы. Информатику проходил в 91 году.
« Изменён: 10 Июля 2019, 22:45:23 от Simple_Scada »

Corpus

  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Re: Деление в скаде
« Ответ #4 : 10 Июля 2019, 22:25:53 »
  Спасибо. Решил задачу.
При создании нового скрипта, надо было выбрать OnDataChange, а не "Изменились переменные".