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

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

Автор Тема: TM_Table  (Прочитано 2747 раз)

JibberHorse

  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
TM_Table
« : 15 Марта 2019, 16:32:30 »
Здравствуйте!
Не получается привязать скрипт к событиям OnCellDatachange и OnCellClick. Для этих событий скрипты просто не доступны (список пуст, только папки). Для всех остальных событий объекта TM_Table перечень скриптов доступен.
v2.3.4.0.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3000
    • Просмотр профиля
    • Simple-Scada
Re: TM_Table
« Ответ #1 : 15 Марта 2019, 19:01:56 »
Здравствуйте.

Скрипты OnCellDatachange и OnCellClick уникальны, они выглядят так:
Код: (delphi)
procedure OnCellClick(Cell: TM_TableCell);
procedure OnCellDatachange(Cell: TM_TableCell);
, т.е. содержат параметр Cell: TM_TableCell, в то время как большинство скриптов являются универсальными и выглядят так:
Код: (delphi)
procedure myScript(Sender: TM_Control);
, т.е. содержат параметр Sender: TM_Control.

Таким образом на события OnCellDatachange и OnCellClick можно назначить только ранее созданные скрипты такого же типа, а стандартные универсальные скрипты не подойдут, поэтому они не отображаются в списке. Поэтому на события OnCellDatachange и OnCellClick нужно написать новые скрипты (для этого нужно выделить таблицу и дважды кликнуть кнопку с тремя точками "..." напротив события OnCellDatachange или OnCellClick).

JibberHorse

  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
Re: TM_Table
« Ответ #2 : 16 Марта 2019, 14:23:48 »
Ясно. спасибо!

MaxHari

  • Новичок
  • *
  • Сообщений: 36
    • Просмотр профиля
Re: TM_Table
« Ответ #3 : 29 Ноября 2019, 13:20:05 »
Здравствуйте!
Есть таблица с граничными значениями переменных, которые необходимо менять (к ячейкам таблицы привязаны переменные, выбраны параметры "работать с граничным значением"). Каким образом можно отследить изменение значения в ячейке?

Также в Скаде было выявлено отсутствие проверки "предупредительная_граница <= аварийной_границы" при изменении значения предупредительной границы. Хорошо бы поправить это в будущем.
« Изменён: 29 Ноября 2019, 13:26:56 от MaxHari »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3000
    • Просмотр профиля
    • Simple-Scada
Re: TM_Table
« Ответ #4 : 29 Ноября 2019, 18:57:33 »
Здравствуйте.

Цитировать
Каким образом можно отследить изменение значения в ячейке?
На изменение границ событие не предусмотрено, поэтому отследить их изменение не получится.

Цитировать
Также в Скаде было выявлено отсутствие проверки "предупредительная_граница <= аварийной_границы" при изменении значения предупредительной границы. Хорошо бы поправить это в будущем.
Вы используете последнюю версию SImple-Scada 2.3.6.3? Мы улучшали работу с границами в этой версии.

MaxHari

  • Новичок
  • *
  • Сообщений: 36
    • Просмотр профиля
Re: TM_Table
« Ответ #5 : 29 Ноября 2019, 20:59:53 »
Цитировать
На изменение границ событие не предусмотрено, поэтому отследить их изменение не получится.
Возникает только идея сделать соответствующее количество переменных и писать в них значения границ, а там уже делать нужные действия.
Может, можете добавить такое событие в будущих версиях? Либо сделать какой-то флаг в переменной, что поменялись границы. Либо рассматривать изменение не только значения переменной, а целиком объекта...

Цитировать
Вы используете последнюю версию SImple-Scada 2.3.6.3? Мы улучшали работу с границами в этой версии.
Да, версия последняя. Помню раньше писал "вручную" через скрипты, там по привышению пред.>авар. в предупредительную границу записывалось значение аварийной. В данном же случае изменение происходит через свойство объекта "работать с граничным значением переменной". Запись в ячейку происходит, а что на деле в саму границу пишет ещё не проверял...

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3000
    • Просмотр профиля
    • Simple-Scada
Re: TM_Table
« Ответ #6 : 02 Декабря 2019, 09:38:50 »
Цитировать
Также в Скаде было выявлено отсутствие проверки "предупредительная_граница <= аварийной_границы" при изменении значения предупредительной границы. Хорошо бы поправить это в будущем.
Перепроверили несколько раз, с таблицей, уровнями и полями, всегда работает правильно, версия 2.3.6.3. Можете уточнить что значит "отсутствие проверки "предупредительная_граница <= аварийной_границы""? При изменении предупредительной границы выполняется проверка значения переменной и если оно ниже предупредительной границы, то ячейка остаётся бесцветной, а если выше, то окрашивается в желтый цвет.

