Просмотр полной версии : Запретить нажатие на кнопку для всех WEB-клиентов
aaaSashaMGGU
03.07.2025, 15:33
Есть кнопка, она запускает действие внутри PRG
Как запретить нажатие этой кнопки (сделать невидимой, нерабочей, не делать действие внутри кода и т.д.) для всех тех, кто подключился по WEB?
Но на экране самой панели кнопка должна быть активна
Можно, конечно, нарисовать 2 варианта всех мнемосхем: один для панели, второй для WEB, но это громоздко
Можно как-то через авторизацию через логин-пароль, но тоже громоздко
Есть вариант попроще? Спасибо
Евгений Кислов
03.07.2025, 15:39
Есть вариант попроще?
Можно в параметре кнопки Переменные состояний/Отключение ввода ввести выражение
VisuElems.CurrentClientType = VisuElems.Visu_ClientType.WebVisualization
aaaSashaMGGU
03.07.2025, 15:46
То, что нужно! Спасибо большое!
Второй вопрос: а если определённому клиенту (по IP-адресу) всё же нужно разрешить это делать? А остальным запретить?
Можно ли определить IP прямо в визуализации?
Евгений Кислов
03.07.2025, 16:26
Не уверен, что есть простое решение.
Но можно сделать по мотивам п. 1.2:
https://ftp.owen.ru/CoDeSys3/98_Books/CodesysVisuIecCode.pdf
Евгений Кислов
03.07.2025, 17:53
Но все же можно проще, с учетом:
не делать действие внутри кода и т.д.)
84660
Нюанс:
fbHelper(pClientData := pClientData);
Слева - вход ФБ, справа - неявная системная переменная, которая доступна только в контексте визуализации.
aaaSashaMGGU
04.07.2025, 08:04
Всё работает, спасибо!
Но через "Отключение ввода" это выглядит, конечно, нагляднее. Ведь сразу видно, что ввод запрещён, а тут кнопка активна, она нажимается, но ничего не происходит
Никак нельзя вот это вот:
//Получаем инфу о клиенте
fbHelper(pClientData := pClientData);
//Проверяем нужные IP
IF (VisuElems.CurrentClientType <> VisuElems.Visu_ClientType.WebVisualization) OR (fbHelper.stIPv4 = '192.168.4.231') THEN
P10_Тензометрия_Р161_Расчёт.Обнуление();
END_IF
закинуть куда-нибудь в таск, где уже присваивать признак - и этот признак уже закидывать в "Отключение ввода"
Ведь кроме кнопок, куда можно вставить вышеприведённый код, есть же ещё изменяемые параметры, куда код уже не записать...
Евгений Кислов
04.07.2025, 08:25
Технически можно. Для этого нужно совместить два метода:
1. CURRENTCLIENTID
См. п. 10.4.4:
https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_Visu_v3.0.pdf
К параметру кнопки будет привязан элемент массива BOOL'ов, индекс которого будет соответствовать индексу клиента визуализации (это и есть CURRENTCLIENTID)
2. Далее см п. 1.2 в уже упоминавшейся статье:
https://ftp.owen.ru/CoDeSys3/98_Books/CodesysVisuIecCode.pdf
Это позволит в коде получить информацию о подключенных клиентах и сформировать значения элементов упомянутого выше массива (т.е. задать, для кого кнопка активна, а для кого - нет).
Сложности реализации связаны с тем, что визуализация CODESYS спроектирована с учетом поддержки многопользовательского доступа - т. е. с ней могут работать несколько клиентов одновременно и, в рамках вашей задачи, набор их данных должен отличаться.
aaaSashaMGGU
04.07.2025, 08:55
Странно это всё... Вот так сделать можно:
VisuElems.CurrentClientType = VisuElems.Visu_ClientType.WebVisualization
Т.е., панель чётко понимает в этом месте, что клиент является клиентом Web (или не является). На всё про всё - одна строка
А вот как-то так уже нельзя:
VisuElems.CurrentClientInfo.GetIP = '192.168.XX.XX'
Обидно
А по вышесказанному спасибо, конечно
Но там просто какой-то трэш, я не вывезу :)
Нет, я делал фильтрацию клиентов через itfClientFilter, но этот блок целиком как есть уходил как вход на блок смены экрана, вызова диалогового окна и т.д., а тут совсем другая задача...
Проще просто сказать технологам, что "такой возможности нет" и всё :)
Евгений Кислов
07.07.2025, 07:26
А вот как-то так уже нельзя:
Можно, но в более свежих версиях плагина визуализации, которые появились в более свежих версиях CODESYS по сравнению с 3.5.17.30, которая является настоятельно рекомендуемой для наших контроллеров.
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot