Mauro_lab Inserito: 11 agosto 2009 Segnala Inserito: 11 agosto 2009 Salve La questione parrà stupida, ma per me ultimamente le cose semplici diventano difficili e quelle difficili sono miracoli Usando un PID con la funzione FB41Usando un S.P. fisso NormalmenteQuando il segnale del campo supera il valore di S.P l'uscita PID scendeQuando il segnale del campo sende dotto il valore di S.P l'uscita PID salelasciamo perdere i parametri P I DA me serve l'opposto, ovveroQuando il segnale del campo supera il valore di S.P l'uscita PID saleQuando il segnale del campo sende dotto il valore di S.P l'uscita PID scendePraticamente devo invertire l'uscita di controllo....... e non in negativo ma come azione
Gianmario Pedrani Inserita: 11 agosto 2009 Segnala Inserita: 11 agosto 2009 Metti un guadagno negativo, ovvero la parte P mettili es -0.5 oppure -0.1 a secondo di come lo vuoi veloce o lento oppure metti il meno al valore di proporzionale che già hai impostato.se cosi non dovesse andare bene per te devi invertire l'uscita prima di mandarla al regolatore, e puoi fare cosi: prendi l'uscita es diciamo che il tuo regolatore quando è tutto aperto ti dia fuori 100.0 oppure 1000.0 non so!! la passi ad una fc105, o fc 106 che trovi nella bibblioteca e li invertendo i valori di ingenierizzazione ovvero i limiti della funzione
busanela Inserita: 11 agosto 2009 Segnala Inserita: 11 agosto 2009 Effettua lo XOR del valore che dedi invertire con FFFh prima di trasferirlo nella PEW
Mauro_lab Inserita: 11 agosto 2009 Autore Segnala Inserita: 11 agosto 2009 Effettua lo XOR del valore che dedi invertire con FFFh prima di trasferirlo nella PEWSe mi chiedevi di buttarmi dalla finestra ero più felice..... Tradotto in italiano cosa serebbe? Giammario ho già messo il proporzionale negativo, ma mi pare molto brutto da vede.Con le funzioni FC 105 e 106 scalo solo il valore di uscira ma non inverto la azione del regolatore.A meno che tu mi stia suggerendo di mette 100 al valore minimo e 0 al valore massimo nella funzione FC106 ma poi devo anche convertirla in formato da INT a WORD........ non c'è altro modo?
batta Inserita: 11 agosto 2009 Segnala Inserita: 11 agosto 2009 Effettua lo XOR del valore che dedi invertire con FFFh prima di trasferirlo nella PEWQuesto funziona solo se il campo dell'uscita è da 0 a 4095.Giammario ho già messo il proporzionale negativo, ma mi pare molto brutto da vede.Perché?Capisco che tu non voglia vedere un parametro negativo impostato su un pannello operatore, ma ti basta impostare normalmente il parametro, ed effettuare l'inversione prima di darlo in pasto al PID.Per ottenere questo, basta una sola operazione:NEGI se il parametro è un intero a 16 bitNEGD se il parametro è un intero a 32 bitNEGR se il parametro è in virgola mobile a 32 bitAnche l'inversione dell'uscita funziona ma è, a mio avviso, concettualmente non corretta.E poi, a me sembra scomodo vedere, per esempio, l'uscita del PID al 100% e la valvola proporzionale completamente chiusa o, viceversa, l'uscita del PID a 0% e la valvola proporzionale completamente aperta.La soluzione più "pulita" è quella dell'inversione del parametro P.
Mauro_lab Inserita: 11 agosto 2009 Autore Segnala Inserita: 11 agosto 2009 Si vero......Ma la coso è un pochino più complessa.La variabile di P è si nel pennello operatore a 32Bit ma anche nei sistemi di supevisione a 32 Bit e poi vinene prelevata direttamente dalla DB di controllo del PID Facendo come suggerisci devo fare le due cose in due diversi sitemi........Poi questo è un sistema che deve mantenere un livello in un serbatoio il fatto sche segni 0 significa che la pompa va troppo veloce se segna 100 è troppo lenta, pertanto non è brutto vedere l'uscita inversa.Ma farla direttamente sul PLC?
Mauro_lab Inserita: 12 agosto 2009 Autore Segnala Inserita: 12 agosto 2009 Accidenti Stavo dormendo ed ad un tratto mi sono sveliato di colpo Un lampo nel sonno mi ha colpitoNEGR se il parametro è in virgola mobile a 32 bitè il complemento a due in virgola mobile.Ovvero inverte il valore.Eccco allora la cosa si fa interessante accendo il PC e eccomi qua! Prendo la variabile di P e la ficco nel NEGR , e adesso l'uscita dovrei metterla nel PID, mi creo una variabile reale di appoggio e ce la metto.....Non uso la stessa altrimenti non vale!Funziona? Mi manca il PLC Il simulatore non ce la fa Proverò tra qualche ora
busanela Inserita: 12 agosto 2009 Segnala Inserita: 12 agosto 2009 Questo funziona solo se il campo dell'uscita è da 0 a 4095Si, con FFFh è vero; ho messo questo valore per rendere l'idea di ciò che intendevo con l'operazione XOR. Correggo con FFFFh per l'inversione fino a 65535, proseguendo con il valore esadecimale se richiesto. Tradotto in italiano cosa serebbe?La tabella della verità dello XOR è la seguente: 0 0 : 00 1 : 11 0 : 11 1 : 0Cioè l'operazione dà risultato 1 se, e solo se, i termini dgli operandi sono diversi. Nel caso del confronto che ti ho suggerito io, e che ho utilizzato spesso con successo in alcune delle mie applicazioni, confrontando il tuo valore analogico (per es. 0110) con Fh=1111 (4 cifre per comodità dell'esempio), hai come risultato 1001, cioè l'esatto opposto del valore in ingresso. Secondo me, ritenendo comunque validi i suggerimenti di Batta e Gianmario, con un paio di righe di programma risolvi il tuo problema.
batta Inserita: 12 agosto 2009 Segnala Inserita: 12 agosto 2009 La variabile di P è si nel pennello operatore a 32Bit ma anche nei sistemi di supevisione a 32 Bite poi vinene prelevata direttamente dalla DB di controllo del PIDPrendo la variabile di P e la ficco nel NEGR , e adesso l'uscita dovrei metterla nel PID, mi creo una variabile reale di appoggio e ce la metto.....Non uso la stessa altrimenti non vale!Non ho ben capito cosa intendi fare.Se i supervisori puntano direttamente alla variabile "GAIN" del DB di istanza della funzione FB41 e nei supervisori non vuoi vedere un guadagno negativo, allora devi invertire l'uscita.Se invece puoi far puntare i supervisori ad una variabile di appoggio, allora usa l'istruzione NEGR per invertire il segno. A questo punto, che tu vada a scrivere il risultato direttamente nel DB o che lo passi come parametro nel richiamo di FB41, non cambia nulla.Se invece intendi lasciare che i supervisori puntino direttamente alla variabile "GAIN", poi prelevare questo valore, invertire il segno e poi passarlo al PID come parametro nel richiamo di FB41... beh, questo non lo puoi fare, perché il valore che tu passi come parametro viene scritto nel DB.
Gapo Inserita: 12 agosto 2009 Segnala Inserita: 12 agosto 2009 Inverti il guadagno... se non ti piace visualizzare un valore negativo sull'OP, usa una variabile di appoggiociao
Mauro_lab Inserita: 12 agosto 2009 Autore Segnala Inserita: 12 agosto 2009 Ecco si appunto è quello che ho fatto In questo caso non punto direttamente nella DB ma uso una variabile, così la posso manipolare come voglioessendo una variabile del PLC non mi devo preoccupare di tutte le precauzioni che una variabile che pun alla DB occorre prendereTradotto in italiano cosa serebbe?Ok conosco bene la logiaca binaria, era solo una esclamazione per il fatto che mi sembrava troppo complesso per invertire semplicemente un comando
busanela Inserita: 12 agosto 2009 Segnala Inserita: 12 agosto 2009 troppo complesso per invertire semplicemente un comando
batta Inserita: 12 agosto 2009 Segnala Inserita: 12 agosto 2009 Non è complicato, ma funziona solo con valori esadecimali tipo F, 7F, FF, 7FF, FFF, 7FFF (per restare nel campo di variabili a 16 bit).Se, per esempio, voglio convertire un valore da 0..100 in 100..0, l'OR esclusivo non va più bene.Ma, direi, non è un problema. Basta infatti una semplice sottrazione per ottenere il risultato voluto.L 100L "Var1" //valore da 0 a 100-IT "Var2" //valore da 100 a 0Che non è più complicato che scrivereL "Var1" //valore da 0 a 32767L W#16#7FFFXOWT "Var2" //valore da 32767 a 0
Mauro_lab Inserita: 12 agosto 2009 Autore Segnala Inserita: 12 agosto 2009 Salve Ho un problema che non comprendoPrendo la variabile di P e la ficco nel NEGR , e adesso l'uscita dovrei metterla nel PID, mi creo una variabile reale di appoggio e ce la metto.....Ecco ho fatto così, ma avviene una cosa stranaSupponiamo che la variabile in input che si chiama MD82 formato REALPrendo MD82 e le inserisco nel NEGER e in uscita metto una variabile creata net TEMP (stessa FB dove ho il PID) con nome #Guad_neg fomato REALQuesta variabile #Guad_neg la inserisco in ingresso al PID sul GAIN inserisco il valore nella MD82 = 0.01 in unscita la #Guad_neg = -0.01 Ma mi trovo sul PID la variabile un volore #Guad_neg = -0000000001 dove sono finiti i decimali? Naturalmente il PID schizza da tutti le parti e non è un errore di visualizzazione ma vale proprio -1
ken Inserita: 12 agosto 2009 Segnala Inserita: 12 agosto 2009 Non è che scrivi la variabile temp dopo il blocco PID?Intendo come ordine di esecuzione del programma
Mauro_lab Inserita: 12 agosto 2009 Autore Segnala Inserita: 12 agosto 2009 si prima c'è il blocco PID poi facco il NEGER
mich21 Inserita: 12 agosto 2009 Segnala Inserita: 12 agosto 2009 ti consiglio di metterlo prima anche per pulizia nella programmazione...la soluzione che uso usualmente in caso di regolazione inversa è di scrivere il gain da supervisore, nel plc moltiplicarlo per -1 e poi passarlo nel pid...ed ha sempre funzionato...
Gapo Inserita: 13 agosto 2009 Segnala Inserita: 13 agosto 2009 (modificato) si prima c'è il blocco PID poi facco il NEGER :blink: A parte la "pulizia di programmazione" (non ti pare che come logica andrebbe negato "prima" di darlo al PID?), non ti ha mai insegnato nessuno che per usare una variabile temporanea devi "prima" definirla e "poi" usarla? Se tu richiami una variabile temporanea prima di definirla (nel senso di "scriverla"... non semplicemente "dichiararla"), il suo valore può essere qualsiasi cosa, vista che la sua allocazione non è fissa (essendo una variabile temporanea...) e può pescare da una zona di memoria usata nella FC o FB precedente per qualsiasi altra cosa... Modificato: 13 agosto 2009 da Gapo
batta Inserita: 13 agosto 2009 Segnala Inserita: 13 agosto 2009 Quoto Gapo.Non è questione solo di "pulizia di programmazione".Effettuare le operazioniL MD82NEGRT #Guad_Negprima di passare il parametro #Guad_Neg al PID è OBBLIGATORIO.Oppure puoi evitare di passare il parametro alla funzione FB41 e scrivere direttamente il guadagno nel DB di istanza.Esempio:L MD82NEGRT "DbIstanzaPid".GAINUna domanda: ora i supervisori scrivono il dato in MD82 o è solo un esempio?Se utilizzi davvero MD82, se non hai configurato l'area di merker ritentivi almeno fino a MB85, quando spegni il PLC perdi il valore impostato.
Gapo Inserita: 13 agosto 2009 Segnala Inserita: 13 agosto 2009 L'alternativa è usare una variabile "vera" anziché una temporanea; non darebbe problemi (se non per un ciclo PLC) ma in ogni caso è fuori da ogni logica... senza contare che, come dice per l'appunto Batta, bisognerebbe considerare il discorso retentività.PS: ho visto fare grossi danni da gente inesperta che usava le variabili temporanee prima di scriverle...
Mauro_lab Inserita: 13 agosto 2009 Autore Segnala Inserita: 13 agosto 2009 Salve Scrivere una variabile prima o dopo averla usata ci dovrebbe essere solo un ritardo di un ciclo, al massimo prende il valore vecchio di un ciclo.Il fatto che il sistema usi la sua aria di memoria per altri scopi non è la prima volta che mi capita. Ma forse è meglio usare una varibile Maker cosi non rischio multe per disordine nella programmazione.Il fatto delle ritenzione è volutamente NON ritenuta per il semplice fatto che un impianto quando il PLC si spegne, è necessario eseguire e rimpostare le varibili di controllo, non è pensabile far ripartire un impianto senza avere la certezza delle vaiabili impistate. Pertanto tutte vengono inizializzate a 0 e l'utente per forza deve controllare che tutto viene impostato correttamente.Gli impianti non sono macchine limitate in un cappannone ma si estendono per ettari, e uno spegnimento di un PLC significa giorni di controlli e verifiche di ogni genere. Non esistono valori predifiniti ma vi è un continuo aggiustamento delle variabile per causa del tempo meteo, tra il giorno e la notte, la materia prima puo subire modifiche tra un rifornimento e l'altro ecc......Naturalmente le variabili importanti sono ritenute nelle apposite DB.PS: ho visto fare grossi danni da gente inesperta che usava le variabili temporanee prima di scriverle..Si vero se chi sbaglia è umano può succedere, l'importante è capire perchè si sbaglia.
Fabio66 Inserita: 13 agosto 2009 Segnala Inserita: 13 agosto 2009 Scrivere una variabile, prima o dopo un fc o altro ha la sua importanza, non certo solo quella di un ritardo di ciclo.Dipende ovviamente come è strutturato il progetto.Non conosco il tuo impianto. Anche io ho realizzato impianti che si estendono su parecchi capannoni e linee lunghissimeusando pid e decine, pe non dire centinaia di analogiche. Onestamente però, ho sempre usato dei data block per appoggiare le variabili proprio perchè sono ritenitive "d'ufficio"Laddove ci era l'estrema necessità di azzerare qualcosa, lo faccio passando da OB100 ( non certo i range delle analogiche )Per i pid con Gain negativo, nel caso non piacesse al cliente, facevo un bit il quale se impostato moltiplica il gain con -1ma anche le varie soluzioni proposte ottengono comunque lo scopo Per quanto riguarda poi i range delle analogiche, appunto perchè possono anche essere da modificare, creo pagineprotette da password e quindi gli operatori dotati di tale pwd possono accedere.Francamente comunque in 20anni di attività nen mi è mai capitato uno o più strumenti analogici, per i quali honecessità di caricare un range diverso dopo uno spegnimento del plc, ma sempre l'ultimo che era attivo.Non sò quale strumento possa cambiare il suo range dopo uno spegnimento. Per capirci se ha un certo range, dopo un restart( può essere passato qualche minuto penso ... ) cosa può essere cambiato ?Se magari ci dai qualche dettaglio in più possiamo capire di più.PS leggi il mio messaggio non con tono critico, ma come suggerimento se può esserti utile
batta Inserita: 13 agosto 2009 Segnala Inserita: 13 agosto 2009 Scrivere una variabile prima o dopo averla usata ci dovrebbe essere solo un ritardo di un ciclo, al massimo prende il valore vecchio di un ciclo.Il fatto che il sistema usi la sua aria di memoria per altri scopi non è la prima volta che mi capita.Ma forse è meglio usare una varibile Maker cosi non rischio multe per disordine nella programmazione.Si tratta semplicemente di conoscere le caratteristiche della macchina con cui si lavora.Personalmente faccio largo uso delle variabili locali, che trovo comodissime e utilissime. A patto di conoscerne i limiti.Nel caso specifico, appena abbandoni il blocco in esecuzione l'area di memoria utilizzata per le variabili locali viene considerata libera, quindi i blocchi successivi sono liberi di sovrascrivere il contenuto.Questo implica che se entri in un blocco di programma e leggi lo stato di una variabile locale, non puoi sapere cosa contenga. Non si tratta quindi di perdere solo una scansione, ma di ritrovarsi con un valore che non c'entra assolutamente nulla.Ad una variabile locale si deve tassativamente prima assegnare un valore. Solo dopo l'assegnazione si potrà avere certezza del contenuto.Non procedere in questa maniera con le variabili locali dei plc S7-300/400, è un gravissimo errore.
Mauro_lab Inserita: 13 agosto 2009 Autore Segnala Inserita: 13 agosto 2009 PS leggi il mio messaggio non con tono critico, ma come suggerimento se può esserti utileLeggo sempre i messaggi come un suggerimento e valido aiuto.Purtroppo nel caso di spegnimento nella impiantistica chimica occorre paracchio tempo prima di potere ripartireIo sono in Arabia da quasi un mese per far partire un impianto nuovo e forse tra un paio di giorni parte.Non è questione di 20 anni di esperienza che possono cambiare le cose. Io in 30 anni ho visto passare dei PLC (che manco esisteva la parola PLC) sino ad oggi, ma c'è sempre qualcosa da imparare ed io sono qui per questo.Comunque nulla di complicato sono sono tanti piccoli particolari che devono incastrarsi l'uno all'altro.IL problema maggiore è che non sono in un ufficio comodo su una bella poltrona, ma sono in campo da solo e davo dare retta a molte persone, per questo mi avvalgo di un vostro valido aiuto per una risporta SMART, che è sicuramente gradita.Ritornando alla questione, se la ritenzione non la ritengo necessaria è perche, per esperienza, non lo è, visto il livello dell'utilizzatore, se fa qualche passo in più per riavviare l'impianto è solo un bene.Riassumendo, la cosa più semplice è creare una Maker REAL e modificarlo invertendo il valore di GAIN e poi inserirla nel PID, questo me sembra semplice, veloce e funzionale. Non dico che altri sistemi siano inutili o sbagliati, li tengo in cosiderazione sicuramente per gli sviluppi futuri.GrazieMauro
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