Vai al contenuto
PLC Forum


ENO Funzionamento non chiaro


STEU

Messaggi consigliati

1124122379_Immagine2021-03-11112347BSH.thumb.png.69784b2688f737688b711f98bc7a3ea2.png

Buongiorno

 

ho una curiosità , osservate i 2 segmenti sopra, il primo funziona completamente al 100 % , mentre il secondo l'istruzione Strg_TO_Chars funziona egragiamente ma non viene resettato il bit

Passo[23] , questo perchè Eno non va a 1. Se nel secondo segmento tra il P_Trig e Strg_TO_Chars metto un timer impulsivo di 200 ms il passo 23 viene resettato.

Chiaramente nel programma c'è un solo segmento questa immagine è solo per essere più chiaro con le spiegazioni nel post.

Sembra che nel secondo segmento anche se Strg_TO_Chars ha fatto il suo lavoro ENO non va a 1 ma ha bisogno di più scansioni per settarsi. e quindi resettare il passo 23.

E' giusto, sbaglio qualcosa oppure ENO funziona in modo differente?

La CPU è una 6ES7 513-1AL02-0AB0

Grazie per le risposte

Link al commento
Condividi su altri siti


Se necessita di più scansioni (ci sta, la stringa potrebbe essere parecchio lunga), la EN è valutata sul fronte di salita per far partire l'istruzione (che poi è una FB...) al che è inutile usare un fronte P_TRIG per lanciare l'esecuzione.

Quindi basta che te togli la P_TRIG nella seconda versione e il bit Passo[23] si resetterà al termine dell'istruzione. E' più corretto che nel primo caso, dove abbassi il bit a prescindere dall'effettivo termine del lavoro della Strg_TO_Chars, cosa che potrebbe darti dei problemi di dati inconsistenti in altre parti di programma.

Link al commento
Condividi su altri siti

Grazie della risposta, sono d'accordo con te,la mia domanda era forse più di didattica (a distanza) , comunque anche nel secondo esempio sebbene ENO non vada a 1 l'istruzione esegue il suo lavoro correttamente, è chiaro che se tolgo il fronte alla lunga ENO va a 1, però nella logica se l'FB di conversione non fa errori ENO , come da specifiche dovrebbe essere a 1.

Link al commento
Condividi su altri siti

9 minuti fa, STEU scrisse:

se l'FB di conversione non fa errori

E' questo il punto. Non riesci a sapere, con il fronte, se la FB ha eseguito correttamente il lavoro, e questo potrebbe (dipende dal resto del programma) essere un problema.

Meglio avere una elaborazione certa, magari per future modifiche, dove ci si possono scordare delle cose. Almeno, io con la mia non memoria, me le scordo...

Visto che alla fine non costa niente, anzi una istruzione in meno, meglio fare le cose sicure sin da subito. La legge di Murphy è sempre dietro l'angolo...

Link al commento
Condividi su altri siti

2 ore fa, STEU scrisse:

quando ENO = 1 e quando ENO = 0?

Per quel che riguarda Siemens, non saprei, per altri PLC ENO si dovrebbe attivare subito o a esecuzione completata, dipende dalla funzione. Il manuale in questi casi è legge.

Sono andato a controllare l'. in linea del TIA-portal, ma non dice nulla a tal proposito.

Link al commento
Condividi su altri siti

Grande Siemens... Un milione di parole ripetitive per non dire praticamente nulla... Non cambieranno mai.

Comunque, qui trovi un riferimento nel sito di supporto per come attivare o meno il meccanismo, anche se mi pare di capire che sia attivo di default.

Link al commento
Condividi su altri siti

Andrea ormai non c'è da farne una novità, comunque nel testo sopra esposto nell'ultima affermazione si conferma la non chiarezza, in partica sopra si scrive una cosa e sotto se ne scrive un'altra, va beh

Link al commento
Condividi su altri siti

Ciao,

aggiungerei una casistica: quando l'istruzione non riesce a svolgere la sua funzione perchè i parametri non sono corretti; nel caso di Strg_TO_Chars se il parametro Strg non contiene nulla (testo vuoto), ENO è off; magari non è il tuo caso, ma a me era capitato con un'altra istruzione.

Link al commento
Condividi su altri siti

 

Quello che lascia perplesso è che il Strg_TO_Chars fa il suo lavoro sia, come giusto che sia, anche con una scansione sola. e quindi con il fronte di salita davanti EN

Link al commento
Condividi su altri siti

No, è normale. Se le funzioni durano più di una scansione, l'attivazione di EN fa partire le operazioni, che proseguiranno comunque fino al suo termine, ma la ENO è giusto, a parer mio, che si attivi solo dopo il suo completamento corretto.

