Hallo peewit,
ich kriegs nicht hin. Ich habe nun zwei Instanzen von IP_CONTROL, zwei Instanzen der Kontrollstruktur IP_C und der Datenstrukturen. Dann habe ich jeweils separate Schrittketten für zwei Kameras. Wenn ich beim ersten UDP "Master" das Senden starte, empfängt der richtige IP_CONTROL Baustein auch was. Wenn ich nun den zweiten UDP Master starte, empfägt das auch der Baustein, der als erstes verbunden war. Der andere dreht sich in der Timeout-Schleife zwischen Schritt 5 und 10.
CASE iInfeedCameraStep OF
5: (* Ressourcen anfragen *)
IF stIP_C.C_STATE = 0 THEN
stModuleData_Out.xInfeedCameraConnected := FALSE;
stIP_C.C_STATE := 1;
sIpAdressInfeed := '192.168.10.205';
stIP_C.C_IP := IP4_DECODE(sIpAdressInfeed);
stIP_C.C_ENABLE := FALSE;
stIP_C.TIME_RESET := FALSE;
stIP_C.R_OBSERVE := FALSE;
stR_BUF.SIZE := 0;
FOR j := 0 TO 200 DO
stR_BUF.BUFFER[j]:= 0;
END_FOR
iInfeedCameraStep := 10;
END_IF
10: (* Warte auf Freigabe *)
stIP_C.C_IP := IP4_DECODE(sIpAdressInfeed);
stIP_C.C_ENABLE := TRUE;
stIP_C.TIME_RESET := TRUE;
stIP_C.R_OBSERVE := TRUE;
stR_BUF.SIZE := 0;
(* Sendedaten einrichten *)
stS_BUF.SIZE := 0;
IF stIP_C.C_STATE = 255 THEN
stModuleData_Out.xInfeedCameraConnected := TRUE;
iInfeedCameraStep := 15;
ELSIF (stIP_C.ERROR <> 0) THEN
iInfeedCameraStep := 5;
END_IF
15: (* Fehler abfangen *)
IF (stIP_C.ERROR <> 0) THEN
(* Abmelden *)
stIP_C.C_ENABLE := FALSE;
stIP_C.R_OBSERVE := FALSE;
stIP_C.C_STATE := 0;
iInfeedCameraStep := 5;(*17;*)
xErrorInfeedCamera := TRUE;
ELSIF (stR_BUF.SIZE > 0) AND (IP4_TO_STRING(stIP_C.C_IP) = '192.168.10.205') THEN
sInfeedCameraDataString := FUN_ByteArrayToString(stR_BUF.BUFFER);
IF NOT stR_BUF.BUFFER[0] = 68 THEN (* 'D' from 'DeviceState, which is beeing sent every 5 sec *)
IF sInfeedCameraDataString = 'true' THEN
stModuleData_Out.xInfeedCameraProdOK := TRUE;
stModuleData_Out.xInfeedCameraProdNOK := FALSE;
ELSE
stModuleData_Out.xInfeedCameraProdOK := FALSE;
stModuleData_Out.xInfeedCameraProdNOK := TRUE;
END_IF
END_IF
stR_BUF.SIZE := 0;
FOR j := 0 TO 200 DO
stR_BUF.BUFFER[j]:= 0;
END_FOR
END_IF
END_CASE
stIP_C.C_MODE := 3; (* UDP passiv mit IP und Port *)
stIP_C.C_PORT := 32002;
fbIPControlInfeed(
IP:= IP4_DECODE(sIpAdressInfeed),
PORT:= ,
TIME_OUT:= UINT_TO_TIME(uiTimeout),
IP_C:= stIP_C,
S_BUF:= stS_BUF,
R_BUF:= stR_BUF);
zweite Kamera
CASE iOutfeedCameraStep OF
5: (* Ressourcen anfragen *)
IF stIP_C_outfeed.C_STATE = 0 THEN
stModuleData_Out.xOutfeedCameraConnected := FALSE;
stIP_C_outfeed.C_STATE := 1;
sIpAdressOutfeed := '192.168.10.207';
stIP_C_outfeed.C_IP := IP4_DECODE(sIpAdressOutfeed);
stIP_C_outfeed.C_ENABLE := FALSE;
stIP_C_outfeed.TIME_RESET := FALSE;
stIP_C_outfeed.R_OBSERVE := FALSE;
stR_BUF_outfeed.SIZE := 0;
FOR j := 0 TO 200 DO
stR_BUF_outfeed.BUFFER[j]:= 0;
END_FOR
iOutfeedCameraStep := 10;
END_IF
10: (* Warte auf Freigabe *)
stIP_C_outfeed.C_IP := IP4_DECODE(sIpAdressOutfeed);
stIP_C_outfeed.C_ENABLE := TRUE;
stIP_C_outfeed.TIME_RESET := TRUE;
stIP_C_outfeed.R_OBSERVE := TRUE;
stR_BUF_outfeed.SIZE := 0;
IF stIP_C_outfeed.C_STATE = 255 THEN
stModuleData_Out.xOutfeedCameraConnected := TRUE;
iOutfeedCameraStep := 15;
ELSIF (stIP_C_outfeed.ERROR <> 0) THEN
iOutfeedCameraStep := 5;
END_IF
15: (* Fehler abfangen *)
IF (stIP_C_outfeed.ERROR <> 0) THEN
(* Abmelden *)
stIP_C_outfeed.C_ENABLE := FALSE;
stIP_C_outfeed.R_OBSERVE := FALSE;
stIP_C_outfeed.C_STATE := 0;
iOutfeedCameraStep := 5;
xErrorOutfeedCamera := TRUE;
ELSIF (stR_BUF_outfeed.SIZE > 0) AND (IP4_TO_STRING(stIP_C_outfeed.C_IP) = '192.168.10.207') THEN
sOutfeedCameraDataString := FUN_ByteArrayToString(stR_BUF_outfeed.BUFFER);
IF NOT stR_BUF_outfeed.BUFFER[0] = 68 THEN (* 'D' from 'DeviceState, which is beeing sent every 5 sec *)
IF sOutfeedCameraDataString = 'true' THEN
stModuleData_Out.xOutfeedCameraProdOK := TRUE;
stModuleData_Out.xOutfeedCameraProdNOK := FALSE;
ELSE
stModuleData_Out.xOutfeedCameraProdOK := FALSE;
stModuleData_Out.xOutfeedCameraProdNOK := TRUE;
END_IF
END_IF
stR_BUF_outfeed.SIZE := 0;
FOR j := 0 TO 200 DO
stR_BUF_outfeed.BUFFER[j]:= 0;
END_FOR
END_IF
END_CASE
stIP_C_outfeed.C_MODE := 3; (* UDP passiv mit IP und Port *)
stIP_C_outfeed.C_PORT := 32002;
fbIPControlOutfeed(
IP:= IP4_DECODE(sIpAdressOutfeed),
PORT:= ,
TIME_OUT:= UINT_TO_TIME(uiTimeout),
IP_C:= stIP_C_outfeed,
S_BUF:= stS_BUF_outfeed,
R_BUF:= stR_BUF_outfeed);
Was mache ich falsch?