Vai al contenuto
PLC Forum


Timer A T Variabile


luppi24

Messaggi consigliati

Ciao!,

vorrei sapere se e´ possibile con STEP 7 creare dei timer a t variabile, dove t invece che essere costante S5T#3S sia del tipo t=f(x,y) con x,y due variabili misurabili :blink: .

in pratica mi servirebbe un timer nel quale idealmentre scrivere S5T#tS (t=f(x,y) ). <_<

Grazie a tutti.

Link al commento
Condividi su altri siti


Matteo Montanari

una soluzione di questo tipo era già stata richiesta...

in quel caso si voleva utilizzare il dato rilevato da un ingresso analogico come variabile di impostazione tempo.

utilizza la funzione cerca e trovi il risultato.

consicerando che la varibile di tempo "S5T" è composta da una word a BCD dove vi è la base dei tempi ed il valore di conteggio...

!!! Ma usare il manuale in linea fà così schifo ???

ci sono anche esempi pratici

una volta che sai come viene gestita la varibile "S5T" accettata dai timer puo costrurti tutte le funzioni che vuoi per determinare il valore che desideri.

Modificato: da keosmm
Link al commento
Condividi su altri siti

grazie keosmm!

ho gurdato i post precedenti sui contatori...e ci sono molti esempi in AWL

....la cosa che non mi e´ chiara e´ come crearli in FUP, ho guardato sul manuale (non quello in linea) e c´é´la spiegazione dei vari puntatori ma non un esempio di come si creino in FUP.... :blink:

Link al commento
Condividi su altri siti

dvi scrivere in BCD dal bit 0 al bit 12 il valore del tuo calcolo (max 999)

bit 13 14 è la base tempi

00 =centesimi di sec

01 =decimi di sec

10 =sec

11 decine di sec

bit 15 e 16 irrilevante (meglio comunque lasciarli a 0)

comunque sul . in linea cerca :

Tipo di dati S5TIME

ed è tutto piu' chiaro

Link al commento
Condividi su altri siti

Matteo Montanari

Il linguaggio FUP non è tanto utilizzato, normalmente si utilizza il KOP ed AWL (stiamo parlando di Siemens, con altre tipologie di prodotti, i nomi sono differenti, ed il lingauggio "FUP" non è supportato).

comunque

per passare dal linguaggio AWL al linguaggio KOP, e quindi interpretabile anche in FUP occorre utilizzare memorie di appoggio (magari anche solomente temporanee, senza nessuna dichiarazione).

questo è necessario per poter far comprendere al compilatore cosa e come deve tradurre il segmento.

FUNCTION "Timer" : VOID
TITLE =Prove e Vari
AUTHOR : Keos
FAMILY : Keos
VERSION : 0.1


VAR_TEMP
  Valore_DEC : INT;    
  Valore_BCD : INT;    
  Valore_BCD_word : WORD;    
  BaseTempo : INT;    
  BaseTempo_word : WORD;    
  SpTimer : S5TIME;    
  SpTimer_word : WORD;    
END_VAR
BEGIN
NETWORK
TITLE =impostazione valore 0..999 su timer AWL

// Come impostare un valore 0..999 su di un timer
//;
// Il valore, come detto, deve essere compreso tra
// 0 e 999, in base alla base dei tempi si determina
// la durata del tempo
//;
// Il valore deve essere espresso in BCD.
//;
// Nel caso in cui il valore sia in decimale
// occorre fare una conversione:
//;
      L     #Valore_DEC; 
      ITB  ; 
      T     #Valore_BCD; 
//;
// La base dei tempi può assumere 4 diversi valori
// = 0 calcolo della durata in 0.01 sec
// = 1 calcolo della durata in 0.1 sec
// = 2 calcolo della durata in 1.0 sec
// = 3 calcolo della durata in 10.0 sec
//;
// = 3 calcolo della durata in 10.0 sec
//;
      L     W#16#3000; 
      T     #BaseTempo; 
//;
// Unione tra Base tempo e valore di tempo
//;
      L     #Valore_BCD; 
      L     #BaseTempo; 
      OW   ; 
      T     #SpTimer; 
//;
NETWORK
TITLE =impostazione valore 0..999 su timer KOP / FUP

      U(   ; 
      U(   ; 
      U(   ; 
      L     #Valore_DEC; 
      ITB  ; 
      T     #Valore_BCD_word; 
      UN    OV; 
      SAVE ; 
      CLR  ; 
      U     BIE; 
      )    ; 
      SPBNB _005; 
      L     W#16#3000; 
      T     #BaseTempo_word; 
      SET  ; 
      SAVE ; 
      CLR  ; 
_005: U     BIE; 
      )    ; 
      SPBNB _006; 
      L     #Valore_BCD_word; 
      L     #BaseTempo_word; 
      OW   ; 
      T     #SpTimer_word; 
      SET  ; 
      SAVE ; 
      CLR  ; 
_006: U     BIE; 
      )    ; 
      SPBNB _007; 
      L     #SpTimer_word; 
      T     #SpTimer; 