Non so su Siemens, ma su altri PLC, prendiamo una divisione: la ENO si attiverà solo se è possibile farla ed eseguirla, anche se dura solo una scansione; ma per esempio se cerchi di dividere un numero per 0, la ENO non si attiverà segnalandoti che qualcosa non è andato, senza dover andare ad analizzare i flag di errore specifici.

Link al commento
Condividi su altri siti

14 ore fa, Ctec scrisse:

Un milione di parole ripetitive per non dire praticamente nulla... Non cambieranno mai.

A me pare che abbiano detto tutto. E non è che i manuali Omron siano più chiari.

Link al commento
Condividi su altri siti

 

Mi sembrava di averlo detto...

E' chiaro che ENO non va a 1 se c'è un errore, esempio dividere per 0 come hai detto tu, ma nell'esempio l'istruzione funziona benissimo , fa il suo dovere , e l' ENO va a 1 qualche (quante non so) scansione dopo, e quindi con il fronte anche se non ci sono errori ENO non può andare a 1.

Il tuo esempio non è pertinente con quanto scritto da me ad inizio post.

 

Link al commento
Condividi su altri siti

No, ENO va ad 1 alla fine dell'esecuzione della funzione, ma siccome EN non è più attivo (dato che era eseguito come impulso), tale condizione non viene trasferita al reset successivo.

Link al commento
Condividi su altri siti

8 minuti fa, Ctec scrisse:

No, ENO va ad 1 alla fine dell'esecuzione della funzione, ma siccome EN non è più attivo (dato che era eseguito come impulso), tale condizione non viene trasferita al reset successivo.

nel momento in cui lla funzione o FB mi da il risultato esatto , per forza en=1 altrimenti non mi darebbe il risultato, il problema che in una scansione anche se esegue l'operazione ENO non va a 1 ma ha bisogno di più scansioni, ed esegue sempre le stesse operazioni.

Link al commento
Condividi su altri siti

1 ora fa, STEU scrisse:

nel momento in cui lla funzione o FB mi da il risultato esatto , per forza en=1

Il fatto che tu veda il risultato dell'operazione non significa tassativamente che l'operazione sia stata completata e/o eseguita senza errori.

Magari c'è un carattere che non gli piace, o ci sono lunghezze diverse tra stringa e array di caratteri.
Per esempio, se l'array di caratteri è più corto della stringa, vengono copiati i caratteri della stringa fino a riempire l'array (quindi tu vedi l'operazione completata) ma, credo, ENO non verrebbe abilitato.

In altre parole: se vuoi fare le cose per bene, devi attendere ENO prima di andare avanti.

Link al commento
Condividi su altri siti

1 ora fa, batta scrisse:

In altre parole: se vuoi fare le cose per bene, devi attendere ENO prima di andare avanti.

E'quello che vorrei fare , ma perchè se tolgo il fronte, quindi eseguo l'istruzione sempre, con le stesse variabili con gli stessi valori di input ENO va a 1 non subito, se c'è un errore,cosa possibilissima, l'errore c'è sempre ed ENO non dovrebbe mai andare a 1.

Link al commento
Condividi su altri siti

  • 4 weeks later...

prova a controllare il numero di caratteri copiati (cnt).

Bo sembrano storie assurde perchè di solito una operazione come questa viene fatta in un ciclo. Se poi i caratteri da copiare sono 3 miliardi allora andrà in stop la cpu per il watchdog.

comunque se i due segmenti funzionano , nel senso che alla fine l'array di caratteri viene scritto correttamente io userei il primo segmento.

Io comunque queste cose le faccio in SCL , blocchetti vari non ne uso.

Modificato: da walterword
Link al commento
Condividi su altri siti

ifachsoftware

In genere blocchi funzione che durano più cicli espongono dei campi tipo Done o cose simili per indicare che hanno terminato l'esecuzione, in questo caso esiste solo l'ENO quindi è ipotizzabile che tale funzione non ritornando 1 stia generando un errore (destinazione più corta dei dati da copiare oppure caratteri non supportati)  , in caso contrario potrebbe essere un baco della funzione.

Ho fatto delle prove come da schermate allegate e la cosa funziona perfettamente come ho ipotizzato. 

Io proverei a capire la stringa in arrivo dal Barcode se è una stringa pulita (prova a vedere per esempio la sua lunghezza con la funzione Len e se contiene caratteri unicode che richiederebbero i tipi wstring invece che string).

Ok.PNG

Err.PNG

Link al commento
Condividi su altri siti

Buongiorno

visto che la cosa interessa ho fatto delle prove in ufficio con una CPE e tutto sembra funzionare in una scansione, provo a vedere le lunghezze dell'array e della stringa sotto

MW50 conta le scansioni

 

 

 

 

 

eno.jpg

Modificato: da STEU
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...