Показано с 1 по 9 из 9

Тема: Запретить нажатие на кнопку для всех WEB-клиентов

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Question Запретить нажатие на кнопку для всех WEB-клиентов

    Есть кнопка, она запускает действие внутри PRG
    Как запретить нажатие этой кнопки (сделать невидимой, нерабочей, не делать действие внутри кода и т.д.) для всех тех, кто подключился по WEB?
    Но на экране самой панели кнопка должна быть активна

    Можно, конечно, нарисовать 2 варианта всех мнемосхем: один для панели, второй для WEB, но это громоздко
    Можно как-то через авторизацию через логин-пароль, но тоже громоздко

    Есть вариант попроще? Спасибо

  2. #2
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,595

    По умолчанию

    Есть вариант попроще?
    Можно в параметре кнопки Переменные состояний/Отключение ввода ввести выражение

    Код:
    VisuElems.CurrentClientType = VisuElems.Visu_ClientType.WebVisualization

  3. #3

    По умолчанию

    То, что нужно! Спасибо большое!

    Второй вопрос: а если определённому клиенту (по IP-адресу) всё же нужно разрешить это делать? А остальным запретить?
    Можно ли определить IP прямо в визуализации?

  4. #4

  5. #5
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,595

    По умолчанию

    Но все же можно проще, с учетом:

    не делать действие внутри кода и т.д.)
    03-07-2025 17-52-48.png

    Нюанс:

    Код:
    fbHelper(pClientData := pClientData);
    Слева - вход ФБ, справа - неявная системная переменная, которая доступна только в контексте визуализации.

  6. #6

    По умолчанию

    Всё работает, спасибо!
    Но через "Отключение ввода" это выглядит, конечно, нагляднее. Ведь сразу видно, что ввод запрещён, а тут кнопка активна, она нажимается, но ничего не происходит
    Никак нельзя вот это вот:
    Код:
    //Получаем инфу о клиенте
    fbHelper(pClientData := pClientData);
    
    //Проверяем нужные IP
    IF (VisuElems.CurrentClientType <> VisuElems.Visu_ClientType.WebVisualization) OR (fbHelper.stIPv4 = '192.168.4.231') THEN
    	P10_Тензометрия_Р161_Расчёт.Обнуление();
    END_IF
    закинуть куда-нибудь в таск, где уже присваивать признак - и этот признак уже закидывать в "Отключение ввода"

    Ведь кроме кнопок, куда можно вставить вышеприведённый код, есть же ещё изменяемые параметры, куда код уже не записать...
    Последний раз редактировалось aaaSashaMGGU; 04.07.2025 в 08:10.

  7. #7
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,595

    По умолчанию

    Технически можно. Для этого нужно совместить два метода:

    1. CURRENTCLIENTID
    См. п. 10.4.4:
    https://ftp.owen.ru/CoDeSys3/11_Docu..._Visu_v3.0.pdf

    К параметру кнопки будет привязан элемент массива BOOL'ов, индекс которого будет соответствовать индексу клиента визуализации (это и есть CURRENTCLIENTID)

    2. Далее см п. 1.2 в уже упоминавшейся статье:
    https://ftp.owen.ru/CoDeSys3/98_Book...isuIecCode.pdf

    Это позволит в коде получить информацию о подключенных клиентах и сформировать значения элементов упомянутого выше массива (т.е. задать, для кого кнопка активна, а для кого - нет).

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

  8. #8

    По умолчанию

    Странно это всё... Вот так сделать можно:
    Код:
    VisuElems.CurrentClientType = VisuElems.Visu_ClientType.WebVisualization
    Т.е., панель чётко понимает в этом месте, что клиент является клиентом Web (или не является). На всё про всё - одна строка
    А вот как-то так уже нельзя:
    Код:
    VisuElems.CurrentClientInfo.GetIP = '192.168.XX.XX'
    Обидно

    А по вышесказанному спасибо, конечно
    Но там просто какой-то трэш, я не вывезу
    Нет, я делал фильтрацию клиентов через itfClientFilter, но этот блок целиком как есть уходил как вход на блок смены экрана, вызова диалогового окна и т.д., а тут совсем другая задача...
    Проще просто сказать технологам, что "такой возможности нет" и всё

  9. #9
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,595

    По умолчанию

    А вот как-то так уже нельзя:
    Можно, но в более свежих версиях плагина визуализации, которые появились в более свежих версиях CODESYS по сравнению с 3.5.17.30, которая является настоятельно рекомендуемой для наших контроллеров.

Похожие темы

  1. Кратковременное и длительное нажатие на кнопку
    от Wuvuzel в разделе Среда программирования OWEN Logic
    Ответов: 183
    Последнее сообщение: 07.07.2025, 10:33
  2. СП3хх Запретить нажимать на клапаны.
    от Иван Воронин в разделе Панели оператора (HMI)
    Ответов: 10
    Последнее сообщение: 05.05.2025, 10:03
  3. ModBus RTU в RUN перестает опрашивать всех клиентов
    от mitroshkin в разделе СПК210, СПК1xx [М01]
    Ответов: 4
    Последнее сообщение: 14.06.2021, 13:05
  4. Ответов: 3
    Последнее сообщение: 14.06.2021, 11:33
  5. тройное нажатие как реализовать?
    от Di3ainlex@gmail.com в разделе Среда программирования OWEN Logic
    Ответов: 8
    Последнее сообщение: 12.01.2021, 09:59

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •