Vai al contenuto
PLC Forum


Problema Contatore Z_rueck - primo programma in step 7


unlock

Messaggi consigliati

Ciao a tutti uso altri plc, è la prima volta che uso un siemes per volere del cliente. Ho un problemino con il contatore di step 7 mi espongo il problema

Ho un contatore Z_RUECK che funziona sostanzialmente, ma se come valore di settaggio lo metto fisso cioè c#999, per esempio, se voglio rendere impostabile da panello quel valore con un word es MW12 , quando attivo l'ingresso S del contatore il PLC va in errore.

Ho cercato nel forum e un rete ma non ho trovato il motivo del problema.

Un altra cosa questa MW12 non è possibile renderla ritentiva?

Grazie per l'aiuto

Modificato: da Gianmario Pedrani
Link al commento
Condividi su altri siti


Sistema di destinazione -> Diagnostica/impostazioni -> stato dell'unità -> scheda "buffer di diagnostica".

Questo per vedere la causa dell'errore..

Per quanto riguarda i contatori, io sono per quelli "autocostruiti".. Ovvero con le funzioni ADD_I, CMP>= I, MOVE, ecc..

Link al commento
Condividi su altri siti

La MW12 ha il byte MB12 a sinistra (posizione più significativa) e il byte MB13 a destra (posizione meno significativa). La costante di conteggio in questa word deve essere caricata in formato BCD (è qui che hai coomesso l'errore secondo me). Il numero impostabile può andare da 0 a 999, ciò significa che i 4 bit più a sinistra (da M12.4 a M12.7) sono sempre tutti a zero perchè questa tetrade di bit non è usata dal contatore. Ciao

Link al commento
Condividi su altri siti

ho visto il ruo pdf, ma quella scoposizione è da binario a esadecimale, se non ricordo male.

Comunque quello che non riesco a capire questa MW12 o 255 che sia io la diachiaro nella tabella simpoli di step 7 o pio la importo in wincc , dove dico che deve essere una bcd, credo nella tabella di step 7 giusto?

e la posso rendere ritentive non mi sembra o sbaglio?

Ripeto è il primo prg che faccio e tra il Vs aiuto e il file . cerco di venirne fuori

grazie

Link al commento
Condividi su altri siti

Scrivi nella finestrella MW12 formato BCD e premi Enter. Nella finestrella sottostante MW12 formato Binario vedi la corrispondente combinazione di bit che il contatore legge i MW12.

Qualunque numero digitato sul pannello operatore deve essere scritto in MW12 nel sistema di numerazione BCD. MW12 deve essere ritentiva.Ciao

post-196047-0-54287900-1415635529_thumb.

Link al commento
Condividi su altri siti

quello che tu hai fatto come esempio è la stessa cosa che ho fatto io, ma quando la mw12 viene impostata e dico al contatore di prendere quel valore la cpu va in errore.

E poi come la rendo ritentiva.

Grazie per la pazienza

Link al commento
Condividi su altri siti

Nella finestra di navigazione nel progetto seleziona Stazione > doppio clic su Hardare > Nella tabella fai doppio clic sulla riga della CPU > apri la scheda Ritenzione > il numero di byte di merker ritentivi impostalo a 16 (hai 16 byte ritentivi a partire dal byte 0 cioè da mb0 a mb15)> carica questa parametrizzazione dell'hardware nella CPU.

Probabilmente il numero che il tuo pannello operatore scrive in MW12 non è in codice BCD. Controlla come in allegato. Ciao

post-103429-0-73651200-1415829095_thumb.

Link al commento
Condividi su altri siti

Controlla anche che la word con la costante di conteggio (MW12) sia usata solo dAL CONTETORE, cioè controlla che bit di questa word non siano utilizzati in altre parti del programma. Se la costante di conteggio non è scritta in odice BCD ma ci sono valori strani il PLC va in stop.

Il numero massimo che puoi trovare in una "tetrade" è "1001" che corrisponde a 9 nel nostro decimale. Le combinazioni di bit "1010" o "1011" o "1100 o "1101"

o "1110" o "1111" sono sbagliate perchè non previste nel codice BCD.

BCD significa che ogni cifra decimale è codificata in una tetrade (4 bit) binaria:

958 in decimale, in BCD diventa 1001 0101 1000

Ciao

Link al commento
Condividi su altri siti

Come ti è già stato detto, il valore di preset deve essere in formato BCD e deve essere compreso tra 0 e 999.

O imposti il pannello operatore in modo che scriva direttamente il valore in BCD (scelta più logica), oppure converti il valore nel PLC con l'istruzione ITB.

Va bene che è la prima volta che utilizzi Siemens, ma non ti puoi arenare su una cosa così banale.

Link al commento
Condividi su altri siti

Altra soluzione (che io reputo migliore, visto che detesto i contatori di Step7), è costruirsi una piccola e semplice funzione da utilizzare come contatore.

Crea nella cartella "Sorgenti" del tuo progetto una nuova Sorgente AWL. Copia il codice che segue, salva e compila.

ATTENZIONE!!! Con la compilazione viene generata una nuova FC116. Se esiste già una FC116 questa verrà inesorabilmente sovrascritta.

Puoi cambiare il numero della FC generata modificando semplicemente il numero nella prima riga del codice sorgente.

FUNCTION FC116 : VOID
TITLE =Contatore UP
AUTHOR : batta
VERSION : 0.1


VAR_INPUT
  CU : BOOL;    //Ingresso conteggio UP
  RST : BOOL;    //Reset
  PRST : INT;    //Valore di preset
END_VAR
VAR_OUTPUT
  Q : BOOL;    //Uscita ON con conteggio raggiunto
END_VAR
VAR_IN_OUT
  XOS : BOOL;    //Aux per generazione fronte salita segnale CU
  CV : INT;    //Valore corrente conteggio
END_VAR
BEGIN
NETWORK
TITLE =

//N.B.: il controllo sul valore massimo del valore corrente
//viene effettuato dopo l'eventuale incremento.
//Il valore massimo utilizzabile come preset sarà
//quindi 32767 - 1 = 32766.
//Partendo da questo semplice esempio, è facile costruirsi
//contatori DOWN e UP/DOWN.
//Basta poi utilizzare variabili a 32 bit al posto delle variabili
//a 16 bit di questo esempio, per elevare il limite di preset a 2147483646.

      U     #RST; //Con presenza comando RESET, azzera conteggio
      L     0; 
      SPB   M000; 

      U     #CU; //Incrementa valore corrente con
      FP    #XOS; //fronte salita segnale CU
      L     #CV; 
      SPBN  M001; 
      +     1; 
M000: T     #CV; 
M001: L     #PRST; //Attiva l'uscita se il valore di preset
      >=I  ; //è stato raggiunto
      =     #Q; 
      SPBN  M002; //Se il valore corrente ha superato il valore di preset,
      T     #CV; //imposta valore corrente = preset
M002: NOP   0; 


END_FUNCTION

Oppure puoi utilizzare SFB0 (CTU), SFB1 (CTD) o SFB2 (CTUD), che trovi nelle librerie Siemens.

Hanno però il difetto che richiedono l'utilizzo di un DB di istanza.

Link al commento
Condividi su altri siti

A conoscere il linguaggio awl avrei fatto anch'io un contatore , ma pultroppo conosco Il C il VB ma non L 'awl......comunque grazie per l'aiuto.

tra un settimana tornerò sul progetto che per ora è fermo per altri progetti e poi farò sapere

Modificato: da unlock
Link al commento
Condividi su altri siti

Se conosci il C e il VB, non vedo dove sia la difficoltà ad imparare l'AWL.

Inoltre, se intendi entrare nel mondo Siemens, conoscere l'AWL è indispensabile.

Questo perché, anche se è vero che con la nuova piattaforma l'AWL verrà un po' messo in disparte a favore del linguaggio strutturato, io non prevedo una morte veloce dell'AWL.

Inoltre, se scrivi un nuovo programma ti può anche non interessare la conoscenza dell'AWL, ma se devi intervenire su un programma già scritto in AWL...

Comunque, se devi solo usare un contatore, se compili il mio esempio viene generata una funzione che, indipendentemente dal linguaggio con la quale è stata sviluppata, può tranquillamente essere utilizzata in KOP.

Oppure, come già suggerito, puoi utilizzare SFB0 (CTU), SFB1 (CTD) o SFB2 (CTUD), che trovi nelle librerie Siemens.

Se invece ti bastano le funzionalità del contatore "Z_RUECK", devi solo passargli il valore di preset in formato BCD.

Link al commento
Condividi su altri siti

Sull AWL protesti aver ragione, il problema è che i manuali o libri dove poter capire le vari funzioni non sono chiari per niente.

Comunque, continuate a dirmi di questo formato BCD (che so cosè) ,ma io sta MW12 nel PLC è dichiarata come WORD e di conseguenza anche nel pannello, non è sufficente ? la convesione no la fa il plc , da word a bcd ( che secondo mè è la stessa cosa )

Per la ritenzione i merker ritentivi sono già impostati 16 ma se scrivo qualcosa nella MW12 e spengo e riacciendo il PLC perdo il valore......POSSIBLE?

Non dovrò mica dichiararla invece che WORD INT

Modificato: da unlock
Link al commento
Condividi su altri siti

Mw12 è una word. In essa sono scritti una combinazione di zeri ed uno. Se il dispositivo che legge il contenuto della word (la combinazione di bit) legge in codice BCD, il pannello deve scriverci in BCD. In genere i pannelli ti danno la possibilita di convertire il numero che tu digit sul display. Il numero digitato può essere scritto in MW12 in codice binario BCD, ma anche in codice bibario naturale (BIN). A te serve che il numero (combinazione di bit) inMW12 sia scritto in codice binario BCD. Se il pannello scrive solo in codice binario naturale allora devi far fare la conversione al programma nel plc.

Cancella temporaneamente il contatore in modo che il PLC vada in RUN, realizza una VAT e dimmi che combinazione di bit vedi e che numero hai digitato sul pannello operatore.

Ciao

Link al commento
Condividi su altri siti

ora nel contatore cè un valore costante e funge bene.....ora non ho il plc sotto mano per fare prove, ma settimana porx sarò dal cliente per finire il lavoro e all'ora farò dei test.

Diciamo che sta MW12 che è word la devo convertire in bcd come posso fare ?

Link al commento
Condividi su altri siti

T faccio un paragone. La word come un foglio di carta. Nella word devi scrivere in BCD se vuoi che il contatore capisca, così come nel foglio devi scrivere in italiano, e non ad esempio in francese, se vuoi che io capisca. Ciao

Link al commento
Condividi su altri siti

Non e la word che devi convertire in BCD ma è il suo contenuto che deve essere scritto in BCD.

Questa conversione la si può far fare al pannello operatore o al PLC. Ricorda che il numero massimo scrivibile deve essere limitato a 999.

Se la conversione la devi far fare al PLC vedi questo esempio:

Link al commento
Condividi su altri siti

Nell'area Downloads/HMI di Forum ho messo due dispense che ti permettono di approfondire un pochino la programmazione degli HMI. Penso ti possano aiutare. Ciao

Link al commento
Condividi su altri siti

Diciamo che sta MW12 che è word la devo convertire in bcd come posso fare ?

La risposta c'era già nel post #14.

Per farlo in KOP, segui l'esempio di "Amed" dopo aver apportato una correzione.

Nell'esempio infatti il risultato della conversione viene scritto nella variabile di origine, che viene quindi modificata, riletta con valore diverso alla prossima scansione, nuovamente convertita in BCD (ma questa volta partendo da un valore sbagliato), e così via.

Appoggia il risultato della conversione ad un'altra variabile (anche locale), e vedrai che funziona.

Per quanto riguarda la perdita del valore memorizzato al riavvio, non dovrebbe accadere.

Comunque, è pratica comune utilizzare non MW ma variabili di DB.

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