Vai al contenuto
PLC Forum


Creare Una Funzione D'isteresi


Messaggi consigliati

Inserito:

Ciao a tutti,

ringrazio anticipatamente per la vostra disponibilità che mi avete sempre dimostrato.

Vi illustro il mio problema:

devo creare una funzione d'isteresi, avevo pensato ad una FC. Utilizzo un siemens s7300.

Come ingressi ho pensato:

T° attuale

T° soglia sup

T° soglia inf

funzionamento manuale/automatico(digitale)

se sono in manuale faccio questo controllo, leggo questi ingressi e scrivo su queste uscite:

on-off manuale sotto(digitale)

on-off manuale sopra(digitale)

on-off manuale in finestra(digitale)

uscite:(digitale)

in finestra

sotto soglia

sopra soglia

Fin qui tutto ok mi sembra;

In automatico ho fatto un pò di confusione:

faccio i miei confronti tra T° attuale,T° soglia sup, T° soglia inf e comando le mie uscite, vi chiedo se è opportuno usare un conteggio o un db di appoggio per verificare se conteggio=temp_intervallo, prima di effettuare le mie comparazioni e quindi comandare le mie uscite?

Aspetto vostri suggerimenti in proposito, esempi, miglioramenti ......

Saluti Luca.


Inserita:

Ciao Luca

perchè vuoi fare una distinzione fra automatico e manuale ? il campo di isteresi deve esserere diverso ?

io farei cosi

creo un blocco dati di appoggio

se immetto la temperatura tramite un pannello operatore, assegno quel valore tramite una variabile

es. db1.dbd0 ( usae una dbd può esere fin esagerato...comunque )

la tua temperatura es. 40 gradi è contenuta nella db1.dbdo, e lo verifichi anche tramite una VAT

vuoi ottenere una tolleranza superiore-inferiore di 5 gradi ?

L 5

T db1.dbd4 adesso il valore 5 è contenuto nella dbi.dbd4

la tolleranza nefgativa la ottieni facendo

L db1.dbd0

l db1.dbd4

-R

t db1.dbd8

nella dbd8 ti trovi il valore 35 gradi

la tolleranza positiva in vece la ottieni con +r

a questo punto se la temperatura che tu leggi tramite un ingresso analogico, sempre appoggiata in una db è maggiore della db8 (tolleranza positiva ) l'uscita di riscaldo deve essere off, se minore della tolleranza negativa deve essere on

spero di averti dato uno spunto di lavoro

facci sapere ciao

Inserita:

Ciao Luigi,

la distinzione fra automatico e manuale è presente perchè il cliente deve poter comandare le elettrovalvole(o altro) a suo piacere indipendentemente dal mio controllo automatico.

Quello che mi dici è ok concordo in pieno, però ti chiedo mi conviene usare un FB con il suo db d'istanza e non un FC perchè i valori non sono ritentivi giusto?

Altrimenti dovrei usare un db globale che mi gestisce la mia FC, vero?

Grazie saluti Luca.

Inserita:
la distinzione fra automatico e manuale è presente perchè il cliente deve poter comandare le elettrovalvole(o altro) a suo piacere indipendentemente dal mio controllo automatico.

Questo, secondo me, ha poco a che fare con il discorso dell'isteresi... avrai un comando "automatico" di controllo della valvola che deriva dai calcoli fatti considwerando l'isteresi, e un comando "manuale" che lavora in parallelo a quello automatico. Per esemplificare:

U modo_auto

U cmd_auto

O

UN modo_auto

U cmd_man

= EV

ciao

Inserita:
Questo, secondo me, ha poco a che fare con il discorso dell'isteresi... avrai un comando "automatico" di controllo della valvola che deriva dai calcoli fatti considwerando l'isteresi, e un comando "manuale" che lavora in parallelo a quello automatico. Per esemplificare:

U modo_auto

U cmd_auto

O

UN modo_auto

U cmd_man

= EV

Ciao Ecup,

è giusto quello che dici ed è proprio quello che ho fatto io.

Saluti Luca

  • 5 years later...
Inserita:

Ciao a tutti,

ho un problema simile ma stavolta si tratta di isteresi di sonde, ad esempio un sensore di livello.

Vorrei creare una funzione "globale" dove passare:

In ingresso:

1) Stato del sensore

2) Ritardo su sensore attivo per rilevare l'effettiva "accensione" del sensore.

3) Ritardo su sensore disattivo per rilevare l'effettivo "spegnimento" del sensore.

In uscita:

Stato del sensore "filtrato".

Il problema è che i due tempi di ritardo posso essere millisecondi o centesimi o secondi.

Vorrei inoltre sfruttare meno risorse possibile in termini di timers da utilizzare ecc. Però, come faccio a gestire i tempi in maniera locale dentro la mia FC senza utilizzate timers di tipo T e in modo che possa richiamare la mia FC da piu' parti?

Non so se sono stato chiaro....!

Inserita:
Però, come faccio a gestire i tempi in maniera locale dentro la mia FC senza utilizzate timers di tipo T e in modo che possa richiamare la mia FC da piu' parti?

Devi passare all'FC una word contenente il valore OB1_PREV_CYCLE (tempo scansione precedente OB1 in ms) così la usi per incrementare un contatore interno all'FC (una double-word) ... se usi un FB il contatore lo metti in una STAT e sei a posto, altrimenti lo devi mettere in una variabile IN-OUT e allocare (dichiarare) una variabile diversa ad ogni richiamo dell'FC...

Spero di essermi spiegato bene... ciao

Inserita:


Devi passare all'FC una word contenente il valore OB1_PREV_CYCLE (tempo scansione precedente OB1 in ms) così la usi per incrementare un contatore interno all'FC (una double-word) ... se usi un FB il contatore lo metti in una STAT e sei a posto, altrimenti lo devi mettere in una variabile IN-OUT e allocare (dichiarare) una variabile diversa ad ogni richiamo dell'FC...

Spero di essermi spiegato bene... ciao

Grazie per il suggerimento, provo e poi ti faccio sapere :smile:

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...