Vai al contenuto
PLC Forum


Motion Control con FP0RC16P


Eleonora Fontana

Messaggi consigliati

Eleonora Fontana

Buongiorno a tutti,

è la mia prima domanda quindi chiedo scusa in anticipo per qualche mia lacuna.

Per un progetto di tesi in università devo lavorare sul PLC della Panasonic FP0RC16P e collegarlo ad un azionamento Minas Liqi (cod.MBDJT2207) per far muovere il motore (cod. MSMD012J1S).

Ho effettuato il cablaggio e verificato il funzionamento tramite software Panaterm: l'azionamento si accende e il motore si muove. Ora, il mio problema consiste nel capire come far comunicare PLC e azionamento. Essendo la prima volta in cui sento parlare di Motion, ho scaricato alcuni esempi dal sito Panasonic e tra quelli ci sono alcuni FB utilizzati che potrebbero interessarmi, come ad esempio il FB MC_Initial_Configuration, MC_Move_Relative, ecc... Dove posso trovare una spiegazione degli ingressi/uscite di questi FB? Come posso, partendo da zero, capire il Motion e quindi provare a far muovere il motore anche a bassissima velocità, giusto per iniziare?

 

Ringrazio chiunque mi risponda.

Link al commento
Condividi su altri siti


Roberto Gioachin

Benvenuta.

In linea generale la tua applicazione prevede l'utilizzo delle uscite a treno di impulsi del PLC, collegate agli ingressi del drive.

Il posizionatore è sul PLC e le funzioni che hai menzionato servono per gestire le varie funzionalità di Motion Control.

Per prima cosa devi impostare i registri di sistema del PLC per attivare le uscite per lo scopo, diversamente sono delle uscite normali.

Poi con le FB che hai scaricato puoi eseguire le operazioni di Homming, di JOG e di Posizionamento (assoluto o relativo).

Per muovere il motore la prima volta puoi utilizzare la funzione di Jog.

 

Dimenticavo, quando installi la libreria si installa anche l' H E L P , se lo hai caricato sul tuo progetto, selezioni la tua FB e premi F1 per avere le informazioni che ti servono

 

Modificato: da Roberto Gioachin
Link al commento
Condividi su altri siti

Eleonora Fontana

Ok, ottimo, è già un grandissimo aiuto! 

Per impostare i registri di sistema come dice Lei, devo agire in questa schermata? Ho visto velocemente le altre voci, ma mi sembra più corretto lavorare qui.

L'azionamento è collegato al PLC in X1 (segnale S-RDY per indicare lo stato pronto dell'azionamento), X3 (ALM, uscita allarme servo) e X5 (uscita posizione target raggiunta); le uscite del PLC a loro volta "ritornano" nell'azionamento. Quali voci dovrei modificare affinché il PLC riconosca di essere connesso all'azionamento? Lei ha parlato di attivare le uscite, ma qui vedo solo il settaggio di ingressi X*.....

 

 

image.thumb.png.d73cb1e9bcd4f6de6d664fbd2ce7d063.png

Link al commento
Condividi su altri siti

Roberto Gioachin

Prima cosa, nel forum ci si da del TU, non del LEI.

Sulla schermata che hai postato, la settima riga riguarda proprio le uscite ad impulsi, devi attivare una delle configurazioni previste.

La seconda e terza delle configurazioni prevedono anche l'attribuzione di un funzionalità ad alcuni ingressi.

La quarta configurazione non ti interessa in quanto si tratta di utilizzare l'uscita come PWM (Pulse Width Modulation)

 

Fatto questo, poi utilizzi le FB installate

Link al commento
Condividi su altri siti

Eleonora Fontana

Ok, allora ti darò del tu.

Ecco quello che ho provato a fare: nella schermata di cui abbiamo parlato precedentemente ho modificato la sesta riga (piuttosto che la settima) per l'uscita ad impulsi, in quanto le uscite interessate nel mio caso sono Y0 e Y1. Successivamente ho istanziato la MC_Jog e dall'. ho capito che si deve anche inserire il MC_Initial Configuration. Quindi ho configurato tutto come si vede dalla schermata e ho runnato il tutto, senza ottenere nè messaggi di errore, nè un movimento effettivo del motore. Non si accendono nemmeno i led relativi a ingressi/uscite sul PLC, niente di niente.. Cosa sto sbagliando?

 

 

 

image.thumb.png.fefb9603a3e7635e2a168d16691fa5a6.png

 

 

 

 

 

Link al commento
Condividi su altri siti

Roberto Gioachin

Da quello che vedo la compilazione ti da 28 passi di programma, quindi sembra che tu non abbia messo il tuo POU sui Tasks (Programmi).

