FB_EnumRouteEntry

FB_EnumRouteEntry 1:

Mit dem Funktionsbaustein können Informationen über die AMS Router Verbindungen zu anderen TwinCAT Systemen (Remote Routes) ausgelesen werden. Bei mehreren Verbindungen muss der Funktionsbaustein mehrere Male aufgerufen werden und pro Aufruf kann maximal ein Eintrag ausgelesen werden. Mit dem Eingangsparameter eCmd kann durch die Liste der Einträge navigiert werden. Der eCmd-Eingang bestimmt ob der erste oder nächste Eintrag gelesen werden soll.

VAR_INPUT

VAR_INPUT
    sNetID    : T_AmsNetID;
    eCmd      : E_EnumCmdType := eEnumCmd_First;
    bExecute  : BOOL;
    tTimeout  : TIME := DEFAULT_ADS_TIMEOUT;
END_VAR

sNetID: Hier kann ein String mit der Netzwerkadresse des TwinCAT-Rechners angegeben werden, dessen AMS Router Verbindungen gelesen werden sollen (Typ: T_AmsNetID). Für den lokalen Rechner kann auch ein Leerstring angegeben werden.

eCmd: Steuerkommando für den Aufzählungsbaustein (Typ: E_EnumCmdType).

bExecute: Über eine positive Flanke an diesem Eingang wird der Baustein aktiviert.

tTimeout: Gibt die Timeout-Zeit an, die bei der Ausführung des ADS-Kommandos nicht überschritten werden darf.

VAR_OUTPUT

VAR_OUTPUT
    bBusy    : BOOL;
    bError   : BOOL;
    nErrId   : UDINT;
    bEOE     : BOOL;
    stRoute  : ST_AmsRouteEntry;
END_VAR

bBusy: Bei der Aktivierung des Funktionsbausteins wird dieser Ausgang gesetzt und bleibt gesetzt, bis eine Rückmeldung erfolgt.

bError: Sollte ein Fehler bei der Übertragung des Kommandos erfolgen, dann wird dieser Ausgang gesetzt, nachdem der bBusy-Ausgang zurückgesetzt wurde.

nErrId: Liefert bei einem gesetzten bError-Ausgang die ADS-Fehlernummer.

bEOE: Ende der Aufzählung wurde erreicht (end of enumeration). Beim ersten Versuch einen nicht existierenden Eintrag zu lesen wird dieser Ausgang auf TRUE gesetzt. D.h. solange bEOE = FALSE und bError = FALSE sind, sind auch die gelesenen Einträge gültig.

stRoute: Strukturelement mit zuletzt gelesenen Verbindungsparametern (Typ: ST_AmsRouteEntry).

Beispiel:

Auf dem lokalen TwinCAT System sollen die konfigurierten AMS Router Verbindungen ausgelesen und als Meldungen in die TwinCAT System Manager Logger Ausgabe geschrieben werden.

PROGRAM P_EnumRouteEntries
VAR
    fbEnum : FB_EnumRouteEntry := ( sNetID := '', tTimeout := T#5s );
    bEnum  : BOOL := TRUE;
    nState : BYTE := 0;
    sInfo  : T_MaxString;
END_VAR

Bei einer steigenden Flanke an der bEnum-Variablen werden die Verbindungsinformationen ausgelesen.

CASE nState OF
    0:
    IF bEnum THEN (* flag set ? *)
        bEnum := FALSE; (* reset flag *)
        fbEnum.eCmd := eEnumCmd_First; (* enum first entry *)
        nState := 1;
    END_IF

    1: (* enum one entry *)
    fbEnum( bExecute := FALSE );
    fbEnum( bExecute := TRUE );
    nState := 2;

    2: (* wait until function block not busy *)
    fbEnum( bExecute := FALSE );
    IF NOT fbEnum.bBusy THEN
        IF NOT fbEnum.bError THEN
            IF NOT fbEnum.bEOE THEN
                sInfo := CONCAT( 'Name: ', fbEnum.stRoute.sName );
                sInfo := CONCAT( sInfo, ' Address: ' );
                sInfo := CONCAT( sInfo, fbEnum.stRoute.sAddress );
                sInfo := CONCAT( sInfo, ' Transport: ' );
                sInfo := CONCAT( sInfo, ROUTETRANSPORT_TO_STRING( fbEnum.stRoute.eTransport ) );
                ADSLOGSTR( ADSLOG_MSGTYPE_HINT OR ADSLOG_MSGTYPE_LOG, 'ROUTE INFO: %s', sInfo );
                    fbEnum.eCmd := eEnumCmd_Next; (* enum next entry *)
                nState := 1;
            ELSE (* no more route entries *)
                nState := 0;
            END_IF
        ELSE (* log error *)
            ADSLOGSTR( ADSLOG_MSGTYPE_ERROR OR ADSLOG_MSGTYPE_LOG, 'FB_EnumRouteEntry error:%s', DWORD_TO_HEXSTR( fbEnum.nErrID, 0, FALSE ) );
            nState := 0;
        END_IF
    END_IF
END_CASE

Die geschriebenen Logmeldungen in der TwinCAT System Manager Logger Ausgabe:

FB_EnumRouteEntry 2:

Voraussetzungen

Entwicklungsumgebung

Zielplattform

Einzubindende SPS-Bibliotheken (Kategoriegruppe)

TwinCAT v3.1.0

PC oder CX (x86, x64, ARM)

Tc2_Utilities (System)