Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Contatore Zahler in Step7

PLC, servomotori, inverter...robot

Moderatori: Foto Utentedimaios, Foto Utentecarlomariamanenti

0
voti

[1] Contatore Zahler in Step7

Messaggioda Foto Utenteluk79 » 27 nov 2010, 21:50

dunque,come promesso cerco di riesporre il mio quesito(esposto nel topic SCHEMA ELETTRICO DI UN PLC):
devo svolgerere un'esercizio per la scuola,devo accendere quattro lampade(L1,L2,L3.L4),ognuna in momenti distinti,utilizzando il contatore zahler!!
le lampade si accendono solo se sono state rispettate certe condizioni:
l1 si accende quando il conteggio e'maggiore di "0",L2 si accende quando e' uguale a "0",L3 quando e'maggiore\uguale a 10 e infine L3 quando il conteggio e'minore\uguale a 5!!!
spero di essere stato chiaro e di avere inserito tutto cio'che e'necessario per poter risolvere il problema,ringrazio anticipamente chi mi aiuta :ok:
Avatar utente
Foto Utenteluk79
31 3 6
Frequentatore
Frequentatore
 
Messaggi: 232
Iscritto il: 9 nov 2010, 15:58
Località: Milano

0
voti

[2] Re: Contatore Zahler in Step 7

Messaggioda Foto UtenteCandy » 27 nov 2010, 22:12

Per quanto sia ammirevole che tu ti sia interessato all'esercizio, al punto di chiedere qui come farlo, non è l'approccio migliore... Un giorno ti commissioneranno dei lavori: a chi chiederai di farteli?

Prova a fare qualcosa e postarlo, vedremo se ci sono errori, e come correggerli.
Avatar utente
Foto UtenteCandy
32,5k 7 10 13
CRU - Account cancellato su Richiesta utente
 
Messaggi: 10123
Iscritto il: 14 giu 2010, 22:54

0
voti

[3] Re: Contatore Zahler in Step7

Messaggioda Foto UtenteIvan_Iamoni » 28 nov 2010, 0:26

Ho creato un nuovo topic , come ti avevo chiesto di fare, ma probabilmente non mi ero spiegato in modo esauriente.
Mescolare troppi argomenti sotto lo stesso titolo, rende difficile seguire la discussione.

Quoto quanto scritto da candy, per uno studente, non è il modo di imparare, facendosi risolvere di sana pianta gli esercizi.
Di sicuro siamo tutti disponibili ad aiutarti, purchè dimostri un certo impegno nell'esercizio.
Per ora mi limito a fornirti alcune indicazioni, il contatore Zahler, è un particolare contatore che può contare in due direzioni , a partire dal valore di impostazione.
Il contatore, restituisce 3 variabili, la prima UZ+numero contatore, restituisce il valore di tipo BOOL sullo stato del contatore, quando il valore di conteggio è maggiore di zero Q=1 quando è uguale a zero Q=0.
La seconda LZ+numero contatore, restituisce un valore di tipo esadecimale sullo stato del contatore, ovvero il numero di caricamento che viene incrementato e decrementato.
La terza LCZ+numero contatore, restituisce un valore di tipo BDC sullo stato del contatore, ovvero il numero di caricamento che viene incrementato e decrementato.
Tu devi fare riferimento a queste due variabili , per controllare il numero corrente.
Poi attivi dei confornti = , >= <= con dei valori di riferimento e attivi le rispettive uscite.
Io di solito uso LCZ , faccio una conversione da BDC a INT deposito il risultato della conversione in una variabile TEMP o STAT , dipende, o addirittura nella stessa variabile, poi eseguo dei confronti tra interi , dove il valore di confronto è un numero intero per l'appunto.
Avatar utente
Foto UtenteIvan_Iamoni
5.336 6 10 12
Utente disattivato per decisione dell'amministrazione proprietaria del sito
 
Messaggi: 2330
Iscritto il: 22 ott 2006, 18:45

0
voti

[4] Re: Contatore Zahler in Step7

Messaggioda Foto Utenteluk79 » 28 nov 2010, 16:50

