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

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

Автор Тема: Вопросы по скриптам в Simple-Scada 2  (Прочитано 208698 раз)

teplocom

  • Новичок
  • *
  • Сообщений: 10
  • с чувством уверенности в завтрашнем дне
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1305 : 29 Октября 2021, 12:47:56 »
Приветствую всех.
Задача в скриптах преобразовать Word в SmallInteger
Чтобы число от 0 to 65535 стало -32768 to 32767?

Нашел такой способ решения, или есть проще?
Код: (delphi)
begin
  // перевести значение переменной из шкалы "0 - 65535" в шкалу "-32768 - 32767" и вывести результат в Variable1
  if  Variable1.Value > 32767 then
    Variable1.Value := Scaling(32768,65535,-32768,-1, Variable1.Value);
end.
« Изменён: 29 Октября 2021, 20:59:49 от Simple-Scada »

Senpai

  • Пользователь
  • **
  • Сообщений: 64
  • Помощник
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1306 : 29 Октября 2021, 20:51:39 »
Здравствуйте.
В скаде это можно сделать без использования скриптов (если реальная шкала переменной 0..65535), используя режим масштабирования - см. описание опции "Сдвиг запятой" в руководстве. В Вашем случае, необходимо у переменной задать шкалу min= 0, max= 65535, перейти на вкладку "Дополнительные", включить режим масштабирования(кнопка напротив опции "Сдвиг запятой") и задать "Виз. минимум" = -32768, "Виз. максимум" = 32767.
« Изменён: 29 Октября 2021, 20:59:08 от Simple-Scada »

teplocom

  • Новичок
  • *
  • Сообщений: 10
  • с чувством уверенности в завтрашнем дне
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1307 : 31 Октября 2021, 04:41:18 »
Спасибо за ответ. Знаю про эту опцию и сразу ей и пытался пользоваться, но в моем случае она "не работает". Дело в том что текущее значение внутренней переменной (которая SmallInteger) присваивается в скриптах, а масштабирование видимо работает только для внешних переменных при передаче/преобразовании от OPC в SCADA.
У меня же: -есть внешняя переменная DWORD. Потом эта переменная становится двумя внутренними WORD через HiWord и LoWord. А дальше нужно из них сделать вместо WORD два SmallInteger.
Наверное, более элегантно мою задачу не решить  ???
« Изменён: 01 Ноября 2021, 13:24:54 от Simple_Scada »

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 876
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1308 : 01 Ноября 2021, 16:38:10 »
Да, масштабирование через настройку переменной подходит только для внешних переменных. В скриптах для этих целей нужно использовать функцию Scaling.

pan2000

  • Постоялец
  • ***
  • Сообщений: 147
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1309 : 02 Ноября 2021, 11:51:56 »
   Здравствуйте.

...Наверное, более элегантно мою задачу не решить  ???
Разобрать переменную на поля можно посредством пользовательского типа данных - записи:
Код: (delphi)
type TwoSmallint = record  SmallintLo, SmallintHi: Smallint; end;
var
  temp: TwoSmallint;
begin
    Longword(@temp)^ := LongWord(dwInput.AsInt);  // копирование "байт в байт" в переменную temp
    smiHi.Value := temp.SmallintHi;               // разбор данных по структуре записи
    smiLo.Value := temp.SmallintLo;
end.
Пример во вложении.

teplocom

  • Новичок
  • *
  • Сообщений: 10
  • с чувством уверенности в завтрашнем дне
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1310 : 02 Ноября 2021, 14:42:54 »
Спасибо, красиво получилось!
« Изменён: 03 Ноября 2021, 15:24:51 от Simple_Scada »

vigorts

  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1311 : 04 Ноября 2021, 20:37:49 »
Здравствуйте! Подскажите пожалуйста.
В скрипте "изменились переменные"  есть битовая переменная, по изменению отправляется сообщение в телеграмм.
Как распаковать на булевые, что бы по их изменению отправлялись сообщения.
От программирования далёк, только начал вникать. Хорошо бы пример. Спасибо!

vigorts

  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1312 : 05 Ноября 2021, 12:31:51 »
Разобрался.
« Изменён: 05 Ноября 2021, 21:39:08 от Simple_Scada »

Botsmall

  • Новичок
  • *
  • Сообщений: 29
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1313 : 11 Ноября 2021, 17:11:05 »
Добрый день. Вопрос немного похож на предыдущий в этой ветке.
Как с помощью внешней переменной типа Integer изменять свойство видимости Alpha типа Byte (С учетом масштабирования).
Не могу разобраться, как привести все к одному типу данных в пределах одного скрипта.

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 876
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1314 : 12 Ноября 2021, 22:48:29 »
Здравствуйте.

