FB_AmsLogger

FB_AmsLogger 1:

Der "TwinCAT AMS Logger" gehört zu den Komponenten des "TwinCAT ADS Monitors" (..\TwinCAT\AdsMonitor\Logger\TcAmsLog.exe). Der Logger zeichnet die AMS/ADS-Kommandos auf den Datenträger auf. Die Aufzeichnung kann später z.B. bei einer Fehlersuche mit dem "TwinCAT AMS ADS Viewer" angezeigt und analysiert werden.
Mit dem FB_AmsLogger-Funktionsbaustein kann die Aufzeichnung aus einem SPS-Programm gestartet bzw. gestoppt werden. Der FB_AmsLogger-Funktionsbaustein kann nur mit einer bereits existierenden/laufenden Instanz der TcAmsLog.exe kommunizieren. D.h. die TcAmsLog.exe muss vorher (z.B. manuell aus dem Start-Menue) oder mit Hilfe des NT_StartProcess-Bausteins gestartet worden sein.

FB_AmsLogger 2: Eingänge

VAR_INPUT
    sNetId       : T_AmsNetId := '';
    eMode        : E_AmsLoggerMode := AMSLOGGER_RUN;
    sCfgFilePath : T_MaxString := '';
    bExecute     : BOOL;
    tTimeout     : TIME := DEFAULT_ADS_TIMEOUT;
END_VAR

Name

Typ

Beschreibung

sNetId

T_AmsNetID

Hier kann die Netzwerkadresse des TwinCAT-Rechners angegeben werden, auf dem der Status des "TwinCAT AMS Loggers" geändert werden soll. Für den Logger auf dem lokalen Rechner kann auch ein Leerstring angegeben werden.

eMode

E_AmsLoggerMode

Der neue Status in den der "TwinCAT AMS Logger" versetzt werden soll (Aufzeichnung starten/stoppen).

sCfgFilePath

T_MaxString

(Optional) Pfad für eine "TwinCAT AMS Logger"-Konfigurationsdatei. Zurzeit noch nicht implementiert und reserviert für zukünftige Anwendungen (geben Sie einen Leerstring an).

bExecute

BOOL

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

tTimeout

TIME 

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

FB_AmsLogger 3: Ausgänge

VAR_OUTPUT
    bBusy  : BOOL;
    bError : BOOL;
    nErrId : UDINT;
END_VAR

Name

Typ

Beschreibung

bBusy

BOOL

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

bError

BOOL

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

nErrId

UDINT

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

Beispiel:

Beim SPS-Programmstart wird auf einem lokalen System eine Instanz von TcAmsLog.exe gestartet. Beim Setzen der bRecord-Variablen auf TRUE wird die Aufzeichnung AMS/ADS-Kommandos gestartet und beim zurücksetzen auf FALSE gestoppt.

Deklarationsteil:

PROGRAM MAIN
VAR
    bRecord        : BOOL := TRUE;(* TRUE => start recording, FALSE => stop recording *)
    fbStartProcess : NT_StartProcess := ( NETID := '', PATHSTR: = 'c:\TwinCAT\AdsMonitor\Logger\TcAmsLog.exe',
                                      DIRNAME:= 'c:\TwinCAT\AdsMonitor\Logger', COMNDLINE := '', TMOUT := DEFAULT_ADS_TIMEOUT );
    fbAmsLogger    : FB_AmsLogger := ( sNetID := '', eMode := AMSLOGGER_STOP, sCfgFilePath := '', tTimeout := DEFAULT_ADS_TIMEOUT );
    state          : BYTE;
    bBusy          : BOOL;
    bError         : BOOL;
    nErrID         : UDINT;
    eCurrMode      : E_AmsLoggerMode := AMSLOGGER_STOP;(* Current mode/state *)
    eNewMode       : E_AmsLoggerMode := AMSLOGGER_STOP;(* New mode/state *)
    timer          : TON := ( PT := T#5s );
END_VAR

Implementierung:

CASE state OF
0:(* Start instance of TcAmsLogger.exe *)
    fbStartProcess( START := FALSE );
    fbStartProcess( START:= TRUE );
    state := 1;

1:(* Wait until command execution started *)
    fbStartProcess( START := FALSE, BUSY=>bBusy, ERR=>bError, ERRID=>nErrID );
    IF NOT bBusy THEN
        IF NOT bError THEN(* Success *)
            state := 2;
        ELSE(* Error *)
            state := 100;
        END_IF
    END_IF

2:(*Wait until instance started or new AMS logger mode/state set *)
    timer( IN := TRUE );
    IF timer.Q THEN
        timer( IN := FALSE );
        state := 3;
    END_IF

3:(* Change TcAmsLog.exe mode/state *)
    eNewMode := SEL( bRecord, AMSLOGGER_STOP, AMSLOGGER_RUN);
    IF ( eNewMode <> eCurrMode ) THEN
        fbAmsLogger( bExecute := FALSE );
        fbAmsLogger( eMode:= eNewMode, bExecute := TRUE );
        state := 4;
    END_IF

4:(* Wait until command execution started *)
    fbAmsLogger( bExecute := FALSE, bBusy=>bBusy, bError=>bError, nErrID=>nErrID );
    IF NOT bBusy THEN
        IF NOT bError THEN(* Success *)
            eCurrMode := eNewMode;
            state := 2;
        ELSE(* Error *)
            state := 100;
        END_IF
    END_IF

100:(* Error state *)
    ;
END_CASE

Voraussetzungen

Entwicklungsumgebung

Zielplattform

Einzubindende SPS-Bibliotheken (Kategoriegruppe)

TwinCAT v3.1.0

PC oder CX (x86, x64, Arm®)

Tc2_Utilities (System)