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

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

Автор Тема: Использование ресурсов  (Прочитано 7862 раз)

Виктория

  • Пользователь
  • **
  • Сообщений: 87
    • Просмотр профиля
Использование ресурсов
« : 29 Ноября 2021, 11:39:19 »
Здравствуйте. Есть очень объемный проект и его сохранение происходит 3,5 минуты - много графики, данных, скриптов. При сохранении проекта происходит подвисание скады. При мониторинге ресурсов обнаружено, что одно ядро загружено на 100%, второе на 3 %, остальные по нулям. Можете ли вы предусмотреть полную загрузку процессоров?

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3224
    • Просмотр профиля
    • Simple-Scada
Re: Использование ресурсов
« Ответ #1 : 29 Ноября 2021, 22:30:10 »
Здравствуйте.

Основное время при сохранении затрачивается на компиляцию скриптов (примерно 80-90% времени). Распределить процесс компиляции по разным ядрам проблематично (и не всегда эффективно), т.к. каждый результат компиляции помещается в один и тот же код результата и вычисления во время компиляции очень разнообразны. Если разбить их по разным потокам, то придётся часто выполнять синхронизацию потоков для последовательной записи результата, что плохо скажется на производительности. Ранее мы уже делали тесты компиляции в несколько потоков и из-за постоянной синхронизации потоков добиться увеличения производительности не удалось, хотя нагрузка на ядра распределилась равномернее. Попробуем в будущем изменить способ компиляции, может быть удастся что-то улучшить.
Судя по времени сохранения в 3.5 минуты, в проекте скорее всего можно избавиться от огромного количества "лишних" скриптов, заменив их универсальными скриптами, а повторяющийся код подпроцедурами или отдельными процедурами в глобальном модуле. Если есть желание, то вышлите на support@simple-scada.com текущую версию проекта, мы опишем как именно можно изменить скрипты.

 

Виктория

  • Пользователь
  • **
  • Сообщений: 87
    • Просмотр профиля
Re: Использование ресурсов
« Ответ #2 : 30 Ноября 2021, 04:32:16 »
Спасибо, у меня используются и глобальные модули и процедуры.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3224
    • Просмотр профиля
    • Simple-Scada
Re: Использование ресурсов
« Ответ #3 : 02 Декабря 2021, 11:28:33 »
Сделали несколько тестов. В ближайшем обновлении изменим процесс сохранения, чтобы интерфейс редактора не зависал во время сохранения. Также теперь компиляция будет выполняться одновременно с сохранением проекта в файлы. Это позволит увеличить производительность сохранения проекта и равномернее распределит нагрузку по ядрам процессора. Также добавим возможность только сохранения проекта (без компиляции), тогда можно будет быстро сохранять проект во время разработки, а компилировать один раз, перед запуском на сервере.
Но нужно отметить, что 3.5 минуты на сохранение проекта это слишком, если у Вас проект менее 100 тысяч тегов. И вышеописанные улучшения скорее всего не сильно помогут при сохранении Вашего проекта. Например, у нас в тестах на ПК с Core i5-7600K 3.8 GHz, три проекта (один 16000 переменных, второй 130000, третий 17500) сохраняются за 50 сек., 11 сек. и 28 сек. соответственно. Это реальные проекты, которые нам высылали пользователи. Во всех огромное количество плохо написанных скриптов, которые можно сократить примерно в два/три раза. Большое количество страниц, окон, трендов и сообщений.
В результате, т.к. о Вашем проекте мы не знаем ничего конкретного, то можем предположить следующее (предполагая что проект менее 100 тысяч тегов):
1. Вы сохраняется проекте на ПК со слабым процессором из-за чего компиляция занимает длительное время;
2. С производительностью ПК всё хорошо, но в проекте большое количество ненужных однотипных скриптов, которые можно было бы заменить одним скриптом;
3. С производительностью ПК всё хорошо, но в проекте большое количество скриптов и при этом все они уникальны и сократить их невозможно. Такой вариант нам трудно представить, т.к. для этого нужно написать в скриптах довольно большую программу, например перенести в скаду функции контроллера, написать свои ПИД-регуляторы и т.п. Или вместо каких-то стандартных систем скады написать свою. Например свою систему прав пользователей и т.п.. Даже в этом случае будет трудно добиться компиляции 3.5 мин.;

