Vai al contenuto
PLC Forum


Interpolazione Lineare


massimo278

Messaggi consigliati

Salve a tutti, espongo il mio problema, vorrei realizzare a puro scopo personale un sistema di interpolazione lineare, nel senso caricare una serie di posizioni da far percorrere alla mia punta.

Non ho dimestichezza con il linguaggio plc, ma dovrei utilizzare il iec 61131-3.

Ho letto vari forum, dispense, ho trovato qualche spezzone di programma, però ho ancora tantissime cose poco chiare.

Avevo intenzione di procedere in questo modo, all'inizio crearmi due vettori in cui su uno vado a inserire tot posizioni X, e sull'altro posizioni Y. Successivamente andarmi a prendere le due coordinate per fare lo studio del profilo velocità e posizione. Raggiunta la prima posizione passare alla seconda e cosi via.

Le mie incertezze sono, come posso andare a prendere le coordinate volute all'interno del vettore?

una volta prese le coordinate giuste e calcolato tempo, spazio, rampa di salita(accelerazione) e discesa (decellerazione) come faccio a dare il comando alla mia "punta" di partire e seguire il profilo voluto.

Quello che voglio fare io è tutto puramente teorico, mi basta fare la sola simulazione al pc.

qualcuno mi può aiutare? ci sono gia programmi parzialmente pronti su cui posso studiare e modificare eventualmente secondo le mie esigenze?

Vi ringrazio amici!!

Link al commento
Condividi su altri siti


Bisogna avere, anche se si parla di sola simulazione, idee relative all'hardware. (Il mondo non è solo un programma software).

Poi, in merito alle tue domande: hai provato a scrivere un programma ed hai delle domande in merito? O non sai da che parte iniziare e chiedi che ti scrivano il programma?

Un simile posizionatore non è nulla di complesso, ma il programma che ne può venire fuori è relazionato a tutto l'hardware scelto.

Racconta meglio il tuo progetto: sei nella sezione Siemens, quindi che CPU hai scelto? che azionamenti? che motori? che tipo di interfaccia CPU/Azionamenti?

Oppure sei andato a caso, e magari hai in mente un sistema basato su CoDeSys, tipo Elau, Rexroth, ecc. ????

Link al commento
Condividi su altri siti

Cerco di rispondere alle tue domande in modo più chiaro possibile e pubblico poi la parte di programma che ho iniziato a scrivere, chissà che mi arrivino consigli utili (sicuramente arriveranno)

Si è una simulazione che sto svolgendo con il compilatore OpenPCS, non ho alcun dato relativo all'hardware, il mio compito è quello di scrivere il programma che permetta a un puntatore (robot) di raggiungere dei punti prestabiliti mediante interpolazione lineare. Parte con un comando esterno "start" e arrivato al primo punto si ferma. Da segnale esterno premo "stop" e successivamente di nuovo "start" per far raggiungere la seconda posizione. C'è un controllore che deve verificare la pozione corretta di arresto.

Ripeto non ho dati di motore utilizzato, encoder, caratteristiche tecniche, niente.

Devo dire la verità mi trovo in leggera difficoltà anche se di per se il compito non sembra poi cosi complesso.

Nel programma pubblicato qui di seguito (ancora parziale e non terminato) ho fatto uno studio del profilo di velocità considerando il caso di profilo completamente sviluppato cioè rampa di salita (accelerazione) percorso a velocità costante e rampa di discesa. Nel caso mi trovo in condizione di non raggiungere il percorso a v cost per semplicità ho imposto fermo macchina.

VAR_EXTERNAL

END_VAR

VAR_INPUT

start_robot : bool r_edge;

stop_robot : bool r_edge;

x_i : real; (*posizione iniziale*)

y_i : real;

END_VAR

VAR_OUTPUT

x_f :real; (*posizione finale*)

y_f :real;

posizione_x_y :array [1..2] OF INT; (*memorizzo la posizione di arrivo*)

distanza_punto : real;

