Ping-Befehl bei Codesys 2

Begonnen von Azrael666, 01. Februar 2017, 11:11:28

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 1 Gast betrachten dieses Thema.

Azrael666

Hallo Leute,

ich habe hier einen TURCK BL67-PG-EN liegen, die per Ethernet angeschlossen ist. Ausserdem habe ich hier eine TURCK FEN20-4DIP-4DXP, die ebenfalls ans Ethernet angeschlossen ist.
Ich suche jetzt eine Möglichkeit über z.b. einen Ping-Befehl zu erkennen wenn die FEN20 nicht mehr ans Ethernet angeschlossen ist.

Für Codesys 3 gibt es den Baustein SysSockPing. Damit funktioniert das im Prinzip wunderbar.

Die BL67 die ich hier haben ist aber noch eine alte Version, die nur mit Codesys 2 zu handhaben ist und hier habe ich solch einen Baustein nicht gefunden. Hat da jemand eine Idee?

MFG

Azrael666

#1
So einmal ein Nachtrag von mir. Ich habe jetzt ein bischen gebastelt und evtl. einen halbwegs praktische Lösung gefunden.
Erst mal mein Code:

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



    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