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

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

Автор Тема: Замечания и предложения при создании проекта  (Прочитано 9550 раз)

kedr

  • Новичок
  • *
  • Сообщений: 45
    • Просмотр профиля
Добрый день!

Уже примерно неделю разрабатываю свой первый проект под Simple-Scada 2 (версия 2.2.8.2). Накопилось порядочно замечаний и предложений, и постоянно появляются новые. Решил выкладывать их в отдельной теме. Имеется большой опыт создания крупных проектов (десятки тысяч тегов, десятки и сотни кадров) во "взрослых" скадах, для крупных заказчиков. Так что есть с чем сравнивать. Масштаб данного проекта - несколько сотен анимированных объектов, несколько сотен тегов, около 10 кадров.

  • не хватает группировки объектов. Насколько я понял, авторы осознают полезность данной фичи и работают над её внедрением.
  • Не хватает "заморозки" объекта, чтобы он не выделялся мышью при выделении группы, не сдвигался с места при случайных захватах. На каждом кадре у меня используется Image в качестве фона, приходится постоянно его исключать из выделения.
  • Должна быть возможность иметь компоненты, отображаемые на всех страницах. У меня на каждой странице отображаются: журнал на 5 строк (внизу), кнопка закрытия, кнопка сворачивания, текущие дата-время. Приходится создавать их отдельно для каждой страницы. Лишний расход ресурсов.
  • В скрипты по изменению переменных неудобно добавлять большое количество переменных. Чтобы добраться до кнопки "Добавить переменную" приходится скроллить до конца списка! Есть пара скриптов примерно с сотней отслеживаемых переменных. Не особо удобно было их добавлять. Также хорошо бы сортировать переменные в этом списке по алфавиту.
  • Неприятным сюрпризом стало то, что большинство свойств таблицы (TM_Table), колонки (TM_TableColumn) и ячейки (TM_TableCell) из скриптов доступны только для чтения. Предполагалось сводную информацию о состоянии объектов вывести в таблицы, с изменением цвета и миганием при предупредительных и аварийных состояниях. В итоге пришлось эти таблицы собирать по сути вручную из текстовых полей, т.е. пользу  наличие объекта "Таблица" не принесло. Думаю, это ограничение на изменение свойств таблицы из скриптов нужно убрать. Также весьма полезным будет возможность изменять цвет фона отдельных ячеек таблицы - сейчас соответствующего свойства нет.
  • Нужен скрипт типа "Прошло 500 мс". Для некоторых целей "Прошло 1 секунда" - слишком редко.
  • При открытии нового проекта не предлагает сохраниться, даже если в текущем проекте есть изменения.
  • В справке не указано о наличии свойства Name у объекта TM_Control.
  • В demo-time сервер виснет, если отлучиться от компьютера на длительное время. Похоже, при переходе/возврате компьютера в ждущий режим окно о необходимости перезагрузки сервера через час работы уходит "в молоко" и становится невидимым и недоступным. Приходится убивать сервер через Task Manager.
  • Нужны массовый поиск/замена свойств компонентов по маске. Например, среди выделенных компонентов найти привязанные переменные с названием типа vO01_S?? и заменить их на vO08_S?? (где ?? - любые символы).
  • При дублировании переменной с именем типа vO01_S01 получаем vO01_S2, т.е. у числа в конце имени отбрасываются лидирующие нули.
  • Нет возможности сцеплять строки типа UTF8String. Т.е. нужна функция вроде UTF8Concat(Str1: UTF8String, Str2: UTF8String): UTF8String
  • Явная ошибка: функция UTF8LowerCase возвращает строку из больших букв, т.е. работает как UTF8UpperCase. UTF8UpperCase работает корректно
  • Сильно не хватает фигуры типа "обычная линия", с произвольными координатами начала и конца.
  • Не хватает функций IfThen (тернарный оператор), Max, Min.
  • Нелогично и неудобно, что пользовательские изображения всех проектов хранятся в одной куче папке Pictures. Логичнее было бы иметь папку Pictures внутри папки проекта. Тогда для переноса и резервного копирования достаточно было бы заархивировать папку проекта.
« Изменён: 04 Июня 2018, 16:41:36 от Simple-Scada »

kedr

  • Новичок
  • *
  • Сообщений: 45
    • Просмотр профиля
