Vai al contenuto
PLC Forum


lettura livello max e min blocco dati


Dragonfly

Messaggi consigliati

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


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

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

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

  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

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

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

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

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 :P

Link al commento
Condividi su altri siti

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

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

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

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

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

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 account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...