Fai doppio click su Tasks nel navigatore progetto, verifica che nella lista ci sia il tuo PRG "prova1_LD", è sufficiente selezionare dal menù a discesa, poi prova ricompilare.

Link al commento
Condividi su altri siti

Eleonora Fontana

Scusa se rispondo solo adesso ma devo attenermi a degli orari per accedere al laboratorio e poter portare avanti il lavoro.

Purtroppo avevi ragione, ma pur associando il POU al task programmi e mandando in esecuzione, continua a non succedere nulla......

 

image.thumb.png.58b402c298d55546e25d6db357d0271c.png

 

Link al commento
Condividi su altri siti

Roberto Gioachin

Il collegamento fra PLC e Drive prevede che tu utilizzi le due uscite Y0 e Y1 da inviare all'ingresso a treno di impulsi del drive, poi devi collegare un uscita del plc "ServoON" all'ingresso del drive.

Per fare in modo che il motore si muova, devi fornire questi segnali, verifica di aver eseguito tutti i collegamenti.

Altra cosa, guarda bene il file .zip che hai scaricato con la libreria, all'interno trovi anche un programma PLC con gli esempi di utilizzo delle varie FUN e FB, il programma fa parte di uno starter kit con gli stessi componenti che hai tu.

 

Ti consiglio comunque di monitorare le variabili di sistema per vedere se la variabile che contiene il valore di conteggio del canale 0 si incrementa quando fornisci il segnale di Execute.

 

Link al commento
Condividi su altri siti

Eleonora Fontana

I collegamenti tra Drive e PLC sono stati effettuati come mostrato in figura, quindi il segnale ServoON è presente.

image.thumb.png.352ff859d0b76a93753a0cd2fa4de9f6.png

Il problema che non riesco proprio a risolvere è che, per come ho scritto il codice, MC_Jog1 non va mai in execute perchè non vede sReady (segnale in ingresso al PLC che indica lo stato pronto del servo drive, posto in X1) attivo, quando invece so che lo è. Quindi il problema suppongo sia proprio di "comunicazione". Ma avendo collegato tutto (ho ricontrollato tutto anche con il docente, quindi suppongo sia giusto) e avendo modificato i registri di sistema affinchè il PLC riesca a leggere anche solo l'ingresso X1, non so più dove mettere le mani....

Ho attenzionato anche il programma dentro il file .zip della libreria, ma anche lì non succede niente, non si accendono nemmeno i led degli ingressi del PLC relativi ai segnali di ingresso che vengono dal drive, come appunto sReady.

Modificato: da Eleonora Fontana
Link al commento
Condividi su altri siti

Roberto Gioachin

Il programma che hai trovato con la libreria è stato realizzato proprio per lo schema che hai postato, quindi bisogna capire quale sia il motivo per cui non funziona.

Verifica che al comune degli ingressi del plc sia stato portato il positivo, le uscite del drive sono di tipo NPN e non PNP.

Sul tuo esempio ho visto che hai portato l'ingresso X1 come "Execute" della FB MC_Jog1, mentre su questo ingresso della FB va portato il segnale di Forward (o meglio RUN), quello successivo lo hai messo fisso su TRUE, vale a dire che il motore deve girare indietro (Reverse).

Verifica che l'uscita Y4 sia attiva prima dare il comando di RUN sull'ingresso Execute

Nella configurazione dell'uscita a treno di impulsi, verifica se hai selezionato "Uscita impulsi Y0-Y1, Ingresso Home X4"

Il programma di esempio prevede l'uso di un pannello operatore per impartire i comandi, tu puoi realizzare tutti i comandi andando con il mouse sulla variabile da attivare, e facendo il doppio click.

Nel tuo esempio hai scelto "OutputMethod" = 2, hai verificato che sul drive sia impostato lo stesso metodo?      2 = pulse/signal, vale a dire Y0=pulse, Y1=signal. Normalmente si utilizza "OutputMethod" = 0

Per ora mi viene in mente questo 

 

 

Link al commento
Condividi su altri siti

Eleonora Fontana

Ok, ho risolto!! Il PLC riconosce gli ingressi e i LED di X1,X3 e X5 si accendono, quindi è già un passo in avanti.

Ora devo capire come mai il programma in Ladder non funzioni....

Ho modificato MC_Jog e prima controllo che l'uscita Y4 sia attiva, proprio come hai detto tu. 

Inoltre, il drive è proprio impostato così: in Y0 ho pulse e in Y1 ho signal, per questo ho messo 2 in OutputMethod.

Una domanda: mi hai detto che nella configurazione a treno di impulsi bisogna selezionare uscita impulsi Y0-Y1 e ingresso home X4...io però in X5 ho il segnale di in-position, c'entra niente con l'ingresso home?