Несколько замечаний по редактору скриптов:
1. Невозможно сохранить проект при редактировании скрипта. Привык на автомате нажимать Ctrl+S после ввода нескольких строк. А здесь 2 раза терял примерно получасовую работу при падении программы от случайного нажатия PrintScreen (об этой проблеме писал тут)
2. Странно работает Tab. Люблю использовать выровненные комментарии справа от кода программы, здесь выравнивать замучаешься.
3. Не работают Ctrl+Ins, Shift+Ins.
4. После Ctrl+Z (отмена изменений) не работает Shift+End (выделение до конца строки).
5. Нужно где-нибудь выводить информацию о позиции курсора в строке. Ибо в сообщении об ошибке при компиляции позиция ошибки указывается. Приходится тщательно считать вручную.
6. Хорошо бы, как это сделано во многих других средах разработки, выборку значения из списка при Ctrl+Space осуществлять не только при нажатии Enter и Пробел, но и при любом другом символе, кроме Esc.

kedr

  • Новичок
  • *
  • Сообщений: 45
    • Просмотр профиля
При назначении новой переменной компоненту открывается группа, в которой находится существующая переменная, остальные группы закрыты. Приходится в дереве открывать нужную группу и искать требуемую переменную. При большом кол-ве компонентов это очень неудобно.

Пример.
Нужно было скопировать порядка 50 компонентов, привязанных к переменной типа vO01_S09, находящихся в группе Объект1 - Сигнализация - Статусы и перепривязать их к переменным типа vO08_S09, находящихся в группе Объект8 - Сигнализация - Статусы.
Очень "удобно" было для каждого компонента:
1. Свернуть группу Объект1
2. Найти скроллингом группу Объект8 (а группы не отсортированы по алфавиту!)
3. Открыть группу Объект8, подгруппу Сигнализация, подгруппу Статусы.
4. Найти скроллингом нужную переменную (а переменных в подгруппе несколько десятков, и они не отсортированы по алфавиту!)
Через десяток таких манипуляций мозг пухнет, вероятность ошибки резко увеличивается.

А всего-то нужно оставить окно выборки переменной в том состоянии, в котором оно было на момент предыдущего закрытия.
« Изменён: 06 Мая 2018, 01:34:10 от kedr »

kedr

  • Новичок
  • *
  • Сообщений: 45
    • Просмотр профиля
Попробуйте такую манипуляцию:
1. Создаем скрипт любого типа.
2. Переходим на другой скрипт, выделяем и копируем (Ctrl+C) весь текст скрипта, за исключением последней строки end.
3. Переходим обратно на новый скрипт, созданный в п.1. Курсор стоит на пустой строке между begin и end.
4. Нажимаем Shift+стрелка вверх. Выделяются все три строки, а не только begin, как должно быть.
5. Нажимаем Ctrl+V.
6. Editor.exe падает.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3000
    • Просмотр профиля
    • Simple-Scada
Здравствуйте.

Нужен скрипт типа "Прошло 500 мс". Для некоторых целей "Прошло 1 секунда" - слишком редко.
Частоты ниже 1 секунды нет не случайно. Такие скрипты пользователи обычно используют в ущерб производительности, пытаются реализовать в них анимацию или расчеты, которые должны выполняться на ПЛК. Поэтому мы ограничили частоту одной секундой. Рекомендуется основывать скрипты на событиях OnDataChange (если нужна другая частота) вместо таймеров, что обычно производительнее и позволяет избежать лишних срабатываний.

Цитировать
При назначении новой переменной компоненту открывается группа, в которой находится существующая переменная, остальные группы закрыты.
А всего-то нужно оставить окно выборки переменной в том состоянии, в котором оно было на момент предыдущего закрытия.
Это обширный вопрос который все хотят решить по-разному. Изначально так и было сделано. Но большинству пользователей это показалось неудобным. Автоматическое открытие группы с переменной позволяет быстро понять в какой именно группе она находится и избавляет от необходимости искать её вручную. Это удобно, когда имя переменной мало о чем говорит пользователю и ориентироваться приходится по названию группы в которой лежит переменная. Подумаем над добавлением опции, либо возможности одновременного использования обеих вариантов при выборе переменной.

Цитировать
Нет возможности сцеплять строки типа UTF8String.
Просто сложите их, как и любые другие строковые переменные:
Код: (delphi)
var
  Str1, Str2, StrResult: UTF8String;
