Dragonfly Inserito: 23 maggio 2017 Segnala Share Inserito: 23 maggio 2017 Ciao a tutti ragazzi.Ringrazio tutti in anticipo.La mia domanda e questa,io dovrei poter leggere il livello min e massimo in un db,non istanza.Ho fatto un programma in fc1,il quale chiama fc165.Fin qui tutto bene,adesso pero' io vorrei visualizzare i livelli per una mia curiosita',ho cercato di leggere manuali e cose varie ma sinceramente non ho capito nulla.Ho il valore su una md22 il quale setta e resetta un merker per un carico e scarico di 2 elettrovalvole.Vorrei sapere da voi come potrei fare.Grazie ancora e scusate per l'ignoranza ma sto cercando di imparare. Link al commento Condividi su altri siti More sharing options...
DesmoGiec Inserita: 24 maggio 2017 Segnala Share Inserita: 24 maggio 2017 Non capisco cosa vuoi vedere e come. Dici di voler visualizzare i livelli da una db, ma poi parli di un valore in md22. Dovresti perlomeno dirci come hai strutturato il programma, fc1 e fc165 son cose che hai fatto tu, non sono standard e noi non sappiamo cosa tu abbia scritto! Link al commento Condividi su altri siti More sharing options...
Dragonfly Inserita: 24 maggio 2017 Autore Segnala Share Inserita: 24 maggio 2017 Ciao.Allora in ob1 uc fc1,da fc1 call fc165.In fc165 ho inserito le y che sono per me il livello da 1 a 9 e le y che sono 0-27648 per la standardizzazione del segnale.Alla fine della funzione c'è y:=Md22.Se usassi una fb mi creerebbe un db istanza ma io vorrei leggere invece con delle variabili il livello non è max in un db globale. Link al commento Condividi su altri siti More sharing options...
DesmoGiec Inserita: 24 maggio 2017 Segnala Share Inserita: 24 maggio 2017 In pratica vuoi convertire un segnale analogico in un valore a te leggibile? Con "le y che sono per me il livello da 1 a 9" cosa intendi? E con "le y che sono 0-27648 per la standardizzazione del segnale" ? Perdonami ma non ho capito ^^" Devi fare una scalatura di un segnale analogico (ad esempio, sai che il livello può essere 0- 60 litri) e dal segnale di ingresso devi dedurre il livello attuale? In caso fosse così, c'è già un fc bello che pronto all'uso, l'fc scale nelle standard library Link al commento Condividi su altri siti More sharing options...
Dragonfly Inserita: 24 maggio 2017 Autore Segnala Share Inserita: 24 maggio 2017 CALL "SKAL_LINEAR+LIM_INT_REAL" x :=PEW258 yMIN:=0.000000e+000 yMAX:=9.000000e+000 x0 :=0 y0 :=0.000000e+000 x1 :=27648 y1 :=9.000000e+000 y :=MD22 Link al commento Condividi su altri siti More sharing options...
DesmoGiec Inserita: 24 maggio 2017 Segnala Share Inserita: 24 maggio 2017 Usa l'fc 105 che trovi nelle librerie standard. Ha impostazione simile e non necessita di db d'istanza. Ci metterai la tua var analogica (pew258), valori min e max Indicherai se bipolare o no (bipolare farà la scalatura anche contando i valori negativi) infine appoggi su md o db o quel che vuoi. Ma, alla fine della fiera, non ho capito comunque il tuo problema. Quel blocco scritto da te sicuramente ha funzione analoga all'fc 105. In md22 leggerai direttamente il valore del tuo livello. Se lo vuoi su db, sostituisci quell'md 22 e appoggialo su, esempio, db1.dbd0 Link al commento Condividi su altri siti More sharing options...
Dragonfly Inserita: 24 maggio 2017 Autore Segnala Share Inserita: 24 maggio 2017 Ok grazie mille desmo per i tuo consigli,era cosi' semplice che mi sono un po' complicato la vita.Grazie ancora. Link al commento Condividi su altri siti More sharing options...
Dragonfly Inserita: 24 maggio 2017 Autore Segnala Share Inserita: 24 maggio 2017 Adesso invece se per esempio io vorrrei tenere un livello compreso tra 7 e 5 per esempio potrei fare cosi': l md22 l 2.000000e000 <r =carica_liquido l md22 l 7.000000e000 >r =scarica_liquido Link al commento Condividi su altri siti More sharing options...
DesmoGiec Inserita: 24 maggio 2017 Segnala Share Inserita: 24 maggio 2017 Corretto Link al commento Condividi su altri siti More sharing options...
Dragonfly Inserita: 24 maggio 2017 Autore Segnala Share Inserita: 24 maggio 2017 Bene,sono contento che sto migliorando.Secondo te il programma continuo a scriverlo sempre nell'fc1 dove ho richiamato la funzione fc165 o mi consiglieresti di trovare una soluzione diversa? Link al commento Condividi su altri siti More sharing options...
DesmoGiec Inserita: 24 maggio 2017 Segnala Share Inserita: 24 maggio 2017 Dipende da quanto sarà complesso il programma e da quante funzioni dovrà fare la macchina, ma è abbastanza soggettiva come cosa. Io di solito dedico un fc per ogni funzione macchina, o asse, o qualsiasi altra cosa. Così risulta di più facile comprensione anche ad, eventualmente, altre persone. Però nulla ti vieta di scrivere tutto in un solo fc e commentare quel che scrivi in modo da indirizzare chi legge. Insomma, dipende da te Link al commento Condividi su altri siti More sharing options...
Dragonfly Inserita: 24 maggio 2017 Autore Segnala Share Inserita: 24 maggio 2017 Ok sei molto gentile a rispondermi.La cosa che mi preoccupa e' questa,in questo esempio che ti ho esposto c'era solo un galleggiante che faceva rotare un potenziometro e due elettrovalvole di carico e scarico.Se oltre al potenziometro ci fosse anche per esempio un termometro e un umidostato,tutti analogici,come potrei inserirli nel programma,come richiamerei tutti questi pid?Non so se sono stato chiaro. Link al commento Condividi su altri siti More sharing options...
Dragonfly Inserita: 24 maggio 2017 Autore Segnala Share Inserita: 24 maggio 2017 Per esempio se ho il solito serbatotio che carica quando e' a 2.000000e000 e scarica quando e' a 7.000000e000 e poi ho una sonda di temperatura che a 50° deve raffreddare il liquido nonostante il livello.Come e dove potrei richiamare per esempio un fb41 "cont_c" che mi comanda in uscita una valvola modulante? Link al commento Condividi su altri siti More sharing options...
DesmoGiec Inserita: 24 maggio 2017 Segnala Share Inserita: 24 maggio 2017 I controlli sono indipendenti. fb41 si richiama a tempo ciclico definito, in un ob temporale (esempio ob35) ti basta un controllo pi per far funzionare il sistema. Imposterai un setpoint e l'fb lo compara alla temperatura attuale, poi farà lui la regolazione. Tu dovrai impostare i valore p ed i in funzione della velocità con cui riesci a raffreddare. Però, se lo fai così, avrai continui scompensi, poichè il pid può regolare sia a serbatoio vuoto, quindi raffreddando più velocemente, che pieno, quindi più lentamente. L'ideale sarebbe avere un livello più o meno simile. Link al commento Condividi su altri siti More sharing options...
Dragonfly Inserita: 24 maggio 2017 Autore Segnala Share Inserita: 24 maggio 2017 Scusami che cosa intendi che l'ideale sarebbe avere un livello piu' o meno simile?Scusa l'ignoranza totale. Link al commento Condividi su altri siti More sharing options...
DesmoGiec Inserita: 24 maggio 2017 Segnala Share Inserita: 24 maggio 2017 Tu carichi a "2" e scarichi a "7". Se raffreddi a 2.5, ci metterai 30 secondi ad andare in temperatura. Se raffreddi a 7, ci metterai 3 minuti (ipotizza) L'ideale sarebbe avere un livello costante (simile nel tempo, forse ho scelto un termine inappropriato :P), tipo a 5, senza fare 2/7/2/7 Link al commento Condividi su altri siti More sharing options...
Dragonfly Inserita: 24 maggio 2017 Autore Segnala Share Inserita: 24 maggio 2017 E se la sonda di temperatura rileva 50° a 3 per esempio e non a 5? Link al commento Condividi su altri siti More sharing options...
Dragonfly Inserita: 24 maggio 2017 Autore Segnala Share Inserita: 24 maggio 2017 adesso ti riporto l'esempio completo e vediamo se ho capito. OB1 UC "fc1" OB35 UC FB41 U M 5.0 = L 20.1 BLD 103 UN M 1.0 = L 20.2 BLD 103 UN M 1.0 = L 20.3 BLD 103 UN M 1.0 = L 20.4 BLD 103 UN M 1.0 = L 20.7 BLD 103 CALL "CONT_C" , DB41 COM_RST := MAN_ON :=L20.1 PVPER_ON:=L20.2 P_SEL :=L20.3 I_SEL :=L20.4 INT_HOLD:= I_ITL_ON:= D_SEL :=L20.7 CYCLE :=T#1S SP_INT :="dati_temperatura".set_point PV_IN := PV_PER :=PEW260 MAN := GAIN :=2.000000e+000 TI :=T#20S TD :=T#10S TM_LAG :=T#2S DEADB_W := LMN_HLM :=1.000000e+002 LMN_LLM :=0.000000e+000 PV_FAC :=1.000000e+000 PV_OFF :=0.000000e+000 LMN_FAC := LMN_OFF := I_ITLVAL:= DISV :=1.000000e+002 LMN :="dati_temperatura".controllo_valvola LMN_PER :=PAW248 QLMN_HLM:= QLMN_LLM:= LMN_P := LMN_I := LMN_D := PV :="dati_temperatura".controllo_temp ER :=MD80 NOP 0 L "dati_livello".livello_tot L "dati_temperatura".set_point >R = M 2.0 FC1 UC FC165 CALL "SKAL_LINEAR+LIM_INT_REAL" x :=PEW258 yMIN:=0.000000e+000 yMAX:=9.000000e+001 x0 :=0 y0 :=0.000000e+000 x1 :=27648 y1 :=9.000000e+001 y :="dati_livello".livello_tot AUF "dati_livello" L "dati_livello".livello_tot L "dati_livello".livello_min >R = "memoria_carica" L "dati_livello".livello_tot L "dati_livello".livello_max <R = "memoria_scarica" Poi ho nel db1 le variabili del livello e nel db2 le variabili della temperatura 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