Jump to content
PLC Forum


STEU

ENO Funzionamento non chiaro

Recommended Posts

STEU

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 to post
Share on other sites

Ctec

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 to post
Share on other sites
STEU

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 to post
Share on other sites
Ctec
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 to post
Share on other sites
STEU

Allora faccio una domada, quando ENO = 1 e quando ENO = 0?

Link to post
Share on other sites
leleviola

ENO dovrebbe essere vero al termine del'esecuzione dell'istruzione o forse ci sbagliamo

Link to post
Share on other sites
Ctec
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 to post
Share on other sites
STEU

419717735_ENO2021-04-21165742.thumb.png.e6c5c46b392d05e2cae63fa7a49913e6.png

Questo è l' H_elp in linea  bisogna vedere come abilitarlo o disabilitarlo, non è chiarissimo

Link to post
Share on other sites
Ctec

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 to post
Share on other sites
leleviola

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 to post
Share on other sites
drugo66

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 to post
Share on other sites
STEU

 

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 to post
Share on other sites
Ctec

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 to post
Share on other sites
batta
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 to post
Share on other sites
STEU

 

Batta son d'accordo con te, hanno scritto tutto però mi devono spiegare perchè non funziona

Link to post
Share on other sites
Ctec
6 minuti fa, STEU scrisse:

mi devono spiegare perchè non funziona

Mi sembrava di averlo detto...

Link to post
Share on other sites
STEU

 

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 to post
Share on other sites
Ctec

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 to post
Share on other sites
STEU
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 to post
Share on other sites
batta
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 to post
Share on other sites
STEU
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 to post
Share on other sites
walterword

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.

Edited by walterword
Link to post
Share on other sites
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 to post
Share on other sites
STEU
Posted (edited)

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

Edited by STEU
Link to post
Share on other sites
walterword

i caratteri terminatori della stringa char(10) e char(13) da verificare.

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...