SysPing, execute a ping

List

Questa pagina fa parte del Manuale Programmazione IEC 61131-3. Vai all indice.

Questo blocco funzione da eseguire in task Back, controlla se un indirizzo IP è raggiungibile tramite l’invio del comando ping al sistema. Attivando Enable viene inviato il comando di ping ed al termine si attiva Done che rimane attivo fino alla disabilitazione di Enable questo permette esecuzione in cascata dei FBs. Se si ottiene risposta viene attivato per un loop Ok, in caso contrario Fault.

La variabile Length permette  di impostare la lunghezza del pacchetto di ping inviato, nella variabile Time viene ritornato il tempo necessario a completare il comando.

Information Circle

Blocco funzione

CODESYS: Non disponibile

LogicLab: eLLabXUnified12Lib

Descrizione

Enable (BOOL) Abilitazione, attivandolo viene eseguito il comando di ping. Terminato il comando per eseguire un nuovo comando occorre disabilitare e poi riabilitare il FB.
Address (@STRING) Definizione indirizzo IP o URL su cui eseguire il ping.
Length (UINT) Lunghezza in bytes del frame di ping inviato.
Delay (REAL) Tempo di attesa su attivazione Done (S).
Done (BOOL) Si attiva al termine della esecuzione comando e rimane attiva fino alla disabilitazione di Enable.
Ok (BOOL) Attivo se indirizzo IP è raggiungibile (Risposta da Ping).
Fault (BOOL) Attivo per un loop se errore esecuzione comando.
PTime (REAL) Tempo di esecuzione ping (S).

Immagine FB SysPing

Esempi

Come utilizzare gli esempi.

ST_SysPing: Viene eseguito il ping su di un indirizzo IP o su un URL. Enable, viene resettato per un loop al termine del comando in questo modo viene ciclicamente eseguito un nuovo ping ogni tempo di Delay.

ST_ConnectionOk: Viene controllata la connettività Internet, si esegue un ping verso l’IP di Google “8.8.8.8”. Se si desidera controllare anche l’accesso al server DNS è possibile utilizzare l’URL. Dopo un numero di ping consecutivi corretti si considera connessionme attiva.

LogicLab (Ptp116, ST_SysPing)
PROGRAM ST_SysPing
VAR
    Ping : SysPing; (* Ping command *)
    IsReachable : BOOL; (* The IP is reachable *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_SysPing"
// *****************************************************************************
// It's executed a ping on the defined IP address (i.e Google).
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // EXECUTE PING
    // -------------------------------------------------------------------------
	// Execute ping to Google.

	Ping.Address:=ADR('8.8.8.8'); //Address to ping
	Ping.Address:=ADR('www.google.com'); //URL to ping
	Ping.Length:=32; //Frame length
	Ping.Delay:=5.0; //Delay (S)
	Ping(Enable:=NOT(Ping.Done)); //Ping command

	// Manage the reachable flag.

	IF (Ping.Ok) THEN IsReachable:=TRUE; END_IF;
	IF (Ping.Fault) THEN IsReachable:=FALSE; END_IF;

// [End of file]
LogicLab (Ptp181, ST_ConnectionOk)
PROGRAM ST_ConnectionOk
VAR
    ConnectionOk : BOOL; (* Connection available *)
    PCtr : USINT; (* Ping counter *)
    Ping : SysPing; (* Ping command *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_ConnectionOk"
// *****************************************************************************
// This programs pings a Google site to check if a connection to Internet is
// available or not. Instead of to use the IP address use the URL to check also
// the DNS server availability.
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // INITIALIZATION
    // -------------------------------------------------------------------------
    // At first loop initializes variables.

    IF (SysFirstLoop) THEN
        Ping.Address:=ADR('8.8.8.8'); //Address to ping
        Ping.Address:=ADR('www.google.com'); //URL to ping
        Ping.Length:=32; //Frame length
        Ping.Delay:=5.0; //Delay (S)
    END_IF;

    // -------------------------------------------------------------------------
    // EXECUTE PING
    // -------------------------------------------------------------------------
    // Execute the ping and waits for connection available.

    Ping(Enable:=NOT(Ping.Done)); //Ping command

    IF (Ping.Fault) THEN
        IF (PCtr = 0) THEN ConnectionOk:=FALSE; ELSE PCtr:=PCtr-1; END_IF;
    END_IF;

    IF (Ping.Ok) THEN
        IF (PCtr = 3) THEN ConnectionOk:=TRUE; ELSE PCtr:=PCtr+1; END_IF;
    END_IF;

// [End of file]
Was this article helpful?