SysGetRandom, get random number

List

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

La funzione ritorna un numero random compreso tra 0.0 e 1.0. E’ possibile definire impostando lo stato del parametro Cmd se si vuole avere un nuovo numero random (Cmd:=TRUE) oppure quello memorizzato con la precedente esecuzione della funzione (Cmd:=FALSE). Function

Information Circle

Funzione

CODESYS: eCDSXUnified12Lib

LogicLab: eLLabXUnified12Lib

Descrizione

Cmd (BOOL) Indica il valore random che deve essere ritornato. Se TRUE viene salvato e ritornato un nuovo valore random. Se FALSE viene ritornato il valore random salvato dalla precedente chiamata alla funzione con Cmd:=TRUE.

La funzione ritorna una variabile (REAL) con un valore random compreso tra 0.0 e 1.0.

Immagine F SysGetRandom

Esempi

Come utilizzare gli esempi.
ST_SysGetRandom: Viene eseguito il lampeggio di una uscita logica con un tempo random compreso tra 1 e 3 secondi.

ST_RandomTime: Settando da debug la variabile Calculate viene calcolato un tempo random compreso tra i valori di range definiti.

LogicLab (Ptp116, ST_SysGetRandom)
PROGRAM ST_SysGetRandom
VAR
    BOut : BOOL; (* Blink output *)
    TimeBf : UDINT; (* Time buffer (mS) *)
    BTime : REAL; (* Blink time (S) *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_SysGetRandom"
// *****************************************************************************
// This program blinks an output with a random time, time in the range from 1
// to 3 sec.
// -----------------------------------------------------------------------------

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

    IF (SysFirstLoop) THEN
        TimeBf:=SysTimeGetMs(); //Time buffer (mS)
        BTime:=1.0+(SysGetRandom(TRUE)*2.0); //Blink time (S)
    END_IF;

    // -------------------------------------------------------------------------
    // BLINKING
    // -------------------------------------------------------------------------
    // Blinks the output.

    IF ((SysTimeGetMs()-TimeBf) > TO_UDINT(BTime*1000.0)) THEN
        TimeBf:=SysTimeGetMs(); //Time buffer (mS)
        BTime:=1.0+(SysGetRandom(TRUE)*2.0); //Blink time (S)
        BOut:=NOT(BOut); //Blink output
    END_IF;

// [End of file]
CODESYS (Ptp161, ST_SysGetRandom)
PROGRAM ST_SysGetRandom
VAR
    TimeBf : UDINT; //Time buffer (uS)
    BTime : REAL; //Blink time (S)
    BOut : BOOL; //Blink output
END_VAR

// *****************************************************************************
// PROGRAM "ST_SysGetRandom"
// *****************************************************************************
// This program blinks an output with a random time, time in the range from 1
// to 3 sec.
// -----------------------------------------------------------------------------

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

    IF (GBVar.SysFirstLoop) THEN
        TimeBf:=SysGetSysTime(TRUE); //Time buffer (uS)
        BTime:=1.0+(SysGetRandom(TRUE)*2.0); //Blink time (S)
    END_IF;

    // -------------------------------------------------------------------------
    // BLINKING
    // -------------------------------------------------------------------------
    // Blinks the output.

    IF ((SysGetSysTime(TRUE)-TimeBf) > TO_UDINT(BTime*1000000.0)) THEN
        TimeBf:=SysGetSysTime(TRUE); //Time buffer (uS)
        BTime:=1.0+(SysGetRandom(TRUE)*2.0); //Blink time (S)
        BOut:=NOT(BOut); //Blink output
    END_IF;

// [End of file]
LogicLab (Ptp116, ST_RandomTime)
PROGRAM ST_RandomTime
VAR
    Calculate : BOOL; (* Calculate command *)
    TimeMin : REAL; (* Minimum time (S) *)
    TimeMax : REAL; (* Maximum time (S) *)
    TimeRnd : REAL; (* Random time (S) *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_RandomTime"
// *****************************************************************************
// This program calculates a random time in a defined range of values.
// -----------------------------------------------------------------------------

    // Define the range.

    TimeMin:=120.0; //Minimum time (S)
    TimeMax:=240.0; //Maximum time (S)

    // By activating the "Calculate" variable a random time is calculated.

    IF (Calculate) THEN
        Calculate:=FALSE; //Calculate command
        TimeRnd:=TimeMin+(SysGetRandom(TRUE)*(TimeMax-TimeMin)); //Random time (S)
    END_IF;

// [End of file]

Was this article helpful?