В каком диапазоне меняется переменная Integer? Если в том же, что и прозрачность 0-255, то можно записывать значение переменной напрямую в свойство Alpha. Если переменная Integer меняется в другом диапазоне, то можно использовать функцию Scaling, задав в ней диапазон в котором изменяется переменная Integer в качестве исходной шкалы и 0-255 в качестве целевой шкалы. В примере ниже переменная Integer изменяется в диапазоне 0-1000, используется скрипт по событию OnDataChange и переменная привязана к основной переменной объекта.
Код: (delphi)
begin
  if Sender is TM_Object then
    with Sender as TM_Object do
      Alpha := Trunc(Scaling(1000,0,255,0, Variable.AsInt));
end.
Это универсальный скрипт, его можно использовать для других подобных объектов, назначив на событие OnDataChange.

teplocom

  • Новичок
  • *
  • Сообщений: 10
  • с чувством уверенности в завтрашнем дне
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1315 : 20 Ноября 2021, 22:58:06 »
Приветствую.
Вопрос такой: Есть ли возможность написать скрипт перехода на страницу "Активных сообщений", подобно переходу:
Код: (delphi)
begin
  GoToMessagesAll; // переход в меню сообщений на всех клиентах                           
end.

И еще такое заметил (ни на что не влияет в принципе):
Такое не компилируется. При сохранении проекта выдает ошибку компиляции скриптов - не совпадение типов Integer и VOID в строке 3:
Код: (delphi)
begin
Text1.Text:=IntToStr(SysGet(SYS_UNCONFIRMED_COUNT)); //кол-во неподтвержденных сообщений
Text2.Text:=IntToStr(SysGet(SYS_ACTIVE_COUNT));  //кол-во активных сообщений
end.

А вот так все компилируется и работает:
Код: (delphi)
begin
Text1.Text:=IntToStr(SysGet(0)); // или SYS_UNCONFIRMED_COUNT  в аргументе, не важно
Text2.Text:=IntToStr(SysGet(1)); // допускает только const=1. SYS_ACTIVE_COUNT - ошибка при сохранении проекта
end.
« Изменён: 20 Ноября 2021, 23:40:41 от teplocom »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2706
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1316 : 21 Ноября 2021, 20:20:44 »
Здравствуйте.

Сейчас нельзя перейти в группу "Активные" используя скрипты. В ближайшее обновление добавим такую возможность.

Цитировать
И еще такое заметил (ни на что не влияет в принципе):
Такое не компилируется. При сохранении проекта выдает ошибку компиляции скриптов - не совпадение типов Integer и VOID в строке 3:
У нас корректно компилируются и работают обе версии. Видимо причина в чем-то другом. Может быть в проекте есть объект (или процедура/функция) с именем как у константы SYS_ACTIVE_COUNT. Просьба выслать на support@simple-scada.com текущую версию проекта в которой воспроизводится проблема, тогда мы сможем указать точную причину из-за которой код не компилируется.

teplocom

  • Новичок
  • *
  • Сообщений: 10
  • с чувством уверенности в завтрашнем дне
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1317 : 22 Ноября 2021, 09:04:54 »
У нас корректно компилируются и работают обе версии. Видимо причина в чем-то другом. Может быть в проекте есть объект (или процедура/функция) с именем как у константы SYS_ACTIVE_COUNT.
Все верно, название скрипта было: SYS_ACTIVE_COUNT
 :-[

indevr

  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1318 : 26 Ноября 2021, 14:40:20 »
Здравствуйте.
Необходим помощь со скриптом, который возвращает значение вчерашнюю дату при открытии проекта.
Использовал из примера скрипт :
Код: (delphi)
var
  aDate: TDateTime;
begin
  aDate:= Tomorrow;
end.
значение в поле показывает текущую дату.
« Изменён: 26 Ноября 2021, 15:15:08 от Simple_Scada »

Senpai

  • Пользователь
  • **
  • Сообщений: 64
  • Помощник
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1319 : 26 Ноября 2021, 20:49:03 »
Здравствуйте.
Необходим помощь со скриптом, который возвращает значение вчерашнюю дату при открытии проекта.

Можно сделать без использования скриптов. Для этого нужно использовать внутреннюю переменную созданную через редактор переменных с типом данных "DateTime" и указать в "Начальное значение" "Yesterday"(Возвращает предыдущий день). Затем привязать эту переменную к необходимому полю. См. скриншот во вложении.

Или использовать скрипт на событие "Запуск проекта". Если "Поле" связано с переменной типа "DateTime", то скрипт будет такой:
Код: (delphi)
begin
  vrDate.Value := Yesterday;
end.
Где " vrDate" это переменная созданная через редактор переменных с типом данных "DateTime".

Если нужно вывести дату без использования переменной, то можно использовать скрипт на событие "Запуск проекта":
Код: (delphi)
begin
  Field1.Text := DateToStr(Yesterday);
end.
Где Field1 это поле в которое необходимо вывести дату.

Но, для вывода даты/времени удобнее всего использовать компонент "Календарь", у него можно задать необходимый формат отображения даты/времени, а также при необходимости настроить внешний вид аналогичный компоненту "Поле".
« Изменён: 26 Ноября 2021, 21:11:44 от Senpai »