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

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

Автор Тема: GetBit или Tag+универсал.скрипт  (Прочитано 1849 раз)

Серега

  • Старожил
  • ****
  • Сообщений: 285
    • Просмотр профиля
GetBit или Tag+универсал.скрипт
« : 10 Ноября 2023, 13:36:38 »
Добрый день!
Вопрос касается нагрузки на сервер скады.
То есть у нас например есть 100 word-ов.
Что будет менее затратным:
1. Сделать много внутренних булевских переменных в одном скрипте "изменились переменные"
Например:
Код: (delphi)
xSystemOff_iGet.Value := GetBit(wWordState_Get.AsInt64 ,0);
и т.д.
и в дальнейшем использовать эти переменные.
Конечно надо понимать, что возможно потребуется дополнительно использовать еще какие то скрипты, что так же вызовет рост нагрузки на сервер.
2. Или привязать в геометрическом примитиве (кроме кнопок и флажков, которые напрямую могут работать с битами) к переменной wWordState_Get.
Далее указать в свойстве Tag нужный бит (например 0) и на событие OnDataChange повесить например такой скрипт:
Код: (delphi)
var
  xState:boolean;
begin
if Sender is TM_Shape then
  with Sender as TM_Shape do
    begin
    xState := GetBit(AsInt64 , Tag);
    if xState then
      Color := $074611
    else
      Color := $242424;
    end
end.
И естественно таких примитивов будет 100 word * 16 bit = 1600 вызовов одного и того же скрипта.
Как бы и то и то работает. Но вообще хотелось бы понимать как это работает.
Может быть в руководстве создать какую то таблицу весов "тяжести" скриптов или что то на подобии.
Жду ответов и вопросов.
« Изменён: 13 Ноября 2023, 10:18:32 от Simple-Scada »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3210
    • Просмотр профиля
    • Simple-Scada
Re: GetBit или Tag+универсал.скрипт
« Ответ #1 : 13 Ноября 2023, 10:28:56 »
Здравствуйте.

Значимой разницы в производительности не будет, можно использовать любой вариант. Первый вариант будет делать меньше вызовов скриптов и может быть лучше, если разных объектов очень много и все они должны работать с битами, т.к. в нём GetBit будет выполняться только один раз, а затем объекты будут использовать полученный результат не повторяя вызовы GetBit.