_007: NOP   0; 
END_FUNCTION

ho riportato un esempio (Sorgente AWL) di quello che dovrebbe servirti.

nel primo segmento è impostato come linguaggio AWL

nel secondo segmento sono le stesse operazioni ma in linguaggio KOP e/o FUP

spero ti renda le cose più semplici da capire.

(in awl puoi eseguire ogni operazione, fregandotene di come la varibile è dichiarata (l'errore lo vedi solamente nel risulatato) in Kop o Fup devi dichiarare la variabile come vuole il "blocco/funzione" in caso contrario il compilatore non l'accetta, segnandola in rosso).

Link al commento
Condividi su altri siti

devo crearmi un contatote a t variabile.....il tempo viene calcolato da una funzione f(x,y) dove x e y sono due variabili che misuro.

il mio problema e´ crearmi un contatore nel quale posso mettere un tempo variabilie e non fisso.

Per fare ciö vorrei, una volta calcolato t=f(x,y) inserirlo nel timer (al posto della scrittura S5time) tramite un puntatore.

la mia idea era:

1-calcolarmi il valore t=f(x,y) ..................gia fatto

2-mandare t ad un timer con un puntatore ..........non sono riuscito a farlo

spero di essere stato chiaro e poco casinista

Link al commento
Condividi su altri siti

allora supponiamo di avere una pompa che deve svuotare un serbatoio, voglio azionare questa pompa per un tempo t variabile quando raggiungo il livello max.

sia qu la portata costante della pompa quando e´ attivata

sia qi la portata variabile in entrata (nota perche´ la misuro)

sia A la superficie del serbatoio

sia dh la differenza tra livello max e min voluti nel serbatoio.

La pompa la attivo per un certo tempo t dato da t= (dh*A)/(qi-qu) variabile perche´ qi varia.

il mio problema e´:

una volta calcolato il mio t come metterlo dentro un timer?

la mia idea era calcolarmi il t per mezzo delle solite operazioni ottenendo il risultato in MW100 x esempio e poi mettere dentro il timer al posto tale valore nel TW.....ma questa ultima operazione non so come farla

(io uso il linguaggio FUP)

spero che sta volta sia chiaro senno´ significa che mi sto rincoglionendo....se non lo sono giä :blink:

Link al commento
Condividi su altri siti

io ho fatto cosi´........e´ solo un esempio x vedere cosa succede, non corrisponde al vero e proprio azionamento della pompa come nel precedente esempio...infatti ho messo tutte variabili per poi cambiarle inPLCSIM e vedere cosa succede.

che ne dite? :huh:

si accetta il lancio di: babane pomodori cachi.... :( ma non barbabietole che fanno male :unsure:

ho chiamato

MW1= area serbatoio

MW20= differenza livello max e livello min

MW40= MW1*MW20

MW60=qu

MW80=qi

MW100= qu-qi

MW120=t

network1

U(

O E 0.0

O E 0.1

)

SPBNB _003

L MW 1

L MW 20

*I

T MW 40

_003: NOP 0

network2

L MW 60

L MW 80

-I

T MW 100

NOP 0

network3

L MW 40

L MW 100

/I

T MW 120

NOP 0

network4

U E 0.2

L MW 120

SV T 1

NOP 0

NOP 0

NOP 0

NOP 0

Link al commento
Condividi su altri siti

questo programma mi va bene....il problema e´ che per tempi superiori ai 100ms si intoppa e non va.....e devo fare come diceva saggiamente keosmm.....sto vedendo in FUP come cavolo si fa..... :angry:

Link al commento
Condividi su altri siti

Se ti può essere utile (il timer è espresso in secondi):

L DB10.DBW0    //valore del timer  f(x,y)

ITB

L W#16#2000

OW

T LW0

....

L LW0

SE  T10

U  T10

.....

Ciao

B)

Modificato: da OB1-Roby
Link al commento
Condividi su altri siti

Matteo Montanari

prendi il segmento 2 dell'esempio che ti ho postato prima...

volendo inserisci i tuoi valori, ed altri aggiunti per ottenere la corretta visualizzazione

ti diventa una cosa del genere:

     U(
     U(
     U( 
     L     MW 120
     ITB  
     T     MW200
     UN    OV 
     SAVE  
     CLR   
     U     BIE
     )  ; 
     SPBNB _005; 
     L     W#16#3000; 
     T     MW202
     SET   
     SAVE  
     CLR  
_005: U     BIE
     )    
     SPBNB _006
     L     MW200
     L     MW202
     OW    
     T     MW204 
     SET   
     SAVE  
     CLR   
_006: NOP   0

dopo di che utilizzi il "tuo" timer

network4

U E 0.2

L MW 204

SV T 1

NOP 0

NOP 0

NOP 0

NOP 0

ricordati che la base dei tempi (MW202) deve avere le seguenti caratterisitche:

// La base dei tempi può assumere 4 diversi valori

// = 0 calcolo della durata in 0.01 sec

// = 1 calcolo della durata in 0.1 sec

// = 2 calcolo della durata in 1.0 sec

// = 3 calcolo della durata in 10.0 sec

Modificato: da keosmm
Link al commento
Condividi su altri siti

grazie mille a tutti!

[at]keosmm: ho fatto come hai detto e va tutto bene..... :lol:

mi resta pero´ da capire come costruire in FUP la sequenza che hai fatto te per impostare il timer.... :angry: anche perche´ sa STL a FUP la tua sequenza non me la converte.... :(

Spero di poter un giorno ricambiare tutte e gentilezze che sto ricevendo in questo Forum.

davide

:)

Link al commento
Condividi su altri siti

finalmente ce l´ho fatta pure in FUP :P .....mi sono preso il manuale in STL B) e mi sono "tradotto" in FUP tutte le funzioni che avete scritto in STL............ora funziona!!! ooooooooooole´!!! :P

Link al commento
Condividi su altri siti

posso farti una domanda luppi24.

Ma qualcuno (il cliente?) ti ha imposto di usare FUP?

Io penso che un software, se funziona, non importa in che linguaggio sia scritto.

Decidere che tipo di linguaggio utilizzare è conseguenza di diversi fattori:

1) Richiesta esplicita del cliente (ove possibile)

