PDA

Просмотр полной версии : Время до выхода в СПК207 (CurrentRemainingAutoLogoutTime)



Спорягин Кирилл
26.05.2016, 16:55
Добрый день, уважаемые форумчане!

Как следует из руководства по СПК ("СПК. Визуализация. Руководство для начинающих и продвинутых пользователей", стр. 394)
для пользователя "None" в параметре CurrentRemainingAutoLogoutTime отражается "некорректное значение, поскольку сам параметр в контексте
отсутствия пользователя не имеет смысла". Все верно, но хочется, чтобы данный параметр не отображался для данного пользователя.
Нашел такой естественный выход из положения, как прописать в программе следующий код:

AutoLogOutTimeVisible := WSTRING_TO_STRING(VisuElems.CurrentUserGroupName) <> 'None';

Теперь к полю "Невидимый" элемента отображения я привязываю переменную AutoLogOutTimeVisible (инвертированную) и все успешно работает.
А именно, на экране СПК207 время до выхода отображается только для пользователей не принадлежащих к группе "None".

Проблема начинается, когда одновременно с работой СПК207, я подключаюсь к нему браузером. В этом случае, если текущий пользователь на одном из устройств принадлежит группе "None", а на другом устройстве выполнен вход, например, под пользователем из группы Admin, переменная отображающая время до выхода начинает мигать, то отображая время, то исчезая с экрана, причем на обоих устройствах. Если залогинится к панели через CoDeSys, то видно, что переменная VisuElems.CurrentUserGroupName принимает, то значение "None", то значение "Admin".

Как это поправить?

Евгений Кислов
26.05.2016, 17:47
Добрый день, уважаемые форумчане!

Как следует из руководства по СПК ("СПК. Визуализация. Руководство для начинающих и продвинутых пользователей", стр. 394)
для пользователя "None" в параметре CurrentRemainingAutoLogoutTime отражается "некорректное значение, поскольку сам параметр в контексте
отсутствия пользователя не имеет смысла". Все верно, но хочется, чтобы данный параметр не отображался для данного пользователя.
Нашел такой естественный выход из положения, как прописать в программе следующий код:

AutoLogOutTimeVisible := WSTRING_TO_STRING(VisuElems.CurrentUserGroupName) <> 'None';

Теперь к полю "Невидимый" элемента отображения я привязываю переменную AutoLogOutTimeVisible (инвертированную) и все успешно работает.
А именно, на экране СПК207 время до выхода отображается только для пользователей не принадлежащих к группе "None".

Проблема начинается, когда одновременно с работой СПК207, я подключаюсь к нему браузером. В этом случае, если текущий пользователь на одном из устройств принадлежит группе "None", а на другом устройстве выполнен вход, например, под пользователем из группы Admin, переменная отображающая время до выхода начинает мигать, то отображая время, то исчезая с экрана, причем на обоих устройствах. Если залогинится к панели через CoDeSys, то видно, что переменная VisuElems.CurrentUserGroupName принимает, то значение "None", то значение "Admin".

Как это поправить?

Вопрос несколько специфический, поэтому сходу ответить не могу. Если есть возможность, отправьте архив вашего проекта на e.kislov@owen.ru - так мне будет легче предложить вам какое-то решение.

Спорягин Кирилл
26.05.2016, 18:16
Отправил письмом архив проекта.

Спорягин Кирилл
09.06.2016, 11:13
Для тех кто столкнется с подобной задачей предлагаю решение (переработанное решение Евгения Кислова).
Суть метода состоит в использовании переменной CURRENTCLIENTID, которая возвращает номер текущего клиента.
Для использования переменной необходимо в проект добавить библиотеку VisuGlobalClientManager.
К сожалению, тестовый проект подгрузить почему-то не получается, поэтому привожу код. В PLC_PRG следует написать, следующее:

(* Время до выхода *)
IF VisuElems.CurrentUserGroupName="None" THEN
asAutoLogoutTime[CURRENTCLIENTID] :='';
ELSE
AutoLogoutTime := TIME_TO_DINT(VisuElems.CurrentRemainingAutoLogoutT ime/1000);
adSeconds[CURRENTCLIENTID] := AutoLogoutTime MOD 60;
adMinutes[CURRENTCLIENTID] := AutoLogoutTime / 60;

asSeconds[CURRENTCLIENTID] := DIntTimeToStrTime(DIntTime:= adSeconds[CURRENTCLIENTID]);
asMinutes[CURRENTCLIENTID] := DIntTimeToStrTime(DIntTime:= adMinutes[CURRENTCLIENTID]);
asAutoLogoutTime[CURRENTCLIENTID] := concat(concat(asMinutes[CURRENTCLIENTID],' : '),asSeconds[CURRENTCLIENTID]);
END_IF

Код функции DIntTimeToStrTime выглядит следующим образом:

if DIntTime < 10 then
DIntTimeToStrTime := concat('0', dint_to_string(DIntTime));
else
DIntTimeToStrTime := dint_to_string(DIntTime);
end_if;

Теперь к полю вывода привязываем переменную: asAutoLogoutTime[CURRENTCLIENTID].
В этом случае для каждого пользователя будет отображаться свое время до выхода.

Спасибо, за подробный пример Евгению Кислову.

Спорягин Кирилл
15.06.2016, 11:45
Нашел более простой способ. Необходимо использовать переменную CurrentUseAutoLogoutTime, класса VisuElems.
Привязываем ее к полю "Невидимый" и все работает без дополнительного кода.

Евгений Кислов
15.06.2016, 11:51
Нашел более простой способ. Необходимо использовать переменную CurrentUseAutoLogoutTime, класса VisuElems.
Привязываем ее к полю "Невидимый" и все работает без дополнительного кода.

Спасибо за информацию.

Внесу дополнение - использовать надо инвертированное значение переменной.