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

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

Автор Тема: Клиент подключен или нет  (Прочитано 1717 раз)

Серега

  • Постоялец
  • ***
  • Сообщений: 242
    • Просмотр профиля
Клиент подключен или нет
« : 28 Февраля 2020, 09:32:41 »
Добрый день!
Новенькая головоломка прилетела от заказчика. Суть:
Есть сигнал HeartBit (не меняется - нет связи,  меняется - есть связь) для каждого важного объекта.
3 клиента 1 сервер. Каждый клиент управляет своим привязанным объектом.
Если отвалился клиент/завис/случайно выключили остановить изменение HeartBit .
Далее объект видя, что HeartBit не меняется, подразумевает, что типа им никто не может управлять дает команду на останов сам себе.
В руководстве по скриптам в разделе "Работа с клиентами" как токовой функции о состоянии соответствующего клиента нет.
Да есть функция StartPing. Но с ее помощью можно отслеживать работу сети или сетевой карты компьютера на котором открыт клиент.
С компом может быть все в порядке, но клиент закрыт.
В общем можете подсказать:
1. Будете ли внедрять в будущем функцию о состоянии клиента, например состояния выключен/загружается=перегрузка/работа? Или она уже есть? Сервер же как то понимает кто подключен и когда отключается.
2. Как на данный момент можно решить задачку? Или только контролем через  StartPing. Или опять не дочитал справку?
Жду Ваших вопросов и предложений.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3146
    • Просмотр профиля
    • Simple-Scada
Re: Клиент подключен или нет
« Ответ #1 : 29 Февраля 2020, 15:56:00 »
Здравствуйте.

Для сервера скады каждый клиент уникален. Если клиент был подключен, затем на время отключился и снова подключился, то сервер распознает его как нового клиента. Обычные клиенты (не web) при подключении передают имя указанное в утилите настроек. В теории, по этому имени можно было бы идентифицировать клиента, но ничто не запрещает дать нескольким клиентам одинаковое имя. Поэтому по имени тоже нельзя достоверно отследить клиента. Единственным уникальным идентификатором является IP-адрес, поэтому можно использовать пинг, но он говорит о работе ПК, но не о работе клиента.

Цитировать
Будете ли внедрять в будущем функцию о состоянии клиента, например состояния выключен/загружается=перегрузка/работа?
В ближайшем будущем не планируем, это слишком уникальный запрос, который за последние 6 лет возник впервые. И в целом привязка работы оборудования к работе клиентов скады - это очень странная задача.

Серега

  • Постоялец
  • ***
  • Сообщений: 242
    • Просмотр профиля
Re: Клиент подключен или нет
« Ответ #2 : 02 Марта 2020, 14:11:33 »
Ясно. Будем думать.

Серега

  • Постоялец
  • ***
  • Сообщений: 242
    • Просмотр профиля
Re: Клиент подключен или нет
« Ответ #3 : 12 Января 2021, 14:23:49 »
Добрый день!
В проекте все таки нужно нам отслеживать состояние клиента. Данная функция обеспечивает функциональную безопасность комплекса (как материальную так и людскую).
В ходе поиска решений наткнулся на недокументированную команду GetClientData:TM_ClientData.
1. Где почитать о ней?
2. С помощью GetClientName (или GetClientData.Name думаю то же) можно узнать имя клиента. Но там где его на мое личное мнение можно использовать в справке написано:
Цитировать
Важно! Данная функция не работает при вызове из события "OnDataChange", а также при вызове из системных типов событий "Запуск проекта", "Остановка проекта", "Выполнен SQL-запрос", "Прошла секунда", "Прошел час", "Отчет построен".
Только через универсальный, можете объяснить с чем это связано?
Как бы возникла мысль, что зная, например, количество подключенных клиентов и периодически проверяя их количество, зная их имена (в настройках можно задать различные) можно понять какой клиент отвалился.
3. Да понимаем, что запрос индивидуальный. Может подскажите какое-то решение? Или может быть расширите параметры класса GetClientData и добавите GetClientData.Status:Integer (например 0 - не подключен, 1 - работает/подключен, 2 - в ошибке и т.д.).
Жду вопросов и предложений!

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1279
    • Просмотр профиля
Re: Клиент подключен или нет
« Ответ #4 : 12 Января 2021, 19:48:29 »
Здравствуйте.

Функция GetClientData возвращает данные клиента: Имя, Web/обычный клиент, Имя пользователя, Путь к директории Simple-Scada. Данная функция почти не используется, т.к. практически нет задач, в которых ее использование будет необходимо. В этой теме можно найти пример скрипта и описание задачи, для которой данная функция использовалась - см. это сообщение и следующие за ним два сообщения. Применительно к Вашей задаче, данная функция не подходит и при вызове из системных типов скриптов она не будет работать, также как и GetClientName.

Цитировать
Только через универсальный, можете объяснить с чем это связано?
Работает не только через универсальный, а через любые скрипты вызванные клиентом, кроме системных типов событий перечисленных в предупреждении. Связано это с тем, что перечисленные скрипты вызываются сервером, а не клиентом и для них невозможно получить информацию о клиенте. При вызове, например скрипта OnClick, сервер может получить имя клиента, т.к. знает, что именно этот клиент вызвал скрипт. А в системных типах событий получить информацию о клиенте невозможно.

По поводу добавления возможности отслеживания состояния клиента отвечали в нашем предыдущем сообщении в этой теме, и на данный момент ничего не изменилось.
« Изменён: 12 Января 2021, 19:50:15 от Simple_Scada »