begin
  Str1 := 'Привет ';
  Str2 := 'Мир';
  StrResult := Str1 + Str2;
end.
В справке не указано о наличии свойства Name у объекта TM_Control.
При открытии нового проекта не предлагает сохраниться, даже если в текущем проекте есть изменения.
При дублировании переменной с именем типа vO01_S01 получаем vO01_S2, т.е. у числа в конце имени отбрасываются лидирующие нули.
Явная ошибка: функция UTF8LowerCase возвращает строку из больших букв, т.е. работает как UTF8UpperCase.
Попробуйте такую манипуляцию:... 6. Editor.exe падает.
Исправим в ближайшее время.

Цитировать
Нелогично и неудобно, что пользовательские изображения всех проектов хранятся в одной куче папке Pictures.
На практике чаще используется один набор изображений для всех проектов и такой подход позволяет избавиться от дублирования файлов по всем проектам и копирования файла изображения (после его изменения) по проектам в которых он используется. также избавляет от необходимости отдельно для каждого проекта  "разрезать" изображения на анимацию утилитой Pictures. В одном из ближайших обновлений структура папок изменится. Все пользовательские папки будут размещены в отдельном расположении (отдельно от "системных" файлов скады), тогда можно будет просто архивировать все пользовательские папки для резерва.

Остальные вопросы будут решаться по мере выхода новых версий. Большинство предложений уже есть в очереди на реализацию, обычно мы добавляем новые функции в зависимости от востребованности (ошибки и простые в реализации запросы решаем вне очереди), сначала решаются наиболее востребованные задачи.
« Изменён: 26 Мая 2018, 10:40:59 от Simple-Scada »

Миханик

  • Постоялец
  • ***
  • Сообщений: 180
    • Просмотр профиля
    • www.vpa-dv.ru
Цитировать
Нелогично и неудобно, что пользовательские изображения всех проектов хранятся в одной куче папке Pictures.
На практике чаще используется один набор изображений для всех проектов и такой подход позволяет избавиться от дублирования файлов по всем проектам и копирования файла изображения (после его изменения) по проектам в которых он используется. также избавляет от необходимости отдельно для каждого проекта  "разрезать" изображения на анимацию утилитой Pictures. В одном из ближайших обновлений структура папок изменится. Все пользовательские папки будут размещены в отдельном расположении (отдельно от "системных" файлов скады), тогда можно будет просто архивировать все пользовательские папки для резерва.
Здесь поддержу kedr. Чаще конечно изображения используются одни и те же, но бывают проекты, в которых много индивидуальных картинок, тогда их проще хранить в отдельной папке. Может добавить в свойства проекта Путь к папке с изображениями? По-умолчанию он будет  к папке Pictures, но кому нужно сможет изменить путь к своей папке для данного проекта.

kedr

  • Новичок
  • *
  • Сообщений: 45
    • Просмотр профиля
Частоты ниже 1 секунды нет не случайно. Такие скрипты пользователи обычно используют в ущерб производительности, пытаются реализовать в них анимацию или расчеты, которые должны выполняться на ПЛК. Поэтому мы ограничили частоту одной секундой. Рекомендуется основывать скрипты на событиях OnDataChange (если нужна другая частота) вместо таймеров, что обычно производительнее и позволяет избежать лишних срабатываний.
Решать за пользователя что ему нужно - неверный подход. У меня, например, такая задача - пробегаться по двум сотням тегов и формировать сводный статус, с учетом качества тегов. Скрипт на изменение переменных будет выполняться двести раз (в худшем случае), т.е. как раз здесь производительность и пострадает. И не уверен, будет ли он реагировать на изменение качества.

Просто сложите их, как и любые другие строковые переменные:
Не работает.
Код: (delphi)
  with Sender as TM_Text do 
    ShowMessageAll("", Text + " / " + Text);
Имеем.
« Изменён: 04 Июня 2018, 16:43:40 от Simple-Scada »

kedr

  • Новичок
  • *
  • Сообщений: 45
    • Просмотр профиля
По поводу Pictures. Логично иметь и глобальную папку, с общими для всех проектов картинками. И локальную, с индивидуальными для проекта.

