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

Тема: Получение информации о пользователе в задаче родительского объекта MasterSca

  1. #1

    Question Получение информации о пользователе в задаче родительского объекта MasterSca

    Есть потребность в передаче информации о текущем пользователе в объектах выполняемых в задаче основного узла или в задаче родительского объекта, получение параметров текущего пользователя с помощью функционального блока GET_CURRENT_USERNAME выполняемом в задаче экрана.

    На данным момент реализация выполнена следующим образом: исполнение происходит на двух серверах работающих в резерве, подключение к ним происходит от 3-х АРМ компьютеров, где и производятся все работы, соответственно одновременно активны 3 сессии. В MasterScada создан объект выполняемый в задаче экрана, в него вложен функциональный блок GET_CURRENT_USERNAME, с него тянутся значения Username, ClientAddress передаваемые в параметры находящиеся в том же объекте, откуда уже идёт передача информации в другие объекты системы, выполняемые в задачах родительского объекта или в задаче основного узла. Однако при одновременном подключении нескольких сессий передача информации о текущем пользователе начинает сбоить - метаться от одного пользователя к другому или выводит значения о последнем залогинившемся пользователе.
    Все рабочие объекты являются библиотечными экземплярами и при назначении их выполнение в задачу экрана при компиляции выходят ошибки.
    Как пример задачи в которой требуется знание о текущем подключенном пользователе - это изменение видимости элемента на окне объекта, что-то должно быть видимо только администратору или инженерам, но не операторам и гостям.

    Также имеется задача в вызове скрипта AstraLinux на АРМ компьютере, с которого было произведено нажатие кнопки, как пример открытие через wine AbakReporter для печати отчёта, на данный момент применяется функционального блока SysProcessCreateAsync, однако данный функциональный блок открывает программы на сервере (RT), а не на АРМ компьютере (т.е. открывать скрипт там где крутится клиент визуализации DT). Есть ли возможные решения этой задачи?

  2. #2

    По умолчанию

    Цитата Сообщение от AlexeyKitaev Посмотреть сообщение
    Как пример задачи в которой требуется знание о текущем подключенном пользователе - это изменение видимости элемента на окне объекта, что-то должно быть видимо только администратору или инженерам, но не операторам и гостям.
    Это решается ч/з права доступа для роли/пользователя. Возможен доступ к отдельным элементам, в справке "Настройка прав доступа элементов". Также можно назначить отдельный экран для роли/пользователя.

    Цитата Сообщение от AlexeyKitaev Посмотреть сообщение
    Также имеется задача в вызове скрипта AstraLinux на АРМ компьютере, с которого было произведено нажатие кнопки, как пример открытие через wine AbakReporter для печати отчёта, на данный момент применяется функционального блока SysProcessCreateAsync, однако данный функциональный блок открывает программы на сервере (RT), а не на АРМ компьютере (т.е. открывать скрипт там где крутится клиент визуализации DT). Есть ли возможные решения этой задачи?
    1. Веб-сервер на АРМ, например, на python или node.js
    2. Через "file:///usr/local/script.sh". Для Firefox: в настройках указать "все файлы *.sh открывать с помощью /bin/bash". Для Chrome: через расширение. (не уверен в этом пункте)

  3. #3

    По умолчанию

    Цитата Сообщение от Ready Посмотреть сообщение
    Это решается ч/з права доступа для роли/пользователя. Возможен доступ к отдельным элементам, в справке "Настройка прав доступа элементов". Также можно назначить отдельный экран для роли/пользователя
    ч/з права доступа есть возможность задать только управление элементом, в нашем случае нужно управлять отображением (видимостью) элементов или же передавать значения в программу находящуюся в объекте исполняемом в задаче родительского объекта или в задаче узла (в том числе в экземплярах библиотечных объектов)

  4. #4

    По умолчанию

    Цитата Сообщение от AlexeyKitaev Посмотреть сообщение
    ч/з права доступа есть возможность задать только управление элементом, в нашем случае нужно управлять отображением (видимостью) элементов или же передавать значения в программу находящуюся в объекте исполняемом в задаче родительского объекта или в задаче узла (в том числе в экземплярах библиотечных объектов)
    Сделал проект, может поможет: Проект 1.zip

    Для понимания лучше зайти сразу с нескольких браузеров из под разных пользователей.

    Для примера добавлены:
    пользователи: Admin, User1, User2, Guest1, Guest2
    роли: Администратор, Оператор, Диспетчер, Гость

    Возможные пути решения вопроса видимости элементов:

    1. Способ ч/з разграничение по окнам.
    Для пользователя 'Guest2' назначено стартовое окно 'Окно для гостей', для остальных по умолчанию 'Главное окно'.
    У экземпляров библиотечного объекта 'Test2' 'Окно 1' -> 'Главное окно', 'Окно 2' -> 'Окно для гостей'

    2. Способ ч/з текущего пользователя.
    Программы, исполняемые в задаче экрана:
    Объекты > Main > CurrentUser > CurrentUser_FBD_1
    Объекты > Main > Программа_ST_2
    Библиотека > Локальная > TestProgram > Программа_ST

    CurrentUser_FBD_1 предоставляет имя текущего пользователя для Программа_ST_2 и Программа_ST для его проверки.
    Результат работы - вкл/откл видимости кнопок. Видимость кнопки библиотечного объекта Test настроена ч/з параметр окна, а в дереве объектов с выходным параметром ButtonVisibility (Программа_ST).

    С библиотечными объектами данный способ работает только, если они добавлены в дерево как наследники, т.к. в экземплярах нельзя назначить исполнение программ в задачу экрана.

  5. #5

    По умолчанию

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

  6. #6

    По умолчанию

    Цитата Сообщение от AlexeyKitaev Посмотреть сообщение
    Спасибо за содействие, я проверил и способ с переводом библиотечных объектов в наследники работает, однако боюсь, что данный способ мне не подходит, т.к. у меня сотни аналоговых и дискретных датчиков, десятки насосов и задвижек, боюсь, что все ссылки на объекты переводить в наследники будет трудозатратно, и от части костыльно, т.к. вырастит размер проекта и его нагрузка на систему в несколько раз.
    Еще способ. С помощью пользовательского элемента и динамизации.

    Проект 2.zip
    Пользовательский элемент (Script).pdf

    Суть в пробросе пользователя ч/з контролы:
    Res/control_set_current_user.js - для CurrentUser (он глобально устанавливает пользователя через 'window.currentUser')
    Res/control_get_current_user.js - для Test (берет пользователя из 'window.currentUser'. В принципе любой другой может)

    Доступ к свойствам элементов ч/з динамизацию. В экземплярах работает.

    Ознакомьтесь с пользовательским элементом и веб-компонентами. Контролы в MS4D построены на веб-компонентах.

  7. #7

    По умолчанию

    Пообщался с тех. поддержкой, и получил решение задачи, все окна выполняются в задаче экрана, независимо от того, в каком объекте они находятся, и следовательно, если привязать username напрямую к параметру окна, то его значение будет отрабатываться только для одного пользователя.
    Поставил ФБ get_current_username в объект исполняемый в задаче экрана и привязал значение username к параметру библиотечного окна (НАПРЯМУЮ) и всё заработало.

  8. #8

    По умолчанию

    Цитата Сообщение от AlexeyKitaev Посмотреть сообщение
    получил решение задачи
    Спасибо. На самом деле весьма ценная информация, которую обычно не расписывают в справочной системе.
    Последний раз редактировалось Larrrik; 27.10.2023 в 10:32.

Похожие темы

  1. Ответов: 0
    Последнее сообщение: 17.10.2023, 09:57
  2. Получение информации с ПЛК73
    от Lordhmen в разделе OPC Серверы
    Ответов: 7
    Последнее сообщение: 15.09.2022, 19:44
  3. Логгирование информации
    от Exen3city в разделе Трёп (Курилка)
    Ответов: 0
    Последнее сообщение: 04.05.2021, 16:00
  4. Ответов: 8
    Последнее сообщение: 28.03.2016, 21:36
  5. СБОР ИНФОРМАЦИИ С ПЛК
    от Алексей Александрович в разделе Master SCADA 3
    Ответов: 3
    Последнее сообщение: 23.01.2014, 09:11

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

Ваши права

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