vi ringrazio della vostra disponibilita',sinceramente non era mia intenzione fare risolvere l'esercizio da altre persone per lavarmene le mani o per risparmiarmi un compito a casa,mi interessava solo avere qualche indicazione in piu' poiche',avendo perso una lezione,i pochi appunti che ho a disposizione non sono sufficenti per avere un'idea chiara sul procedimento da attuare!!nonostante cio',ieri notte hoh trascorso molte ore dietro per cercare di colmare i buchi di spiegazione dei miei appunti,e in primo luogo sono riuscito in qualche maniera a far girare il contatoree sucessivamente ho dedotto che c'era bisogno anche di 4 comparatori per far accendere in momenti diversi le 4 lampade!!pero'quando ho avviato la simulazione ci sono stati degli errori,alcune condizioni non erano rispettate,probabilmente ho fatto copnfusione con l'inserimento dei dati!!!ho un po' di confusione con i tipi di dati e il loro utilizzo e le dichiarazioni:
da quello che ho capito(correggetemi se sbaglio)con le lettere maiuscole E,A,M,L,D si indica un area di memoria dove vengono memorizzati dei bit,(ad esempio E0.0 )che possono assumere lo stato di "0" o "1",non mi e' molto chiaro l'uso e la funzionalita' delle MW(word),da quello che ho capito sono anch'esse aree di memoria il cui valore deve essere dichiarato nel blocco dati DB1(correggetemi se sbaglio :mrgreen: ),non mi e'chiaro perche'viene adottato il sistema esadecimale per esprimere queste word invece del decimale?grazie
Avatar utente
Foto Utenteluk79
31 3 6
Frequentatore
Frequentatore
 
Messaggi: 232
Iscritto il: 9 nov 2010, 15:58
Località: Milano

0
voti

[5] Re: Contatore Zahler in Step7

Messaggioda Foto UtenteCandy » 28 nov 2010, 17:52

E,A,M,L,D si indica un area di memoria dove vengono memorizzati dei bit,(ad esempio E0.0 )che possono assumere lo stato di "0" o "1",non mi e' molto chiaro l'uso e la funzionalita' delle MW(word),da quello che ho capito sono anch'esse aree di memoria il cui valore deve essere dichiarato nel blocco dati DB1


Per sommi capi, stiamo parlando della serie 300 e 400:
1) Tutte le aree di memoria, nella rappresentazione assoluta, hanno un indirizzo composto da un prefisso leterario: E(I), A(Q), M, L, etc. Con questo prefisso si individua una zona di memoria RAM per ricordare qualcosa al programmatore. Ricordare cosa?
1.1) E oppure I in inglese, anticipa gli indirizzi della RAM che la CPU alloga per appoggiare tutti i dati rilevati, (letti), dagli ingressi, siano essi schede dul bus locale o di periferia. E' sempre il programmatore che decidere come allocare la zona, tramite la configurazione hardware. E' importante sapere che, se una determinata zona di memoria, dell'immagine di processo degli ingressi, "E", è configurata a livello hardaware, è bene che il programmatori non preveda di scriverci nulla dentro, perché essa viene ciclicamente rinfrescata dalla CPU.
1.2) A oppure Q in inglese, anticipa gli indirizzi della RAM che la CPU alloca per apoggiare i dati da trasferire poi alle uscite, siano esse sul bus principale, siano esse di periferia. Tale area RAM detta immagine di processo delle uscite, contine sostanzialmente quelle che poi fisicamente sono le uscite hardware. Ma potrebbero anche essere uscite software, contenenti dati di comunicazione per altri elementi.
1.3) L individua una precisa area di memoria destinata ai dati temporanei delle funzioni, FC od FB. L'area quindi è accessibile da tutte le funzioni, è vero, ma bisogna comprendere che, la validità dei dati ha senso solo nel contesto della funzione in essere e, sicoome l'area non viene mai azzerata prima del richiamo delle funzioni, ci si trova dentro di tutto, quindi, per l'uso delle variabili locali all'interno delle funzioni, vale sempre la regola che la prima operazione deve essere di scrittura.
1.4) M invece individua un'area di memoria libera, di dimensioni variabili a seconda della CPU, (regola che vale per tutte le aree), che contiene i cosidetti merker. (Il nome ha origini storiche, vorrebbe essere un richiamo ai relè di appoggio che si usano nella soluzione dei circuiti logici, hardware o software che siano). E' poco importante questo, ma bisogna capire che: a) è molto aprezzata come area di memoria perché l'accesso ai dati è molto più veloce rispetto alle DB; b) ha lo svantaggio di non essere ritentiva, o, comunque lo è poco. Il ritegno viene fatto da un condensatore di pochi giorni, contrariamente alle DB, che vivono più a lungo, (anche se non molto). Non è un area sottoponibile a simbolici strutturati, ma è concepita per l'uso di variabili semplici, valide in tutto il contesto del programma.

