Vai al contenuto
PLC Forum


Contatore Veloce


sy-tech

Messaggi consigliati

Salve a tutti

Ho un encoder incrementale 500 div/giro che collego ad un plc 224xp DC/DC/DC dove la fase A è collegata su I0.0 e fase B su I0.1

Nel programma principale mediante il bit sm0.1 richiamo un sottoprogramma nel quale mediante il bit sm0.0 trasferisco il codice 16#84 nel smb37

e sempre con lo stesso bit abilito HDFE come HSC0 nel modo 9,poi abilito HSC.

Dopo attivo la tabella stato dove vorrei visualizzare il contenuto del contatore HC0.

Ma questo non avviene come mai.

Io in questo momento sono solo interessato a visualizzare il valore corrente del contatore

Grazie.

Link al commento
Condividi su altri siti


Leggi il manuale o, anche, l'help in linea relativo ai contatori velocit HSC; segui esattamente le indicazioni e, se lì'encoder è collegato correttamente e non è guasto, devi leggere il contenuto del registro di conteggio.

Link al commento
Condividi su altri siti

Mmmm....., se non riesci a visualizzare il valore del contatore veloce, così a naso, mi viene il sospetto che non hai scritto le istruzioni di controllo nel sottoprogramma di interrupt (INT0, INT1,...).

La strada migliore è quella che ti ha indicato Livio: utilizza l'aiuto contestuale di Microwin. Grazie anche a qualche semplice esempio contenuto, dovrebbe aiutarti. ;)

Modificato: da busanela
Link al commento
Condividi su altri siti

busanela, per far funzionare e leggere un HSC non serve nessun interrupt. Se lo HSC è stato configurato correttamente ad ogni impulso il suo valore s'incrementa o si decrementa in funzione della qaudratura e della configurazione. Poi basta leggere la Dword del contatore.

Link al commento
Condividi su altri siti

HDFE come HSC0 nel modo 9,poi abilito HSC.

Verifica nelle impostazioni , del canale HSC1/2 le seguenti ipostazioni , se sono tutte corrette.

-SMB47=16#F8=2#11111000=Set HCS1 con modalita': vedi note seguenti....

SM47.2=0 conta impulsi , Pulse x 4 (quadratura)

SM47.3=1 C. Up, conteggio direzionale positivo

SM47.4=1 aggiorna direzione conteggio

SM47.5=1 HCS1 , scrivi valore di preset

SM47.6=1 HCS1 , scrivi valore corrente

SM47.7=1 Enable HCS1 , abilita HSC1 -Set HCS1 to mode operation=9=contetor con cali AB in quadratura e controllo direzione

-SMD48 valore corrente

-SMD52 valore di preset

Confermo come dice Livio, che l'interrupt non serve, salvo specific casi.

Buone feste,

Ivan

Link al commento
Condividi su altri siti

Buon Natale a tutti,

L'encoder penso che funzioni perchè muovendolo lentamente a mano vedo i led degli input che si accendono in sequenza,

proverò a ricontrollare tutto e spero.

Ciao e grazie

Link al commento
Condividi su altri siti

Ciao a tutti,

per rispondere a Livio ed a Ivan: è vero. Nel caso di sy-tech, per visualizzare solamente il valore di conteggio dell'hsc non è indispensabile l'utilizzo dell'interrupt, ma mi pare lo sia (io perlomeno ho sempre agito così) per poter rilevare quando il valore attuale è uguale al valore di preimpostazione (si deve programmare un interrupt assegnando l'evento di interrupt CV = PV, evento 13, ad una routine di interrupt), per poter rilevare i cambiamenti di direzione, (programmare un interrupt assegnando ad una routine di interrupt l'evento interrupt di modifica di direzione, evento 14), per poter rilevare un evento di reset esterno (programmare un interrupt assegnando ad una routine di interrupt l'evento interrupt di reset esterno, evento 15) tramite il comando ATCH.

Ribadendo la piena condivisione delle vostre affermazioni nella mera necessità di visualizzare il valore attuale dell'ingresso veloce, riterrei necessaria l'applicazione pratica con i casi suddetti, futuro passo obbligato anche per Sy-Tech, augurando a tutti un felice ed un sereno Natale. ;)

Link al commento
Condividi su altri siti

....futuro passo obbligato anche per Sy-Tech....

Dipende cosa vuol fare. Personalmente non ho mai avuto necessità di usare interrupts sul contatore, neanche per posizionamenti, dipende dal tipom di algoritmo che s'impiega. Comunque la tua precisazione chiarisce correttamente l'applicazione.

Link al commento
Condividi su altri siti

Gabriele Corrieri

Ciao

ho scritto mille volte,ma pochi lo leggono: è inutile e fa perdere tempo inserire un software molto grande da debuggare tutto insieme, ci si perde via dietro ai mille problemi dei singoli moduli e poi le iterazioni fra i moduli stessi. Ho sempre attuato e consigliato di provare funzioni nuove stand-alone per prendere dimestichezza: fai un software vuoto con solo il tuo HSC fatto dall'assistente (wizard) poi da lì inizi le tue prove, quando avrai ottenuto i risultati che volevi allora ci vorrà poco ad integrare il tuo HSC nel restante software preoccupandoti ora solo delle possibili iterazioni con il preesistente codice.

Spero sia di aiuto

Ciao

Link al commento
Condividi su altri siti

Ciao,

in questo momento non è necessario utilizzare un interrupt perchè voglio solo leggere il contenuto del contatore.

Ora quello che vorrei sapere è quale parametro devo inserire nella smb37 tenendo presente che non utilizzo nessun valore di preimpostazione ma utilizzo solo come indicatore di eventuale posizione dell'encoder?

sm37.0=bit di controllo del livello attivo di reset 0=reset ad attività alta 1= reset attività bassa

sm37.1=bit non utilizzato

sm37.2=Velocità di conteggio 0=velocità contx4 1=velocità contx1

sm37.3=Bit controllo direzione 0=conteggio avanti 1=conteggio indietro

sm37.4=scrive in Hsc la direzione di conteggio0=nessun aggiornamento 1= aggiornamento della direzione

sm37.5=scrive in Hsc il nuovo valore preimpostato 0=nessun aggiornamento 1=aggiornato al valore preimpostato

sm37.6=scrive in Hsc il nuovo valore corrente 0=nessun aggiornamento 1=aggiornamento al valore corrente

sm37.7=abilita Hsc 0=inibisce il conteggio 1=abilita il conteggio

Io ho scelto 11010000 16#D0

Così ottengo che visualizzo 0 +1 +2 +1 0 in continuo dov'è che sbaglio?

Grazie

Link al commento
Condividi su altri siti

in risposta al signor Corrieri

io da quando ho sottoposto il mio problema sto utilizzando nel mio programma solo i dati del contatore e niente altro proprio per evitare altri problemi

Ciao

Link al commento
Condividi su altri siti

Dove leggi quel valore , nella tabella di stato interrogando HSC1 o 2 ?

Potrebbe darsi che hai fatto l'impostazione con il comando HDEF, ma ti manchi la chiamata al contatore e l'attivazione attraverso il comando HSC

Questa e' un'impostazione tipica che uso per un'encoder in quadratura.

LD     M31.4
MOVB   16#F8, SMB47
HDEF   1, 9
MOVD   +0, SMD48
HSC    1

M31.4 e' per me un'AlwaysON

Ciao

Ivan

Link al commento
Condividi su altri siti

M31.4 e' per me un'AlwaysON

Curiosità. Perchè non usi il merker di sistema e richiami l'impostazione solo nella SBR0?

Link al commento
Condividi su altri siti

risposta per Kamikaze

L'eggevo hsco

Ho provato il tuo suggerimento mettendo le fasi dell'encoder su i0.6 e i0.7

risultato che vedo sempre 0

io utilizzo sm0.0 e sm0.1 per richiamare sbro

Link al commento
Condividi su altri siti

Ciao a tutti, ti consiglio di partire ex novo utilizzando il wizard come detto da Gabriele, altrimenti posta il tuo codice per intero forse sfugge qualcosa

Ciao rwhite

Link al commento
Condividi su altri siti

L'eggevo hsco

Ho provato il tuo suggerimento mettendo le fasi dell'encoder su i0.6 e i0.7

Per HC0 gli ingressi sono SOLO I0.0=Clock A, I0.1=Clock B e I0.2=Reset per un contatore con modo HSC=9, 10 o 11, quindi effettua innanzi tutto questo collegamento dell'encoder al 200.

Poi, principio fondamentale, se vuoi indirizzare HC0, devi settare lo special merker byte (SMB) di HSC0, quindi SMB37; se intendi indirizzare HC1, l'SMB dell'HSC1 è il 47; per HC2 l'HSC2 ha SMB 57, e così via. Il comando HDEF definisce (appunto) il numero ed il tipo di contatore veloce.

Il valore che hai impostato per SMB37:

Io ho scelto 11010000 16#D0

può andare bene se, come ho detto, non hai la necessità di impostare valori di setpoint.

Altro punto importante da verificare è il formato in cui è indirizzato HC0: per accedere in sola lettura al valore di conteggio di un contatore veloce questo deve essere indirizzato SOLO in formato di doppia parola (MD10, ...).

Infine ti allego qualche riga di esempio ricavata da una mia subroutine per chiarire meglio i concetti espressi sopra (non considerare i richiami agli interrupt se non devi impostare SP od inversioni del conteggio).

LD SM0.1

MOVB 16#F8, SMB37

HDEF 0, 9 //Definizione del tipo di contatore veloce HC0, modo 9: contatore con fasi A/B in quadratura

MOVD +0, SMD38 // Inserimento del valore di partenza (0) dell'encoder

MOVD HC0, MD1 // Inserimento per visualizzazione del conteggio

MOVD SMD42, SMD42 // Abilitazione evento di interrupt: interrupt 0 con evento 12: CV=PV.

ATCH INT_0, 12 // Richiama interrupt 0 se CV=PV

ATCH INT_1, 27 // Richiama interrupt 1 su inversione del conteggio encoder

