Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: Виктория от 29 Ноября 2021, 11:39:19

Название: Использование ресурсов
Отправлено: Виктория от 29 Ноября 2021, 11:39:19
Здравствуйте. Есть очень объемный проект и его сохранение происходит 3,5 минуты - много графики, данных, скриптов. При сохранении проекта происходит подвисание скады. При мониторинге ресурсов обнаружено, что одно ядро загружено на 100%, второе на 3 %, остальные по нулям. Можете ли вы предусмотреть полную загрузку процессоров?
Название: Re: Использование ресурсов
Отправлено: Simple-Scada от 29 Ноября 2021, 22:30:10
Здравствуйте.

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

 
Название: Re: Использование ресурсов
Отправлено: Виктория от 30 Ноября 2021, 04:32:16
Спасибо, у меня используются и глобальные модули и процедуры.
Название: Re: Использование ресурсов
Отправлено: Simple-Scada от 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 мин.;

Цитировать
Спасибо, у меня используются и глобальные модули и процедуры.
Они используются почти в каждом проекте, здесь главное как они используются. Практически во всех проектах полученных нами от пользователей скрипты написаны очень плохо. К сожалению, написать один общий пример хорошего кода, который подошел бы для всех проектов - невозможно, т.к. скрипты в разных проектах сильно отличаются. Базовые скрипты описаны по этой ссылке (https://simple-scada.com/help/script/sample-scripts.html). Простой пример сокращения повторяющегося кода описан по ссылке (https://simple-scada.com/help/script/code-reduction.html?q=%D0%BF%D0%BE%D0%B4%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D0%B4%D1%83%D1%80%D1%8B). Также часто пользователи дублируют скрипты считая их уникальными, когда они такими не являются. Примитивный пример - построение отчетов. Если есть 30 отчетов и 30 кнопок для построения соответствующего отчета, то пользователи обычно пишут 30 скриптов по OnClick, в каждом вызывается один и тот же код построения, отличается только имя отчета. Но можно было бы написать один скрипт, который брал бы имя отчета из свойства "Подсказка" кнопки. Если свойство "Подсказка" занято, то использовать свойство "Тег" и в зависимости от значения строить разные отчеты.
Таких примеров может быть много и они могут быть намного сложнее, в зависимости от решаемой задачи.
Название: Re: Использование ресурсов
Отправлено: Павло от 08 Декабря 2021, 17:25:39
Просьба сделать сообщение оповещения о завершении сохранения проекта - статичным. Чтобы оно исчезало после щелчка на него мышкой.
Название: Re: Использование ресурсов
Отправлено: Simple-Scada от 10 Декабря 2021, 12:39:21
В ближайшем обновлении сделаем чтобы в случае возникновения ошибок во время сохранения проекта строка оповещения не скрывалась автоматически. А в случае успешного сохранения проекта строка будет скрываться.
Название: Re: Использование ресурсов
Отправлено: ART63 от 10 Декабря 2021, 16:37:57
пользователи обычно пишут 30 скриптов по OnClick, в каждом вызывается один и тот же код построения, отличается только имя отчета. Но можно было бы написать один скрипт, который брал бы имя отчета из свойства "Подсказка" кнопки.
Но при наличии универсальной процедуры все равно на onClick надо написать код для вызова этой процедуры. Разве не так?
Название: Re: Использование ресурсов
Отправлено: Simple_Scada от 12 Декабря 2021, 23:52:03
Суть универсального скрипта (https://simple-scada.com/help/script/script-types.html) как раз в том, чтобы написать один скрипт и использовать его для множества объектов. Можно написать один универсальный скрипт, в котором брать имя отчета например из свойства "Подсказка" кнопки, по клику на которую вызывается построение отчета. Пример:
Код: (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 и т.д., то вместо подсказки можно использовать свойство объекта "Тэг (https://simple-scada.com/help/script/tag.html)", в котором хранить номер отчета и использовать его в скриптах для построения нужного отчета.
Название: Re: Использование ресурсов
Отправлено: Виктория от 13 Декабря 2021, 06:57:59
Я думаю, что проект долго сохраняется, так как я использую множество процедур и глобальных модулей с большим количеством параметров, но иначе не могу, потому как я пишу алгоритмы работы, так как данные, которые приходят с контроллера надо обрабатывать и есть множество условий отображения тех или иных данных. И причем я пишу алгоритм для одного устройства, а таких однотипных 15.
Название: Re: Использование ресурсов
Отправлено: ART63 от 13 Декабря 2021, 16:36:02
Данный скрипт можно назначить на событие OnClick множеству кнопок
Что значит "назначить скрипт"? Этот текст надо продублировать для каждой из множества кнопок? Или есть возможность сделать один раз этот скрипт, а в событии кнопки на него ссылаться?
Название: Re: Использование ресурсов
Отправлено: Simple_Scada от 13 Декабря 2021, 16:48:29
Цитировать
Или есть возможность сделать один раз этот скрипт, а в событии кнопки на него ссылаться?
Да. Нужно создать скрипт, затем выделить объект, в инспекторе объектов (https://simple-scada.com/help/manual/object-inspector.html) перейти на вкладку "События" и для события OnClick выбрать ранее созданный скрипт (создавать новый скрипт не нужно). Далее, проделать те же действия для других кнопок. В итоге будет использоваться один универсальный скрипт, который будет привязан к множеству объектов.