SysGetRandom, get random number

  1. Home
  2. Knowledge Base
  3. Manualistica
  4. Programmazione IEC 61131-3
  5. Funzioni ed FB
  6. SysGetRandom, get random number

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

eCDSS8CoreMng, eLLabS8CoreMng

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.

Esempi

Come utilizzare gli esempi.
Nel seguente esempio viene eseguito il lampeggio di una uscita logica con un tempo random compreso tra 1 e 3 secondi.

CODESYS (Ptp163)
VAR
    S8Core : SysCoreManager; (* System core manager *)
    DInp : DWORD; (* Digital input value *)
    DOut : DWORD; (* Digital output value *)
    TimeBf : UDINT; (* Time buffer (uS) *)
    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.
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // CORE MANAGEMENT
    // -------------------------------------------------------------------------
    // Manage the S8Core.

    S8Core(Enable:=TRUE, PConsole:=10000, HWDogTm:=0, pI2CManager:=ADR(I2C_master));
    IF NOT(S8Core.Ready) THEN RETURN; END_IF;

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

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

    // -------------------------------------------------------------------------
    // DIGITAL I/O MODULE MANAGING
    // -------------------------------------------------------------------------
    // Managing the digital I/O module.

     SysDIOModule(0, ADR(DInp), ADR(DOut)); //Module "0"

    // -------------------------------------------------------------------------
    // 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)
        DOut.0:=NOT(DOut.0);
    END_IF;

// [End of file]
LogicLab (Ptp164)

Ti รจ stato utile questo articolo ?