Sample: Client trap

This sample describes a simple Trap send from a PLC to a SNMP management server. Traps can be used to alert thresholds. On every hundred increment of the counter a trap will be send.

Download: PLC Project

Variable Declaration

PROGRAM MAIN
VAR
    SendTrap:       FB_SendTrap;
    iState:         INT := 0;
    iCounter:       UDINT:= 0;
    stVarBind:      ST_SNMP_VariableBinding;
END_VAR

PLC Program

CASE iState OF

    0: (* send trap on every hundred cycle *)
        iCounter := iCounter + 1;
        IF ((iCounter MOD 100) = 0) THEN
            iState := 10;
        END_IF

    10: (* enable FB *)
        SendTrap.bEnable := TRUE;
        IF SendTrap.bEnabled THEN
            iState := 20;
        END_IF

    20: (* set SNMP trap parameter *)
        stVarBind.iType := E_SNMP_INTEGER;
        stVarBind.iLength := SIZEOF(iCounter);
        stVarBind.pArrValue := ADR(iCounter);

        (* TODO: assign object ID of management information base (MIB) *)
        SendTrap.sObjectID := '1.3.6.1.2.1.1.5.0';

        (* TODO: check default community string *)
        SendTrap.sCommunity:= 'public';
        SendTrap.iGenericTrapNumber:= E_SNMP_WarmStart;
        SendTrap.bExecute := TRUE;
        iState := 30;

    30: (* reset *)
        SendTrap.bExecute := FALSE;
        SendTrap.bEnable := FALSE;
        IF NOT SendTrap.bBusy THEN
            iState := 0;
        END_IF

        IF SendTrap.bError THEN
            SendTrap.bEnable := FALSE;
            iState := 99;
        END_IF

    99:(* Error case *)
        ;
END_CASE

SendTrap(
    (* TODO: add device IP of TwinCAT device *)
        sLocalHostIp := '',
    (* TODO: add SNMP Manager IP *)
        sManagerIP := ''
    );

Requirements

Development environment

Target system type

PLC libraries to be linked

TwinCAT version 2.8.0 or higher

PC or CX (x86)

TcSnmp.lib ( TcpIp.Lib; Standard.Lib; TcBase.Lib; TcSystem.Lib are included automatically )

TwinCAT v2.10.0 Build >= 1301

CX (ARM)