Нужен скрипт типа "Прошло 500 мс". Для некоторых целей "Прошло 1 секунда" - слишком редко.Частоты ниже 1 секунды нет не случайно. Такие скрипты пользователи обычно используют в ущерб производительности, пытаются реализовать в них анимацию или расчеты, которые должны выполняться на ПЛК. Поэтому мы ограничили частоту одной секундой. Рекомендуется основывать скрипты на событиях OnDataChange (если нужна другая частота) вместо таймеров, что обычно производительнее и позволяет избежать лишних срабатываний.
При назначении новой переменной компоненту открывается группа, в которой находится существующая переменная, остальные группы закрыты.Это обширный вопрос который все хотят решить по-разному. Изначально так и было сделано. Но большинству пользователей это показалось неудобным. Автоматическое открытие группы с переменной позволяет быстро понять в какой именно группе она находится и избавляет от необходимости искать её вручную. Это удобно, когда имя переменной мало о чем говорит пользователю и ориентироваться приходится по названию группы в которой лежит переменная. Подумаем над добавлением опции, либо возможности одновременного использования обеих вариантов при выборе переменной.
А всего-то нужно оставить окно выборки переменной в том состоянии, в котором оно было на момент предыдущего закрытия.
Нет возможности сцеплять строки типа UTF8String.Просто сложите их, как и любые другие строковые переменные:
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. В одном из ближайших обновлений структура папок изменится. Все пользовательские папки будут размещены в отдельном расположении (отдельно от "системных" файлов скады), тогда можно будет просто архивировать все пользовательские папки для резерва.
Здесь поддержу kedr. Чаще конечно изображения используются одни и те же, но бывают проекты, в которых много индивидуальных картинок, тогда их проще хранить в отдельной папке. Может добавить в свойства проекта Путь к папке с изображениями? По-умолчанию он будет к папке Pictures, но кому нужно сможет изменить путь к своей папке для данного проекта.ЦитироватьНелогично и неудобно, что пользовательские изображения всех проектов хранятся в одной куче папке Pictures.На практике чаще используется один набор изображений для всех проектов и такой подход позволяет избавиться от дублирования файлов по всем проектам и копирования файла изображения (после его изменения) по проектам в которых он используется. также избавляет от необходимости отдельно для каждого проекта "разрезать" изображения на анимацию утилитой Pictures. В одном из ближайших обновлений структура папок изменится. Все пользовательские папки будут размещены в отдельном расположении (отдельно от "системных" файлов скады), тогда можно будет просто архивировать все пользовательские папки для резерва.
Частоты ниже 1 секунды нет не случайно. Такие скрипты пользователи обычно используют в ущерб производительности, пытаются реализовать в них анимацию или расчеты, которые должны выполняться на ПЛК. Поэтому мы ограничили частоту одной секундой. Рекомендуется основывать скрипты на событиях OnDataChange (если нужна другая частота) вместо таймеров, что обычно производительнее и позволяет избежать лишних срабатываний.Решать за пользователя что ему нужно - неверный подход. У меня, например, такая задача - пробегаться по двум сотням тегов и формировать сводный статус, с учетом качества тегов. Скрипт на изменение переменных будет выполняться двести раз (в худшем случае), т.е. как раз здесь производительность и пострадает. И не уверен, будет ли он реагировать на изменение качества.
Не работает.Просто сложите их, как и любые другие строковые переменные:
with Sender as TM_Text do
ShowMessageAll("", Text + " / " + Text);
Это обширный вопрос который все хотят решить по-разному. Изначально так и было сделано. Но большинству пользователей это показалось неудобным. Автоматическое открытие группы с переменной позволяет быстро понять в какой именно группе она находится и избавляет от необходимости искать её вручную. Это удобно, когда имя переменной мало о чем говорит пользователю и ориентироваться приходится по названию группы в которой лежит переменная. Подумаем над добавлением опции, либо возможности одновременного использования обеих вариантов при выборе переменной.Предлагаю открывать текущую группу, но добавить горячую клавишу, позволяющую перейти на последнюю выбранную переменную.
Здравствуйте. Добавлю и свои "пять копеек": - В редакторе скриптов очень нужны "Горячие клавиши" для изменения фокуса между областью редактирования скрипта и уже созданными скриптами (колонка слева) с возможностью переходить в скрипт для редактирования клавишами "Вверх", "Вниз" и "Enter". Очень неудобно отвлекаться на мышь :(. И добавить переход к редактору переменных из редактора скриптов по Alt+V. Спасибо.Согласен с обоими предложениями.
Не работает.Необходимо явно указать тип строковой константы:
with Sender as TM_Text do
ShowMessageAll("", Text + " / " + Text);
with Sender as TM_Text do
ShowMessageAll("", Text + UTF8Encode(" / ") + Text);
Необходимо явно указать тип строковой константыРаботает. Мой косяк, прошу прощения.
Часто нужно вручную позиционировать компонент с точностью до пикселя, чему очень мешает жирная рамка выделения.Поддерживаю, тоже намучался с подгоном положения элементов путем выставления позиции через редактор элемента
Предлагаю:
1. Включать/отключать рамку горячей клавишей.
2. Повысить максимальный коэффициент масштабирования с 2.00 до 4.00 (или задавать его в настройках).
Решать за пользователя что ему нужно - неверный подход.Сомневаемся что кто-то вообще использовал бы скаду, если бы мы реализовали все, что хочется пользователям. Результат не понравился бы никому. Мы считаем наоборот, нужно прислушиваться к мнению пользователей, выделять полезные идеи и внедрять их, отсеивая плохие/лишние. Такого подхода мы и придерживаемся.
У меня, например, такая задача - пробегаться по двум сотням тегов и формировать сводный статус, с учетом качества тегов.Мы не вносим изменения в скаду под каждый конкретный случай, можем добавить только решение которое подойдёт всем. Если Вам будет достаточно смены частоты скрипта до 500 мс., то другой пользователь попросит 200 мс, а третий 1мс. Причем в зависимости от производительности ПК-сервера и величины цикла в скрипте можно добиться того, что цикл не будет успевать исполняться за заданный интервал времени. А учитывая, что качество тегов обычно меняется редко, например в нештатных ситуациях, проход в цикле по всем переменным каждую секунду (или чаще) будет плохим решением, т.к. большинство срабатываний будут лишними. В проектах с большим количеством тегов это может привести и к задержкам в выполнении скриптов. Мы могли бы добавить отдельный тип скрипта на изменение качества тегов, который исключил бы "лишние" срабатывания и выполнялся только по смене качества. И если множество тегов меняют качество в один момент времени (что происходит довольно часто, например при возникновении проблемы с ПЛК), то скрипт срабатывал бы один раз. Если качество тегов меняется последовательно друг за другом, то можно было бы предусмотреть отдельный параметр - интервал времени, который не давал бы скрипту выполняться отдельно для каждого тега, а группировал бы все смены качества за заданный интервал времени и срабатывал один раз на каждый интервал. Такой вариант подошел бы для решения Вашей задачи?
В редакторе скриптов очень нужны "Горячие клавиши"... с возможностью переходить в скрипт для редактирования клавишами "Вверх", "Вниз" и "Enter".Добавим комбинации клавиш для перехода к следующему/предыдущему скрипту, без необходимости манипуляций с фокусом.
Лично я против введения группировок, заморозки слоёв и прочих фичей если они повлияют на производительность.Описанные требования не повлияют на производительность и простоту интерфейса.
Часто нужно вручную позиционировать компонент с точностью до пикселя, чему очень мешает жирная рамка выделения.
Поддерживаю, тоже намучался с подгоном положения элементов путем выставления позиции через редактор элементаРамка выделения имеет толщину в 1 пиксель и расположена ровно на границе объекта. Подогнать точную позицию объекта можно удерживая клавишу Alt ("Alt + Стрелка вверх/вниз/влево/вправо", или "Alt + Перемещение объекта мышью") (https://simple-scada.com/help/manual/hot-keys.html)
Мы могли бы добавить отдельный тип скрипта на изменение качества тегов, который исключил бы "лишние" срабатывания и выполнялся только по смене качества. И если множество тегов меняют качество в один момент времени (что происходит довольно часто, например при возникновении проблемы с ПЛК), то скрипт срабатывал бы один раз. Если качество тегов меняется последовательно друг за другом, то можно было бы предусмотреть отдельный параметр - интервал времени, который не давал бы скрипту выполняться отдельно для каждого тега, а группировал бы все смены качества за заданный интервал времени и срабатывал один раз на каждый интервал. Такой вариант подошел бы для решения Вашей задачи?Да, это было бы идеально.
procedure Ustanovka_Changed(IsChanged: Boolean; Variables: array of TM_Variable; Changed: array of Byte);
var
i: Integer;
Stat: Word; //-- Итоговый статус
begin
Stat := 0;
for i := Low(Variables) to High(Variables) do begin
Stat := Stat OR Variables[i].Value; //-- Собираем общий статус установки
if not Variables[i].IsGoodQuality then Stat := Stat OR $8000; //-- Общий признак отсутствия связи
case Changed[i] of
1: //-- Изменилось значение
AddMessage(Now, mkMessage, Variables[i].Description + ". Статус изменён:" + IntToStr(Variables[i].AsInt), False, False);
2: //-- Изменилось качество
if Variables[i].IsGoodQuality then
AddMessage(Now, mkWarning, Variables[i].Description + ". Связь утеряна", False, True);
else
AddMessage(Now, mkMessage, Variables[i].Description + ". Связь восстановлена", False, True);
end;
end;
vUstanovka_Stat.Value := Stat; //-- Устанавливаем общий статус установки
end.
Рамка выделения имеет толщину в 1 пиксельНамного толще. Вот как здесь подогнать выделенный кружок ровно посредине фоновой колонны?
Намного толще. Вот как здесь подогнать выделенный кружок ровно посредине фоновой колонны?Для этого проще использовать функции выравнивания (https://simple-scada.com/help/manual/menu-action.html). Сначала выделить мышью колонну (т.е. объект по которому нужно выровнять). Затем, удерживая SHIFT выделить кружок (объект который нужно выровнять). И через меню "Действия" -> "Выравнивание" -> "Центрировать по вертикали" (либо нажать комбинацию: Ctrl + Shift + V).
Для этого проще использовать функции выравнивания (https://simple-scada.com/help/manual/menu-action.html). Сначала выделить мышью колонну (т.е. объект по которому нужно выровнять).Колонна невыделяемая, фоновая: часть картинки-подложки.
Но с рамкой все таки что-то не так. Она должна быть 1 пиксель при любом масштабе, как и линия до фиолетовой точки изменения угла. Какой тип рендера у Вас выбран в Options.exe? Включено ли полноэкранное сглаживание в Options.exe? На ПК установлена последняя версия видеодрайвера? При необходимости обновите драйвер, скачав его с сайта официального производителя видеокарты.При смене рендера на OpenGL рамка стала толщиной 1 пиксель.
неудобно, что меню страниц и подстраниц нельзя отобразить строго поверх компонентов. Они смешиваются...
...если эта узловая точка находится над меню страниц/подстраниц, происходит переключение страницыВ ближайшем обновлении вынесем подстраницы на передний план и поправим работу с узловыми точками в зоне страниц.
Очень не хватает глобального модуля или скрипта
Кстати, с пингами тоже напрашивается событийная модельЭто популярные запросы, они будут решены в будущих обновлениях.
PS При смене рендера c DirectX на OpenGL загрузка процессора процессом Client.exe выросла с 6% до 22%. Сглаживание отключено.Нагрузка на процессор возрастает в случаях, когда видеокарта не справляется с отрисовкой. На ПК отвечающих минимальным системным требованиям:
В ближайшем обновлении вынесем подстраницы на передний план и поправим работу с узловыми точками в зоне страниц.Рассмотрите, пожалуйста, возможность в ближайших обновлениях реализовать простую линию, с произвольными координатами начала и конца.
Рассмотрите, пожалуйста, возможность в ближайших обновлениях реализовать простую линию, с произвольными координатами начала и конца.Добавим компонент Линия, но не в самом ближайшем обновлении.
Хорошо бы также иметь возможность задавать тип начала и конца линии: обычный, стрелка, мини-стрелка, точка, пустая точка.Возможно мы неправильно Вас поняли? Мы изначально подумали, что Вам не хватает компонента линия с произвольным углом наклона и говорим о том, что добавим компоненту Линия такую возможность в будущих обновлениях. Сам же компонент Линия (https://simple-scada.com/help/manual/line.html) уже давно есть в скаде, он поддерживает 18 разных типов концов. Но этот компонент не позволяет разместить линию под произвольным углом, только вертикально/горизонтально, аналогично компоненту Трубопровод.
- компонента, выводящего RTSP-поток от видеокамерыДобавление этого функционала не планируется в ближайшем будущем.
- возможности отправить HTTP(S) GET-запрос для отправки информации в стороннюю системуРассмотрим добавление функций для выполнения таких запросов.
Возможно мы неправильно Вас поняли? Мы изначально подумали, что Вам не хватает компонента линия с произвольным углом наклонаИменно такого функционала очень не хватает
Возможно мы неправильно Вас поняли? Мы изначально подумали, что Вам не хватает компонента линия с произвольным углом наклона и говорим о том, что добавим компоненту Линия такую возможность в будущих обновлениях. Сам же компонент Линия (https://simple-scada.com/help/manual/line.html) уже давно есть в скаде, он поддерживает 18 разных типов концов. Но этот компонент не позволяет разместить линию под произвольным углом, только вертикально/горизонтально, аналогично компоненту Трубопровод.Речь именно о линии с произвольным углом.
Можно ли при открытии "большого" окна работы с сообщениями не отображать данное меню? Или хотя бы сразу вставать на "Все сообщения".Клик по стандартной панели сообщений всегда приводит к переходу к списку неподтверждённых сообщений. При желании можно отключить стандартную панель и разместить вместо неё компонент "Список сообщений" (https://simple-scada.com/help/manual/message-viewer.html). Для перехода сразу в группу "Все сообщения" можно на событие OnClick компонента написать следующий скрипт:
begin
{ переходим в меню сообщений в группу "Все сообщения" }
GoToMessagesGroupClient(GetClientName, -1);
end.
В проекте не используется подтверждение сообщений, запись действий оператора и т.п. - все сообщения идут одним потоком.Вы можете отключить группы "Активные действия", "Действия оператора", "Виртуальные сообщения", "Нарушенные границы" и "Пользователи" через меню "Пользователи" (https://simple-scada.com/help/manual/editor-users.html). Для каждого пользователя можно отключить сформировать свой набор групп. Группы "Неподтверждённые" и "Все сообщения" отключить нельзя.
Для внутренних тегов было бы удобно задавать начальное значение, присваиваемое при старте проекта.Уже есть в списке на доработку, эти возможности будут добавлены.
В редакторе скриптов не хватает типовой для редакторов функции "Найти и заменить" (Ctrl+H).
Полоску между меню страниц и подстраниц лучше сделать непрозрачной. Плохо смотрится, когда между ними отображается полоска фоновой подложки.Сместите подложку немного ниже, чтобы полоска исчезла. Дело в том, что страницы отображаются в нижнем слое, поэтому и видна полоска. Это сделано для того, чтобы на них можно было размещать другие объекты и таким образом расширять функции панели страниц.
Даже если проект изменён, выбор пункта "Проект -> Выйти в меню" не приводит к предложению сохранить проект, сразу выходит.Сделаем.
В качестве параметра Sender функции StartPing нельзя указать внутренний тег (TM_Variable)Sender должен быть экземпляром класса TObject (любой объект), а не TM_Control (объект мнемосхемы). По ошибке сделали его TM_Control. Через некоторое время обновим версию 2.2.9.0 сменив класс на TObject.
При закрытии неизменённого проекта лучше не выдавать предупреждение о том, что несохраненные изменения будут утеряны
В редакторе скриптов так и не работают Ctrl+Ins, Shift+Ins, Shift+Del.
Изменение текста скрипта не приводит к появлению признака изменённости проекта (звёздочка рядом с названием проекта).Исправили в обновлении 2.2.9.1. Остальные предложения рассмотрим в ближайшее время.