Понял, спасибо
Понял, спасибо
Евгений, выложите, пожалуйста пример со сменой визуализации методом:
VisuElems.VisuElemBase.g_VisuManager.SetMainVisu(p ClientData, sVisuName);
Проверяю на SP7 - контроллер улетает в исключение, хотя глобальная смена SetMainVisuGlobally работает прекрасно.
Да, у меня тоже. Поясню ситуацию. pClientData берется у клиента визуализации. Соответственно, непосредственно в коде с ней работать практически невозможно. Можно повесить на кнопку в визуализации, но смысла в этом особого нет, т.к. точно такой же эффект даст обычная кнопка с действием Изменить отображаемую визуализацию.
В целом, можно лишь констатировать, что обработка текущей визуализации в программе возможна только через CurrentVisu, как это ни печально.
С переключением визуализаций ситуация лучше - клиенты используют кнопки, а если надо показать что-то всем им сразу (например, экран, на котором сработала тревога) - то используем SetMainVisuGlobally.
Последний раз редактировалось Евгений Кислов; 20.11.2015 в 14:17.
СODESYS V3.5: Repository Archive V3.5 SP4 (необходим для старых СПК) / Раздел CDS V3.5 на сайте
Форум: Вопросы и ответы / Визуализация / Настройка обмена с другими устройствами
Web-панель ВП110 / Modbus-индикатор СМИ2-М
Telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | oscat.ru | Как обратиться в техподдержку?
Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | XY problem | Как правильно задавать вопросы | AnyDesk
Итак, 2 пользователя открывают в браузерах визуализацию, и первый пользователь меняет визуализацию у второго:
pClientData := VisuElems.g_ClientManager.GetNextClient;
IF pClientData > 0 THEN
sVisuName := 'Visualization_1';
VisuElems.VisuElemBase.g_VisuManager.SetMainVisu(p ClientData, sVisuName);
END_IF
Т.е. SetMainVisu работает, осталось только понять как достать VisuElems.VisuStructClientData не следующего, а текущего пользователя
Последний раз редактировалось NightBeer; 20.11.2015 в 15:25.
Меняем визуализацию у всех пользователей, методом перечисления, при этом можно по условию вхождения в группу или по имени.
sVisuName := 'Visualization_1';
VisuElems.g_ClientManager.BeginIteration();
REPEAT
pClientData := VisuElems.g_ClientManager.GetNextClient();
IF pClientData > 0 THEN
VisuElems.VisuElemBase.g_VisuManager.SetMainVisu(p ClientData, sVisuName);
END_IF
UNTIL
pClientData = 0
END_REPEAT;
Этим методом можно вывести список пользователей и у кого какая визуализация открыта и т.д.
Речь об управлении пользователями (User Managment)?
Да, как вариант, такой подход в определенных случаях возможен.
Если не сложно, выложите простейший пример, пожалуйста. Несколько пустых экранов визуализаций с кнопками перехода, много веб-клиентов, и чтобы программа понимала, какой экран у какого из клиентов сейчас открыт, при этом сама программа визуализации не переключает.Этим методом можно вывести список пользователей и у кого какая визуализация открыта и т.д.
Или список пользователей - список пользователей из User Managment?
Последний раз редактировалось Евгений Кислов; 20.11.2015 в 15:39.
СODESYS V3.5: Repository Archive V3.5 SP4 (необходим для старых СПК) / Раздел CDS V3.5 на сайте
Форум: Вопросы и ответы / Визуализация / Настройка обмена с другими устройствами
Web-панель ВП110 / Modbus-индикатор СМИ2-М
Telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | oscat.ru | Как обратиться в техподдержку?
Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | XY problem | Как правильно задавать вопросы | AnyDesk
Я имел ввиду, что этим вариантом можно показать определенную визуализацию для конкретного пользователя или для группы пользователей. Также можно вывести список подключенных пользователей и открытых у них визуализаций и координаты курсора можно получить для конкретного пользователя. Вообще очень интересная штука эта ClientData. Но вопрос в том как получить ClientData текущего пользователя без перечисления.
Я имел ввиду, что этим вариантом можно показать определенную визуализацию для конкретного пользователя или для группы пользователей. Также можно вывести список подключенных пользователей и открытых у них визуализаций и координаты курсора можно получить для конкретного пользователя.
Можно тогда подробнее на этом остановиться? Расскажите, как это сделать, я думаю, многим будет интересно
3S показывали как раз вариант с перечислением. Как я понимаю, иного способа (по крайней мере, доступного пользователям) вытащить ClientData в программу не существует.Но вопрос в том как получить ClientData текущего пользователя без перечисления.
СODESYS V3.5: Repository Archive V3.5 SP4 (необходим для старых СПК) / Раздел CDS V3.5 на сайте
Форум: Вопросы и ответы / Визуализация / Настройка обмена с другими устройствами
Web-панель ВП110 / Modbus-индикатор СМИ2-М
Telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | oscat.ru | Как обратиться в техподдержку?
Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | XY problem | Как правильно задавать вопросы | AnyDesk
Где показывает?3S показывали как раз вариант с перечислением. Как я понимаю, иного способа (по крайней мере, доступного пользователям) вытащить ClientData в программу не существует.
Насчет примера... Вот например функция получения имен подключенных пользователей.
VAR_GLOBAL
ArrUserName: ARRAY [1..100] OF WSTRING;
END_VAR
VAR
pClientData: POINTER TO VisuElems.VisuStructClientData;
i: INT;
END_VAR
VisuElems.g_ClientManager.BeginIteration();
FOR i := 1 TO 100 DO
ArrUserName[i] := "";
END_FOR
i := 0;
REPEAT
i := i + 1;
pClientData := VisuElems.g_ClientManager.GetNextClient();
IF pClientData > 0 THEN
IF i <= 100 THEN
ArrUserName[i] := pClientData^.GlobalData.CurrentUserName;
END_IF
END_IF
UNTIL
pClientData = 0
END_REPEAT;
Но мне нужен ID текущего пользователя, в принципе только из-за него и начал всё это рыть.