Вопросы и предложения по Simple-Scada 2

Автор Simple-Scada, 11 мая 2015, 20:34:39

igorigor07

Добрый день!

Возник вопрос по компонентам:
Мне нужно по какому-либо событию (не имеет значения) формировать список для того, чтобы оператор мог выбрать из него определенное значение. Этот список я беру из БД. Возник вопрос, каким компонентом пользоваться? Мне идеально бы подошла таблица, но, как я понял, ее нельзя заполнять из скриптов.
Получается, для этих целей есть только комбобокс? Он не удобен (в моем случае хочется показать полный список в отдельно окне).
Подскажите, может я что-то не понял? Чем еще можно предоставить возможность выбора по списку с заполнением этого списка скриптами?

AllReal

Добрый день!

есть предложение по поводу изменения шкалы на графике в вертикальном положении, для удобства сравнивать два графика в более крупном масштабе, т.е. прокручивать шкалу вертикально, на данный момент есть только горизонтальная прокрутка без увеличения.

Simple_Scada

Здравствуйте!

ЦитироватьМне нужно по какому-либо событию (не имеет значения) формировать список для того, чтобы оператор мог выбрать из него определенное значение. Этот список я беру из БД. Возник вопрос, каким компонентом пользоваться? Мне идеально бы подошла таблица, но, как я понял, ее нельзя заполнять из скриптов.
Сейчас для этой задачи подойдет только компонент "Список". В дальнейшем возможности работы с таблицей из скриптов будут расширены, в том числе появится возможность заполнения таблицы данными из БД.

Цитироватьесть предложение по поводу изменения шкалы на графике в вертикальном положении, для удобства сравнивать два графика в более крупном масштабе, т.е. прокручивать шкалу вертикально
Такую функцию планируется добавить в дальнейшем.

igorigor07

#513
Добрый день!

Еще есть некорректная история, на мой взгляд.
Создаем переменные. По умолчанию шкала отключена, все хорошо, она и не нужно (для чего она применяется, попутно вопрос?).
Создаем объект Поле и связываем с этой переменной. Так ввести больше 100 не получается. Приходится создавать шкалу до  10000 (условно) и все переменные делать с этой шкалой.

И заодно предложение: в сообщениях можно добавит кнопку "активные аварии". Не просмотренные есть, но это не то - хочется видеть список только того, что нужно устранить на данный момент (человек может просмотрел - но не устранил...)

Simple_Scada

Здравствуйте!

Каждая переменная проекта имеет шкалу, которая по умолчанию устанавливается в диапазон 0-100. При создании проекта часто приходится использовать переменные, которые имеют одинаковые диапазоны значений, например переменные уровней (0-100), температур (0-120; 0-150...) и т.д. Для этого и нужны шкалы – один раз объявив шкалу ее можно использовать для всех однотипных переменных. Тренды архивируемых переменных, и временные тренды отображаются в диапазоне уставленных для них шкал. Если связать объект "Уровень" с переменной и активировать свойство "Шкала", то для уровня автоматически применится шкала установленная в переменной. Ввод данных в объекты связанные с переменными ограничен шкалой, чтобы оператор не мог случайно ввести недопустимое значение. Также, в процессе эксплуатации часто возникает необходимость, например заменить датчик температуры 0-100 градусов на 0-120, так как нет замены на аналогичный. При этом, благодаря шкалам потребуется только поменять шкалу переменной датчика - все тренды и объекты в проекте связанные с переменной автоматически обновят данные. Если бы шкал не было пришлось бы задавать диапазон мин./макс. для каждого объекта проекта вручную.

ЦитироватьИ заодно предложение: в сообщениях можно добавит кнопку "активные аварии". Не просмотренные есть, но это не то - хочется видеть список только того, что нужно устранить на данный момент (человек может просмотрел - но не устранил...)
Список активных аварий планируется добавить.

igorigor07

Добрый день!

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

Еще вопрос: есть объект поле, с вводом чисел все в порядке. А буквы не получается вводить с клиента. При этом в editor'е можно задать значение буквенное и оно отображается...

Simple_Scada

#516
Здравствуйте!

