Здравствуйте.
Необходимо переключать визуализацию на 10-ти мониторах одновременно в определенное время: мониторы 1, 2, 3 - визуализация 1; мониторы 4, 5, 6, 7, 8 - визуализация 2, мониторы 9, 10 - визуализация 3.
ФБ Фильтр клиентов
Код:
FUNCTION_BLOCK Group_Client_Filter IMPLEMENTS VU.IVisualizationClientFilter
VAR_INPUT
eGroupVisuClient: GroupVisuClient; //Перечисление групп клиентов WEB-визуализации
END_VAR
VAR_OUTPUT
END_VAR
VAR
END_VAR
Метод ФБ Фильтр клиентов
Код:
(* For every client can be desided, if it is accepted.
``TRUE``: Client is accepted*)
METHOD IsAccepted : BOOL
VAR_INPUT
(* The client, to check*)
itfClient: VU.IVisualizationClient;
END_VAR
VAR
END_VAR
VAR CONSTANT
IP_70: STRING:='192.168.1.70';
IP_71: STRING:='192.168.1.71';
IP_72: STRING:='192.168.1.72';
IP_73: STRING:='192.168.1.73';
IP_74: STRING:='192.168.1.74';
IP_75: STRING:='192.168.1.75';
IP_76: STRING:='192.168.1.76';
IP_77: STRING:='192.168.1.77';
IP_78: STRING:='192.168.1.78';
IP_79: STRING:='192.168.1.79';
END_VAR
Код:
//IP-адрес клиента визуализации
TargetVars.sVisuClientIP:=itfClient.GetIPv4Address();
CASE TargetVars.iGroupVisuClient OF
1: IsAccepted:=(TargetVars.sVisuClientIP=IP_70);
IsAccepted:=(TargetVars.sVisuClientIP=IP_71);
IsAccepted:=(TargetVars.sVisuClientIP=IP_72);
2: IsAccepted:=(TargetVars.sVisuClientIP=IP_73);
IsAccepted:=(TargetVars.sVisuClientIP=IP_74);
IsAccepted:=(TargetVars.sVisuClientIP=IP_75);
IsAccepted:=(TargetVars.sVisuClientIP=IP_76);
IsAccepted:=(TargetVars.sVisuClientIP=IP_77);
3: IsAccepted:=(TargetVars.sVisuClientIP=IP_78);
IsAccepted:=(TargetVars.sVisuClientIP=IP_79);
END_CASE
Перечисление Группа клиентов
Код:
{attribute 'qualified_only'}
{attribute 'strict'}
TYPE GroupVisuClient :
(
GroupVisuClient_1 :=1, //Клиенты WEB-визуализации Участка сборки шасси 192.168.1.70-72
GroupVisuClient_2 :=2, //Клиенты WEB-визуализации Участка сборки автомобилей 192.168.1.73-77
GroupVisuClient_3 :=3 //Клиенты WEB-визуализации Линии сборки кабин 192.168.1.78-79
);
END_TYPE
PLC_PRG
Код:
//Передний фронт времени переключения визуализаций
R_TRIG_MainVisuMonitor(CLK:=TargetVars.stRTC.sGetFormatTime=TargetVars.sStartShift1 OR TargetVars.stRTC.sGetFormatTime=TargetVars.sEndLunch1 OR TargetVars.stRTC.sGetFormatTime=TargetVars.sEndBreak11
OR TargetVars.stRTC.sGetFormatTime=TargetVars.sEndBreak12 OR TargetVars.stRTC.sGetFormatTime='08:27:00');
//Проверка IP клиента на соответствие определенной группе, если совпадает, присваиваем номер группы и переключаем визуализацию на определенных клиентах
IF TargetVars.sVisuClientIP='192.168.1.70' OR TargetVars.sVisuClientIP='192.168.1.71' OR TargetVars.sVisuClientIP='192.168.1.72'
THEN TargetVars.iGroupVisuClient:=1;
fbChangeVisuMainChassis.xExecute:=R_TRIG_MainVisuMonitor.Q;
END_IF
IF TargetVars.sVisuClientIP='192.168.1.73' OR TargetVars.sVisuClientIP='192.168.1.74' OR TargetVars.sVisuClientIP='192.168.1.75' OR TargetVars.sVisuClientIP='192.168.1.76' OR TargetVars.sVisuClientIP='192.168.1.77'
THEN TargetVars.iGroupVisuClient:=2;
fbChangeVisuMainCar.xExecute:=R_TRIG_MainVisuMonitor.Q;
END_IF
IF TargetVars.sVisuClientIP='192.168.1.78' OR TargetVars.sVisuClientIP='192.168.1.79'
THEN TargetVars.iGroupVisuClient:=3;
fbChangeVisuMainCabin.xExecute:=R_TRIG_MainVisuMonitor.Q;
END_IF
//Вызов ФБ Переключение WEB-визуализации Участок сборки шасси (Главный экран)
fbChangeVisuMainChassis (xExecute:=R_TRIG_MainVisuMonitor.Q,
itfClientFilter:=fbGroupClientFilter,
sVisuName:='Main_screen_Chassis_section');
//Вызов ФБ Переключение WEB-визуализации Участок сборки автомобилей (Главный экран)
fbChangeVisuMainCar (xExecute:=R_TRIG_MainVisuMonitor.Q,
itfClientFilter:=fbGroupClientFilter,
sVisuName:='Main_screen_Car_section');
//Вызов ФБ Переключение WEB-визуализации Участок сборки шасси (Главный экран)
fbChangeVisuMainCabin (xExecute:=R_TRIG_MainVisuMonitor.Q,
itfClientFilter:=fbGroupClientFilter,
sVisuName:='Main_screen_Cabin_line');
Результат: присвоение номера группы везде 1, вместо 1, 2, 3, и не происходит переключение визуализаций на определенных клиентах.
Снимок.PNG
Предполагаю, что проблема либо в коде метода ФБ Фильтр клиентов, либо в формировании сигнала на переключение визуализаций (один одновременный сигнал на несколько ФБ).