v_inst: real; (*velocità all'istante misurata*)

t_a: real; (*tempo per compiere la rampa completa accelerazione *)

x_ad: real; (*percorso minimo per garantire rampa di accelerazione e decelerazione completa*)

dist_vmax : real; (*distanza percorsa a velocità massima*)

t_vmax: real; (*tempo per percorrere il tratto a velocità massima*)

t_tot: real; (*tempo totale*)

END_VAR

VAR

memoria_posizione_x :array [1..10]OF SINT:=[5,12,22,34,53,66,75,50,59,3];

memoria_posizione_y :array [1..10]OF SINT:=[1,7,15,30,40,53,70,40,65,20];

accelerazione_a:real:=0.1;

v0:real:=0.0;

vmax:real:=0.2;

END_VAR

t_a:=(vmax/accelerazione_a);

x_ad:=(vmax*t_a-0.5*accelerazione_a*t_a*t_a)*2;

(*inizializzazione*)

x_i:=0.0;

y_i:=0.0;

for i:=1 TO 10 BY 1 DO

x_f:=memoria_posizione_x;

y_f:=memoria_posizione_y;

posizione_x_y[1]:=x_f;

posizione_x_y[2]:=y_f;

distanza_punto:=SQRT((x_f-x_i)*(x_F-x_i) + (y_f-y_i)*(y_F-y_i));

if distanza_punto>=x_ad then

dist_vmax:=distanza_punto-x_ad;

t_vmax:=dist_vmax*vmax;

t_tot:=t_vmax+t_a+t_a;

star_robot:=1;

end_if;

if distanza_punto<x_ad then

stop_robot:=1; (*macchina ferma*)

end_if;

x_i:=x_f;

y_i:=y_f;

ok, mancano tante cose, forse quello che ho fatto fin ora sarà tutto o in parte sbagliato, ma l'importante provarci.

Il mio problema è come far partire il robot? che comando si utilizza? e come faccio a verificare che sta percorrendo la traiettoria corretta? cosi faccio a dirgli "ora muoviti e vai a quel punto"?

capito questo forse poi credo di riuscire ad arrangiarmi.

Vi ringrazio

Modificato: da massimo278
Link al commento
Condividi su altri siti

se non sbaglio dovrei tirare in ballo il tempo di campionamento cosi da valutare dopo quanti N campionamenti il plc deve far passare il robot all'azione di decellerazione e successiva fermata. Che tempo si può prendere? e come inserirlo nel programma?

Link al commento
Condividi su altri siti

Le domande che tu banalizzi, sono invece più articolate. Se poi si tratta di un compito, invece che una applicazione, tutto e opinabile.

Sarebbe il caso di vedere il testo del compito, perché, ad esempio, devi curare tu le rampe di accelerazine e decelerazione? Tipicamente sono già gli azionamenti dei servomotori a curarsene, che, essendo liberi da altri compiti, eseguiranno una rampa corretta rispetto, sopratutto, alla posizione da raggiungere. (Stai appunto parlando di un posizionatore).

Quello che stai tentando di scrivere non è banale: io fossi in te, cercherei una ditta di automazione nei dintorni ed andrei a vedere come si muove un robot od un portale. Già, perché, che tipo di robot devi fare? Un antropomorfo? Un più banale portale? Un pick and place?

Anche il concetto di start e stop è relativo, ma se è tutto in simulazione, appunto come dicevo è anche tutto opinabile.

In ogni caso fai sempre piccole funzioni, semplici, da testare facilmente e poi, certo che funzionano, da richiamare nel codice principale. (Così non ci pensi più).

Comunque io non ho esperienza in fatto di simulazioni. Sono talmente lontane dalla realtà...

Link al commento
Condividi su altri siti

ciao, è un compito che mi è stato dato per un esame di controlli. Non ho altri dati, infatti ho preso valori di accelerazione e velocità arbitrari ma che avessero una certa logica (almeno lo spero).

Il compito sarebbe di far muovere un robottino all'interno di una stanza facendogli fare il percorso impostato nei punti (nel vettore).(anche quelli arbitrari)

E' tutto arbitrario però vanno presi con una certa logica.

Entro un mese devo presentare l'elaborato finito. Spero di riuscirci altrimenti sono guai.

Comunque prendo il tuo consiglio e cerco di fare più sottofunzioni richiamandole di volta in volta.

Per comandare il movimento come si può procedere?

Link al commento
Condividi su altri siti

1 - Dato che non c'è un uso specifico di Siemens ho spostato la discussione nella sezione più appropriata.

2 - Come ti ha scritto MUBETA non è possibile affrontare il problema con queste banalizzazioni. BIsogna fissare dei punti fermi ben precisi.

Tempi di risposta degli assi, precisione, tempi di accelerazione non sono dati da cui si può prescidere. Il tempo massimo di campionamento è funzione di questi parametri

Domanda banale. Hai già affrontato lo studio di regolatori quantizzati o discreti? Perchè se non hai le conoscenze di base diventa un esercizio di grande difficoltà ed anche inutile.

Link al commento
Condividi su altri siti

Buona sera Orsini, se per regolatori quantizzati o discreti intendi i regolatori pi pd pid sisi ho già affrontato questo argomento. Infatti sicuramente serve una implementazione di un regolatore, pensavo PID anche se credo per il mio scopo basti un PD, il risultato sarà approssimativo.

Sto leggendo proprio ora il capitolo del Motion control su un manuale specifico (la bellezza di 998 pagine).

Guardi, i dati li devo mettere da me, compresa la precisione , per tempi di risposta assi non so cosa intenda.

Non credo che il prof esiga la massima perfezione, basta far capire che qualcosa sappiamo fare.

Link al commento
Condividi su altri siti

..anche se credo per il mio scopo basti un PD..

Semmai un PI.

Non credo che il prof esiga la massima perfezione,...

Non è questione di perfezione. E' questione di fare un qualche cosa di attendibile oppure di avere ....una ciofeca.

per tempi di risposta assi non so cosa intenda

Hai, hai. Per uno che studia controlli è una grave lacuna. Cerco di banalizzare con un esempio. Immagina un asse. Dai un gradino di riferimento pari al 10% della velocità max; la velocità reale raggiunge il valore di regime dopo 100 ms.

Link al commento
Condividi su altri siti

si scusami PI, era quello che volevo scrivere..

per i tempi risposta assi, hai ragione sono un asino ahahah, stavo proprio leggendo ora sul manuale, ero sovra pensiero e al momento non avevo collegato il cervello..

Una funzione di trasferimento l'avrei anche fatta però quanti "guai" provar a metterla su plc. Avevo pensato di aggirare l'ostacolo ipotizzando un tempo totale per percorrere tutta distanza dal punto, e conteggiare i tempi di campionamento, giocare con i tempi di decelerazione e accelerazione. Il risultato non sarà ottimo, però insomma ci si dovrebbe arrivare. Più sarà alto il mio campionamento maggiore sarà la precisione.

E' un discorso totalmente sbagliato il mio?

Link al commento
Condividi su altri siti

Un conto è il posizionamento altro è l'intepolazione lineare.

Se devi possizionare un asse generi un profilo di velocità e l'asse effettuerà la missione di posizionamento seguendo più o meno fedelmente il profilo. In questo caso l'unica cosa veramente importante è la precisone di posizione al termine della missione.

Nel caso di interpolazione, invece, significa che l'asse in un dato istante deve trovarsi in una ptrosizione ben precisa ad una velocità ben determinata.

Se vuoi chiarirti un poco le idee, in modo semplice e pratico, leggiti il mio tuttorial sulle regolazioni. Lo trovi nella sezione didattica, sottosezione elettrotecnica.

Link al commento
Condividi su altri siti

  • 2 months later...

Buona domenica ragazzi, ho quasi finito di stilare il programmino per il controllo di posizionamento a singolo asse. (sono passato a singolo asse perche l'interpolazione era abbastanza proibitiva).

Volevo chiedere una ultima informazione, esiste un comando che congeli il risultato di una variabile mantenendola disponibile anche dopo n cicli??

esempio, per un singolo ciclo arrivo a trovare una certa posizione (mettiamo intermedia rispetto a quella che voglio arrivare) per il ciclo successivo vorrei che il plc riparta da quella posizione intermedia calcolata precedentemente e non che riparta dall'inizio.

graziee!! :)

Link al commento
Condividi su altri siti

Al termine dei calcoli salvi il risultato in una word o Dword di memoria. Ad ogni ciclo il PLC dovrà leggere quel valore.

Però dovresti chiarire meglio la funzione di quella variabile, altrimenti rimanendo nel vago si rischiano incomprensioni e/o suggerimenti errati.

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