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

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

Автор Тема: Таблицы и TM_DataSet  (Прочитано 908 раз)

Серега

  • Постоялец
  • ***
  • Сообщений: 209
    • Просмотр профиля
Таблицы и TM_DataSet
« : 06 Октября 2020, 11:57:26 »
Добрый день!
Ситуация.
На клиенте №1 с 2 мониторами, на мнемосхеме отображенной на первом мониторе в таблице с помощью метода таблица.RunSQL (...) получаем нужный DataSet для объекта №1 в состоянии №1 и отображаем его в таблице.
Далее с помощью свойств и методов таблицы через внешние переменные построчно грузим данные в ПЛК.
Все работает грузиться замечательно.
Если в процессе загрузки открыть мнемосхему с данной таблицей для объекта №1 в состоянии №2 на мониторе №2, то загрузка продолжиться уже с данными из вновь сформированного DataSet для состояния №2.
Заметили протестировали. Тоже самое происходит если это сделать на разных клиентах.
Есть процедуры работы с DataSet и отдельно процедура RunSQL с идентификатором. Есть разные пользователи, но тут нюанс что при одном пользователе это происходит тоже.
Пытаемся придумать способ контроля что сейчас грузиться с помощью внутренних переменных типа массив, так как в ряде тем сказано, что внешние переменные типа массив предназначены только для чтения.
Но вот как то процесс буксует. Можете сказать как правильно контролировать или реализовать механизм.
Если что-то вызывает вопросы задавайте.

pan2000

  • Постоялец
  • ***
  • Сообщений: 171
    • Просмотр профиля
Re: Таблицы и TM_DataSet
« Ответ #1 : 07 Октября 2020, 10:33:05 »
 Здравствуйте.

  Собственно проблема в блокировке вмешательства в некоторый процесс во время его выполнения, в Вашем случае - загрузка ПЛК. Варианты:

1. Загрузка без вмешательства оператора ("кнопку нажал и мешок на спине"), процесс завершится через некоторое время. Достаточно ввести флаг загрузки для запрета вмешательства на время загрузки.
В прилагаемом примере (стр. "Загрузка по времени") в качестве флага использовано свойство видимости кнопки "Загрузка ПЛК". При нажатии кнопки устанавливается в False, по завершении загрузки в True.

2. Оператор может вмешиваться в процесс загрузки. У него отображается активный экран, отличающийся от остальных минимально наличием элементов управления.
Признаком активного экрана (и соответственно способа построения) может быть уникальное имя клиента или имя оператора. Аналогично предыдущему случаю есть и флаг загрузки (= имя активного клиента, пример стр. "Загрузка под контролем оператора"), однако для него возникают проблемы сброса флага:
- активный оператор "уснул";
- активный оператор вышел из проекта не сбросив флаг (не завершив загрузку).
И если для первого случая можно ввести временной контроль активности оператора, то для второго нужен выход по кнопке с запретом выхода по комбинации клавиш из Simple-Scada и по alt/F4. Но простое пропадание питания ПК активного клиента (с сохранением на ПК сервера) прервет загрузку и не сбросит флаг.
Для двух мониторов, равно как для двух клиентов с одинаковыми именами, повторного начала загрузки не будет, но управление возможно от обоих.

Появление в Simple-Scada процедуры "Получить список клиентов данного проекта" сделало бы возможным отслеживание "отпавших" клиентов (активных).

Серега

  • Постоялец
  • ***
  • Сообщений: 209
    • Просмотр профиля
Re: Таблицы и TM_DataSet
« Ответ #2 : 07 Октября 2020, 11:05:26 »
Добрый день!
Не много пошел другим путем, но тоже через кнопку.
При переходе на экран загрузки блокировать или нет кнопку со скриптом по нажатию зависит от имени клиента.
Это позволяет ограничить запуск процедуры загрузки одним клиентом.
Дальше пока эксперименты.
Ну и ждем ответа от разработчиков.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3000
    • Просмотр профиля
    • Simple-Scada
Re: Таблицы и TM_DataSet
« Ответ #3 : 08 Октября 2020, 10:58:41 »
Здравствуйте.

Цитировать
Ну и ждем ответа от разработчиков.
Нам нечего добавить к ответу pan2000.