Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




Random Con Un Plc


Messaggi consigliati

Inserito:

Ciao a tutti!!

Mi stavo chiedendo se è possibile ottenere una memoria random con un PLC.

Mi spiego meglio, riesco ad ottenere un bit che varia dopo ogni intervallo di tempo t da "0" a "1" o viceversa in modo totalmente casuale?

Ciao


Inserita:

Gli algoritmi per generare numeri random non fanno parte del corredo istruzioni dei normali PLC. Dovresti implementartene uno

Gianmario Pedrani
Inserita:

Sul sito della Siemens c'era un esempio per generare numeri random, ma era a pagamento.... pero' se magari chiami l'hot-line trovi qualcuno che ti invia qualcosa....... ho ti sa dare qualche info in piu'

ciaooooooo....

Matteo Montanari
Inserita:
Sul sito della Siemens c'era un esempio per generare numeri random, ma era a pagamento....

se non vuoi pagarla...

FUNCTION_BLOCK "NumeroCasuale"
TITLE ="NumeroCasuale"
AUTHOR : 
FAMILY :
VERSION :


VAR_INPUT
  Val_min : INT;    //Valore minimo del numero casuale
  Val_max : INT;    //Valore massimo del numero casuale
END_VAR
VAR_OUTPUT
  Val_out : INT;    //Valore casuale generato
END_VAR
VAR
  Inited : BOOL;    
  rnd : ARRAY  [0 .. 15 ] OF DINT;    
  iseed : DINT  := L#1234;    
END_VAR
VAR_TEMP
  Aux_int : INT;    
  Aux_dint : DINT;    
END_VAR
BEGIN
NETWORK
TITLE =

      SET  ; 
      SAVE ; 
      =     L      6.1; 
//;
      U     #Inited; 
      NOT  ; 
      SPBN  A7d0; 
//;
      TAR2  LD     8; 
      UC    "TIME_TCK" {
            P#L 12.0};
      LAR2  LD     8;
      L     LD    12; 

      L     DW#16#FFFF; 
      UD   ; 
      T     #iseed; 
      L     0; 
      T     #Aux_int; 
A7d1: L     #Aux_int; 
      L     15; 
      <=I  ; 
      SPBN  A7d2; 
      L     #iseed; 
      L     L#5431; 
      *D   ; 
      L     L#1; 
      +D   ; 
      L     DW#16#FFFF; 
      UD   ; 
      T     #iseed; 
      L     #Aux_int; 
      ITD  ; 
      L     L#32; 
      *D   ; 
      TAR2 ; 
      +D   ; 
      L     #iseed; 
      TAK  ; 
      LAR1 ; 
      TAK  ; 
      T     DID [AR1,P#8.0]; 
      L     #Aux_int; 
      L     1; 
      +I   ; 
      T     #Aux_int; 
      SPA   A7d1; 
A7d2: SET  ; 
      =     #Inited; 
A7d0: L     #iseed; 
      L     L#5431; 
      *D   ; 
      L     L#1; 
      +D   ; 
      L     DW#16#FFFF; 
      UD   ; 
      T     #Aux_dint; 
      SRD   9; 
      L     DW#16#F; 
      UD   ; 
      T     #Aux_int; 
      ITD  ; 
      L     L#32; 
      *D   ; 
      TAR2 ; 
      +D   ; 
      LAR1 ; 
      L     DID [AR1,P#8.0]; 
      T     #iseed; 
      L     #Aux_int; 
      ITD  ; 
      L     L#32; 
      *D   ; 
      TAR2 ; 
      +D   ; 
      L     #Aux_dint; 
      TAK  ; 
      LAR1 ; 
      TAK  ; 
      T     DID [AR1,P#8.0]; 
      L     #Val_max; 
      L     #Val_min; 
      -I   ; 
      ITD  ; 
      L     #Aux_dint; 
      *D   ; 
      L     L#65536; 
      /D   ; 
      L     #Val_min; 
      +I   ; 
      T     #Val_out; 
      CLR  ; 
      U     L      6.1; 
      SAVE ; 
      BE   ; 
END_FUNCTION_BLOCK

Metti come limite massimo "1" e come limite minimo "0"

Inserita:

Perdonate la mia ignoranza ma a cosa serve generare un bit che va random da 0 a 1 e viceversa ? :o

E nel caso di generazione di un valore numerico random in quali applicazioni ne fate uso ?

Grazie

bigalex :blink:

Inserita:

Mhaha, generelmente nel ns. campo può servire per test e simulazioni

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...