luppi24 Inserito: 25 gennaio 2005 Segnala Inserito: 25 gennaio 2005 devo usare un contatore per numerare le accensioni e gli spegnimenti di una pompa per monitorarne la durata l´usura ecc... ho visto che il campo di un contatore e´ da 0 a 999, dato che di sicuro i ciclo di una pompa e´ maggiore di 999 attacchi/stacchi come posso ottenere un numeratore sull´ordine dei 1000000 ?grazie a tutti.Davide
Livio Orsini Inserita: 25 gennaio 2005 Segnala Inserita: 25 gennaio 2005 Non dici niente relativamente al tipo di ingrsso, da cui si presuppine che sia un ingresso standard.Per crearti il conteggio che soddisfi le dimensioni necessarie devi grearti una variabile in doppia parola, poi ogni volta che riconosci (comandi) un'accensione incrementi di uno la tua variabile.
elsabz Inserita: 25 gennaio 2005 Segnala Inserita: 25 gennaio 2005 Supponendo che usi un PLC SIEMENS S7,e usi un contatto digitale in ingresso per rilevarela marcia o l'arresto della pompa (1=marcia;0=arresto)ti posso suggerire il seguente codice AWL:U E 0.0 //contatto pompaFP M 0.0 //Merker di appoggio 1 ciclo fronte di salitaOU E 0.0FN M 0.1 //Merker di appoggio 1 ciclo fronte di discesaSPBN M001 //salta se RLC = 0L MD 20 //doppia word che contiene il numero di avvaimenti/arrestiL L#1 //numero Dword costante+D //addizione di due numeri DwordT MD 20 //trasferimento del risultato in MD 20M001: NOP 0 //se sopra RLC = 0 salta quì e non fa nienteSpero che ti sia d'aiuto! Ciao!
luppi24 Inserita: 25 gennaio 2005 Autore Segnala Inserita: 25 gennaio 2005 grazie mille a tutti............come sempre molto gentili e competenti!grazie davide
luppi24 Inserita: 27 gennaio 2005 Autore Segnala Inserita: 27 gennaio 2005 ho risolto cosi´ il contatore attacchi stacchi della pompa, puo´ andare?spero di non aver scritto delle bestialita´.....in caso chiedo perdono grazie a tutti come sempre.DavideNetwork 1 ________ | SR | M(0.0) | | E0.0--------|P | ----- - ----- | S | | | | | E0.0 -----------| R Q|----JMP(M0.1) |_______ |Network 2__Label_____---------------| M0.1 |---------------|__________ | ___________ | ADD_R | M(0.0) | | E0.0--------|P | ----- - ----- |EN OUT |----DW20 | | C#1------|IN1 | | ENO |---- = A4.0 DW10------|IN2 | |__________ | ___________ | MOVE | | | E0.0------- |EN OUT |----DW10 | | | | | |---- = A4.0 DW20------|IN | |__________ | Simboli Descr tipoE0.0 segnale pompa boolM0.0 merker pompa boolM0.1 merker JMP boolC#1 valore da sommare per ogni attacco +1 wordDW10 numero attacchi al ciclo precedente double wordDW20 numero attacchi al ciclo attuale double word
elsabz Inserita: 27 gennaio 2005 Segnala Inserita: 27 gennaio 2005 Così è difficile comprendere!Metti il codice in AWL!Ciao!
luppi24 Inserita: 27 gennaio 2005 Autore Segnala Inserita: 27 gennaio 2005 ho risolto cosi´ il contatore attacchi stacchi della pompa, puo´ andare?spero di non aver scritto delle bestialita´.....in caso chiedo perdono grazie a tutti come sempre.Davidelinguaggio :FUP Network 1 .........................................(SR) ................M(0.0) E0.0--------|P | ------------S . . E0.0 ------------------------ R.......Q-----JMP(M0.1) Network 2....Label........M0.1... ............... ................................................(ADD_R)........ ..............M(0.0) E0.0--------|P |-------------------EN........ OUT----DW20...............................C#1-------IN1 ...........................................................ENO------ = A4.0..............................DW10-----IN2 ..................................................( MOVE) ...............................E0.0--------EN...........OUT----DW10.. .................................DW20-----IN ..................................................................---- = A4.0 Simboli Descr tipoE0.0 segnale pompa boolM0.0 merker pompa boolM0.1 merker JMP boolC#1 valore da sommare per ogni attacco +1 wordDW10 numero attacchi al ciclo precedente double wordDW20 numero attacchi al ciclo attuale double word
luppi24 Inserita: 27 gennaio 2005 Autore Segnala Inserita: 27 gennaio 2005 AWL non lo conosco purtroppo......conosco solo FUP
elsabz Inserita: 27 gennaio 2005 Segnala Inserita: 27 gennaio 2005 Da KOP o FUP è sempre possibile andare in AWL, fai cosi:in step 7 nell'editor KOP/FUP/AWL -> menu visualizza -> voce AWL!ti compare il codice AWL, lo copi e lo incolli sul post!Ciao!
luppi24 Inserita: 27 gennaio 2005 Autore Segnala Inserita: 27 gennaio 2005 l´ho fatto che conta solo gli attacchi della pompa.I0.0 contatto pompaM0.0 merker pompaM0.1 merker JMPID1 costante uguale a +1 ID10 numero attacchi ciclo precedenteID20 numero attacchi ciclo attualeNetwork1 A I 0.0 FP M 0.0 S M 0.1 A I 0.0 R M 0.1 A M 0.1 JC M001network2M001: A I 0.0 JNB _001 L ID 1 L ID 10 +R T ID 20 AN OV SAVE CLR _001: A BR = Q 4.0Network3 A I 0.0 JNB _002 L ID 20 T ID 10 SET SAVE CLR _002: A BR = I 0.0
Matteo Montanari Inserita: 27 gennaio 2005 Segnala Inserita: 27 gennaio 2005 (modificato) Hai utilizzato un +R senza avere numeri decimali, quindi risulta essere sprecato, utilizza un +D, la "quantità" di dati è la stessa (4 byte) ma almeno non "spechi" nullase vuoi fare il fronte di salita con un set/reset, nel ramo di reset devi utilizzare la "funzione" inversa che nel ramo di setla creazione del fronte di salita (o discesa) è uguale normalmente viene fatta in questo modo: I aux fs -[ ]----[/]----( )- I aux -[ ]-----------( )- ed utilizzi 2 rami, per riportarli tutti in un unico ramo: I aux fs aux -[ ]----[/]----(#)----[s] I [ ] -[/]------------------[r] Modificato: 27 gennaio 2005 da keosmm
Piero Azzoni Inserita: 27 gennaio 2005 Segnala Inserita: 27 gennaio 2005 non male il livello di complicazione ! , supponendo invece che usi un plc non-siemensmarcia pompa poscoil inizio marciainizio marcia add(dw) avviamenti + 1 = avviamentiche vuol dire quando la pompa va in marcia genero un one-shot, questo flag addiziona 1 ad una variabile a 32 bitla capacita' di conteggio e' di 2.147.483.648 avviamenti, puoi aggiunge una riga che dicese avviamenti => 2.147.483.648 avviamenti = 0 , cioe' ricominciare da capo
elsabz Inserita: 27 gennaio 2005 Segnala Inserita: 27 gennaio 2005 Il codice che hai postato non serve a niente se non a fare confusione!comunque non preoccuparti! Non capisco cosa è il numero di cicli prcedente e cosa ti serve, ti puoi spegare meglio?precedente a cosa?Se non sbaglio la definizione del tuo problema è la seguente:hai una pompa che si attiva con un uscita del PLC,con un contatto in ingresso controlli lo stato della pompa (0=pompa OFF; 1=pompa ON),devi contare solo il numero di inserzioni della pompaè giusto così?
luppi24 Inserita: 27 gennaio 2005 Autore Segnala Inserita: 27 gennaio 2005 ehm.... mi sono dimenticato di mettere una negazione al segnale I0.0 prima di entrare nel´ingresso R.... ho complicato tutto ma usando step 7 da una sett non mi era venuto in mente altro...cosa vuol dire che devo usare un +D per non sprecare? in Fup a cosa corrisponde +D?grazie e ciao!
elsabz Inserita: 27 gennaio 2005 Segnala Inserita: 27 gennaio 2005 +D è addizione di due numeri interi doppia word!+R è addizione di due numeri in virgola mobile!
Matteo Montanari Inserita: 27 gennaio 2005 Segnala Inserita: 27 gennaio 2005 (modificato) U E 0.0 //contatto pompaFP M 0.0 //Merker di appoggio 1 ciclo fronte di salitaOU E 0.0FN M 0.1 //Merker di appoggio 1 ciclo fronte di discesaSPBN M001 //salta se RLC = 0L MD 20 //doppia word che contiene il numero di avvaimenti/arrestiL L#1 //numero Dword costante+D //addizione di due numeri DwordT MD 20 //trasferimento del risultato in MD 20M001: NOP 0 //se sopra RLC = 0 salta quì e non fa nientela traduzione a "contatti" di quanto riportato da "elsabz" è abbastanza semplice da realizzare, almeno per qualcuno che ha dimestichezza con AWL o nel passaggio tra vari linguaggi...riportando quanto ti ho suggerito "sopra""U E 0.0 //contatto pompaFP M 0.0 //Merker di appoggio 1 ciclo fronte di salita" I aux1 fs aux2 -[ ]----[/]----(#)----[s] I [ ] -[/]------------------[r] "U E 0.0 //contatto pompa FN M 0.1 //Merker di appoggio 1 ciclo fronte di discesa" I aux2 fd aux2 -[/]----[/]----(#)----[s] I [ ] -[ ]------------------[r] ora hai i due fronti (salita e discesa) attivi quando metti in moto la pompa e quando la fermi con entrambi i "segnali" incrementi il contatore di un unità: "L MD 20 //doppia word che contiene il numero di avvaimenti/arresti L L#1 //numero Dword costante +D //addizione di due numeri Dword T MD 20 //trasferimento del risultato in MD 20" fs ADD_DI -[ ]--o--------[ ]---- fd | VD0 [ ] -[ ]--| 1 [ ] VD0anzichè utilizzare "ID 10 o ID 20" che sono canali di ingresso ti conviene utilizzare o memorie (MD0) oppure data memory (VD0, come nell'esempio) in quanto un domani potresti mettere la scheda di ingresso (o di uscita) ed avere dei problemi nella gestione del software Modificato: 27 gennaio 2005 da keosmm
luppi24 Inserita: 27 gennaio 2005 Autore Segnala Inserita: 27 gennaio 2005 si il problema e´ quello . il numero precedente e´ il numero di volte che la pompa si e´ accesa fino al ciclo precedente a quello in atto (n-1) quello in atto e´ l´n-esimo.mi sono dimenticao di negare l´ingresso a R nel SR.
elsabz Inserita: 27 gennaio 2005 Segnala Inserita: 27 gennaio 2005 Faresti meglio ad usare il mnemonico tedesco!È il più usato è quindi più comprensibile da tutti!
elsabz Inserita: 27 gennaio 2005 Segnala Inserita: 27 gennaio 2005 Per mè stai facendo confusione già a livello di definizione del problema!Il contatore delle inserzione è uno solo (doppia word) e per fare questo conteggio ti serve solo questo!
luppi24 Inserita: 27 gennaio 2005 Autore Segnala Inserita: 27 gennaio 2005 ma usando il solo rilevamento fronte di salita io conto solo gli attacchi quindi ne utilizzo solo uno di contatori..
elsabz Inserita: 27 gennaio 2005 Segnala Inserita: 27 gennaio 2005 Hai detto che devi soltanto contare gli attacchi della pompa, o sbaglio?
elsabz Inserita: 27 gennaio 2005 Segnala Inserita: 27 gennaio 2005 Una traduzione del codice ancora più semplice potrebbe essere la seguente:Segmento 1: A I 0.0 FP M 0.0 O( A I 0.0 FN M 0.0 ) JCN M001Segmento 2: L MD 20 L L#1 +D T MD 20 NOP 0 Segmento 3: (in AWL per forza)M001: NOP 0Se copi il codice nell'editor in modalità AWL e poi passi in KOP dovrebbe funzionare!
Matteo Montanari Inserita: 27 gennaio 2005 Segnala Inserita: 27 gennaio 2005 allora modifica l'esempio in questo modo: fs ADD_DI MOV_DW -[ ]--o--------[ ]------------[ ] fd | VD4 [ ] [ ] -[ ]--| 1 [ ] VD0 VD0 [ ] VD4 per me non ha senso utilizzare una variabile per visualizzare un valore (n-1) a meno che non ti serva da qualche altra parte, in questo caso specifico, come anche nel tuo esempio viene aggironata continuamente e quindi assume sempre lo stesso valore, per tanto utilizza la varibile (VD0) stessa. io utilizzarei il medesimo contatore per eseguire il conteggio, volendo lo puoi azzerare quando cambi il ciclo, ed eventualmente memorizzare il valore in un altra area di dati: fs ADD_DI -[ ]--o--------[ ] fd | VD0 [ ] -[ ]--| 1 [ ] VD0 fsNuovoCiclo MOV_DW MOV_DW -[ ]-----------[ ]------------[ ] [ ] [ ] VD0 [ ] VD4 0 [ ] VD0in questo caso su VD0 hai il conteggio del ciclo attuale (che si incementa), su VD4 hai il conteggio del ciclo precedente (che rimane fisso)
luppi24 Inserita: 27 gennaio 2005 Autore Segnala Inserita: 27 gennaio 2005 ora provo...intanto grazie mille.quello che avevo scritto io andrebbe bene o no?
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora