pdilauro Inserito: 1 ottobre 2009 Segnala Inserito: 1 ottobre 2009 Salve ragazzi mi trovo alle prese con un problemone "almeno per me"....In pratica sono in possesso di una curva di taratura di una valvola.Premessa: Devo regolare la portata di un canale azionando opportunamente una valvola. L'acqua viene presa da un bacino naturale chiuso da una paratoia azionata da una valvola motorizzata.Le variabili in gioco sono : Livello del bacino, portata istantanea canale, posizione valvola, comando valvola.La curva è composta da:Asse X:Livello bacinoAsse Y:Portate canaleAsse Z:Posizionamento valvolaSe io riuscissi a rappresentare queste curve, sottoforma di formule matematiche, sul PLC, mi basterebbe semplicemente puntare al posizionamento opportuno una volta letto in ingresso il livello del bacino, e impostato come setpoint la portata predefinita da raggiungere.Sono consapevole della difficoltà della cosa ma confido in voi visto la professionalità di alcuni utenti.
Gapo Inserita: 1 ottobre 2009 Segnala Inserita: 1 ottobre 2009 Non credo ci sia una risposta univoca: dipende da quanto è "complessa" la curva, da "quanta" ne devi utilizzare, ed eventualmente dal fatto che ci possa essere o meno una regola fisica/matematica che lega almeno due degli assi. Ultimamente mi è capitato un problema simile, e dopo un pomeriggio passato a trovare la funzione che mi descriveva la curva, ho scoperto che nel mio caso specifico veniva utilizzata solo una piccola parte di questa curva, che per gli scopi prefissati poteva essere tranquillamente assimilata ad un banale gradino in 3 step.ciao
Savino Inserita: 1 ottobre 2009 Segnala Inserita: 1 ottobre 2009 (modificato) Devo regolare la portata di un canale azionando opportunamente una valvola. L'acqua viene presa da un bacino naturale chiuso da una paratoia azionata da una valvola motorizzata.Dunque, cosa sarebbe, uno esercizio scolastico od una applicazione vera?Perche col FB41, CONT_C , contunuos controller potresti regolare subito questo processo.Livello del bacino : segnale di consenso ed allarme.Posizione valvola : per il monitoraggio della posizione e fine corsa.Portata istantanea canale : PV_PER , variabile di processoComando valvola : LMN, valore d'uscita, grandezza regolante.Valore impostato: SP_INT, Set pointSemplice. Modificato: 1 ottobre 2009 da Savino
pdilauro Inserita: 2 ottobre 2009 Autore Segnala Inserita: 2 ottobre 2009 Caro Savino bisogna puntare al grafico per avvicinarsi immediatamente al punto più vicino di set point poi al massimo con il regolatore che consigli tu si può fare la regolazione fine per raggiungere il set point. Ma quando parti da tutto chiuso puntando alla curva giusta del grafico eviti tutte le pendolazioni iniziali di un regolatore... sai questo è un processo molto delicato che necessita di precisioni e rapidità assolute, sono in ballo dei MW che costano, quindi ogni secondo risulta "ORO".Questo è il motivo perchè devo puntare al grafico cartesiano!!!!!
del_user_27683 Inserita: 2 ottobre 2009 Segnala Inserita: 2 ottobre 2009 Se non riesci a calcolare la funzione della curva puoi pensare ad una normale tabella a doppia entrata precompilata, in pratica crei un array bidimensionale su DB e ci scrivi a mano i valori risultanti dalla funzione, magari scopri che l'area d'impiego non è l'intera scala. E' un lavoro da "scimmia" ma può essere piuttosto rapido, una volta precompilata il PLC in base alla portata e al livello incrocia la tabella (riga/colonna) e ottiene la posizione della valvola da cui partire con una PID che potrebbe addirittura trasformarsi in una PI vista la particolarità della regolazione.Se non trovi di meglio pensaci...
busanela Inserita: 2 ottobre 2009 Segnala Inserita: 2 ottobre 2009 Credo sarebbe importante anche conoscere il tempo di risposta della paratia motorizzata: si sa?
Savino Inserita: 2 ottobre 2009 Segnala Inserita: 2 ottobre 2009 (modificato) Ma quando parti da tutto chiuso puntando alla curva giusta del grafico eviti tutte le pendolazioni iniziali di un regolatore.Questo e' relativo e dipendera' anche della risposta del sistema. Perche' mai la grandezza regolante dovrebbe far pendolare?Casomai, monitorando la risposta del sistema con impostazioni manuali sui valori del PID, potresti abilitare la grandezza regolante appartire di una soglia (finestra) determinata. Prima o dopo questa soglia, sganci l'uscita automatica ed applichi una grandezza regolante manuale massima.che potrebbe addirittura trasformarsi in una PI vista la particolarità della regolazioneSe l'attuatore e analogico ( penso sia quello adatto ), allora utilizzi l'FB41, CONT_C , regolatore PID.La curva è composta da:Asse X:Livello bacinoAsse Y:Portate canaleAsse Z:Posizionamento valvolaEd il SP ?Cosa ti serve la curva del Livello bacino ? Modificato: 2 ottobre 2009 da Savino
walterword Inserita: 15 ottobre 2009 Segnala Inserita: 15 ottobre 2009 ricavare i vari set point dalla curva sarebbe il meno , e' mantenerli nella realta che diventa difficile .se la curva e' una spezzata e le risposte del sistema da regolari sono abbastanza veloci o retroazionate direttamente dalla scheda servovalvola e' una cosa , se invece devi mantenere la curva tu con un regolare sw che sia PI o PD o PID allora e' dura se non impossibile .La tua valvola deve avere una scheda che la pilota e normalmente nei pressi della valvola c'e' il feedback che va direttamente alla scheda.Tu da plc passi i set point da raggiungere e non sara mai un curva ma una spezzata .
ifachsoftware Inserita: 15 ottobre 2009 Segnala Inserita: 15 ottobre 2009 (modificato) Se hai l'SCL potresti provare a modificare questa funzione che avevo realizzato per linearizzare delle valvole in base alla pressione letta.In pratica specifichi un array di punti a piacere (in questo esempio sono 100) dove metti il valore impostato ed il valore letto ; quando indichi un valore intermedio , ti viene ritornato un punto approssimato tra i due valori noti in cui è compreso (trovati con un algoritmo di ricerca lineare).Ricordati che per funzionare i punti devono essere ordinati in maniera crescente.Ciao (* IFACH Software - Calpe , Costa Blanca ------------------------------------- Program Name : CURVA_PRESSIONE Language ... : Step 7 SCL Edit by .... : Claudio Rossi ... Rouge (I Love when a software comes together) Features ... : Linearizzazione valvola proporzionale di pressione Calibra = True ossia manda in uscita direttamente il dato impostato in ingresso False manda in uscita il dato linearizzato*)FUNCTION_BLOCK FB60TITLE = 'FB LINEARIZZAZIONE CURVA PRESSIONE'VERSION : '1.0'AUTHOR : IFACHNAME : CURV_PREFAMILY : CURV_PREVAR_INPUT // *** Varibili in Ingresso *** IN_BAR : REAL; // Pressione da impostare [bar] CALIBRA : BOOL; // True = Procedura di calibrazione False = Trasmette i dati linearizzati BAR_MAX : REAL; // Valore da usare in calibrazione pari al 100% dei Bar impostabili per avere 10V in uscitaEND_VARVAR_IN_OUT // Varibili in Ingresso/Uscita N_PUNTI : INT; // Numero di punti inseriti Effettivamente [punti]END_VARVAR_OUTPUT // *** Variabili in Uscita *** OUT_BAR : REAL; // Pressione da mandare alla valvola [bar] MAX_VAL : REAL; // Ritorna la massima pressione impostabile con la tabellaEND_VARVAR_TEMP // *** Varibili Temporanee *** Alto : INT; Basso : INT; Meta : INT; Diff_Set : REAL; Diff_Read : REAL; Perc : REAL; END_VARVAR aDATI : ARRAY [1..100] OF STRUCT SET_BAR : REAL := 0.0; // Pressione impostata in calibrazione READ_BAR : REAL := 0.0; END_STRUCT;END_VARLABEL ESCI;END_LABEL// **************************// **** Inizio Programma ****// **************************BEGIN IF N_PUNTI < 1 THEN // Testo limite inferiore indice N_PUNTI := 1; END_IF; IF N_PUNTI > 100 THEN // Testo limite superiore indice N_PUNTI := 100; END_IF; IF CALIBRA THEN // In calibrazione mando in uscita direttamente il dato letto in ingresso MAX_VAL := BAR_MAX; // In calibrazione ritorno come Max_Val il fondoscala impostato IF IN_BAR > MAX_VAL THEN OUT_BAR := MAX_VAL; ELSE OUT_BAR := IN_BAR; END_IF; RETURN; ELSE MAX_VAL := aDATI[N_PUNTI].READ_BAR; END_IF; IF IN_BAR <= aDATI[1].READ_BAR THEN // Testa Overflow Negativo OUT_BAR := aDATI[1].SET_BAR; RETURN; END_IF; IF IN_BAR >= aDATI[N_PUNTI].READ_BAR THEN // Testa Overflow verso il massimo OUT_BAR := aDATI[N_PUNTI].SET_BAR; RETURN; END_IF; // Effettua una ricerca binaria Basso := 1; Alto := N_PUNTI; WHILE Basso <= Alto DO Meta := (Basso + Alto) / 2; IF Meta < 1 THEN Meta := 1; // Usato per prevenire errori END_IF; IF(IN_BAR < aDATI[Meta].READ_BAR) THEN Alto := Meta - 1; ELSE IF(IN_BAR > aDATI[Meta].READ_BAR) THEN Basso := Meta + 1; ELSE EXIT; END_IF; END_IF; END_WHILE ; // Ritrovo in Meta l'indice al primo valore >= a quello trovato // Ritorna l'approssimazione nella curva del valore trovato Diff_Read := aDATI[Meta].READ_BAR - aDATI[Meta - 1].READ_BAR; Perc := ((IN_BAR - aDATI[Meta - 1].READ_BAR) * 100.0) / Diff_Read; Diff_Set := aDATI[Meta].SET_BAR - aDATI[Meta - 1].SET_BAR; OUT_BAR := aDATI[Meta - 1].SET_BAR + ((Diff_Set * Perc) / 100.0);END_FUNCTION_BLOCK Modificato: 15 ottobre 2009 da ifachsoftware
samau Inserita: 27 ottobre 2009 Segnala Inserita: 27 ottobre 2009 Tentando di semplificarla(concedimi di chiederti la simulazione con PLCSIM):liv1 =ingresso analogico livello bacino (0= bacino vuoto; 16384 =bacino pieno)Perc_livb=percentesimi di bacino pieno = (liv*10000)/16384liv2=ingresso analogico livello canale(0= canale vuoto a 16384 =canale pieno)Perc_reqH2O=percentesimi di richiesta acqua da canale= 10000-((liv2*10000)/16384)KLim= Costante limite apertura valvola a bacino pieno(0 a 10000 percentesimi) pultroppo non ho le dimensioni della serranda ed altre svariate misure. Knc= Costante di soppressione apertura massima = 10000-klim BacLim= massima apertura consentita dal bacino =10000-((Knc*Perc_livb)/10000)PercOpen=percentuale proporzionale limitata apertura serranda in percentesimi = (Perc_reqH2O*BacLim)/10000 monta pressostati subacquei da alta profondità per evitare i picchi di curvaciao sch
FANT Inserita: 27 ottobre 2009 Segnala Inserita: 27 ottobre 2009 Riporta i parametri in excel e ricaverai la curva.Mandi
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