image.thumb.png.e4b8fdf1c72947f527b8dd9aee6f7222.png

Modificato: da Eleonora Fontana
Link al commento
Condividi su altri siti

Roberto Gioachin
1 ora fa, Eleonora Fontana ha scritto:

in X5 ho il segnale di in-position, c'entra niente con l'ingresso home?

Con la configurazione vengono assegnate delle funzioni ai soli ingressi e uscite interessati, tutti gli altri ingressi e uscite sono utilizzabili a scelta.

Ti ho suggerito quella configurazione per fare in modo che se devi utilizzare la funzione di homing, hai già l'ingresso configurato dove mettere il sensore, se non utilizzi questa funzione puoi anche configurare solo le due uscite a treno di impulsi senza nessun ingresso dedicato.

 

Vedo ancora nel tuo progetto che su bExecute hai collegato ServoON, prova mettere un altra variabile BOOL da comandare a piacere quando vuoi muovere il motore. Poi come hai comandato l'uscita ServoON? in genere viene impostata dopo che l'ingresso X1 (Ready) è TRUE, e magari con un po' di ritardo.

 

Ancora una cosa, verifica la variabile di sistema "sys_diPulseChannel0ElapsedValue" per vedere se il contatore incrementa o decrementa, questa variabile ti da il conteggio esatto degli impulsi che vengono generati, te la puoi portare suo POU oppure monitorarla semplicemente con uno dei tool a disposizione (Monitoraggio - registri speciali...)

 

 

Link al commento
Condividi su altri siti

Eleonora Fontana

Ok perfetto, sono riuscita ad attivare la funzione di Jog, ma dopo il primo impulso l'azionamento si blocca e segnala l'errore 21.1: 

image.png.37f24d7a0f2fd4d18c7a93e8eee5a8a3.png

Anche qui, ho connesso l'encoder in modo corretto per dargli 5V, i cavi tra encoder e motore sono ben distanziati e lunghi al massimo 1 metro.. Possibile che questo errore derivi da qualche parametro non settato correttamente nell'azionamento?

Link al commento
Condividi su altri siti

Roberto Gioachin

Verifica le fasi dal drive al motore, se invertite hai un errore dell'encoder perché il motore gira in un verso e l'encoder nel verso opposto

 

Link al commento
Condividi su altri siti

Eleonora Fontana

Perfetto, grazie mille davvero! 

Ho risolto, il motore gira e quindi è proprio un bel venerdì 😁

Continuerò ad esercitarmi con la libreria per poter creare qualcosa di più impegnativo. Ultima domanda: mi è stato chiesto di far girare il motore per muovere un puntatore a LED in tre gradi di libertà..esiste un risolutore di cinematica per fare in modo che, date le coordinate in x y e z dove il puntatore deve puntare, esso restituisca al PLC di quanti gradi e come deve comandare il motore per raggiungere quella determinata posizione?

Link al commento
Condividi su altri siti

Roberto Gioachin

Non credo di aver focalizzato bene il problema, non ho capito come fare ad avere tre gradi di libertà con un solo motore, comunque si tratta di calcoli trigonometrici e questo PLC anche se molto economico ha tutte le funzioni per eseguirli, ma un risolutore già fatto non mi risulta.

Se però hai bisogno di interpolare tre assi, allora ti serve un plc di un target superiore al tuo, come FP0H o FP7 con schede di Motion Control.

 

Link al commento
Condividi su altri siti

Eleonora Fontana

Avendo magari tre motori diversi comandati sempre dallo stesso PLC sarebbe possibile? 

Comunque cerco tra le POU della libreria che ho già scaricato, ce ne sono altre che potrebbero servirmi?

Link al commento
Condividi su altri siti

Roberto Gioachin

Si è possibile ma con dei limiti, il tuo PLC è come ti ho detto molto economico, permette di arrivare al massimo ad una interpolazione lineare due assi, per interpolazioni circolari a tre assi devi passare ad un altro modello.

Per capire meglio come si possono fare le interpolazioni lineari con questo PLC ti conviene scaricare il manuale di programmazione a questo LINK , qui trovi il manuale FP Series Programming Manual dove sono spiegate tutte le istruzioni dei vari plc di fascia più bassa, per ogni istruzione dovrai controllare (riquadro in alto a destra) se è disponibile per FP0R.

Qui trovi le istruzioni base con le quali sono poi costruite le librerie, volendo puoi farti delle tue librerie utilizzando appunto queste istruzioni.

A questo proposito guarda la funzione F175(SPSH) che serve appunto per realizzare l'interpolazioni lineare con due motori.

 