Цитировать
Спасибо, у меня используются и глобальные модули и процедуры.
Они используются почти в каждом проекте, здесь главное как они используются. Практически во всех проектах полученных нами от пользователей скрипты написаны очень плохо. К сожалению, написать один общий пример хорошего кода, который подошел бы для всех проектов - невозможно, т.к. скрипты в разных проектах сильно отличаются. Базовые скрипты описаны по этой ссылке. Простой пример сокращения повторяющегося кода описан по ссылке. Также часто пользователи дублируют скрипты считая их уникальными, когда они такими не являются. Примитивный пример - построение отчетов. Если есть 30 отчетов и 30 кнопок для построения соответствующего отчета, то пользователи обычно пишут 30 скриптов по OnClick, в каждом вызывается один и тот же код построения, отличается только имя отчета. Но можно было бы написать один скрипт, который брал бы имя отчета из свойства "Подсказка" кнопки. Если свойство "Подсказка" занято, то использовать свойство "Тег" и в зависимости от значения строить разные отчеты.
Таких примеров может быть много и они могут быть намного сложнее, в зависимости от решаемой задачи.

Павло

  • Новичок
  • *
  • Сообщений: 31
  • Павло Кулініч
    • Просмотр профиля
    • Simple-Scada Україна
Re: Использование ресурсов
« Ответ #4 : 08 Декабря 2021, 17:25:39 »
Просьба сделать сообщение оповещения о завершении сохранения проекта - статичным. Чтобы оно исчезало после щелчка на него мышкой.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3224
    • Просмотр профиля
    • Simple-Scada
Re: Использование ресурсов
« Ответ #5 : 10 Декабря 2021, 12:39:21 »
В ближайшем обновлении сделаем чтобы в случае возникновения ошибок во время сохранения проекта строка оповещения не скрывалась автоматически. А в случае успешного сохранения проекта строка будет скрываться.

ART63

  • Постоялец
  • ***
  • Сообщений: 151
    • Просмотр профиля
Re: Использование ресурсов
« Ответ #6 : 10 Декабря 2021, 16:37:57 »
пользователи обычно пишут 30 скриптов по OnClick, в каждом вызывается один и тот же код построения, отличается только имя отчета. Но можно было бы написать один скрипт, который брал бы имя отчета из свойства "Подсказка" кнопки.
Но при наличии универсальной процедуры все равно на onClick надо написать код для вызова этой процедуры. Разве не так?
« Изменён: 12 Декабря 2021, 23:33:27 от Simple_Scada »

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1414
    • Просмотр профиля
Re: Использование ресурсов
« Ответ #7 : 12 Декабря 2021, 23:52:03 »
Суть универсального скрипта как раз в том, чтобы написать один скрипт и использовать его для множества объектов. Можно написать один универсальный скрипт, в котором брать имя отчета например из свойства "Подсказка" кнопки, по клику на которую вызывается построение отчета. Пример:
Код: (delphi)
var
  aReport: TM_Report;
begin
  if not (Sender is TM_Object) then Exit; // если скрипт вызван не объектом, то прерываем выполнение

  aReport := ReportBuild(Sender.Hint);   // строим отчет(имя задается в свойстве "Подсказка" кнопки)
  aReport.View(GetClientName);           // открываем для просмотра на клиенте
end.

Данный скрипт можно назначить на событие OnClick множеству кнопок, у каждой из которых в свойстве "Подсказка" задать имя нужного отчета. Если отчеты называются однотипно, например Отчет1, Отчет2 и т.д., то вместо подсказки можно использовать свойство объекта "Тэг", в котором хранить номер отчета и использовать его в скриптах для построения нужного отчета.
« Изменён: 13 Декабря 2021, 10:04:31 от Simple-Scada »

Виктория

  • Пользователь
  • **
  • Сообщений: 87
    • Просмотр профиля
Re: Использование ресурсов
« Ответ #8 : 13 Декабря 2021, 06:57:59 »
Я думаю, что проект долго сохраняется, так как я использую множество процедур и глобальных модулей с большим количеством параметров, но иначе не могу, потому как я пишу алгоритмы работы, так как данные, которые приходят с контроллера надо обрабатывать и есть множество условий отображения тех или иных данных. И причем я пишу алгоритм для одного устройства, а таких однотипных 15.

ART63

  • Постоялец
  • ***
  • Сообщений: 151
    • Просмотр профиля
Re: Использование ресурсов
« Ответ #9 : 13 Декабря 2021, 16:36:02 »
Данный скрипт можно назначить на событие OnClick множеству кнопок
Что значит "назначить скрипт"? Этот текст надо продублировать для каждой из множества кнопок? Или есть возможность сделать один раз этот скрипт, а в событии кнопки на него ссылаться?

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1414
    • Просмотр профиля
Re: Использование ресурсов
« Ответ #10 : 13 Декабря 2021, 16:48:29 »
Цитировать
Или есть возможность сделать один раз этот скрипт, а в событии кнопки на него ссылаться?
Да. Нужно создать скрипт, затем выделить объект, в инспекторе объектов перейти на вкладку "События" и для события OnClick выбрать ранее созданный скрипт (создавать новый скрипт не нужно). Далее, проделать те же действия для других кнопок. В итоге будет использоваться один универсальный скрипт, который будет привязан к множеству объектов.
« Изменён: 14 Декабря 2021, 13:13:31 от Simple-Scada »