Vai al contenuto
PLC Forum


S7-1200, blocchi IEC e richiamo in FC


smsmsms

Messaggi consigliati

Buongiorno,

sono alle prime armi con il TIA Portal v13 (sp1 update 4 se non erro) e con il plc 1200.

Durante lo sviluppo della mia applicazione scritta in KOP ed in SCL ho riscontrato non pochi problemi con l'utilizzo delle funzioni IEC, in particolare IEC_TIMER ed IEC_COUNTER.

Provo a spiegarmi:

ho realizzato un DB apposito chiamato DB_IEC per contenere tutti i tipi IEC (nel mio caso solo timer e counter);

fatto ciò pensavo di poter richiamare in qualsiasi punto del programma e qualsiasi tipologia di blocco mi trovassi (FC o FB) il timer ad esempio TON come (ad esempio in SCL) "DB_IEC".MioTimer.IN := TRUE;

Di fatto però non funziona e se non ho capito male (proseguendo l'esempio in SCL) dovrei richiamarlo come "DB_IEC".MioTimer.TON(IN := TRUE). Pensavo fosse logico anche perchè devo specificare la tipologia del timer (TON in questo caso) invece ancora non va se utilizzato all'interno di un FC con parametri in ingressi. Ho contattato il supporto tecnico e mi spiegano che l'oggetto IEC_TIMER, richiede una istanza in un DB che il sistema TIA crea in automatico nell'istante in cui inserisco il timer nel progetto; in alternativa posso farlo puntare al mio DB ove ho inserito il dato "MioTimer" di tipo IEC_TIMER. Questo però funziona SOLO se inserito in un FB e l'uscita del timer MioTimer.Q deve essere passata come parametro di uscita dell'FB.

Poi in tutto il progetto dovrò usare una variabile abbinata l'uscita dell'FB (ad esempio FB_MioTimer_Q)

Ora, quello che vorrei fare e/o capire se si può fare è utilizzare all'interno di un FC richiamato una sola volta con parametri in ingressi (scritto in KP o SCL) gli oggetti IEC (timer / counter) che puntano direttamente ad un DB ove ho creato le loro istanze. Poi utilizzare sempre nello stesso FC i contatti di uscita Q o QU / QD presi direttamente dal DB di istanza

Non riesco a capire perchè a volte i timer / counter non mi funzionano come mi sarei aspettato. Grazie per qualsiasi informazione e/o consiglio in merito.

 

Saluti

Link al commento
Condividi su altri siti


Ciao,

allora confermo che nel TIA tutti i timer,counter,Blocchi di istanza vari hanno bisogno del loro proprio DB che viene creato automaticamente quando si richiama l'oggetto timer ad esempio. La risposta alla tua domanda è si nel senso che tu stai creando fisicamente un DB adibito al timer e quindi puoi sfruttare i suoi parametri a tuo piacimento anche in FC diversi da quello in cui richiamo il timer la prima volta. L'unica cosa che rimane fissa è chiaramente la posizione in cui si trova il nuovo oggetto. 

Quali sono i problemi che riscontri che non ti spieghi? Puoi essere un pò più chiaro su quali siano questi casi di non funzionamento?

Link al commento
Condividi su altri siti

Ciao,

io lo faccio continuamente: creo un DB che contiene tutti i timer e contatori, se sono molti li suddivido ancora in strutture che identificano i gruppi dell'impianto; poi li utilizzo dove servono all'interno dei vari blocchi; il dato IEC_TIMER o IEC_COUNTER non identifica il tipo di timer o di contatore, ma è solo il dato che poi vai ad utilizzare per l'istruzione TON e via dicendo; ovviamente il dato IEC_TIMER diventerà MioDB.MioTimer dove MioDB è il blocco che contiene la dichiarazione dei dati IEC e MioTimer è un IEC_TIMER.

In SCL scrivo solo gestione di dati ed array e, normalmente, non mi servono timer e contatori, ma in KOP non ho mai avuto problemi e così il tutto mi sermbra più ordinato e leggibile.

Come dice Giulio, spiega meglio quali sono i tuoi problemi

Link al commento
Condividi su altri siti

Buongiorno,

grazie per le vostre risposte. Si credo di non essermi spiegato: vediamo i problemi uno alla volta ..

Creo un DB di nome DB_IEC dove all'interno definisco MioTimer di tipo IEC_TIMER; poi creo un FC in linguaggio SCL (capisco che il KOP forse è più conosciuto  ecc..) ma la struttura su cui mi trovo a lavorare è in SCL e vorrei mantenere la simmetria. Ora devo inserire un timer di tipo TON all'interno del mio FC. Quale sarà la sintassi corretta?

DB_IEC.MioTimer.IN := TRUE lo compila ma non va bene perchè non definisco il tipo di timer

DB_IEC.MioTimer.TON(IN := TRUE) non lo compila

 

Grazie per il prezioso aiuto; saluti

Link al commento
Condividi su altri siti

Ciao è molto più semplice di quello che pensi, ti ho fatto una funzione di una semplice luce lampeggiante che usa due timer TON in SCL cosi puoi capire ancora meglio:

FUNCTION_BLOCK "esempio_timer_per_smsmsms"
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.1
   VAR_INPUT 
      tempo_on : Time;
      tempo_off : Time;
   END_VAR

   VAR_OUTPUT 
      lampada : Bool;
   END_VAR

   VAR 
      Timer1 {OriginalPartName := 'TON'; LibVersion := '1.0'} : TON;
      Timer2 {OriginalPartName := 'TON'; LibVersion := '1.0'} : TON;
   END_VAR


BEGIN
	(* Funzione che attraverso l'uso di due timer TON mi permette di avere una luce lampeggiante
	*)
	
	#Timer1(IN:=NOT #Timer2.Q,PT:= #tempo_on);
	#Timer2(IN:=#Timer1.Q,PT:=#tempo_off);
	
	#lampada := #Timer1.Q;
	
	
END_FUNCTION_BLOCK

con le due variabili in ingresso tempo_on e tempo_off stabilisci semplicemente per quanti secondi (o millisecondi, o quello che desideri) la lampada (o quello che desideri, ad esempio può essere un rele allo stato solido, per generare un segnale PWM) sta accesa o spenta.

In questo caso come hai visto ho creato una function Block e i timer, o meglio le istanze dei timer sono presenti all'interno della function block come variabili statiche.

 

Link al commento
Condividi su altri siti

  • 2 years later...

Salve,

         con tia v14 ho un problema, ho un  ton in una fb in scl ed ho impostato la pt a 500ms, bene quest'ultimo quando c'è la condizione per far partire il timer si pianta tipo a 450ms e va in crash il tia portal questo succede con il simulatore acceso devo testare delle modifiche e non ho una cpu 1500 a disposizione.

Avete qualche idea? può essere un problema del simulatore?

 

Un grazie anticipato a chi ripsonderà

Link al commento
Condividi su altri siti

Ciao,

innanzitutto accodarsi a discussioni esistenti è vietato dal regolamento: la prossima volta aprine una nuova.

Detto questo, il simulatore può avere dei problemi, per carità, ma io mi preoccuperei di cosa accade quando il timer va ON: tu lo vedi contare fino a 450 mS. e, secondo me, non lo vedi arrivare a 500 mS. perchè quando il timer si attiva accade qualcosa che manda in crash il TIA.

 

Link al commento
Condividi su altri siti

Giuseppe Signorella

Ciao denny1,

Come evidenziato da drugo66, ti sei accodato ad una discussione esigente,  ferma oramai da anni. Essendo tutto ciò vietato dal regolamento, ti invito ad aprirne una nuova in quanto questa discussione è chiusa.

***********DISCUSSIONE CHIUSA**********

Link al commento
Condividi su altri siti

  • Giuseppe Signorella locked this discussione
Ospite
Questa discussione è chiusa alle risposte.
×
×
  • Crea nuovo/a...