Vai al contenuto
PLC Forum


Problema Di Timer Programmabile


Radioham

Messaggi consigliati

Salve,

premetto che sono alle prime (primissime) armi con la pogrammazione (KOP) dei PLC.

Sto imparando ad usare il TIA PORAL V12 con WINCC V12.

Il mio problema è che dal pannello operatore voglio impostare il tempo di un timer, e possibilmente vederlo contare da 0 a X e allo scadere mi accenda una lampada sul pannello.

Ho letto in giro ma non sono riuscito a capire quale tipo di timer usare per fare questa funzione.

Qualcuno mi può dare una dritta.

Grazie Carlo

Link al commento
Condividi su altri siti


Ciao,

Hai dimenticato di dire come intendi far partire questo timer. Supponiamo che tu voglia farlo partire con un tasto sul pannello. Potresti usare un timer di tipo Ton , Cioè ritardo all'eccitazione.

Con il tuo tasto sul pannello, devi fare un set del merker che farà partire il tuo conteggio. In questo modo anche quando rilasci il tasto, il timer continuerà a contare. Poi, oltre che al suddetto tasto, devi inserire due campi numerici sul tuo pannello. Ad uno collegherai la variabile PT del timer( Cioè il tempo che tu vuoi impostare allo scadere del quale si accenda la lampada) Ed un altro collegato alla variabile ET ( Questo perché dici di voler vedere il tempo che da zero arriva fino al tuo tempo impostato) . Ricorda che allo scadere del timer, oltre che accendere la tua lampada, devi resettare il merker che ha fatto partire il conteggio se vuoi che il giochetto ricominci..

Ciao

Matteo

Link al commento
Condividi su altri siti

Grazie funziona come volevo io.

Scusa se non mi sono spiegato bene.

Per il reset devo solo mettere un interrutore sul piedino IN che abilita o disabilita il TIMER.

Ti chiedo ancora tre cose se non ti scoccio

Il tempo che imposto sul piedino PT è in milli secondi posso modificarlo in secondi, magari con qualche operazione matematica ?

Se imposto 0 come tempo il timer non parte, se metto 1 msec mi parte, esiste qualche trucco per aggirare il problema ?

Se volessi aggiungere un cronometro che cominci a contare quando lo attivo, posso fermarlo e farlo ripartire dal valore che lo ho fermato e eventualmente resettarlo,

cosa posso usare ?

Grazie ancora

Carlo

Link al commento
Condividi su altri siti

Per la prima domanda: si è fattibilissimo. Basta che ti crei un'altra variabile per esempio se quella di prima era chiamata' tempo in millisecondi', questa nuova la chiamerai 'tempo in secondi'.

In entrata al timer non darai più il tempo in millisecondi ma il tempo in secondi. Per trasformare Devi usare un blocco divisione, in entrata avrai due piedini. Sul primo piedino metti il tempo in millisecondi e sul secondo piedino scrivi la cifra fissa 1000. In questo modo dividerai i millisecondi per 1000 ed otterrai i secondi. In uscita hai un piedino solo e lì ci metterai la tua variabile tempo in secondi. Tempo in secondi come dicevo prima lo dovrai mettere in entrata al timer. Attenzione però che in questa maniera comincerai a lavorare con i numeri reali, cioè in virgola mobile.

Per quanto riguarda la seconda domanda, se non vuoi che il timer non parta con tempi inferiori al secondo, basta che in serie al tuo interruttore che fa partire il timer metti un blocco di confronto. Confronti il valore di tempo che hai impostato e se il valore è maggiore o uguale del tempo che decidi tu allora il timer si abilita.

Per quanto riguarda la domanda sui temporizzatori a cronometro con possibilità di fermare il tempo e farlo ripartire, mi sembrava di aver letto di un timer del genere nella guida del TIA portal . Prova a dare un'Occhio nella guida in linea, ma io non li ho mai usati.

P. S: descrivere un po' meglio la tua applicazione non solo motiva chi ti potrebbe rispondere, ma aiuta anche a darti delle risposte.

Ciao

Matteo

Link al commento
Condividi su altri siti

Grazie,

Non mi e'chiaro perche devo dividere per 1000, se il timer accetta in ingresso un valore in millisecondi devo impostare la variabile in secondi e poi tramite una moltiplicazione per 1000 imposto il valore nel timer in milli secondi.