2) Tutte queste aree possono essere interrogate e scritte in tutti i modi possibili: come bit, come byte, come word, come dword. La notazione sarà: E0.0 (booleano), EB0 (il byte 0, che contiene gli otto bit, compreso E0.0), EW0 (la word 0, che comprende il byte 1 ed il byte 0), ED0 (la dword 0 che comprende i byte 3, 2, 1, e 0).

3) L'uso delle lettere che precedono gli indirizzi assoluti assumono dunque grandissima importanza: individuano la zona di memoria; indicano alla CPU cosa elaborare: un bit, un byte, una word o una dword. (I due accumulatori delle CPU 300/400 sono a 32 bit, ossia 4 byte, ossia 2 word, ossia 1 dword. Quindi, tutte le operazioni hanno questo limite massimo).

4) Le DB sono un'ara di memoria più completa: innanzi tutto il loro numero bnon si limita alla DB1, ma, a seconda della CPU, arriva a valori di 65000 e rotti. I dati delle DB sono sempre tutti ritentivi, possono essere strutturati secondo strutture (udt) personali e, bellissima cosa, possono addirittura risiedere solo nella memoria di caricamento e non in quella di lavoro, (per intenderci in MMC e non in RAM). Questo chiarisce anche perché l'accesso a questi dati è molto più lento. Un programmatore avveduto fa in modo di evitare il continua accesso alle DB all'interno del suo programma, meglio se, al limite, fa uso di blocchi funzione FB con istanza, quindi usa le variabili STAT dela funzione. In questo modo l'apertura della DB è unica alla chiamata della funzione.
Pochi sanno che:
L DB1.DBB0 non vuol solo dire leggere il determinato byte, ma prima di tutto, aprire la DB1 e, se successivamente si trova:
...
L DB1.DBB1, benchè la DB1 fosse l'ultima aperta, essa viene riaperta, (con un gran dispensio di risorse da parte della CPU).

Alcuni usano:
OPN DB1
L DBB0
....
Ma in questo modo, si perdono tutti i commenti ed i simboli delle variabili. Un modo di programmare veramente brutto.

5) L'uso delle MW, come già ti dicevo, è legato al tipo di dato da manipolare: una word dichiarata nella zona M, che potrebbe essere un contatore eventi:
Codice: Seleziona tutto
U     E0.0
FP    M0.0
SPB  e1
L     MW10
L     1
+I
T     MW10
e1: nop 0

E' ad esempio il codice di un contatore che incrementa la word MW10 ad ogni fronte di salita di E0.0. Essendo una word (16 bit), arriverà fino a 65535 e poi ripartirà da 0.
Avatar utente
Foto UtenteCandy
32,5k 7 10 13
CRU - Account cancellato su Richiesta utente
 
Messaggi: 10123
Iscritto il: 14 giu 2010, 22:54

0
voti

[6] Re: Contatore Zahler in Step7

Messaggioda Foto Utenteluk79 » 29 nov 2010, 16:52

ti ringrazio per il riassunto di tutto,pero'ancora qualcosa mi sfugge:
1)una merker word(ad esempio mw3)e' uno spazio di memoria completamente libero,giusto?non c'e'bisogno di dichiararla e assegnarli un valore?
2)quando uso un comparatore per fare il confronto tra due numeri,nei parametri IN1 e IN2 posso inserire solo numeri espressi in decimale?
3)precedentemente abbiamo scritto un programma per fare la somma di due numeri.
abbiammo creato il blocco db1 e nelle proprieta'dell'oggetto/nome simbolico abbiamo messo la lettera N,che significa?
sucessivamente abbiamo creato all'interno del blocco db1 le variabili a,b,c,poi abbiamo scritto il programa in OB1 richiamando queste variabili.la mia domanda e' questa,ma se volessi scrivere il programma senza usare a,b,c,come lo dovrei impostare?
grazie
Avatar utente
Foto Utenteluk79
31 3 6
Frequentatore
Frequentatore
 
Messaggi: 232
Iscritto il: 9 nov 2010, 15:58
Località: Milano

0
voti

[7] Re: Contatore Zahler in Step7

Messaggioda Foto UtenteIvan_Iamoni » 29 nov 2010, 18:13