ЦитироватьПеребивать кучу тагов после импорта не очень быстрое дело...
В редакторе поддерживается групповое редактирование свойств переменных. Можно выделить все переменные группы (Ctrl+A), можно выделить необходимые переменные зажав Shift или Ctrl и кликая по переменным. Затем нажать кнопку "Изменить выделенные"(со значком карандаша) и установить требуемую шкалу. Также рекомендуем ознакомиться с ответами на часто задаваемые вопросы

ЦитироватьЕще вопрос: есть объект поле, с вводом чисел все в порядке. А буквы не получается вводить с клиента. При этом в editor'е можно задать значение буквенное и оно отображается...
Какой тип у переменной связанной с полем? Для того, чтобы вводить в поле буквы необходимо использовать переменную с типом данных "String".

igorigor07


TeNQ

#518
Есть функция GetVariableByName. Не очень она удобная - скрипты распухают и становятся нечитаемыми, но как есть. Можно ли ввести по аналогии функцию GetObjectByName для того, чтобы обратиться к объекту в универсальном скрипте.
Например
ЦитироватьGetObjectByName('Text_TRM' + aX + '_Activate').Text := 'Активирован "Стоп" - ' + DateTimeToStr(Now);
Иначе остается только работать с оператором case.

Simple-Scada

ЦитироватьНе очень она удобная - скрипты распухают и становятся нечитаемыми, но как есть.
Для читаемости кода, наверно, максимум что можно предложить, это менять подобные конструкции:

Код: pascal
begin
  Text1.Text := GetVariableByName('variable' + IntToStr(Sender.Tag)).AsStr;
end;

Такими:
Код: pascal
var
  aName: string;
  aVar: TM_Variable;
begin
  aName := 'variable' + IntToStr(Sender.Tag);   // формируем имя
  aVar := GetVariableByName(aName);             // ищем переменную по имени
  Text1.Text := aVar.AsStr;                     // используем
end;

Код растет по количеству строк, но в каждой строке выполняется отдельное простое действие, которое легко читается.

ЦитироватьМожно ли ввести по аналогии функцию GetObjectByName для того, чтобы обратиться к объекту в универсальном скрипте.
Можно, но есть важные причины по которым мы не добавили эту функцию вместе с GetVariableByName. Нужно время.

TeNQ

#520
Так и буду делать, спасибо.

Simple-Scada

ЦитироватьМожно ли сделать так, чтобы они появлялись в списке через Ctrl + пробел в скрипте, если они в нем объявлены.
Да, конечно. Так и сделаем в будущих обновлениях.

Кстати, по поводу GetVariableByName, она возвращает указатель на переменную и если переменная с таким именем не найдена, то вернётся нулевой указатель "nil". Поэтому идеальный код должен выглядеть так:

Код: pascal
var
  aName: string;
  aVar: TM_Variable;
begin
  aName := 'variable' + IntToStr(Sender.Tag);   // формируем имя
  aVar := GetVariableByName(aName);             // ищем переменную по имени
  if aVar <> nil then                           // если переменная найдена
    Text1.Text := aVar.AsStr;                   // используем
end;

Teodor

Просьба по выпадающему списку... Можно добавить свойство "не показывать стрелку"?

Удобная штука в к-ве такого себе enum, если еще сделать его не активным.

Teodor

У меня нарисовалась убедительнейшая просьба.
Организовать импорт/экспорт скриптов(желательно оптом), окон и страниц проекта...

Отдельное окошко где проставляются птички, что именно экспортировать, и в обратном порядке, что из этого всего мне надо сегодня.

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

А на уже, надо скопировать из одного проекта в другой кучу всего, при том, что там уже своего хватает.

Teodor

Т.к. скриптов уже много и все они по папочкам, то после удаления "лишних" переменных, некоторые перестали компилироваться... Не, в общем понятно, НО!

1. Неплохо бы подсвечивать не только сбойный скрипт, но и все папки до самого верху где он есть.
2. Отличненько было бы добавить кнопку типа "исключить из компиляции". То-есть, я понимаю, что скрипт кривой, но он мне будет нужен позже. Как вариант - закоментировать, но тогда, по факту, скрипт есть и "вроде" исполняется. А где и какой так "исполняется" надо уже искать.