SysWrSpyData, system write spy data

Home / Knowledge Base / Manualistica / Programmazione IEC 61131-3 / Gestione sistema / SysWrSpyData, system write spy data

Questa funzione permette di inviare dati alla console di spionaggio (Accessibile da Telnet con il comando SpyData). É possibile definire sia il modo di visualizzazione dei dati spiati Mode che abbinare una etichetta nella stringa spiata Label. Il parametro Length limita la lunghezza dei caratteri in spionaggio.

Con il parametro TFlags è possibile definire un pattern di 32 bits che viene usato come trigger per la visualizzazione dei dati spiati nella console di spionaggio Telnet.

La funzione ritorna una varaibile (BOOL), TRUE se vi è spazio per salvare il record spiato e FALSE se la console è occupata.

Function
CODESYS: Non disponibile
LogicLab: eLLabXUnified12Lib

Mode (SPY_MODE) Definisce il modo di visualizzazione dei dati spiati (Definizione).

Length (UDINT) Lunghezza a cui troncare la stringa, si utilizza con i modi SPY_ASCII_L, SPY_ASCHEX_L, SPY_BINARY.

TFlags (DWORD) Definisce i bits di trigger per la visualizzazione dei dati spiati.

Label (@STRING) Etichetta riportata nella stringa spiata.

DPtr (@eVOID) Puntatore alla stringa dati da spiare.

La funzione ritorna un (BOOL) FALSE se console di spionaggio occupata, TRUE se funzione eseguita correttamente.

Errori

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

Record di spy

Nei sistemi basati su processori ARM il record visualizzato nella console di spionaggio ha lunghezza totale di 80 caratteri, negli altri sistemi non vi è un limite sulla lunghezza a meno che non sia definito nel parametro Length. Tipicamente è un record del tipo:

20:17:30.446022|Label|Spy data string--------------------------------------------

Il record inizia con un campo ora, seguito dal tempo intercorso dal record precedente (in S), i primi due campi hanno lunghezza costante (15 Caratteri), a seguire racchiuso tra i caratteri | vi è la stringa indicata nel parametro Label, a seguire i dati di spionaggio. Nel caso in cui vengano persi records di spionaggio al posto del tempo intercorso verrà visualizzato (----).

Mode SPY_BINARY

Se si definisce come Mode il modo SPY_BINARY occorre anche definire il numero di bytes da visualizzare della stringa da spiare, quindi ipotizzando di voler visualizzare solo 8 bytes avremo una definizione del tipo:

i:=SysWrSpyData(SPY_BINARY, 8, 16#00000100, ADR('Sp 3'), ADR(TString));

Esempi

Come utilizzare gli esempi.
Con tempi random compresi tra 1mS e 1 secondo sono inviati 3 messaggi alla console di spionaggio. Ogni messaggio ha Mode diverso ed è contraddistinto da una etichetta che lo identifica. Ecco il risultato visibile dalla console di spionaggio.

11:19:28(.674)|Sp 1|Hello!..                                                    
11:19:28(.169)|Sp 2|Hello![0D][0A]
11:19:28(.005)|Sp 3|48 65 6C 6C 6F 21 0D 0A 00 00 00 00 00 00 00 00 00 00 00 00
11:19:29(.916)|Sp 1|Hello!..
11:19:30(.744)|Sp 2|Hello![0D][0A]
11:19:31(.943)|Sp 3|48 65 6C 6C 6F 21 0D 0A 00 00 00 00 00 00 00 00 00 00 00 00
LogicLab (Ptp116)
PROGRAM ST_SysWrSpyData
VAR
    i : UDINT; (* Auxiliary buffer *)
    CaseNr : USINT; (* Program case *)
    TimeBf : UDINT; (* Time buffer (uS) *)
    WTime : REAL; (* Wait time (S) *)
    TString : STRING[ 32 ]; (* Text string *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_SysWrSpyData"
// *****************************************************************************
// Sends to spy console 3 data records.
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // PROGRAM INIT
    // -------------------------------------------------------------------------
    // Program init.

    IF (SysFirstLoop) THEN
        TString:='Hello!$r$n'; //Text string
        TimeBf:=SysGetSysTime(TRUE); //Time buffer (uS)
        WTime:=1.0; //Wait time (S)
    END_IF;

    // -------------------------------------------------------------------------
    // SEND SPY DATA RECORDS
    // -------------------------------------------------------------------------
    // Wait a random time between 0.1 to 1 second.

    IF ((SysGetSysTime(TRUE)-TimeBf) < TO_UDINT(WTime*1000000.0)) THEN RETURN; END_IF;
    TimeBf:=SysGetSysTime(TRUE); //Time buffer (uS)
    WTime:=0.001+(SysGetRandom(TRUE)*0.999); //Wait time (S)

    // Change the program case.

    CaseNr:=CaseNr+1; //Program case
    IF (CaseNr > 2) THEN CaseNr:=0; END_IF;

    // Send spy message.

    CASE (CaseNr) OF
        0: i:=SysWrSpyData(SPY_ASCII, 0, 16#00000001, ADR('Sp 1'), ADR(TString)); //Ascii mode
        1: i:=SysWrSpyData(SPY_ASCHEX, 0, 16#00000010, ADR('Sp 2'), ADR(TString)); //Extended ascii mode
        2: i:=SysWrSpyData(SPY_BINARY, 8, 16#00000100, ADR('Sp 3'), ADR(TString)); //Binary mode
    END_CASE;

// [End of file]

Ti è stato utile questo articolo ?