cerai Inserito: 12 aprile 2020 Segnala Share Inserito: 12 aprile 2020 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 Link al commento Condividi su altri siti More sharing options...
batta Inserita: 12 aprile 2020 Segnala Share Inserita: 12 aprile 2020 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? Link al commento Condividi su altri siti More sharing options...
andreacappellazzo Inserita: 12 aprile 2020 Segnala Share Inserita: 12 aprile 2020 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... Link al commento Condividi su altri siti More sharing options...
cerai Inserita: 15 aprile 2020 Autore Segnala Share Inserita: 15 aprile 2020 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 Link al commento Condividi su altri siti More sharing options...
leleviola Inserita: 15 aprile 2020 Segnala Share Inserita: 15 aprile 2020 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 Link al commento Condividi su altri siti More sharing options...
andreacappellazzo Inserita: 15 aprile 2020 Segnala Share Inserita: 15 aprile 2020 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 Link al commento Condividi su altri siti More sharing options...
cerai Inserita: 15 aprile 2020 Autore Segnala Share Inserita: 15 aprile 2020 Hai ragione Andrea, mi era proprio sfuggito questo particolare importante, modifico il programma e riprovo....grazie Link al commento Condividi su altri siti More sharing options...
cerai Inserita: 15 aprile 2020 Autore Segnala Share Inserita: 15 aprile 2020 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 Link al commento Condividi su altri siti More sharing options...
andreacappellazzo Inserita: 15 aprile 2020 Segnala Share Inserita: 15 aprile 2020 (modificato) 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 ? Modificato: 15 aprile 2020 da andreacappellazzo Link al commento Condividi su altri siti More sharing options...
andreacappellazzo Inserita: 15 aprile 2020 Segnala Share Inserita: 15 aprile 2020 (modificato) Puoi usare anche FC40...si tratta praticamente di convertire da Int a S5Time Modificato: 15 aprile 2020 da andreacappellazzo Link al commento Condividi su altri siti More sharing options...
batta Inserita: 15 aprile 2020 Segnala Share Inserita: 15 aprile 2020 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. Link al commento Condividi su altri siti More sharing options...
batta Inserita: 15 aprile 2020 Segnala Share Inserita: 15 aprile 2020 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. Link al commento Condividi su altri siti More sharing options...
andreacappellazzo Inserita: 15 aprile 2020 Segnala Share Inserita: 15 aprile 2020 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... Link al commento Condividi su altri siti More sharing options...
andreacappellazzo Inserita: 15 aprile 2020 Segnala Share Inserita: 15 aprile 2020 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 Link al commento Condividi su altri siti More sharing options...
andreacappellazzo Inserita: 15 aprile 2020 Segnala Share Inserita: 15 aprile 2020 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 :-) ) Link al commento Condividi su altri siti More sharing options...
cerai Inserita: 16 aprile 2020 Autore Segnala Share Inserita: 16 aprile 2020 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 Link al commento Condividi su altri siti More sharing options...
cerai Inserita: 16 aprile 2020 Autore Segnala Share Inserita: 16 aprile 2020 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 Link al commento Condividi su altri siti More sharing options...
batta Inserita: 16 aprile 2020 Segnala Share Inserita: 16 aprile 2020 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. Link al commento Condividi su altri siti More sharing options...
cerai Inserita: 16 aprile 2020 Autore Segnala Share Inserita: 16 aprile 2020 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? Link al commento Condividi su altri siti More sharing options...
batta Inserita: 16 aprile 2020 Segnala Share Inserita: 16 aprile 2020 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. Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 16 aprile 2020 Segnala Share Inserita: 16 aprile 2020 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. Link al commento Condividi su altri siti More sharing options...
cerai Inserita: 16 aprile 2020 Autore Segnala Share Inserita: 16 aprile 2020 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 😃😃😃 Link al commento Condividi su altri siti More sharing options...
batta Inserita: 16 aprile 2020 Segnala Share Inserita: 16 aprile 2020 41 minuti fa, cerai ha scritto: ti abbraccerei...ma di questi tempi Già, meglio una birra, anche se virtuale ;-) Link al commento Condividi su altri siti More sharing options...
cerai Inserita: 16 aprile 2020 Autore Segnala Share Inserita: 16 aprile 2020 ..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 Link al commento Condividi su altri siti More sharing options...
batta Inserita: 17 aprile 2020 Segnala Share Inserita: 17 aprile 2020 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. Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora