Jump to content
PLC Forum


cerai

PID velocita' con dinamo tachimetrica

Recommended Posts

cerai

Buongiorno a tutti

Sto cercando di realizzare un controllo velocità usando come trasduttore una dinamo tachimetrica.

Il mio HW e' costituito da :

PLC Siemens serie 300 CPU 315 2DP con ingressi analogici e uscite analogiche.

dinamo tachimetrica 0,04V/giro

convertitore DC/DC ( utilizzato per raddoppiare la tensione dell'uscita analogica: 5V->10V, 10v->20v)

motoriduttore 24VCC 1500 giri

L'uscita della dinamo tachimetrica viene inviata all'ingresso analogico del plc tramite un partitore 1/10. Quindi

quando il motore ruota a 1000giri/min la dinamo genera 40V ma all'ingresso del PLC arrivano 4V.

L'implementazione SW e' la seguente:

OB35 settato a 30msec che attiva un FB41. Tutte le variabili vengono settate tramite HMI.

Invio valore impostato in SP_INT  e ER ( in uscita dal PID ) ad un sommatore la cui uscita viene poi inviata a PAW

Il problema che riscontro e' che la velocita' del motorino non e' direttamente proporzionale alla tensione di pilotaggio ( come avviene

normalmente nel controllo velocità dei motori a corrente continua dove la velocita' e' direttamente proporzionale

alla tensione di armatura ) e di conseguenza a valori diversi di impostazione di SP_INT non ho una uscita in velocita' proporzionale.

Riporto alcuni valori che mi ritrovo

SP_INT     PV_IN     VOLT Dinamo    Giri motore  ER PID

5                  46               18,7                    462         4,28

7                  65,7             27                      672         2,87

10                99               40                      1003         0

 

Escludendo il PID e mandando in uscita il valore di MAN settatto allo stesso modo di SP_INT noto una lieve diminuzione

del numero di giri ( e di conseguenza di PV_IN). In sostanza sembra che il PID tenti di far si che l'errore si azzeri ma non arriva

mai ad azzerarlo del tutto perche' PV_IN non eguaglia mai SP_INT . Poiche' non c'e' una diretta proporzionalita' tra valore di SP_INT e velocita'