Это обширный вопрос который все хотят решить по-разному. Изначально так и было сделано. Но большинству пользователей это показалось неудобным. Автоматическое открытие группы с переменной позволяет быстро понять в какой именно группе она находится и избавляет от необходимости искать её вручную. Это удобно, когда имя переменной мало о чем говорит пользователю и ориентироваться приходится по названию группы в которой лежит переменная. Подумаем над добавлением опции, либо возможности одновременного использования обеих вариантов при выборе переменной.
Предлагаю открывать текущую группу, но добавить горячую клавишу, позволяющую перейти на последнюю выбранную переменную.
« Изменён: 20 Мая 2018, 13:05:34 от Simple-Scada »

godygadu

  • Новичок
  • *
  • Сообщений: 42
    • Просмотр профиля
Здравствуйте. Добавлю и свои "пять копеек": - В редакторе скриптов очень нужны "Горячие клавиши" для изменения фокуса между областью редактирования скрипта и уже созданными скриптами (колонка слева) с возможностью переходить в скрипт для редактирования клавишами "Вверх", "Вниз" и "Enter". Очень неудобно отвлекаться на мышь :(. И добавить переход к редактору переменных из редактора скриптов по Alt+V. Спасибо.
« Изменён: 07 Мая 2018, 10:33:55 от godygadu »

kedr

  • Новичок
  • *
  • Сообщений: 45
    • Просмотр профиля
Здравствуйте. Добавлю и свои "пять копеек": - В редакторе скриптов очень нужны "Горячие клавиши" для изменения фокуса между областью редактирования скрипта и уже созданными скриптами (колонка слева) с возможностью переходить в скрипт для редактирования клавишами "Вверх", "Вниз" и "Enter". Очень неудобно отвлекаться на мышь :(. И добавить переход к редактору переменных из редактора скриптов по Alt+V. Спасибо.
Согласен с обоими предложениями.
И даже предложу сочетания клавиш: Alt+Влево - фокус на перечень скриптов; ESC - фокус на зону редактирования без смены текущего скрипта; Alt+Вправо / Enter - выбор скрипта и фокус на зону редактирования (если на группе - раскрытие группы); Alt+Вверх/Вниз - фокус на перечень скриптов с одновременным перемещением на скрипт вверх/вниз.

pan2000

  • Постоялец
  • ***
  • Сообщений: 172
    • Просмотр профиля
Цитировать
Не работает.
  with Sender as TM_Text do
    ShowMessageAll("", Text + " / " + Text);
Необходимо явно указать тип строковой константы:
Код: (delphi)
   with Sender as TM_Text do
    ShowMessageAll("", Text + UTF8Encode(" / ") + Text);
« Изменён: 04 Июня 2018, 16:44:58 от Simple-Scada »

kedr

  • Новичок
  • *
  • Сообщений: 45
    • Просмотр профиля
Цитировать
Необходимо явно указать тип строковой константы
Работает. Мой косяк, прошу прощения.

Timothy Clement

  • Постоялец
  • ***
  • Сообщений: 149
  • ОАО Борисовский завод "Металлист"
    • Просмотр профиля
    • Полымя
Kedr, преимущество Simple-SCADA именно в её простоте, что собственно и следует из названия. И редактор и рантайм работают очень быстро в отличии от например "взрослой" WinCC, которая умудряется тормозить на любом железе. Да, мелкие недоработки есть, но они очень оперативно устраняются разработчиками. Лично я против введения группировок, заморозки слоёв и прочих фичей если они повлияют на производительность. Насчёт изображений тоже не всё так однозначно, с одной стороны удобно, с другой приводит к дублированию изображений и увеличению размера папки с проектом.

kedr

  • Новичок
  • *
  • Сообщений: 45
    • Просмотр профиля
Timofei, все эти предложения по сути мелочь, не влияющая на производительность.
Кроме, возможно, группировки.
Но над группировкой авторы и так, насколько я понял, уже работают.

PS Редактор скриптов у Simple-Scada как раз таки чуть подтормаживает по сравнению с VBA-средой разработки таких скад как, например, Genesis32 и iFix, чувствуется некий дискомфорт. Но, думаю, это связано со способом отрисовки.
« Изменён: 07 Мая 2018, 15:59:02 от kedr »

kedr

  • Новичок
  • *
  • Сообщений: 45
    • Просмотр профиля
Часто нужно вручную позиционировать компонент с точностью до пикселя, чему очень мешает жирная рамка выделения.
Предлагаю:
1. Включать/отключать рамку горячей клавишей.
2. Повысить максимальный коэффициент масштабирования с 2.00 до 4.00 (или задавать его в настройках).