Вопрос: в проекте есть несколько пользователей web-визуализации.
Требуется при авторизации конкретного пользователя переключить экран визуализации (только для данного пользователя).
Как это можно сделать?
Примечание: приведенный ниже пример подходит для контроллеров, программируемых в CODESYS V3.5 SP11 Patch 5 или выше.
Ответ: см. данный пример, который сделан на базе примера получения информации о пользователях визуализации.
В примере создано два пользователя: User1 с паролем 1 и User2 с паролем 2.
SwitchVisuForUserFromCode01.png
На основном экране (Vis1) расположена кнопка Войти в систему. При нажатии на кнопку появляется окно авторизации.
После авторизации выполняется сбор информации о пользователя (для этого в настройках кнопки в конфигурации ввода на вкладке OnDialogClosed переменной xLogin присваивается TRUE).
Сбор информации осуществляется в программе ClientPrg.
Если обнаружен вход пользователя User1, то осуществляется переход на экран Vis2.
Если обнаружен вход пользователя User2, то осуществляется переход на экран Vis3.
Код:
// переключаем экраны в зависимости от имен залогинившихся пользователей
FOR i:=1 TO iVisuClientCount DO
IF astVisuClientData[i].wsCurrentUserName = "User1" AND NOT(axIsLogged[i]) THEN
axIsLogged[i] := TRUE;
VisuElems.g_VisuManager.SetMainVisu(astVisuClientData[i].pstClientData, 'Vis2');
ELSIF astVisuClientData[i].wsCurrentUserName = "User2" AND NOT(axIsLogged[i]) THEN
axIsLogged[i] := TRUE;
VisuElems.g_VisuManager.SetMainVisu(astVisuClientData[i].pstClientData, 'Vis3');
ELSIF astVisuClientData[i].wsCurrentUserName = "" THEN
axIsLogged[i] := FALSE;
END_IF
END_FOR
Если пользователь нажимает кнопку Назад, то выполняются три действия:
- переключение на экран Vis1
- "разлогинивание" пользователя
- обновление информации о пользователях (xLogin := TRUE), чтобы в программе снять флаг логина данного клиента
Если вы используете CODESYS V3.5 SP17 Patch 3 с плагином визуализации 4.3.0.0 или выше - то см. этот пример и информацию из п. 1.3 данного документа.