Vai al contenuto
PLC Forum


Numero Randomico - Creazione numero randomico con PL7PRO


jobbe314

Messaggi consigliati

Buongiorno a tutti,

dovrei programmare un TSX3710 con PL7PRO per la generazione di un allarme, però in modo del tutto casuale.

esiste un modo per generare un numero randomico?

grazie.

Link al commento
Condividi su altri siti


L'istruzione per creare un numero random non e' presente in PL7... comunque puoi generarlo partendo da un valore che ti cambia in continuazione, come ad esempio l'orario.

Devi usare l'ora nel formato TOD (time of day, cercalo nell'.) e lo metti su una %MD (es. 23:12:27), quindi usi la funzione TOD_TO_STRING mettendo il contenuto della MD in una tabella di MB come formato stringa (es. %MB2:9=TOD_TO_STRING(%MD40)).

A questo punto puoi eliminare i caratteri ":" ed ottieni un valore numerico che puoi testare es. sulla %MW1, lo puoi manipolare come credi facendo */+- ...

Ti consiglio di allacciarti ad un PLC e vedere cosa salta fuori ;)

Buon lavoro

Link al commento
Condividi su altri siti

Puoi anche utilizzare la %SW18 che è un contatore (un numero "pulito") di tempo assoluto incrementato ogni 1/10 sec. ed azzerato ad ogni riavvio. Forse è più immediato della ripulitura dell' orodatario dai caratteri ascii.

Link al commento
Condividi su altri siti

  • 8 months later...

:o ...ma cosa dite fai così:

incrementa una qualsiasi %MD:

IF NOT %S13 THEN

%MD0:=%MD0+1;

END_IF;

in questa maniera ottieni un numero che cambia valore ogni scansione del PLC.

Ciao

Link al commento
Condividi su altri siti

  • 4 weeks later...

ma scusate un numero randomico non è un numero che cambia in maniera casuale?

A me sembra che tutte le soluzioni proposte riguardano normali progressioni ben conosciute...

Link al commento
Condividi su altri siti

  • 1 year later...

Concordo con rddiego , il numero randomico è un'altra cosa .

Le proposte suindicate sono un tentativo di emulazione , ma il valore ha sempre una sola direzione rispetto al precedente , mentre un numero randomico ha direzione duplice (> o <) rispetto al precente oltre ad avere un segno ( >0 o <0 ) .

Quindi converrebbe creare un algoritmo che preveda almeno queste due componenti .

Ciao

bigalex :blink:

Link al commento
Condividi su altri siti

non conosco lo specifico plc, ma sicuramente la metodologia che si avvicina di piu' al random e' il modulo

prendi due registri di controllo di due timer ed esegui il il modulo del maggiore rispetto al minore

ottieni un numero sicuramente casuale

se riduci le cifre significative ad un formato fisso e consideri questo numero tutto decimale ottieno il random canonico che varia da 0 a 1

Link al commento
Condividi su altri siti

  • 1 month later...

Salve, un'altra idea potrebbe essere la seguente, che più si avvicina a quanto correttamente

scritto da Piero, ovvero una simulazione dell'istruzione RND (Randomize):

!%M5:=%S5; ---> creo un'immagine del clock a 100ms

!IF %MF0>90.0 AND RE %M5 THEN ---> ogni 100ms incremento di 0.1 un registro a virgola mobile

%MF0:=0.0; controllando il range da 0.0 a 90.0 (1° radiante cerchio trigonom.)

ELSE

%MF0:=%MF0+0.1;

END_IF;

!%MF2:=COS(DEG_TO_RAD(%MF0)); ---> calcolo il Coseno dell'angolo ed ottengo il famoso RND con

valori compresi tra 0 ed 1.

Bye

Nibble

"... a volte ritornano!" :ph34r:

Link al commento
Condividi su altri siti

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...