( proporzionalita' che cresce man mano che la tensione di pilotaggio arriva a 10V ) non riesco a trovare un algoritmo giusto per far si che

PID annulli l'errore. Il valore di PV_IN viene rilevato nel modo seguente:

Uscita dinamo .-> PEW -> PEW*2,5 =PV_IN ( es. PEW=5100 Scalato da FC105=18 , 18*2,5 = 45   ).

Quindi per GAIN=1 LMN=(SP_INT-PV_IN)*GAIN =5 . Questo valore viene sommato a SP_INT ed inviato alla PAW . Aumentando il guadagno 

l'errore non si annulla mai, neanche inserendo l'azione integrativa . Ma la funzione del PID non e' quella di annullare l'errore nel tempo grazie

all'azione integrativa? Eppure nel mio caso questo non avviene e non riesco a capire l motivo.

Magari le condizioni HW non lo consentono o sto commettendo qualche errore. Grazie per tutti i suggerimenti.

Ora consentitemi  una nota fuori tema. Oggi e' il giorno di Pasqua. In un giorno in cui dovremmo essere tutti insieme ai nostri cari

siamo chiusi nelle nostre case per il coronavirus. Ma grazie alla rete la lontananza si riduce.. Ho sempre riscontrato in PLCFORUM

un senso di vicinanza e solidarieta' .

Persone che  mettono a disposizione il loro tempo e le loro conoscenze per aiutare chi ne ha bisogno . Una solidarieta' che se fosse

praticata in ogni contesto sicuramente renderebbe questo mondo un mondo migliore....grazie a tutti...e ...Buona Pasqua

#andràtuttobene 

Share this post


Link to post
Share on other sites

batta
2 ore fa, cerai ha scritto:

l'errore non si annulla mai, neanche inserendo l'azione integrativa . Ma la funzione del PID non e' quella di annullare l'errore nel tempo grazie

Sei sicuro di aver abilitato l'integrale? Non puoi allegare un'immagine del richiamo della funzione PID?

Share this post


Link to post
Share on other sites
andreacappellazzo
38 minuti fa, batta ha scritto:

Sei sicuro di aver abilitato l'integrale? Non puoi allegare un'immagine del richiamo della funzione PID?

Buona Pasqua. Infatti avevo pure io il dubbio...inoltre non serve anche il valore dell'integrale che hai assegnato.Se non ricordo male,nel PID Siemens, più il valore è piccolo e più è inversamente "vispo" e lavora la parte integrale del regolatore. Inoltre sevirebbe una immagine di massima perchè qualcosa anche sulle scalature non mi torna...

Share this post


Link to post
Share on other sites
cerai

Buongiorno

Intanto vi ringrazio per il Vs. interessamento. Sono riuscito , dopo varie prove , a far funzionare il PID. 

In una pagina HMI posso impostare e leggere tutti i valori del PID.

 

Nelle foto che ho allegato si possono vedere tutti i parametri che ho utilizzato . Come si vede dalle foto imposto 2V per alimentare il motore sia con PID escluso che incluso.

Lo faccio partire in manuale e la dinamo genera 2,6 volt. Quando inserisco il PID la dinamo genera 8V e sono i volt corretti in base alle caratteristiche della

dinamo. Noto delle lievi oscillazioni nel numero di giri ma , credo, sia dovuto al non perfetto accoppiamento meccanico. Quello che mi ha un po sbalordito e' che

impostando GAIN=1 o maggiore di 1 il valore di uscita non riusciva mai a stabilizzarsi. Solo impostando il guadagno a 0,1 ho bloccato le oscillazioni ed , ovviamente, ho un'uscita uguale a quella che ottengo in MAN. Inserendo poi la funzione I l'errore si azzera quasi subito e la dinamo genera 8V. Il valore che attribuisco a TI ( 1 o 1000) e' quasi ininfluente, il PID funziona bene e corregge l'errore purchè sia inserita la funzione I, indipendentemente dal valore di TI . Sembra che la D sia ininfluente. 

Sto cominciando a fare le mie prime esperienze con il PID e quindi sono ancora un po' perplesso per il fatto che qualsiasi valore do a TI sembra che il funzionamento non ne risenta. E' corretto secondo voi oppure mi sfugge qualcosa ? Grazie 

pid_escluso.jpg

pid_incluso.jpg

Share this post


Link to post
Share on other sites
leleviola

Beh il fatto che tale regolazione debba avere un PID che praticamente non ha bisogno di guadagno è dovuto al fatto che il sistema è praticamente diretto, non hai inerzia nelle reazioni che il sistema ha alle sollecitazioni derivanti dall'uscita che gli applichi, in pratica ciò che applichi all'uscita viene subito attuato e verificato dal feedback e il sistema ha bassissima inerzia nel reagire ed è anche per quello che le oscillazioni sono irrilevanti

Share this post


Link to post
Share on other sites
andreacappellazzo
1 ora fa, leleviola ha scritto:

Beh il fatto che tale regolazione debba avere un PID che praticamente non ha bisogno di guadagno è dovuto al fatto che il sistema è praticamente diretto, non hai inerzia nelle reazioni che il sistema ha alle sollecitazioni derivanti dall'uscita che gli applichi, in pratica ciò che applichi all'uscita viene subito attuato e verificato dal feedback e il sistema ha bassissima inerzia nel reagire ed è anche per quello che le oscillazioni sono irrilevanti

Infatti...appena l'albero meccanico verrà accoppiato ad un carico di lavoro sicuramente i parametri saranno da riadattare 😉

Comunque venendo al tuo cruccio del TI. Viene lamentato il fatto che con variazioni di valore da 1 o 1000 nulla cambia...La questione è che i parametri TI e TD sono tempi pertanto vanno espressi in secondi o multipli (decimi, minuti,etc..)

Il valore chè stai impostando è decimale e quindi prima di applicarlo al PID và riadattato e covertito

Share this post


Link to post
Share on other sites
cerai

Hai ragione Andrea, mi era proprio sfuggito questo particolare importante, modifico il programma e riprovo....grazie

Share this post


Link to post
Share on other sites
cerai

Ho controllato. Avevo settato bene sia in HMI che in OB35. quando scrivo 10.000 nel PID vengono impostati 10sec. Ma non noto variazioni, lo stesso vale per TD

Share this post


Link to post
Share on other sites
andreacappellazzo
 L     DB23.DBW    0               // timer da monitor [0.1s]                                         
      ITB   
      L     W#16#1000                 // per avere il timer in decimi di secondo 
      OW    
      T     DB23.DBW    2               // s5time

Base di tempo    Codice binario per la base di tempo
10 ms                      00   W#16#0000
100 ms                    01   W#16#1000
1 s                          10    W#16#2000
10 s                        11    W#16#3000

 

Seconda strada è fare tutto tramite HMI, la variabile viene dichiarata nel PLC come S5Time e

il pannello operatore gestisce la variabile Time (DInt con tempo in ms), nel pannello operatore imposti il tempo in ms.
Se vuoi impostarlo in altra unità, fai una scalatura moltiplicativa ad esempio sulla variabile nel pannello operatore.

Quale tipo di HMI stai usando ?

Edited by andreacappellazzo

Share this post


Link to post
Share on other sites
andreacappellazzo

Puoi usare anche FC40...si tratta praticamente di convertire da Int a S5Time

   

Cattura time.JPG

Edited by andreacappellazzo

Share this post


Link to post
Share on other sites
batta

Dai dati visualizzati, mi pare di capire che c'è un bel po' di confusione. Troppe cose non mi quadrano.

Con un tempo integrale di 1000 secondi (o 1000 corrisponde ad 1 s?), l'integrale dovrebbe agire molto lentamente, invece affermi che è quasi istantaneo. Questo mi fa pensare subito ad un richiamo del PID in modo sbagliato. Il PID lo richiami in OB35 ogni 30 ms, ma che tempo di campionamento è impostato nei parametri del PID? Se hai lasciato il valore di default di 1 secondo, ogni 30 ms la funzione crede che sia passato 1s.

Poi, se in manuale imposti 20, quel 20 te lo dovresti ritrovare esattamente come valore di uscita del PID, mentre non mi pare sia così.

E non capisco nemmeno perché i valori LMN siano interi, mentre dovrebbero essere in virgola mobile.

Io vorrei vedere, online, il richiamo del PID nel PLC.

 

 

Share this post


Link to post
Share on other sites
batta
6 ore fa, andreacappellazzo ha scritto:

Il valore chè stai impostando è decimale e quindi prima di applicarlo al PID và riadattato e covertito

 

Nella funzione PID del 300, i parametri TI e TD sono in formato TIME, non S5Time.
Se sono scritti senza scalature e/o conversioni, sono in ms.

Share this post


Link to post
Share on other sites
andreacappellazzo
1 ora fa, batta ha scritto:

 

Nella funzione PID del 300, i parametri TI e TD sono in formato TIME, non S5Time.
Se sono scritti senza scalature e/o conversioni, sono in ms.

..scusa la superficilità ,decimale era per dire int o comunque che vanno convertiti i numeri per come il PID se li aspetta.

In sostanza finchè non abbiamo un feedback da cerai possiamo solo ipotizzare se imposta ms, minuti ,ore o mele e pere...

Share this post


Link to post
Share on other sites
andreacappellazzo
2 ore fa, batta ha scritto:

Con un tempo integrale di 1000 secondi (o 1000 corrisponde ad 1 s?), l'integrale dovrebbe agire molto lentamente, invece affermi che è quasi istantaneo.

 

 

..a me pare che non lavora proprio, se sono 1000 secondi è un valore da marziani

Comunque anche la verifica del time di campionamento del PID ci stà...lho data per scontato...sono curioso di sentire come stanno le cose

Share this post


Link to post
Share on other sites
andreacappellazzo

in questi casi è utile costruire anche un piccolo grafico Trend......giusto utile per la taratura. E' sempre didattico e istruttivo nel capire come i parametri variano la risposta.

Questo tipo di esperimenti cosidetti a banco riescono sempre a lasciare importanti esperienze che un domani sono sempre utili nella professione (almeno nel mio caso :-) )

