Ritardo di 30 secondi

di il
1 risposte

Ritardo di 30 secondi

Salve a tutti, è la prima volta che scrivo in questo forum ma spesso mi sono ritrovata a leggere di argomenti che mi interessavano, riuscendo a risolvere i miei dubbi.
Ho un modello differenziale, sviluppato in matlab-Simulink. In questo modello inserisco una Matlab function con ciclo if else, tale ciclo legge il vettore in ingresso e in base al valore agire in un modo o in un altro (se il valore è maggiore di 150, l'output deve essere uguale a 0, se minore di 140 deve essere uguale a 51), il mio problema sta nel fatto che io vorrei dire alla matlab function: leggi l'input, se per 30 valori consecutivi l'input è minore di 140 dammi un output di 51, viceversa se per 30 valori consecutivi l'input è maggiore di 150 dammi un output di 0.

Devo in pratica inserire un'attesa di 30 secondi, non so come dirlo al matlab. Allo stesso modo posso utilizzare un blocco Relay ma il mio problema resta lo stesso, ossia dei 30 secondi (o 30 valori) di attesa.
Qualcuno sa come aiutarmi?
Magari se ha capito il problema e mi può consigliare qualche altro modo per operare, accetto qualsiasi consiglio!!
Grazie in anticipo!

1 Risposte

  • Re: Ritardo di 30 secondi

    Allora non ho ben capito se i 30 sono secondi o sono valori letti (o nel caso c'è un valore letto ogno secondo e quindi 30 valori in 30 secondi)

    Ad ogni modo io imposterei una variabile count che si aggiorna ogni volta volta che il valore letto è < 140 e se count = 30 esci dal ciclo e quindi termina la lettura. Te lo scrivo in modo molto rozzo ma questa dovrebbe essere l'idea
    
    
    a = vettore[ # di elementi ]; % il tuo vettore 
    b = vettore_ris [ # di elementi]; %vettore dove inserire i risultati
    c = length(a)
    int count; % variabile che si incrementa di uno ogni volta che a[i] < 140
    
    for i = 1:c
    
    if(a[1] > 150 )
    
    b[i] =0;
    
    elseif(a[1] < 140)
    
    b[i] = 51;
    count++;
    
    if(count == 31)
    c=length(a)  % c = lenght così al prossimo ritorno al for il ciclo termina
    end
    
    else % non fare nulla per valori compresi tra 140 e 150 altrimenti matlab da errore se incontri valori in questo range
    
    end % fine dell'if(a[1] > 150 )
    end % fine del for
    
    
    In linea di massima dovrebbe essere qualcosa del genere, non l'ho provata quindi non so dirti se funzionante.
    alla fine otterrai che il vettore b conterrà valori 0 ,51, e posizioni vuote.
    Se il vettore con le parti vuote è poco carino una la funziona reshape che ti elimina le parti vuote di una matrice.

    Spero di esserti stato d'aiuto
Devi accedere o registrarti per scrivere nel forum
1 risposte