Vai al contenuto
PLC Forum


Numero Randomico - Creazione numero randomico con PL7PRO


Messaggi consigliati

Inserito:

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.


Inserita:

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

Inserita:

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.

  • 8 months later...
Inserita:

: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

  • 4 weeks later...
Inserita:

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

  • 1 year later...
Inserita:

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:

Inserita:

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

  • 1 month later...
Inserita:

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:

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