DNSRequest, sends a DNS request

List

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

Questo blocco funzione da eseguire in task Back, invia una richiesta DNS. Indicando in DNSServer l’indirizzo IP di un server DNS (Esempio quello di Google 8.8.8.8) è possibile effettuare la richiesta di risoluzione di un dominio.

Attivando l’ingresso Enable viene effettuata la richiesta di risoluzione dell’URL indicato in Domain al server DNS. Se il server risolve l’URL viene attivata l’uscita Done e su DomainIP viene ritornato l’IP relativo e su TTL il Time To Live.

Information Circle

Blocco funzione

CODESYS: Non Disponibile

LogicLab: eLLabNetworkLib

Descrizione

Enable (BOOL) Abilitazione esecuzione. Per rieseguire il comando disabilitare e poi riabilitare questo ingresso.
SpyOn (BOOL) Se attivo permette di spiare il funzionamento del FB (Vedi articolo).
DNSServer (STRING[15]) Stringa di definizione indirizzo IP del server DNS.
Domain (@STRING) Indirizzo stringa definizione URL di cui si desidera risolvere l’IP.
QType (UINT) Tipo di query.
16#0001 A record (host addresses).
16#0002 Name servers (NS) records (Not managed).
16#000F Mail server (MX)
Done (BOOL) Si attiva al termine della esecuzione comando.
Fault (BOOL) Attivo per un loop se errore esecuzione comando.
DomainIP (STRING[15]) Stringa di definizione IP trovato.
TTL (UDINT) Time To Live (S).

Immagine FB DNSRequest

Trigger di spy

Se SpyOn attivo viene eseguita la funzione SysSpyData che permette di utilizzare la console di spionaggio per verificare il funzionamento della FB. Sono previsti vari livelli di triggers.

Livelli di Trigger
TriggerDescrizione
16#00000001Tx: Invio richiesta DNS.
16#00000002Rx: Ricezione risposta DNS.
16#10000000Lg: Messaggio di log.
16#40000000Er: Messaggio di errore.

Esempi

Come utilizzare gli esempi.
Ogni 5 secondi viene eseguita la richiesta di risoluzione dell’URL google.it al server DNS di Google “8.8.8.8”.

LogicLab (Ptp119, ST_DNSRequest)
PROGRAM ST_DNSRequest
VAR
    TimeBf : UDINT; (* Time buffer (mS) *)
    DNS : DNSRequest; (* DNS request *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_DNSRequest"
// *****************************************************************************
// It's request the IP of the "google.it" at the the Google DNS server.
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // INITIALIZATION
    // -------------------------------------------------------------------------
    // Program initializations.

    IF (SysFirstLoop) THEN
        DNS.SpyOn:=TRUE; //Spy on
        DNS.QType:=16#0001; //Query type (A record)
        DNS.DNSServer:=ADR('8.8.8.8'); //DNS server IP
        DNS.Domain:=ADR('google.it'); //URL to be solved
        TimeBf:=SysTimeGetMs(); //Time buffer (mS)
    END_IF;

    // -------------------------------------------------------------------------
    // DNS REQUEST
    // -------------------------------------------------------------------------
    // Execute the DNS request.

    DNS(); //DNS request
    IF (DNS.Done) THEN DNS.Enable:=FALSE; END_IF;

    // Request delay.

    IF ((SysTimeGetMs()-TimeBf) < TO_UDINT(T#5s)) THEN RETURN; END_IF;
    TimeBf:=SysTimeGetMs(); //Time buffer (mS)
    DNS.Enable:=TRUE; //Enable

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