STEU Inserito: 21 aprile 2021 Segnala Inserito: 21 aprile 2021 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
Ctec Inserita: 21 aprile 2021 Segnala Inserita: 21 aprile 2021 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.
STEU Inserita: 21 aprile 2021 Autore Segnala Inserita: 21 aprile 2021 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.
Ctec Inserita: 21 aprile 2021 Segnala Inserita: 21 aprile 2021 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...
STEU Inserita: 21 aprile 2021 Autore Segnala Inserita: 21 aprile 2021 Allora faccio una domada, quando ENO = 1 e quando ENO = 0?
leleviola Inserita: 21 aprile 2021 Segnala Inserita: 21 aprile 2021 ENO dovrebbe essere vero al termine del'esecuzione dell'istruzione o forse ci sbagliamo
Ctec Inserita: 21 aprile 2021 Segnala Inserita: 21 aprile 2021 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.
STEU Inserita: 21 aprile 2021 Autore Segnala Inserita: 21 aprile 2021 Questo è l' H_elp in linea bisogna vedere come abilitarlo o disabilitarlo, non è chiarissimo
Ctec Inserita: 21 aprile 2021 Segnala Inserita: 21 aprile 2021 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.
leleviola Inserita: 21 aprile 2021 Segnala Inserita: 21 aprile 2021 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
drugo66 Inserita: 22 aprile 2021 Segnala Inserita: 22 aprile 2021 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.
STEU Inserita: 22 aprile 2021 Autore Segnala Inserita: 22 aprile 2021 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
Ctec Inserita: 22 aprile 2021 Segnala Inserita: 22 aprile 2021 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.
batta Inserita: 22 aprile 2021 Segnala Inserita: 22 aprile 2021 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.
STEU Inserita: 22 aprile 2021 Autore Segnala Inserita: 22 aprile 2021 Batta son d'accordo con te, hanno scritto tutto però mi devono spiegare perchè non funziona
Ctec Inserita: 22 aprile 2021 Segnala Inserita: 22 aprile 2021 6 minuti fa, STEU scrisse: mi devono spiegare perchè non funziona Mi sembrava di averlo detto...
STEU Inserita: 22 aprile 2021 Autore Segnala Inserita: 22 aprile 2021 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.
Ctec Inserita: 22 aprile 2021 Segnala Inserita: 22 aprile 2021 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.
STEU Inserita: 22 aprile 2021 Autore Segnala Inserita: 22 aprile 2021 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.
batta Inserita: 22 aprile 2021 Segnala Inserita: 22 aprile 2021 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.
STEU Inserita: 22 aprile 2021 Autore Segnala Inserita: 22 aprile 2021 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.
walterword Inserita: 16 maggio 2021 Segnala Inserita: 16 maggio 2021 (modificato) 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: 16 maggio 2021 da walterword
ifachsoftware Inserita: 19 maggio 2021 Segnala Inserita: 19 maggio 2021 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).
STEU Inserita: 19 maggio 2021 Autore Segnala Inserita: 19 maggio 2021 (modificato) 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 Modificato: 19 maggio 2021 da STEU
walterword Inserita: 19 maggio 2021 Segnala Inserita: 19 maggio 2021 i caratteri terminatori della stringa char(10) e char(13) da verificare.
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