Vai al contenuto
PLC Forum


Eventi


Project75

Messaggi consigliati

Buon pomeriggio a tutti. Ho creato un interruttore e sulle impostazioni degli eventi ho messo la funzione resetta bit su 15 pulsanti,  ma in realtà ne ho ancora altri 3 da inserire, come faccio dal momento che l'interruttore ne supporta solo 15 eventi? Grazie anticipatamente. 

Link al commento
Condividi su altri siti


Ciao,

non ho ben capito cosa intendi; utilizzi un interruttore per resettare 18 bit relativi ad altrettanti pulsanti ed hai impostato 15 eventi per resettare tali bit e gli ultimi 3 non te li fa inserire perchè sono "terminati" gli eventi impostabili ...

Perchè non utilizzi un solo evento, impostando a 0 una intera word (32 bit) e poi utilizzi i singoli bit della word per i pulsanti ?

Link al commento
Condividi su altri siti

Giuseppe Signorella
Quote

una intera word (32 bit) 

Drugo66 voleva dire "double word".

Puoi fare un MOVE verso l'area di memoria al quale hai assegnato i singoli bit.

Dove con l'istruzione MOVE trasfweisci il valore "0000" (reset di tutti i 32 bit) ad esempio dell'area di memoria 'MD10'

Oppure utilizzi l'istruzione (RESET_BF) "reset campo di bit"

Ciao

Link al commento
Condividi su altri siti

Chiedo scusa per l'imprecisione: volevo dire proprio dword.

Come evento, anzi per gli eventi, avrai definito resetta bit; esiste anche definisci variabile e come valore imposti 0, come dicevo, un solo evento.

Poi, se la tua variabile è, per esempio, MD10, per i tuoi pulsanti, di cui vuoi resettare il bit, userai M10.0 ... 7, M11.0 ... 7, M12.0 ... 7 e M13.0 ... 7.

Oppure, come scrive Peppe, come evento imposti un solo bit e poi nel PLC fai un move a tutta la dword quando il bit è uno.

Link al commento
Condividi su altri siti

Ok avevo intuito bene, però i pulsanti sono dentro un FB e dopo aver creato la dword supponendo sia 10.0, per i pulsanti la bool me la fa partire da 14.0, come faccio a cambiare. Ciao

Link al commento
Condividi su altri siti

Se vuoi usare questo sistema, i bit devono essere seguenti; se il primo bit parte da M14.0, puoi utilizzare MD14, ma anche tutti gli altri bit devono stare in MD14 (M14.0-M17.7); altrimenti sei costretto a cambiare qualcosa nella FB.

Link al commento
Condividi su altri siti

Si però quando creo la dword mi prende 14.0, ma le bool automaticamente me li parte da 18.0, perché mi salta i bit della dword, oltretutto come faccio a cambiare i bool dal momento che il programma non me lo fa fare?

Link al commento
Condividi su altri siti

Ciao a tutti,

dovresti impostare i singoli bit e poi, all'azzeramento richiami la DWord.

Ad esempio, nella tabella dei simboli imposti

M14.0 = Pulsante1

M14.1 = Pulsante2

...

M17.9 = Pulsante32

 

Quando devi resettare fai

0

Move

MD14

 

 

 

Link al commento
Condividi su altri siti

Benissimo, però i miei pulsanti sono dentro un FB e quando creo la dword, supponiamo sia 14.0, per i successivi pulsanti mi crea i bool che partono da 18.0, perché mi salta I bit della dword, quindi come faccio a cambiare i bit dei pulsanti bool per fare in modo che diventino M14.0....7 fino a 17.0....7 e non M18.0.....7 fino a 21.0....7 come li fa il programma in automatico, dal momento che non me li fa cambiare?

Link al commento
Condividi su altri siti

Il blocco FB l'hai scritto tu ? Gestisce tutti i pulsanti insieme o singolarmente ?

Da come scrivi sembra che gestisce singolarmente i pulsanti, ma non si capisce perchè assegni una intera DWord (passa da 14 a 18) al blocco invece di un singolo bit ...

Tagliamo la testa al toro: se non vuoi/puoi modificare la FB, assegna all'interruttore un evento che imposta un singolo bit; da PLC poi, quando il bit è uno, resetti ogni singolo bit dei pulsanti; così dovrebbe funzionare.

Link al commento
Condividi su altri siti

Innanzitutto leggere il manuale del TIA a pagina 3284:

 

Quote

Con l'istruzione "Resetta campo di bit" si resettano diversi bit a partire da un determinato indirizzo.
Il numero di bit da resettare si determina in base al valore dell'<Operando1>. L'indirizzo del primo bit da resettare viene determinato dall'<Operando2>. Se il valore dell'<Operando1> è maggiore del numero di bit in un byte selezionato, vengono resettati i bit del primo byte successivo. I bit rimangono resettati finché non vengono impostati esplicitamente da un'altra istruzione.
L'istruzione viene eseguita solo se il risultato logico combinatorio (RLO) nell'ingresso della bobina è "1". Se l'RLO nell'ingresso della bobina è "0", l'istruzione non viene eseguita.

 