2) Complessità dell'istruzione o insieme di istruzioni (spesso è preferibile AWL piuttosto che KOP o FUP)

3) Comprensibilità dell'istruzione o insieme di istruzioni (spesso è più chiaro il KOP o il FUP dell'AWL)

4) Semplicità del debug (e qui credo che dove si utilizza una qualche grafica è preferibile agli 1 e 0 dell'RLC)

5) In alcuni casi anche risparmio di memoria (mi viene in mente il fare operazioni a byte che il KOP non supporta "obbligando" l'uso delle word)

Ecco perchè non capisco e sono curioso del tuo accanimento su sto FUP (peraltro usatissimo in Germania e Francia)

Link al commento
Condividi su altri siti

Matteo Montanari
mi resta pero´ da capire come costruire in FUP la sequenza che hai fatto te per impostare il timer....

strano perchè io l'ho scritta direttamente in kop e tradotta in FUP senza avere nessun problema.

visto che però ci sei riuscito ugualmente me ne rallegro...

Ma qualcuno (il cliente?) ti ha imposto di usare FUP?

da quello che ha affermato luppi24 in altre discussioni non ha nessun cliente ed è ancora uno studiando...

che poi si voglia dare le classiche martellate sui maro.i ed utilizzare il FUP penso che siano fatti suoi...

anche se leggendo in altri post mi sembra di aver capito che ora è in Cermania...

per quanto rigurada i vari linguaggi di programmazione, sono tutti utili e comprensibili, chiaramente con un linguaggio "aperto" come può essere AWL non hai vincoli, e ti è permesso di fare molte più oprazioni senza nessun obbligo, il rovescio della medaglia e che hai maggior possibilità di sbagliare a combinare fra loro le varibili (magari con formato diverso).

Link al commento
Condividi su altri siti

Io sto facendo la tesi in germania in una azienda e il FUP mi e´ stato imposto :( ......per me il PLC e´ una cosa nuovissima (ci trabaccolo da meno di 2 mesi) e non sapevo nemmeno ci fossero 3 linguaggi x programmare in Step 7 :unsure: .....da quel poco che ho visto il FUP e´ piu´ intuitivo (almeno per me che faccio meccanica) perö AWL e´ migliore sia per liberta´ che per pluralita´ delle funzioni....comunque resta il parere mio personale e di uno assolutamente non esperto..... :P

per non sbagliarmi e per restare meno ignorante sto cominciando a leggermi anche il manuale in AWL poi vuoi mai che un domani mi trovo meglio ed uso quello. :rolleyes:

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