Цитировать
Помню раньше писал "вручную" через скрипты, там по привышению пред. > авар. в предупредительную границу записывалось значение аварийной. В данном же случае изменение происходит через свойство объекта "работать с граничным значением переменной".
Все свойства граничных значений в скриптах (HighAlarm, HighWarning, LowWarning и LowAlarm) привязаны правильно и не менялись с начала разработки Simple-Scada 2, поэтому непонятно как меняя предупредительную границу можно изменить аварийную. Вы уверены что не перепутали свойства в скриптах? Также нужно учитывать что при включенном сохранении граничных значений они будут загружаться из файла на жестком диске, а не из настроек переменной. Если у Вас есть пример проекта с неправильным присвоением границ, то просьба выслать его для проверки на support@simple-scada.con.

MaxHari

  • Новичок
  • *
  • Сообщений: 36
    • Просмотр профиля
Re: TM_Table
« Ответ #7 : 05 Декабря 2019, 10:08:06 »
Цитировать
Перепроверили несколько раз, с таблицей, уровнями и полями, всегда работает правильно, версия 2.3.6.3. Можете уточнить что значит "отсутствие проверки "предупредительная_граница <= аварийной_границы""? При изменении предупредительной границы выполняется проверка значения переменной и если оно ниже предупредительной границы, то ячейка остаётся бесцветной, а если выше, то окрашивается в желтый цвет.

Покраска ячеек выполняется нормально.
Нет проверки, когда в предупредительную границу записывается значение выше аварийной. На практике предупредительная граница просто исчезает, и значение переменной контролируется по аварийной границе, т.е. сама реализация нормально срабатывает. Для "глупых" пользователей, которые могут перепутать ячейки и прочее хорошо бы добавить эту проверку - что если введено значение предупредительной границы большее, чем аварийной, то выдавать какое-либо сообщение.
Может, на скринах будет понятнее...
Файл 1.png - переменная Тннт достигла предупредительной границы, всё ок.
2. png - переменная Тннт достигла аварийной границы, всё ок.
3. png - изменили предупредительную границу переменной Тннт на значение, выше аварийной. Контроль переменной идёт по аварийной границе - всё ок. Оповещения или ещё что-то, что предупр.>аварийной границы нет.
Опция "сохранение граничных значений" включена.

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

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3000
    • Просмотр профиля
    • Simple-Scada
Re: TM_Table
« Ответ #8 : 06 Декабря 2019, 09:46:02 »
Цитировать
Нет проверки, когда в предупредительную границу записывается значение выше аварийной.
Понятно, спасибо за подробное описание, мы сначала подумали что цвет ячеек не меняется при смене границ. Рассмотрим добавление проверки на пересечение границ при вводе нового значения.

MaxHari

  • Новичок
  • *
  • Сообщений: 36
    • Просмотр профиля
Re: TM_Table
« Ответ #9 : 12 Декабря 2019, 12:19:55 »
Для таблиц с прокрутками - можно ли при открытии окна с таблицей как-то перемещать скролл (курсор) на первую строку, если скролл (курсор) был ниже "начальной" части таблицы при её предыдущем закрытии?

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3000
    • Просмотр профиля
    • Simple-Scada
Re: TM_Table
« Ответ #10 : 14 Декабря 2019, 12:07:41 »
MaxHari, позицию скролла нельзя изменить программно.

MaxHari

  • Новичок
  • *
  • Сообщений: 36
    • Просмотр профиля
Re: TM_Table
« Ответ #11 : 06 Января 2020, 18:22:06 »
Здравствуйте!
Вроде уже задавал вопрос, не смог найти..

У таблиц есть событие OnCellDatachange. Можно ли как-то по этому событию понять в какой ячейке поменялась переменная и сделать что-то с соседней ячейкой (например, в столбце aCol + 1)?

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3000
    • Просмотр профиля
    • Simple-Scada
Re: TM_Table
« Ответ #12 : 07 Января 2020, 16:22:20 »
Здравствуйте.

У таблиц есть событие OnCellDatachange. Можно ли как-то по этому событию понять в какой ячейке поменялась переменная и сделать что-то с соседней ячейкой (например, в столбце aCol + 1)?
В событие OnCellDatachange передаётся параметр Cell типа TM_TableCell, это та ячейка в которой изменилось значение. Все свойства ячеек описаны здесь. Обратите внимание на свойства Col и Row - это номер столбца и номер строки ячейки в таблице. Таким образом получить соседнюю ячейку (справа от текущей) можно так:
Код: (delphi)
var
  aCell: TM_TableCell;
begin
  aCell := Table1.GetCell(Cell.Col + 1, Cell.Row);
end.

MaxHari

  • Новичок
  • *
  • Сообщений: 36
    • Просмотр профиля
Re: TM_Table
« Ответ #13 : 07 Января 2020, 18:03:32 »
Спасибо, сам бы никогда не догадался)

Возможно ли как-то убирать фокус с выбранной строки таблицы (делать что-то по типу RowIndex := -1)?

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3000
    • Просмотр профиля
    • Simple-Scada
Re: TM_Table
« Ответ #14 : 08 Января 2020, 10:45:50 »
Возможно ли как-то убирать фокус с выбранной строки таблицы (делать что-то по типу RowIndex := -1)?
Нет, у каждого клиента этот индекс свой и изменить его с сервера (через скрипт) не получится, поэтому свойство RowIndex доступно только для чтения.