daddy.lee Inserito: 5 febbraio 2012 Segnala Share Inserito: 5 febbraio 2012 Salve a tutti. Ho fatto un po di ricerca guasti su plc s5 circa 15 anni fa e poi, ho lasciato quel lavoro per fare qualcosa di completamente diverso.A distanza di anni, ho acquistato un plc (cpu100) con tanto di cavo di programmazione e mi rendo conto che 15 anni sono davvero tanti.Stavo cercando un sistema per attivare/disattivare un'uscita con un impulso su un solo ingresso (cio che di solito fa un relais passo/passo) e anche provando i suggerimenti trovati in un post di qualche anno fa, non riesco a farlo funzionare. Il codice che ho inserito è il seguenteE0.0: PULSANTEA1.0: LUCEM0.0: APPOGGIOU E 0.0UN M 0.0S A 1.0U E 0.0U M 0.0R A1.0***UN E 0.0U A 0.0S M 1.0UN E 0.0UN A 0.0R M 0.0***dove sbaglio?? Link al commento Condividi su altri siti More sharing options...
busanela Inserita: 5 febbraio 2012 Segnala Share Inserita: 5 febbraio 2012 (modificato) dove sbaglio??Dalle basi, purtroppo, amico mio.A parte che nel secondo segmento hai settato M1.0 invece di M0.0, un sistema a processore logico esegue le istruzioni in maniera sequenziale ma ciclica, il che vuol dire che, governato dal tempo di ciclo della cpu, esegue l'interrogazione dell'immagine di processo degli ingressi, elaborazione del programma di governo, trasferimento dei dati dell'immagine di processo d'uscita alle uscite, ricominciando nuovamente.A causa di questo, semplificando il discorso, il primo ciclo attiva l'uscita in base alle condizioni poste, il secondo la disattiva, il terzo la spegne, etc. facendo "sfarfallare" l'uscita, nel migliore delle ipotesi.Dovresti utilizzare il controllo del fronte, che in Step5 non esiste come istruzione diretta ma con una sequenza d'istruzioni:U E0.0UN M1.0= M0.0------U0.0=M1.0------UM0.0=A0.0Cercando "toggle" forse troverai altre discussioni a riguardo. Modificato: 5 febbraio 2012 da busanela Link al commento Condividi su altri siti More sharing options...
daddy.lee Inserita: 6 febbraio 2012 Autore Segnala Share Inserita: 6 febbraio 2012 Ho letto adesso la tua risposta e credo di aver capito cosa intendi. Il codice che hai postato, però, non mi è per niente chiaro.per quanto riguarda il toggle invece, sul forum non ho trovato nessun post. ma torniamo a noi. Premetto che a costo di sembrare rompi[at][at], preferisco capire la soluzione da intraprendere piuttosto che avere la 'pappa pronta'. in che modo risolvo il mio quesito riconoscendo il fronte dell'impulso?nel frattempo cerco di ritrovare qualcosa a riguardo: credo di averlo letto proprio pochi giorni fa. grazie per la pazienza! Link al commento Condividi su altri siti More sharing options...
busanela Inserita: 6 febbraio 2012 Segnala Share Inserita: 6 febbraio 2012 in che modo risolvo il mio quesito riconoscendo il fronte dell'impulso?I primi 2 "segmenti"del codice che ti ho scritto sono la maniera canonica per la rilevazione del fronte con Step5; il terzo l'ho aggiunto per completare il tuo esempio. Mi sono accorto solo ora di aver saltato un operando, quindi il secondo segmento è:U E 0.0= M 1.0La spiegazione è più o meno la seguente: ad ogni variazione da 0 a 1 del segnale d'ingresso 0.0 (fronte di salita) la combinazione AND è soddisfatta e I merker M 1.0 e M 0.0 vengono impostati. Nel successivo ciclo di elaborazione della cpu, il merker M 1.0 è impostato, quindi l'AND U E 0.0 con UN M 1.0 non è soddisfatto: M 0.0 presenta quindi lo stato 1 solamente durante un unico ciclo di elaborazione. Link al commento Condividi su altri siti More sharing options...
daddy.lee Inserita: 7 febbraio 2012 Autore Segnala Share Inserita: 7 febbraio 2012 rieccomi. Ho capito il tuo codice e l'ho inserito nel mio ob1 (che è tra l'altro l'unico blocco esistente).Premendo il pulsante (e0.0) l'uscita (a1.0) si accende e si rispegne anche se il pulsante rimane premuto...francamente non capisco perchè.ho quindi provato a modificare il segmento 3 come segue:u m 0.0 Fronte di salitaun a 1.0s a 1.0u m 0.0u m 0.0r a 1.0L'uscita viene attivata al primo fronte di salita e poi...nulla più.cercando in rete, ho letto di un codice scritto da più persone e che non funzionava su una singola macchina. purtroppo quando il problema è stato risolto, l'utente non ha spiegato come mai. potrebbe esserci un problema legato all'installazione del software? Link al commento Condividi su altri siti More sharing options...
busanela Inserita: 7 febbraio 2012 Segnala Share Inserita: 7 febbraio 2012 u m 0.0 Fronte di salitaun a 1.0s a 1.0u m 0.0u m 0.0r a 1.0Forse hai sbagliato a trascrivere quello che volevi dire: c'è una ripetizione senza senso di U M 0.0.Comunque prova così il segmento 3:U M 0.0UN A 1.0S A 1.0--------U M 0.0U A 1.0R A 1.0 Link al commento Condividi su altri siti More sharing options...
daddy.lee Inserita: 7 febbraio 2012 Autore Segnala Share Inserita: 7 febbraio 2012 si, ho semplicemente sbagliato ha trascrireve. ho ricontrollato il listato era corretto... Link al commento Condividi su altri siti More sharing options...
batta Inserita: 8 febbraio 2012 Segnala Share Inserita: 8 febbraio 2012 //Generazione fronte di salita (che io sono abituato a fare in maniera leggermente diversa da quella canonica)U E0.0U M0.0= M0.1UN E0.0= M0.0//Toggle uscitaUN A0.0U M0.1OU A0.0UN M0.1= A0.0 Link al commento Condividi su altri siti More sharing options...
busanela Inserita: 8 febbraio 2012 Segnala Share Inserita: 8 febbraio 2012 Scartabellando tra le vecchie carte dei programmi S5 ho trovato questo FB che mi ero fatto moolto ma moolto tempo fa per poter utilizzare più di un toggle all'interno di un programma:FB 187 segmento 1Nome :TOGGLEsigla :INGR E/A/D/B/T/Z: E BI/BY/W/D: BIsigla :FRON E/A/D/B/T/Z: E BI/BY/W/D: BIsigla :IMPL E/A/D/B/T/Z: A BI/BY/W/D: BIsigla :TOGL E/A/D/B/T/Z: A BI/BY/W/D: BI :U =INGR :UN =FRON := =IMPL :S =FRON :UN =INGR :RB =FRON : :U =IMPL :UN =TOGL :S =TOGL :RB =IMPL : :U =IMPL :U =TOGL :RB =TOGL :BEQuando lo vai a richiamare, imposta l'ingresso , le memorie di appoggio e l'uscita che preferisci. Link al commento Condividi su altri siti More sharing options...
negruj Inserita: 8 febbraio 2012 Segnala Share Inserita: 8 febbraio 2012 concordo pienamente Link al commento Condividi su altri siti More sharing options...
daddy.lee Inserita: 14 febbraio 2012 Autore Segnala Share Inserita: 14 febbraio 2012 rieccomi. in quest giorni ho avuto un po da fare e non ho potuto provare la soluzione che mi proponevi. ovviamente, c'è qualcosa che non mi torna. le funzioni non sono mai state il mio forte e se a questo si aggiungono 15 anni di astinenza, il risultato è intuibile!ho ricopiato la fb che mi hai suggerito e l'ho richiamata da ob1 nel seguente modo: spa fb1nome: toggleingr e0.0fron m0.0impl m1.0togl a1.0ma il plc va in blocco. Dico forse una castroneria: nel fb fron e impl sono dichiarati rispettivamente come ingresso e uscita. dove sbaglio stavolta?davvero grazie per la pazienza Link al commento Condividi su altri siti More sharing options...
busanela Inserita: 14 febbraio 2012 Segnala Share Inserita: 14 febbraio 2012 Le dichiarazioni degli operandi formali sono corrette così. Non so perchè la tua cpu "vada in blocco" (suppongo tu intenda in stop), bisognerebbe dare uno sguardo al registro delle interruzioni per risponderti, dato che non conosco esattamente la configurazione del tuo sistema o cosa hai caricato in esso: solo con OB1 ed un FB non dovrebbe. Prova comunque a dare un valore diverso all'FB1, magari FB100, e vedi come si comporta. Al limite posta il REG.IN. Link al commento Condividi su altri siti More sharing options...
batta Inserita: 15 febbraio 2012 Segnala Share Inserita: 15 febbraio 2012 Se devi fare un certo numero di "toggle", allora la soluzione di "busanela" con la FB dedicata è la migliore.Continua su quella strada anche se vuoi semplicemente fare esercizio.Se, invece, il tuo unico scopo è far funzionare un numero limitato di "toggle", ti conviene scrivere direttamente le poche righe di codice necessarie. Link al commento Condividi su altri siti More sharing options...
daddy.lee Inserita: 15 febbraio 2012 Autore Segnala Share Inserita: 15 febbraio 2012 diciamo che vorrei creare un piccolo (oltre che inutile) impianto di domotica. il vero scopo e rimettere mano sui plc che non uso ormai da 15 anni circa...ma senza uno scopo preciso: semplice divertimento. in ogni caso, i pulsanti che utilizzerò saranno una decina circa e la soluzione che preferirei adottare è quella della fb. non so se sei daccordo dato il numero di pulsanti, ma tornando a cio che ho detto prima, mi permettere di 'fare esercizio'. tornando al problema invece, le poche (e peraltro semplici) righe di codice che busanella mi ha suggerito, non funzionano e non capisco il motivo. adesso sto provando con l'fb e ho lo stesso problema. quindi vorrei porre nuovamente una domanda: è possibile che ci sia un problema non nel codice (che ho ricopiato pari pari) ma nell'hw e/o nel software? eventualmente, come posso fare per scoprirlo? Link al commento Condividi su altri siti More sharing options...
busanela Inserita: 15 febbraio 2012 Segnala Share Inserita: 15 febbraio 2012 le poche (e peraltro semplici) righe di codice che busanella mi ha suggerito, non funzionano e non capisco il motivo.Cosa vuol dire non funzionano? La cpu va ancora in "blocco" (stop) o all'ingresso che attivi non corrisponde l'attivazione dell'uscita?è possibile che ci sia un problema non nel codice (che ho ricopiato pari pari) ma nell'hw e/o nel software?Dipende dal tipo di comportamento del malfunzionamento: se indirizzi ad un'ingresso od a una uscita che non esiste (ricorda che i moduli in S5 si numerano da 0 e si incrementano, non ricominciano dal byte 0 se cambi tipo di modulo come in S7), semplicemente non attivi l'ingresso/l'uscita corretta, ma non si pone in stop.Solo il REG.IN., come ti ho detto, ti può aiutare se non puoi dare informazioni più precise. Link al commento Condividi su altri siti More sharing options...
daddy.lee Inserita: 16 febbraio 2012 Autore Segnala Share Inserita: 16 febbraio 2012 non credo ci sia un errore di indirizzamenti. il plc è composto unicamente da cpu, scheda 8 input (e0.0 -->e0.7) e scheda 8 output (a1.0 --> a1.7). il primo codice che mi hai proposto mi attiva l'uscita a1.0 quando premo il pulsante collegato in e0.0 ma non la disattiva alla seconda pressione dello stesso pulsante. per quanto riguarda il blocco fb (che mi manda in stop la cpu), cercherò nel pomeriggio di postare il reg.int. a proposito: c'è un modo per copiarlo su file? Link al commento Condividi su altri siti More sharing options...
busanela Inserita: 16 febbraio 2012 Segnala Share Inserita: 16 febbraio 2012 il primo codice che mi hai proposto mi attiva l'uscita a1.0 quando premo il pulsante collegato in e0.0 ma non la disattiva alla seconda pressione dello stesso pulsante. per quanto riguarda il blocco fb (che mi manda in stop la cpu)Che cpu 100 stai utilizzando? Non sarà mica una 102? Link al commento Condividi su altri siti More sharing options...
batta Inserita: 16 febbraio 2012 Segnala Share Inserita: 16 febbraio 2012 tornando al problema invece, le poche (e peraltro semplici) righe di codice che busanella mi ha suggerito, non funzionano e non capisco il motivo.Ma hai provato anche il mio codice???In quello di Busanela (non parlo della FB che non ho controllato) c'è un errore:U M 0.0UN A 1.0S A 1.0--------U M 0.0U A 1.0R A 1.0Nelle prime tre righe infatti, se l'uscita è OFF viene impostata ON con il fronte di salita (M0.0).Ma le tre righe successive, sempre con lo stesso fronte di salita ora che l'uscita è ON, la resettano subito.Il codice potrebbe essere modificato come segue:U M 0.0UN A 1.0S A 1.0R M 0.0--------U M 0.0U A 1.0R A 1.0Oppure puoi provare con l'esempio che ho postato io (che sembra tu abbia completamente ignorato), che riporto nuovamente:UN A0.0U M0.0OU A0.0UN M0.0= A0.0 N.B.: in tutti gli esempi M0.0 è il fronte di salita. Link al commento Condividi su altri siti More sharing options...
busanela Inserita: 16 febbraio 2012 Segnala Share Inserita: 16 febbraio 2012 (modificato) In quello di Busanela (non parlo della FB che non ho controllato) c'è un erroreHai ragione, m'era sfuggito!L'FB invece ho fatto copia-incolla quindi è senz'altro corretto!Ma hai provato anche il mio codice???puoi provare con l'esempio che ho postato io (che sembra tu abbia completamente ignorato)Dai Flavio, non te la prendere!! Modificato: 16 febbraio 2012 da busanela Link al commento Condividi su altri siti More sharing options...
daddy.lee Inserita: 17 febbraio 2012 Autore Segnala Share Inserita: 17 febbraio 2012 batta, perdonami ma credo che il tuo post non lo avevo letto...tra le altre cose, funziona!!! intanto grazie mille e ovviamente grazie anche a busanella per la pazienza. questo week-end avrò un po da fare e non credo avrò tempo da dedicare a niente. il prossimo passo sarà duplicare la funzione per un secondo ingresso e una seconda uscita e utilizzare uno dei due pulsanti per spegnere entrambe le luci se premuto più di 2 secondi.una sola domanda: se volessi salvare lo stato delle uscite, devo usare le db, giusto? Link al commento Condividi su altri siti More sharing options...
busanela Inserita: 18 febbraio 2012 Segnala Share Inserita: 18 febbraio 2012 batta, perdonami ma credo che il tuo post non lo avevo letto...tra le altre cose, funziona!!!... Hai visto Flavio? il prossimo passo sarà duplicare la funzione per un secondo ingresso e una seconda uscitaMa allora adesso funziona? Non manda più in stop la cpu? Se è così, cosa sbagliavi, allora?Non so cosa intendi con "duplicare la funzione": l'FB che ti ho postato si utilizza tutte le volte che vuoi semplicemente richiamandolo con SPA o SPB da OB,PB,FB, inserendo gli operandi attuali, richiesti dal richiamo,che vuoi utilizzare in quel momento per quel dato pulsante/uscita.una sola domanda: se volessi salvare lo stato delle uscite, devo usare le db, giusto?Nei blocchi dati si salvano i dati, appunto, sotto forma di parole per un numero massimo di 256 ( da DW0 a DW255), quindi per salvare lo stato di un bit d'uscita, lo devi trasformare in stringa di bit della parola dello stato delle uscite e solo poi traferirlo nel DB. Link al commento Condividi su altri siti More sharing options...
daddy.lee Inserita: 18 febbraio 2012 Autore Segnala Share Inserita: 18 febbraio 2012 si, mi sono espresso malissimola tua fb, mi manda il plc in stop. leggendo il post di batta, ho provato il suo codice e funziona! quindi penso che utilizzerò questo (anche se prima o poi, cercherò di capire il problema della fb)quando ho detto che avrei duplicato la funzione quindi mi riferivo a quella di batta anche se mi rendo conto che la tua soluzione sarebbe più elegante e più pratica.per il momento è tutto! vi auguro un felice week-end! Link al commento Condividi su altri siti More sharing options...
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