SysWrSpyData, system write spy data

List

Questa pagina fa parte del Manuale Programmazione IEC 61131-3. Vai all indice.

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.

Sostituisce SysSpyData

Sostituisce la funzione SysSpyData, è stato aggiunto il parametro Length per limitare la lunghezza della stringa di spionaggio. Nel caso si voglia limitare la lunghezza, sono stati definiti i modi SPY_ASCII_L, SPY_ASCHEX_L. Definito modo SPY_CHECK per eseguire il test sullo spazio nel buffer di spionaggio. La precedente dichiarazione:

i:=SysSpyData(SPY_ASCII, 16#80000000, ADR('Er'), ADR('Error text'));

Diventa

i:=SysWrSpyData(SPY_ASCII, 0, 16#80000000, ADR('Er'), ADR('Error text'));
Information Circle

Funzione

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 (PVOID) Puntatore alla stringa dati da spiare.
La funzione ritorna un (BOOL) FALSE se console di spionaggio occupata, TRUE se funzione eseguita correttamente

Immagine F SysWrSpyData

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 (—-).

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
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
LogicLab (Ptp116, ST_SysWrSpyData)
PROGRAM ST_SysWrSpyData
VAR
    i : UDINT; (* Auxiliary buffer *)
    CaseNr : USINT; (* Program case *)
    TimeBf : UDINT; (* Time buffer (mS) *)
    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:=SysTimeGetMs(); //Time buffer (mS)
        WTime:=1.0; //Wait time (S)
    END_IF;

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

    IF ((SysTimeGetMs()-TimeBf) < TO_UDINT(WTime*1000.0)) THEN RETURN; END_IF;
    TimeBf:=SysTimeGetMs(); //Time buffer (mS)
    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]
Was this article helpful?