Link al commento
Condividi su altri siti

Eleonora Fontana

Va bene, grazie.

Quindi anche con tre motori collegati allo stesso PLC non posso fare interpolazioni circolari giusto?

Per connettere due motori, dato che tra azionamento e PLC ci sono delle semplici linee di I/O, posso usare lo stesso PLC aggiungendo dei moduli di espansione e quindi aggiungere altri azionamenti? 

Link al commento
Condividi su altri siti

Eleonora Fontana
24 minuti fa, Eleonora Fontana ha scritto:

Quindi anche con tre motori collegati allo stesso PLC non posso fare interpolazioni circolari giusto?

Ho visto che nel manuale che mi hai detto di scaricare a pag. 553 c'è l'interpolazione circolare ma non è disponibile per il mio modello. Quindi suppongo che avere un motore, tre o dieci a questo punto non cambia nulla..

Link al commento
Condividi su altri siti

Roberto Gioachin
28 minuti fa, Eleonora Fontana ha scritto:

Quindi suppongo che avere un motore, tre o dieci a questo punto non cambia nulla..

Con due motori fai un interpolazione lineare. Schede aggiuntive non possono aggiungere canali per uscite a treno di impulsi, quelli sono configurati sui registri di sistema, puoi comandare al massimo 4 motori in quanto disponi di 4 canali sulle 8 uscite del PLC, ma il firmware non permette le interpolazioni circolari.

Volendo creare un interpolazione a tre assi, dovresti costruirti la funzione matematica in trigonometria, farla girare a livello di scansione ciclica del plc e passarla alle uscite a treno di impulsi, ma in questo modo potresti realizzare solamente degli assi molto lenti, potrebbe andare bene come esercizio ma non per usi industriali. Il tempo di scansione di questo plc potrebbe arrivare a 20 - 30 ms con programmi complessi.

Link al commento
Condividi su altri siti

Eleonora Fontana
24 minuti fa, Roberto Gioachin ha scritto:

Schede aggiuntive non possono aggiungere canali per uscite a treno di impulsi, quelli sono configurati sui registri di sistema, puoi comandare al massimo 4 motori in quanto disponi di 4 canali sulle 8 uscite del PLC

Le uscite del PLC sono occupate da tutti gli altri segnali dell'azionamento, quindi in teoria non ho canali liberi.

Se avessi dei moduli di espansione potrei collegare tutti gli altri segnali degli azionamenti e liberarmi in questo modo i canali per uscite a treno di impulsi. Potrebbe andare?

Link al commento
Condividi su altri siti

Eleonora Fontana

image.png.bea5b6c24424692bbe302ecca9570fb9.png

Questa è una delle prime prove che ho fatto: moto trapezoidale con questi parametri all'interno della DUT

image.png.d48b4ee4687cac6eefe2014b23dbfbf5.png

Il motore si accende, accelera per cinque secondi raggiungendo la velocità target, appena raggiunge il valore Target (21470) inizia a decelerare fino a fermarsi.

Mi chiedevo, è possibile stoppare il moto dopo un tot di secondi senza aspettare necessariamente che raggiunga la posizione target impostata? nell'H.E.L.P. ho letto questo ma non ho capito troppo bene: "Decelerated stop: To perform a decelerated stop, set bit 5 of the data register storing the pulse output control code from FALSE to TRUE (e.g. MOVE(16#120, sys_wHscOrPulseControlCode);).When a decelerated stop is requested during acceleration, deceleration is performed with the same slope as deceleration from the target speed."

Riesci a darmi delle delucidazioni?

 

Grazie mille per tutto l'aiuto che mi stai fornendo, te ne sono davvero grata.

 

 

Modificato: da Eleonora Fontana
Link al commento
Condividi su altri siti

Roberto Gioachin

Prendiamo il tuo esempio:

 

image.png.0da8dfcee845dc1fbd32ca51d79ab730.png

Il comando Run permette di modificare il bit 5 della Word di sistema. Con il bit5 = TRUE il treno di impulsi viene arrestato, naturalmente il programma va elaborato un po' meglio, ma ci penserai tu.

In pratica il bit 5 della word di sistema permette di gestire il treno di impulsi del canale 1, ma tu stai utilizzando il canale 0 quindi dovrai settare il bit 1 della word, ho riportato il bit 5 perché era quello dell'esempio trovato sull' H e l p.

Qui sotto riporto la tabella con il significato di tutti 16 i bit della word di sistema, sono 4 bit per ogni canale, tra parentesi il numero di canale.

 

image.png.855038d844af97dc7facea0df4e6f929.png

 

Guarda bene il ControlCode che hai impostato sul DUT, secondo me non ci va zero.

 

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