Però mi sembra che siamo sempre lì: i bit devono essere seguenti, altrimenti non ti funziona nemmeno questa istruzione.

Link al commento
Condividi su altri siti

Giuseppe Signorella

Perché non puoi modificare le variabili?

Il sistema ti propone ogni qual volta inserisci una nuova variabile, la prima allocazione di memoria libera rispetto all'ultima utilizzata. E fin qui è tutto normale.

Una volta che il sistema ti ha inserito/proposto in automatico una nuova allocazione di memoria, tu puoi modificarla senza alcun problema.

Basta che ci clicchi sopra e diventa editabile.

ma come dice DRUGO66, i bit devono essere consecutivi, altrimenti stiamo parlando inutilmente.

Ciao

Link al commento
Condividi su altri siti

Te l'ho già scritto come fare: con l'interruttore imposti un bit qualunque e con il PLC resetti ogni singolo bit dei pulsanti; saranno, quindi, 18 reset.

Se non puoi cambiare l'indirizzo dei bit dei pulsanti, non esiste altra via.

Link al commento
Condividi su altri siti

Si ho capito, ma dentro il blocco FB non mi fa modificare la variabile una volta creata la dword, quindi non mi fa impostare i bit a seguire ma li imposta in automatico, esiste un modo per modificare dentro FB ho devo impostare dword e Merker da tabella variabili plc? E ovviamente così funziona perché ho già provato. 

Link al commento
Condividi su altri siti

Onestamente, non ho capito molto; il reset dei bit dei pulsanti tutti insieme lo puoi fare anche fuori da quella FB, ed anche se non sono consecutivi, basta che sia dopo l'esecuzione dell'FB stesso e che li resetti uno per uno (ti ho già spiegato più volte come): il risultato è che, nella prosecuzione della scansione, tutti i bit di quei pulsanti risulteranno a zero; non capisco perchè non riesci a modificare il blocco FB (se l'hai scritto tu, lo puoi modificare eccome) ed, infine, non capisco cosa stai cercando di fare; mi spiace, ma con queste informazioni, non riesco ad aiutarti di più.

Link al commento
Condividi su altri siti

Praticamente ho dei pulsanti dentro un FB che mi attivano delle valvole quando è attivata la funzione in manuale tramite un interruttore sul pannello operatore, quando quest'ultimo è in ON posso attivare e disattivare, tramite i miei famosi pulsanti, le mie valvole, quando metto l'interruttore in OFF , se qualche pulsante è in ON, lo deve resettare in OFF onde evitare che la valvola rimanga in ON. Quindi se creo la dword dentro il blocco FB, alla voce STATIC (esempio dword 14, i pulsanti automaricamate me li setta da 18.0...7 fino a 21.0....7, saltando i bit della dword, mi chiedo: funziona lo stesso o i bit devono essere a seguire 14.0.....7 fino a 17.0....7?) O devo creare la dword e i rispettivi Merker al difuori del blocco, magari dentro la tabella variabili plc? Che tra l'altro quest'ultima soluzione lo già provata e funziona. Spero di essere stato  chiaro.

Link al commento
Condividi su altri siti

Quando crei una variabile static in blocco FB, nel momento che lo userai verrà creato un DB di istanza, associato a quella "chiamata" del blocco FB e lì dentro ci troverai le variabili; se lo vuoi tenere così, devi vedere nel blocco di istanza creato quali sono le tue variabili e resettare quelle: funziona, ma non è il massimo secondo me, questo perchè vai ad intervenire nelle variabili di un blocco di istanza, cosa non molto "bella" (ripeto, almeno secondo me).

Se, invece, ti crei delle variabili globali (merker o in un db globale), allora potrai anche averle seguenti una all'altra e, quindi, utilizzare le istruzioni ed i modi che ti abbiamo consigliato fin'ora.

Altra cosa che puoi fare è modificare il blocco FB, passandogli la variabile pilotata dall'interruttore (dichiarata globale e passata al blocco come IN) e con quella resettare tutte le variabili dei pulsanti.

Infine, ma non ultimo, visto il funzionamento da te descritto, io passerei anche tutte le variabili dei pulsanti al blocco FB (dichiarate globali e passate al blocco come IN/OUT) in modo diessere libero di dichiararle come mi pare (merker o db globale) e sia perchè, lo ripeto, non mi piace l'intervento "esterno" sulle variabili TEMP e STATIC, nemmeno se da un pannello.

In un blocco FB, in pratica, dichiaro TEMP e STATIC quello che rimane all'interno del blocco, mentre dichiaro IN, IN/OUT e OUT quello che arriva e va all'esterno del blocco; in questo modo il blocco è più gestibile, comprensibile e riutilizzabile.

 

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