SNMPManager, sends a SNMP message

Home / Knowledge Base / Manualistica / Programmazione IEC 61131-3 / Libreria gestione protocollo SNMP / SNMPManager, sends a SNMP message

Il Simple Network Management Protocol (SNMP) è un protocollo di rete senza connessione che utilizzando connessioni UDP sulle porte 161 e 162, consente di semplificare la configurazione, gestione e supervisione (monitoring) di apparati collegati in una rete. Questo blocco funzione esegue la gestione del protocollo SNMP agendo come Manager.

In Community occorre definire l'indirizzo della stringa di definizione della comunità accettata dall'Agent. Attivando Enable viene inviato all'Agent con indirizzo Address sulla porta Port il messaggio SNMP di tipo PDUType con OID definito. Eseguito l'invio e ricevuta la risposta dall'Agent viene attivata l'uscita Done. Per inviare un nuovo pacchetto occorre disabilitare e poi riabilitare il FB.

Se il messaggio è di lettura, al termine, nella variabile indicata sarà trasferito il valore della variabile acquisita dall'Agent. Se il messaggio è di scrittura, al termine il valore della variabile definita sarà stato trasferito nell'Agent.

Function block
CODESYS: Non disponibile
LogicLab: eLLabSNMPLib

Enable (BOOL) Comando invio richiesta SNMP.

SpyOn (BOOL) Se attivo permette di spiare il funzionamento della FB.

Address (@STRING) Indirizzo IP o URL dell'Agent a cui inviare la query SNMP.

Port (UINT) Porta UDP a cui inviare la query. Solitamente si utilizza la porta 161.

Community (@STRING) Indirizzo allocazione stringa definizione Community.

PDUType (SNMP_PDU) Tipo di query SNMP da inviare.

OID (@STRING) Indirizzo stringa definizione Object Identifier.

VType (SNMP_VT) Tipo variabile ricevuta/da inviare (Vedi tabella sotto).

VAddress (@BYTE) Indirizzo allocazione variabile ricevuta/da inviare.

VLength (UDINT) Lunghezza variabile ricevuta/da inviare.

Delay (REAL) Tempo pausa di ritardo invio richiesta SNMP (S).

Timeout (REAL) Timeout esecuzione query SNMP (S).

Done (BOOL) Esecuzione comando terminata.

Ok (BOOL) Attiva per un loop di programma se comando eseguito correttamente.

Fault (BOOL) Attivo per un loop di programma se errore esecuzione.

ECode (USINT) Riporta l'eventuale codice di errore ricevuto dall'Agent.

EIndex (USINT) Riporta l'eventuale indice di errore ricevuto dall'Agent.

Trigger di spy

Se SpyOn attivo è possibile utilizzare utilizzare la console di spionaggio per verificare il funzionamento della FB. Sono previsti vari livelli di triggers.

Errori

In caso di errore eseguendo immediatamente dopo la funzione SysGetLastError è possibile rilevare il codice di errore. Fare riferimento alla tabella seguente per la descrizione.

Esempi

Come utilizzare gli esempi.

ST_SNMPManager: Vengono eseguite due richieste SNMP verso un Agent su localhost (127.0.0.1), è possibile testarne il funzionamento eseguendolo su di un sistema dove è in esecuzione il programma dimostrativo del FB SNMPAgent. Viene eseguita ciclicamente una richiesta SNMP_PDU#GETRQ di un variabile SNMP_VT#INTEGER dall'agent ed il valore letto viene trasferito in Value. Value viene poi incrementato e tramite una richiesta SNMP_PDU#SETRQ inviato all'agent. In questo modo visualizzando il valore della variabile si vedrà il suo incremento nel tempo

ST_SNMPSTEDataRead: Vengono eseguite due richieste SNMP verso un dispositivo STE acquisendo il valore di temperatura e di umidità.

Per eseguire gli esempi occorre importare la libreria eLLabSNMPLib nel progetto (Articolo).

LogicLab (Ptp137)
PROGRAM ST_SNMPManager
VAR
    IDx : USINT; (* Index *)
    Value : DINT; (* Variable value *)
    SNMPMng : SNMPManager; (* SNMP manager *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_SNMPManager"
// *****************************************************************************
// A simple SNMP manager that makes SNMP queries.
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // INITIALIZATION
    // -------------------------------------------------------------------------
    // Program initialization.

    IF (SysFirstLoop) THEN
        SNMPMng.Port:=161; //Peer port
        SNMPMng.SpyOn:=TRUE; //Spy command
        SNMPMng.Community:=ADR('public'); //Community
        SNMPMng.Delay:=2.0; //Execution delay (S)
        SNMPMng.Timeout:=1.0; //Execution timeout (S)
    END_IF;

    // -------------------------------------------------------------------------
    // SNMP MANAGER
    // -------------------------------------------------------------------------
    // Check if the answer from Agent has been received and manage it.

    IF (SysFirstLoop OR SNMPMng.Done) THEN
        CASE (IDx) OF

            // -----------------------------------------------------------------
            // This query reads the variable value from the agent.

            0:
            IDx:=IDx+1; //Index
            SNMPMng.PDUType:=SNMP_PDU#GETRQ; //PDU type
             SNMPMng.VType:=SNMP_VT#INTEGER; //Variable type        
            SNMPMng.VLength:=SIZEOF(Value); //Variable length        
            SNMPMng.VAddress:=ADR(Value); //Variable address        
            SNMPMng.Address:=ADR('127.0.0.1'); //Agent address
            SNMPMng.OID:=ADR('1.3.6.1.4.1.36955.1'); //OID

            // -----------------------------------------------------------------
            // This query writes the variable value to the agent.

            1:
            IDx:=0; //Index
            Value:=Value+1; //Variable value
            SNMPMng.PDUType:=SNMP_PDU#SETRQ; //PDU type
            SNMPMng.VType:=SNMP_VT#INTEGER; //Variable type        
            SNMPMng.VLength:=SIZEOF(Value); //Variable length        
            SNMPMng.VAddress:=ADR(Value); //Variable address        
            SNMPMng.Address:=ADR('127.0.0.1'); //Agent address
            SNMPMng.OID:=ADR('1.3.6.1.4.1.36955.1'); //OID
        END_CASE;
    END_IF;

    // -------------------------------------------------------------------------
    // SNMP MANAGER
    // -------------------------------------------------------------------------
    // SNMP manager.

    SNMPMng(); //SNMP manager
    SNMPMng.Enable:=NOT(SNMPMng.Done);

// [End of file]
LogicLab (Ptp137)

Ti è stato utile questo articolo ?