So einmal ein Nachtrag von mir. Ich habe jetzt ein bischen gebastelt und evtl. einen halbwegs praktische Lösung gefunden.
Erst mal mein Code:
Eventuell funktioniert das Ganze nur mit Teilnehmern die über eine eigene Weboberfläche verfügen.
Konstruktive Kritik ist erwünscht ;)
MFG
Erst mal mein Code:
Code Auswählen
FUNCTION_BLOCK CHECK_IP
VAR_INPUT
IP_Adresse : STRING[15]; (*IP-Adresse*)
END_VAR
VAR_OUTPUT
IP_NA : BOOL; (*Fehler IP nicht erreichbar*)
END_VAR
VAR
Check : IP_CONTROL;
IP_C : IP_C; (*Parametrierungsdaten*)
S_BUF : NETWORK_BUFFER; (*Sendedaten*)
R_BUF : NETWORK_BUFFER; (*Empfangsdaten*)
TIME_OUT : TIME; (*Überwachungszeit*)
ANF_CHECK : TP; (**)
CHECK_UP : TON; (**)
CHECK_PUFFER: TON; (*Verzögerung Fehlerfall*)
IP_NA_TEMP : BOOL; (*Fehler IP nicht erreichbar / TEMP*)
END_VAR
Code Auswählen
IP_C.C_MODE := 0; (* Mode: UDP+AKTIV+PORT+IP *)
IP_C.TIME_RESET := TRUE; (* Zeitüberwachung rücksetzen *)
IP_C.R_OBSERVE := FALSE; (* Datenempfang überwachen *)
S_BUF.SIZE := 1;
R_BUF.SIZE := 0; (* Empfangslänge rücksetzen *)
TIME_OUT := t#200ms; (*Überwachungszeit*)
Check(
IP:=IP4_DECODE(IP_Adresse),
PORT:=80,
TIME_OUT:=TIME_OUT,
IP_C:=IP_C,
S_BUF:=S_BUF,
R_BUF:=R_BUF);
CHECK_UP (IN:= NOT ANF_CHECK.Q , PT:=t#2000ms);
ANF_CHECK (IN:= CHECK_UP.Q , PT:=t#1000ms);
IP_C.C_ENABLE := ANF_CHECK.Q;
IF IP_C.C_ENABLE AND IP_C.C_STATE <> 255 THEN
IP_NA_TEMP := TRUE;
ELSE IF IP_C.C_ENABLE AND IP_C.C_STATE = 255 THEN
IP_NA_TEMP := FALSE;
END_IF;
END_IF;
CHECK_PUFFER (IN:= IP_NA_TEMP , PT:=t#20ms);
IP_NA := CHECK_PUFFER.Q;
Eventuell funktioniert das Ganze nur mit Teilnehmern die über eine eigene Weboberfläche verfügen.
Konstruktive Kritik ist erwünscht ;)
MFG