ENI // Abilitazione degli interrupt

HSC 0 // Abilitazione del High Speed Counter 0.

Lavorando attorno a questo esempio, non dovresti avere difficoltà a provare il tuo encoder; impara comunque, come ti è già stato consigliato a piu voci, a cercare attraverso i manuali e l'aiuto in linea, a risolvere da solo i tuoi dubbi. Non perchè il forum non possa o non voglia esserti d'aiuto, ma perchè (l'esperienza ci insegna) restano meglio nella memoria i concetti appresi con lo sforzo di chi ha sfogliato qualche pagina piuttosto di chi aspetta l'imbeccata, oltre naturalmente alla soddisfazione d'esserne venuto fuori da solo! ;)

Link al commento
Condividi su altri siti

L'impostazione di HSC0 è corretta, anche se gli interupts sulla comparazione e sull'inversione non sono sempre necessari.

Quello che è strano è l'imposibiltà che ha sy-tech nel visualizzare il conteggio. Ripeto il consiglio di Rwhite: posta tutto il codice e descrivi come fai per visualizzare il conteggio, non vorrei che il cntatore conti correttamente ma tu commetti un errore nella sua visualizzazione

Link al commento
Condividi su altri siti

Ciao Busanella

il fatto è che anche con il tuo suggerimento che già avevo provato non sortisce nessun risultato

a questo punto penso ad un problema sull'encoder appena posso lo controllo così partirò con un dato certo.

Grazie a tutti

Link al commento
Condividi su altri siti

penso ad un problema sull'encoder

Non credo sia guasto l'encoder se ciò che hai scritto precedentemente è vero:

muovendolo lentamente a mano vedo i led degli input che si accendono in sequenza

In questo caso è coerente credere che gli impulsi ad onda quadra dei due canali escano correttamente dall'encoder e di conseguenza entrino nell'ingresso plc.

E' fondamentale, come ho già detto, che il merker di appoggio del valore in tempo reale di HC0 sia indirizzato in formato di doppia parola: hai verificato anche questo?

Tu dici

attivo la tabella stato dove vorrei visualizzare il contenuto del contatore HC0.

Ma questo non avviene

ma se invece osservi il valore di HC0 con lo stato del programma anzichè con lo stato della tabella, neppure lì vedi variarne il valore?

Potrei essere portato a pensare che non funziona l'ingresso del 200, ma non credo che in questo caso vedresti accendersi i led degli ingressi: potresti provare ad utilizzare altri ingressi veloci della tua 224 XP, che mi pare ne abbia 6.

La sfida si fa davvero interessante. ;)

Alessandro.

Link al commento
Condividi su altri siti

Ciao Livio,

Curiosità. Perchè non usi il merker di sistema e richiami l'impostazione solo nella SBR0?

M31.0 , e' una cosa che risale al lontano 1997 , da allora realizzando programmi sia per 400,300,200, uso sempre lo stesso merker, 31.0 always ON e 31.1 Always OFF , che diventa uno standard su tutti i modelli, forza dell'abitudine ed amore per la standardizzazione (dove posso).

Ciao a presto

Ivan

Link al commento
Condividi su altri siti

forza dell'abitudine ed amore per la standardizzazione (dove posso).

Ti capisco perfettamente. Solo il software provato e riprovato non da (quasi mai) guai

Link al commento
Condividi su altri siti

Ecco i nuovi sviluppi.

Prima di tutto vi scrivo esattamente il programma e cosa succede:

programma principale:

tramite sm0.1 chiamo sbro

sbro:

tramite sm0.0 utilizzo movb 16#f8 in smb37,hdfe 0 su hsc e 9 su mode, e poi abilito il contatore 0 su hsc

dopo mentre gira il programma vado su tabella di stato e visualizzo hc0

se utilizzo la visualizzazione binaria vedo questo risultato

0000000000000000 con gli input i0.0 fase a e i0.1 fase b dell'encoder

al primo segnale il contatore scatta a:

0000000000000001

al secondo bit il contatore va a: .

1111111111111111

dopo continua all'infinito.

Buon anno

Link al commento
Condividi su altri siti

l'abilitazione del contatore non la devi fare con un bit alwais on, altrimenti non parte mai il conteggio, ma resti sempre in modalità di preimpostazione del contatore. Lo devi abilitare con un SM 0.1, o con un fronte di salita

Link al commento
Condividi su altri siti

Ciao Rimonta,

Credo che la cosa sia gia fatta cosi' , infatti lui richiama SBRO con SM0.1 (bit ON al primo ciclo).

Dentro SBRO deve esserci l'impostazione HDEF e la prima chiamata HSC.

al primo segnale il contatore scatta a:

0000000000000001

al secondo bit il contatore va a: .

1111111111111111

dopo continua all'infinito.

Credo che vi sia un preset del contatore non corretto.

Ivan

Link al commento
Condividi su altri siti

Non capisco cosa continua all'infinito: il ciclo 00000001 ==>1111111111, oppure 000000001, 11111111, 11111110, 1111101, etc.

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