Ciao.
Ecco le risposte:
1-L'aera Merker è un area disponibile per tutta la sua dimensione a partire da M0.0 fino all'ultimo bit.
Sei libero di usarla come appoggio per memorie di stato del processo, a livello di funzione BOOL (Booleana), o scrivere valori numerici o alfanumerici, purchè con di dimensione adatta MB, MW,MD.
Nell'aera Merker , il PLC accede in formato binario, quindi sei libero di trasferirvi valori di quasi tutti i tipi , da intero INT, doppio intero, con segno e senza segno, esadecimale , BCD, virgola mobile , non servono dichiarazioni fatte a priori sul tipo di dato da inserire.
Se serve all'area merker, puoi dare giusto un assegnazione simbolica, tramite l'editor dei simboli.
L'unica cosa che devi rispettare , come del resto vale per tutte le aree di memoria è la sovrapposizione.
Se usi nel programma un merker M100.2 per memorizzare uno stato BOOL , non devi andare a scrivere poi un qualsivoglia valore sopra la MW100 , altrimenti fai casino con lo stato del merker M100.2.

2-Nella sintassi delle operazioni di confronto, esistono diversi operatori , per diversi tipi di confronto, numeri interi a 16BIT, doppi interi a 32 BIT e reali.
I due operandi del confronto devono essere omogenei, come è logico che sia, vale a dire, non puoi confrontare un INT con un DINT o con un REAL, già questo ti viene precluso dal compilatore.
Se i dati che devi confrontare fossero disomogenei, devi prima attuare una conversione dei dati.
Per esempio, devi confrontare i contenuto della parola di stato di un timer (BCD) con un intero, devi prima trasformare il valore BCD in intero, depositarlo in una nuov variabile e solo dopo confrontarlo.
Attenzione che non tutte le conversioni danno buoni risultati.
Se hai un valore REAL da manipolare con un DINT , e meglio che trasformi il DINT in REAL e non viceversa, altresì perderesti in alcuni casi precisione nel risultato di un eventuale calcolo a seguire.

3-Il nome simbolico che si assegna ad una variabile di blocco dati DB, ha solo una funzione simbolica, potevate chiamarlo PLUTO andava bene lo stesso, l'importante è cosa si assegna nella colonna "Tipo" quello sì che preclude un formato specifico.
Se volevate editare il programma senza assegnazioni simboliche alla DB , bastava puntare direttamente agli indirizzi:
Codice: Seleziona tutto
AUF DB1
L DBW1
L DBW2
+I
T DBW3
Avatar utente
Foto UtenteIvan_Iamoni
5.336 6 10 12
Utente disattivato per decisione dell'amministrazione proprietaria del sito
 
Messaggi: 2330
Iscritto il: 22 ott 2006, 18:45

0
voti

[8] Re: Contatore Zahler in Step7

Messaggioda Foto Utenteluk79 » 29 nov 2010, 18:37

grazie per la spiegazione!!!grazie a voi finalmente sono riuscito a fare quell'esercizio che tanto mi ha fatto tribulare!!!ora devo passare alla fase sucessiva,cercare di capire come si usa la funzione SCALE,gia'ho provato a impostare i valori,ma mi da errore,non mi permette neanche di avviare la simulazione!!!devo aprire un'ltra discussione?
Avatar utente
Foto Utenteluk79
31 3 6
Frequentatore
Frequentatore
 
Messaggi: 232
Iscritto il: 9 nov 2010, 15:58
Località: Milano

0
voti

[9] Re: Contatore Zahler in Step7

Messaggioda Foto UtenteCandy » 29 nov 2010, 19:17

Quantomeno posta il codice AWL del tuo elaborato: dall'editor CTRL+1, CTRL+2, CTRL+3 cambi le visualizzazioni. PAssa ad AWL e fai copia incolla, poi vediamo dove è il problema.
Avatar utente
Foto UtenteCandy
32,5k 7 10 13
CRU - Account cancellato su Richiesta utente
 
Messaggi: 10123
Iscritto il: 14 giu 2010, 22:54

0
voti

[10] Re: Contatore Zahler in Step7

Messaggioda Foto UtenteIvan_Iamoni » 29 nov 2010, 20:47

devo aprire un'ltra discussione?

Sarebbe certamente gradito, dato che tratta un argomento credo diverso dal contatore :mrgreen: .

BTW: Ma che razza di corso stai seguendo che ti fa saltare " a piè pari" da un banale contatore bidirezionale ad un FC105?
Avatar utente
Foto UtenteIvan_Iamoni
5.336 6 10 12
Utente disattivato per decisione dell'amministrazione proprietaria del sito
 
Messaggi: 2330
Iscritto il: 22 ott 2006, 18:45

Prossimo

Torna a Automazione industriale ed azionamenti

Chi c’è in linea

Visitano il forum: Nessuno e 8 ospiti