Share this post


Link to post
Share on other sites
cerai

I tempi I e D che imposto in HMI ( realizzato con WINCC FLEX ) sono  in ms. Quindi I=1000 equivale a 1sec.

( ho allegato anche la VAT in cui e' possibile vedere la corrispondenza tra i valori settati in HMI e quelli reali sul PID ).

In configurazione ho abilitato OB35 ogni 30msec. Il PID viene richiamato da OB35 e in OB35 CYCLE=30msec come nella configurazione.

Il valore impostato in "VOLT Motore manuale " viene moltiplicato per 10 ed inviato a MAN ( non ho bisogno di scalare ) , quindi se imposto 5 in MAN trovero 50 e se imposto 5 anche in "Volt Motore PID", mi ritrovo 50 in SP_INT. la lettura di LMN era errata , ora si puo' leggere in HMI il vero valore di LMN.

Credo sia meglio visualizzare la VAT invece del richiamo del PIC perche' in questo modo e' possibile vedere tutti i valori del PI.

Comunque continuo a non rilevare variazioni cambiando i tempi di reset a I. Ho notato , pero, che inserendo un apiccolo valore di banda morta il sistema diventa piu' stabile. Non so se , modificando qualche parametro PID riesco ad ottenere una ulteriore stabilità,. Spero di essere stato chiaro . Grazie per le vs. indicazioni

PID_escluso.jpg

PID_incluso.jpg

Share this post


Link to post
Share on other sites
cerai

Il fatto che il PID funzioni e' evidente. Basta confrontare il funzionamento manuale con quello automatico.

Settando MAN_ON con 5V di alimentazione motore , poiche' non e' incluso il PID, mi ritrovo sulla dinamo un valore di circa 16V.

Quando includo il PID sulla dinamo mi arrivano 20V , ( caratteristiche dinamo 0,04V/giro ) . Quindi 5V*500giri/min=20V sulla dinamo

Per quanto riguarda l'utilizzo del PID in questa applicazione , sommo in REAL , il valode di LMN al  valore impostato in HMI e invio il risultato al motore

Share this post


Link to post
Share on other sites
batta
15 minuti fa, cerai ha scritto:

Per quanto riguarda l'utilizzo del PID in questa applicazione , sommo in REAL , il valode di LMN al  valore impostato in HMI e invio il risultato al motore

A quale valore sommi l'uscita del PID? E perché?

 

Poi vedo CYCLE = T#30m, ovvero 30 minuti! Devi impostare T#30ms.

 

L'uscita del PID, se non hai modificato i valori di default, va da 0.0% a 100.0%, e convertita in 0..27648 su LMN_PER che, se è collegata ad una uscita analogica 0..10V, diventa, appunto, un segnale da 0 a 10 V.

 

Mi sorprende che riesca a regolare.
 

 

 

Share this post


Link to post
Share on other sites
cerai

Sommo Il valore di LMN a SP_INT in cui c'e' il valore che setto in HMI. Moltiplico per 27648 ed con un MOVE invio il valore all'uscita analogica PAW.

Non posso utilizzare direttamente LMN perche' quando PV_IN=ST_INT LMN=0 e quindi farebbe fermare il motore. Credo sia corretto ,

che ne pensi?

Share this post


Link to post
Share on other sites
batta

Tutto completamente sbagliato.

Ti consiglio di dedicare più tempo alla lettura del manuale.

L'uscita del PID "LMN" è la somma di "LMN_P" + "LMN_I" + "LMN_D". Solo "LMN_P" sarà zero quando la variabile di processo PV sarà uguale al set point SP.

 

Ripeto: se non hai modificato i valori di default LMN_HLM, LMN_LLM, LMN_FA, LMN_OFF, l'uscita LMN del pid assumerà valori da 0.0% a 100.0%, mentre l'uscita LMN_PER assumerà valori da 0 a 27648.
Per pilotare l'uscita analogica, puoi scalare in modo opportuno l'uscita LMN, oppure usare direttamente l'uscita LMN_PER.
Nel caso di una uscita 0..10V, con la variazione dell'uscita del pid LMN 0..100% (LMN_PER 0..27648), avrai una tensione da 0 a 10V.

 

Non capisco da dove ti sia venuta l'idea di fare somme e moltiplicazioni.

 

E ricordati di sistemare il parametro CYCLE, che devi mettere a 30 millisecondi, non a 30 minuti.

 

 

 

Share this post


Link to post
Share on other sites
Livio Orsini
4 ore fa, batta ha scritto:

Mi sorprende che riesca a regolare.

 

E come un orologio analogico: anche se è fermo 2 volte al giorno segna l'ora esatta.:smile:

Share this post


Link to post
Share on other sites
cerai

Si hai ragione, devo leggere meglio il manuale , ma in una sola riga... "Solo "LMN_P" sarà zero quando la variabile di processo PV sarà uguale al set point SP."

mi hai aperto la mente...SOLO la parte P si azzera e questo al raggiungimento di SP_IN . Provero' ad inviare LMN_PER direttamente su PAW. CYCLE lo avevo gia' corretto.

Grazie Batta....ti abbraccerei...ma di questi tempi 😃😃😃

 

Share this post


Link to post
Share on other sites
batta
41 minuti fa, cerai ha scritto:

ti abbraccerei...ma di questi tempi

Già, meglio una birra, anche se virtuale ;-)

Share this post


Link to post
Share on other sites
cerai

..e vada per la birra...magari prima o poi , dopo sto gran casino, davvero la beviamo una birra...ma davanti a una buona pizza "Da Michele" , la migliore pizzeria di Napoli,

percio', se capiti da queste parti fatti vivo. Ma dopo il ...profano veniamo al sacro ;-)- Ho fatto come hai detto: ho inviato a PAW il valore di LMN_PER e tutto funziona perfettamente ( almeno credo...) : grazie ancora a te e a tutti quelli che contribuiscono a rendere questo sito uno dei migliori in ambito PLC e ..non solo

Share this post


Link to post
Share on other sites
batta
4 ore fa, cerai ha scritto:

la migliore pizzeria di Napoli

Io, come puoi vedere dal mio profilo, sono un po' fuori zona. Ma chi lo sa dove mi porta il lavoro?
Dovessi capitare dalle parti di Napoli, avrei anche un'altra persona da incontrare.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...