Io voglio che il timer parta anche con il valore 0 (logicamente in questo caso il timer deve attivarsi subito), magari confronto il valore che imposto con un comparatore che se uguale a 0 mi abilita direttamente la uscita, se diverso funziona il timer.

Per il temporizzatore cronometro pensavo a qualcosa tipo un contatore ( Ma non so quale usare) che in ingresso ha un impulso di 1Hz ( pensavo di usare i marker di clock) che abilito e disabilito con un pulsante, e la uscita posso dividere i secondi in minuti e ore.

Comunque domattina guardo la guida on line.

Non ho descritto la mia applicazione perché in realtà essendo ai primi progettini sto improvvisando usando alcune funzioni per imparare.

Poi proverò a creare qualche applicazione simulando un impianto reale.

Carlo

Link al commento
Condividi su altri siti

RadioHam:

Il tempo che imposto sul piedino PT è in milli secondi posso modificarlo in secondi, magari con qualche operazione matematica ?

Step80:

Basta che ti crei un'altra variabile ...

Volendo si può anche scalare la variabile del timer direttamente dal pannello (presumo Siemens anche quello, ma, normalmente, la possibilità è un po' su tutti): se non l'hai mai fatto, leggiti bene la guida (a prima vista puo' risultare ostico): così risparmi una variabile ed un conto matematico ...

Link al commento
Condividi su altri siti

Ho cercato di leggere la guida per la variabile da pannello ma non sono riuscito a trovare dove ne parla.

Ho letto sul sito della siemens che con la versione Tia Portal V11 era possibile convertire un valore INT o DINT in TIME usando le funzione T_CONV, ma con la versione V12 il T_CONV non lo permette più.

Grazie

Carlo

Link al commento
Condividi su altri siti

Al momento ho tutto spento (a parte questo PC dove non ho il TIA): appena ci devo mettere le mani, ti posto dov'è il comando di scalatura da pannello.

Per il PLC: se stai usando il 1200, il valore che accetta un timer è un DINT, quindi non devi fare nessuna conversione in TIME; se, invece, stai usando il 300, allora è un pò più complicato, perchè gli ultimi 2 bit della word (il 300 mi pare utilizzi una word) definiscono la base tempi del timer.

Link al commento
Condividi su altri siti

Si uso il 300.

Ho provato anche con la versione 11di tia ma non mi funziona la conversione come mostrato sul sito della siemens usando T_CONV

Sempre sul sito ho trovato degli esempi di timer fatti per la versione 11 e 12 che fanno al caso mio, dopo averli caricati sul simulatore è compilato il pannello e cerco di scrivere sul pannello il valore in secondi mi appare la finestra degli allarmi che mi dice che non può scrivere sul plc.

Ho trovato anche (sempre sul sito siemens) una libreria che dato il valore il giorni ore minuti secondi sui vari ingressi dovrebbe sulle due uscite fornire la data completa dd-gg-hh-mm-ss e il totale in millisecondi ma nemmeno quella mi funziona (sono sfortunato).

Sempre sul sito siemens ho letto che è possibile dal pannello usare una funzione di scala (dovrebbe trovarsi in proprietà -proprietà -scala) per impostare la scala di moltiplicazione o divisione ma io non la trovo nelle proprietà del campo I/O.

Grazie Carlo

Link al commento
Condividi su altri siti

X drugo: si è possibile scalare da pannello, ma vedendo che l'utente stava eseguendo esercizi didattici ho ritenuto opportuno fargli fare due operazioni in piu per fare pratica....

Comunque, per scalare una variabile da pannello basta cliccare sull'albero a sx-variabili- e nelle proprieta trovi anche la scalatura , oltre alla possibilità di impostare dei limiti di immissione dei dati...

Ciao

Matteo

Link al commento
Condividi su altri siti

Se usi il 300, non ne sono sicuro, ma la conversione te la dovrai fare a mano, anche perchè non so di aggiunte alle istruzioni pre-esistenti prima del TIA.

Di solito gli esempi che fornisce Siemens sono generici e da applicare all'ambiente: verifica bene che cosa hai scaricato.

Per la scalatura da pannello ti ha risposto già Step-80: evidenzi la tua variabile (ovviamente devi importarla e/o copiarla nel progetto HMI, proprietà, scala lineare; qui selezioni il valore del PLC e quello del HMI; ad esempio, tu vuoi scalare da mS a secondi, quindi valore finale PLC 1000 e valore finale HMI 1, il che equivale a dividere per 1000 il tuo valore.

X drugo: si è possibile scalare da pannello, ma vedendo che l'utente stava eseguendo esercizi didattici ho ritenuto opportuno fargli fare due operazioni in piu per fare pratica....

Credevo che tu non ci avessi pensato, invece ero io che non pensavo del tutto !!

Scusami ...

Modificato: da drugo66
Link al commento
Condividi su altri siti

grazie.

ma ho provato o tutti i modi a fare la conversione facendo le due operazioni ma non ci sono riuscito.

prsferi o capire come fare la con ersione da seco di a milli secondi senza ricorrere alla scalatura, potete farmi un esempio di come fare.

carlo.

Inviato dall'app. Mobile di PLC Forum da GT-I9300

Link al commento
Condividi su altri siti

Grazie.

ma ho provato o tutti i modi a fare la conversione facendo le due operazioni ma non ci sono riuscito.

L'operazione da pannello, come ti ho già scritto, è di una semplicità unica: tu imposti la scala e ci pensa il pannello a fare la conversione: riprova.

Per il calcolo, invece, sempre come ti dicevo, è un po' più difficile; il valore è in una word e gli ultimi due bit a sinistra sono la scala; mi pare che sia:

00 - mS

01 - S

10 - Min

11 - Ore

quindi tu dovresti, sulla tua word, fare una operazione logica (OR, AND, etc.) in modo da avere 01 come ultimi bit; sullo Step 7 c'è un . molto esplicativo, sul TIA non so.

Infine volevi usare T_CONV: non credo che abbiano previsto una conversione da word a valore timer S7300: il TIME che vedi mi sembra sia una struttura, che comprende ore, minuti e secondi, che poi non puoi passare al tuo timer perchè non te lo accetta.

Forza e coraggio: vedrai che ci riesci.

Link al commento
Condividi su altri siti

Innanzitutto Grazie per la pazienza

Ma non riesco a trovare ne pannello il modo di fare la scala.

Io vado nella pagina creata del pannello e clco sul campo I/O (che devo traformare in secondi) e vado nelle propietà non mi trovo una voce che dice scala ma mi trovo:

Generale

Conformazione

Comportamento

Rappresentazione

Formato del testo

Lampeggio

Limiti

Varie

Sicurezza

Sul sito della siemens ho trovato queste ma non riesco a farle girare

Primo link funzione per trasformare una data in millisecondi

http://support.automation.siemens.com/WW/llisapi.dll/43184859?func=ll&objId=79160297&objAction=csView&ehbid=43566349&query=TIA+Portal+V12+convertire+Int+Time&lang=it&siteid=cseus&aktprim=0&extranet=standard&viewreg=WW&load=treecontent

Secondo Link trasformare una variabile INT DINT in TIME

http://support.automation.siemens.com/WW/llisapi.dll?func=cslib.csinfo&objaction=csopen&objid=29298406&ehbid=43566349&query=TIA+Portal+V12+convertire+Int+Time&lang=it&siteid=cseus&aktprim=0&extranet=standard&viewreg=WW

Ma nemmeno questa funziona.

Non ho capito come trasformare la WORD in TIME

Ho capito che le prime due cifre a sinistra sono la scala

01(scala in secondi)XXXXXX(valore in secondi) ma poi come immetto al ingresso del TIMER.

carlo

Link al commento
Condividi su altri siti

Ciao,

Io per fare quello che dici tu faccio così:

L MW 100 // carico la word impostata da Op in INT
ITB // la converto in BCD
L W#16#1000 // Valore dei Tempi 1000=Decimi / 2000=Secondi / 3000 Decine di secondi
+I
T MW 102 // valore da passare al temporizzatore

U E 0.0
L MW 102
SE T 1

Se ti carichi la MW102 su una VAT e la guardi in binario, modificando 1000, 2000 e 3000 ti rendi conto di come lavorano i 2 bit per la base dei tempi come detto da drugo nel post 13.

Link al commento
Condividi su altri siti

La scala non la trovi cliccando sul campo I/O , ma nell' albero a sx dove vedi scritto"variabili" . Cliccando ti si apre una lista di tutte le variabili che hai usato nel tuo progetto e ora una per una puoi decidere se modificarne la scala

Ciao

Link al commento
Condividi su altri siti

Grazie,

Domani provo a fare le due cose.

Penso di avere capito quasi tutto quello che Beppe ha scritto io,non conosco il linguaggio che hai usato, ma il concetto e chiaro, prendo la WORD e la coverto in BCD dove nella word le prime quattro cifre di sedici cifresono la base tempi.

E passi la word al temporizzatore.

Non ho capito le ultime tre righe (a parte la L che se non sbaglio,serve per caricare la variabile.

Carlo

Link al commento
Condividi su altri siti

Per capire ti basta scriverle le 3 righe in nuovo segmento, poi cambi il modo di visualizzazione in Kop e vedrai.

Spero di esserti stato utile.

Inviato dall'app. Mobile di PLC Forum da LG-P970

Link al commento
Condividi su altri siti

Ho trovato dove modificare la scala.

Ho provato a caricare le righe scrite da beppo quando scrivo la variabile U E 0.0 mi segnala " errore di sintassi il valore U non è valido " e quando cerco di passare il OB1 da AWL a KOP il segmento mi rimane in AWL.

carlo

Link al commento
Condividi su altri siti

Vodiamo se ho capito cosa scrive beppe:

L MW 100 // carico la word impostata da Op in INT (carica la word MW100)
ITB // la converto in BCD (usa la funzione CONVERT da INT a BCD16)
L W#16#1000 // Valore dei Tempi 1000=Decimi / 2000=Secondi / 3000 Decine di secondi (carica la BCD16 con base tempi in decimi di secondo)
+I (somma i due numri come un intero a 16bit)
T MW 102 // valore da passare al temporizzatore (passa al temporizzatore T il valore in decimi si secondo e la mette nella MW102)

U E 0.0 (AND di E00)
L MW 102 (carica la word MW102)
SE T 1 (avvia il temporizzatore con ritardo di inserzione)

Quindi volendolo fare in KOP devo usare:

CONV da INT della MW100 (tipo word) a bcd16 nella MW101 (tipo word)

caricare una word (MW103) con valore 2000 0000 0000 (espressa in BCD)

ADD di MW101 (ingressi IN1) e MW 103 (ingresso IN2) e uscita ho la MW102 (come un intero)

Timer TON uso la MW102 nel piedino PT e abilito tramite il piedino IN la variabile E0.0

E' giusto questo ragionamento?

Carlo

Link al commento
Condividi su altri siti

Ciao Carlo.

Volendolo fare in Kop devi fare così:

Ricordati che una Word vale 2 Byte, quindi se usi la MW100 non puoi usare la MW101 altrimenti avrai un conflitto di dati, usando la MW 100 usi il MB100 e MB 101.

La costante per il tempo non la devi convertire in BCD la passi così com'è W#16#2000, in Esadecimale.

In Kop non puoi usare l'istruzione ADD_I, perchè in IN accetta solo Intero, quindi puoi usare una combinazione OR a parola.

Ah, io uso ancora il Buon Vecchio Step 7, ma non credo avrai problemi a trovare le stesse istruzioni sul TIA, almeno credo.

Link al commento
Condividi su altri siti

Grazie,

Stavo impazzendo.

Domani provo a farlo.

Il teorizzatore che uso io nel mio esempio è il TON perché ha una uscita che mi visualizza lo scorrere del tempo e ho fatto nel pannello HMI un campo I/O che mi mostra questo tempo.

Ho anche io lo Step 7, (che decisamente trovo più' carino e semplice), ma dato che i vari video dei tutorial che si trovano in rete usano il TIA uso quest'ultimo.

Carlo

Link al commento
Condividi su altri siti

Beh certo, fai bene ad usare il TIA, il futuro di Siemens ormai è quello.

Io ho tolto il cellofan solo ieri mattina dalla scatola, dopo mesi che era arrivato in ufficio.

A giorni lo installo e comincio a smanettarci un pò anch'io.

Buon lavoro.

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