strumenti:qmoveplus:j1p20:p1p20f-023:mdo_p1p20f-023

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisione Revisione precedente
Prossima revisione
Revisione precedente
strumenti:qmoveplus:j1p20:p1p20f-023:mdo_p1p20f-023 [2021/06/11 15:07] – [9.1 Esempio 1: Generico] qem201strumenti:qmoveplus:j1p20:p1p20f-023:mdo_p1p20f-023 [2021/06/11 16:53] (versione attuale) – [9.4 Esempio 4: JMPSUB] qem201
Linea 419: Linea 419:
 \\ Nei posizionamenti multipli gli assi partono dalla posizione in cui si trovano e raggiungono la posizione con coordinate specificate come argomento. Tali coordinate possono essere espresse direttamente come valore oppure possono essere contenute in uno dei registri predisposti per ogni asse. \\ Nei posizionamenti multipli gli assi partono dalla posizione in cui si trovano e raggiungono la posizione con coordinate specificate come argomento. Tali coordinate possono essere espresse direttamente come valore oppure possono essere contenute in uno dei registri predisposti per ogni asse.
 \\ I posizionamenti multipli contemporanei vengono realizzati muovendo alla massima velocità l’asse che deve compiere più spazio, mentre l’asse che deve compiere meno spazio si adegua posizionandosi con una velocità inferiore. In tal modo il posizionamento dei due assi si conclude in modo quasi contemporaneo. Si dice “quasi” dato che non si tiene conto della parte di accelerazione e di decelerazione e quindi il posizionamento risultante può non risultare perfettamente rettilineo tra il punto di partenza e il punto di arrivo (vedi figura di esempio). La velocità di posizionamento per default è quella massima. \\ I posizionamenti multipli contemporanei vengono realizzati muovendo alla massima velocità l’asse che deve compiere più spazio, mentre l’asse che deve compiere meno spazio si adegua posizionandosi con una velocità inferiore. In tal modo il posizionamento dei due assi si conclude in modo quasi contemporaneo. Si dice “quasi” dato che non si tiene conto della parte di accelerazione e di decelerazione e quindi il posizionamento risultante può non risultare perfettamente rettilineo tra il punto di partenza e il punto di arrivo (vedi figura di esempio). La velocità di posizionamento per default è quella massima.
- +<WRAP center 30%> 
-\\+{{:strumenti:qmoveplus:j1p20:p1p20f-023:es_pos_1.png?400|}} 
 +</WRAP>
 \\ \\
 +
 I posizionamenti multipli interpolati vengono realizzati calcolando le velocità da assegnare ai due assi in modo che la velocità di posizionamento risultante di un ipotetico utensile vincolato ai due assi sia quella specificata tramite l’istruzione VELXYI. Se non viene specificata la velocità di interpolazione, per default si utilizza la velocità minima tra le due velocità massime degli assi. In questo posizionamento viene tenuto conto anche delle fasi di accelerazione e di decelerazione del posizionamento. I posizionamenti multipli interpolati vengono realizzati calcolando le velocità da assegnare ai due assi in modo che la velocità di posizionamento risultante di un ipotetico utensile vincolato ai due assi sia quella specificata tramite l’istruzione VELXYI. Se non viene specificata la velocità di interpolazione, per default si utilizza la velocità minima tra le due velocità massime degli assi. In questo posizionamento viene tenuto conto anche delle fasi di accelerazione e di decelerazione del posizionamento.
 \\ Queste due fasi vengono modificate in modo che entrambi gli assi concludano la accelerazione (o decelerazione) nello stesso istante. In questo modo la traiettoria tra punto di partenza e punto di arrivo risulta essere rettilinea (vedi figura). \\ Queste due fasi vengono modificate in modo che entrambi gli assi concludano la accelerazione (o decelerazione) nello stesso istante. In questo modo la traiettoria tra punto di partenza e punto di arrivo risulta essere rettilinea (vedi figura).
 +
 +<WRAP center 30%>
 +{{:strumenti:qmoveplus:j1p20:p1p20f-023:es_pos_2.png?400|}}
 +</WRAP>
 +\\
 +
 +<html><pagebreak /></html>
 ===== - Settaggio delle uscite ===== ===== - Settaggio delle uscite =====
  
Linea 470: Linea 479:
 | {{:strumenti:qmoveplus:j1p20:p1p20f-023:button_120x60_lib_ifion_004_.png?70|}} | S |  In, N  | Salta al passo “N” se l'ingresso “In” è un contatto chiuso. | | {{:strumenti:qmoveplus:j1p20:p1p20f-023:button_120x60_lib_ifion_004_.png?70|}} | S |  In, N  | Salta al passo “N” se l'ingresso “In” è un contatto chiuso. |
 | {{:strumenti:qmoveplus:j1p20:p1p20f-023:button_120x60_lib_ifioff_004_.png?70|}} | S |  In, N  | Salta al passo “N” se l'ingresso “In” è un contatto aperto. | | {{:strumenti:qmoveplus:j1p20:p1p20f-023:button_120x60_lib_ifioff_004_.png?70|}} | S |  In, N  | Salta al passo “N” se l'ingresso “In” è un contatto aperto. |
 +\\
 Nelle figure seguenti riportiamo una esemplificazione grafica delle due istruzioni “JMPSUB n” e “JMPPRG n”. Nelle figure seguenti riportiamo una esemplificazione grafica delle due istruzioni “JMPSUB n” e “JMPPRG n”.
- +<WRAP center 30%> 
 +{{:strumenti:qmoveplus:j1p20:p1p20f-023:es_jump.png?400|}} 
 +</WRAP>
 Una sequenza può essere richiamata con JMPSUB da un’altra sequenza ed essa a sua volta può richiamarne un’altra. Questo annidamento non è infinito ma può essere ripetuto per un massimo di 5 volte. Una sequenza può essere richiamata con JMPSUB da un’altra sequenza ed essa a sua volta può richiamarne un’altra. Questo annidamento non è infinito ma può essere ripetuto per un massimo di 5 volte.
 +\\
 <html><pagebreak /></html> <html><pagebreak /></html>
  
Linea 495: Linea 505:
  
 \\ Per assegnare un valore ad un registro si utilizzano le istruzioni: \\ Per assegnare un valore ad un registro si utilizzano le istruzioni:
-  * ASSQX 1, 123.45 : che assegna il valore 123.45 al registro 1 per l’asse X +  * **ASSQX   1,    123.45** : che assegna il valore 123.45 al registro 1 per l’asse X 
-  * ASSQY 1, 123.45 : che assegna il valore 123.45 al registro 1 per l’asse Y+  * **ASSQY   1,    123.45** : che assegna il valore 123.45 al registro 1 per l’asse Y
 \\ Per assegnare un valore ad una variabile locale si utilizza l’istruzione: \\ Per assegnare un valore ad una variabile locale si utilizza l’istruzione:
-  * ASSV 1, 123 : che assegna il valore intero 123 alla prima variabile locale.+  * **ASSV    1,    123** : che assegna il valore intero 123 alla prima variabile locale.
 \\ \\
 \\ \\
Linea 531: Linea 541:
 |  19   | GOTO      | 2           | altrimenti salta al passo 2 | |  19   | GOTO      | 2           | altrimenti salta al passo 2 |
 |  20   | END                   | Fine sequenza | |  20   | END                   | Fine sequenza |
 +\\
  
 +{{:strumenti:qmoveplus:j1p20:p1p20f-023:es_prg_1.png?600|}}
  
 +\\
 +<html><pagebreak /></html>
 +
 +===== - Esempio 2: Registri =====
 +
 +Questo esempio esegue sempre dei posizionamenti, ma utilizzando i registri per gli assi X e Y.
 +
 +^ Passo ^ Istruzione ^ Argomenti     ^ Commenti ^
 +|  1    | ASSV       | 1,          0 | V1 = 0 |
 +|  2    | ASSQX      | 1,     4000.0 | RX[1] = 4000 , registro delle X con indice 1 |
 +|  3    | ASSV       | 2,          1 | V2 = 1 , salvo su V2 l'indice del registro asse X |
 +|  4    | ASSQY      | 2,     2000.0 | RX[2] = 2000 , registro delle Y con indice 2 |
 +|  5    | ASSV       | 3,          2 | V3 = 2 , salvo su V3 l'indice del registro asse Y |
 +|  6    | ASSV       | 4,      -2000 | V4 = -2000 |
 +|  7    | ASSV       | 5,      -1000 | V5 = -1000 |
 +|  8    | VELXYI     | 100000        | Imposta la velocità per movimenti interpolati a 100000 |
 +|  9    | XYI        | 0.0,      0.0 | Start di X e Y a 0, 0 in modo interpolato |
 +|  10   | TON        | 1,       1000 | Attiva uscita 1 dopo un secondo |
 +|  11   | XN         | 2             | Start di X a registro asse X con indice V2 (RX[V2]) |
 +|  12   | YN         | 3             | Start di Y a registro asse Y con indice V3 (RY[V3]) |
 +|  13   | TOFF       | 1,        500 | Disattiva uscita 1 dopo 500 ms |
 +|  14   | SOMMA      | 1,          1 | Incrementa di 1 il valore in V1 |
 +|  15   | SOMMAVX    | 4,          1 | Somma il valore in V4 (-200.0) al registro asse X con indice 1 (RX[1]). \\ Decrementa ogni volta di 200 la quota obiettivo. |
 +|  16   | SOMMAVY    | 5,          2 | Somma il valore in V5 (-100.0) al registro asse Y con indice 2 (RX[2]). \\ Decrementa ogni volta di 100 la quota obiettivo. |
 +|  17   | WAITIT     | 5000          | Attende un tempo di 5 |
 +|  18   | IFEQ       | 1,    5,   20 | Se V1 è uguale a 5 salta al passo 20 |
 +|  19   | GOTO       | 9             | altrimenti salta al passo 9 |
 +|  20   | END        |               | Fine sequenza |
 +\\
 +
 +Il vantaggio di usare i registri, è dato dal fatto che è possibile compilare una serie di quote obiettivo al loro interno e scorrere queste attraverso il semplice incremento di variabili locali, usate in questo caso come indice di registro.
 +
 +\\
 +<html><pagebreak /></html>
 +
 +===== - Esempio 3: Attesa posizionamenti =====
 +
 +In questo esempio viene riproposto il funzionamento delle attese dei posizionamenti.
 +
 +^ Passo ^ Istruzione ^ Argomenti     ^ Commenti ^
 +|  1    | VELX%      | 20            | Imposta la velocità dell'asse X al 20% |
 +|  2    | VELY%      | 20            | Imposta la velocità dell'asse Y al 20% |
 +|  3    | XY         | 0.0,      0.0 | Start di X e Y a 0, 0 |
 +|  4    | NOWAITSXY  |               | Disabilita attesa posizionamenti |
 +|  5    | X          | 5000.0        | Start di X a 5000 |
 +|  6    | WAITX>     | 2000.0        | Attesa quota di X > 2000 |
 +|  7    | Y          | 3000.0        | Start di Y a 3000 |
 +|  8    | WAITY      |               | Attende che Y sia arrivato a 3000 |
 +|  9    | Y          | -2000.0       | Start di Y a -2000 |
 +|  10   | WAITY<     | 1000          | Attesa quota di Y < 1000 |
 +|  11   | WAITSX                   | Abilita attesa posizionamenti per asse X |
 +|  12   | X          | -1000         | Start di X a -1000 |
 +|  13   | WAITSY                   | Abilita attesa posizionamenti per asse Y |
 +|  14   | GOTO       | 3             | Salta al passo 3 |
 +
 +\\
 +
 +Da notare che se abbiamo disattivato l'attesa del posizionamento, e vogliamo che un posizionamento sia invece completato abbiamo 2 modalità per farlo:
 +  - Inserire WAITX o WAITY, nell'istruzione successiva al posizionamento. \\ In questo caso l'attesa viene controllata solo per questa istruzione.
 +  - Inserire WAITSX, WAITSY o WAITSXY, nell'istruzione precedente al posizionamento. \\ Questa modalità invece disattiva l'attesa anche per le istruzioni a seguire.
 +
 +\\
 +<html><pagebreak /></html>
 +
 +===== - Esempio 4: JMPSUB =====
 +
 +Questo ultimo esempio vuole infine dare una descrizione della istruzione di JMPSUB.
 +
 +**PROGRAMMA 10**
 +
 +^ Passo ^ Istruzione ^ Argomenti     ^ Commenti ^
 +|  1    | VELX%      | 50            | Imposta la velocità dell'asse X al 50% |
 +|  2    | VELY%      | 50            | Imposta la velocità dell'asse Y al 50% |
 +|  3    | VELXYI     | 60000         | Imposta la velocità per movimenti interpolati a 60000 |
 +|  4    | WAITSXY    |               | Abilita attesa posizionamenti |
 +|  5    | JMPSUB     | 12            | Salta al programma 12 |
 +|  6    | GOTO       | 4             | Salta al passo 4 |
 +
 +\\
 +
 +**PROGRAMMA 11**
 +
 +^ Passo ^ Istruzione ^ Argomenti     ^ Commenti ^
 +|  1    | NOWAITSXY                | Disabilita attesa posizionamenti |
 +|  2    | JMPSUB      | 13           | Salta al programma 13 |
 +
 +\\
 +
 +**PROGRAMMA 12**
 +
 +^ Passo ^ Istruzione ^ Argomenti     ^ Commenti ^
 +|  1    | XYI         | 0.0,     0.0 | Start di X e Y a 0, 0 in modo interpolato |
 +|  2    | X           | 1000.0       | Start di X a 1000 |
 +|  3    | Y           | 1000.0       | Start di Y a 1000 |
 +|  4    | JMPSUB      | 11           | Salta al programma 11 |
 +
 +\\
 +
 +**PROGRAMMA 13**
 +
 +^ Passo ^ Istruzione ^ Argomenti     ^ Commenti ^
 +|  1    | X           | 5000.0       | Start di X a 5000 |
 +|  2    | WAITX>      | 3000.0       | Attesa quota di X > 3000 |
 +|  3    | Y           | 5000.0       | Start di Y a 5000 |
 +|  4    | WAITY                    | Attende che Y sia arrivato a 5000 |
 +
 +\\
 +
 +Il programma 10 è quello principale e viene utilizzato per inizializzare le velocità e per l'attivazione dell'attesa posizionamenti.
 +\\ \\ Il programma 10 va poi a chiamare il programma 12, il quale esegue una serie di posizionamenti con attesa.
 +\\ \\ Il programma 12 va poi a chiamare il programma 11, il quale disattiva l'attesa posizionamenti.
 +\\ \\ Il programma 11 va poi a chiamare il programma 13, il quale esegue dei posizionamenti senza attesa e attende che Y sia fermo.
 +\\ \\ A questo punto il programma 13 termina e torna sul 11 e poi 12, i quali terminano a loro volta. Si ritorna infine al programma 10 il quale esegue un salto a un passo precedente (di riattivazione attesa posizionamenti) e tutto riparte nuovamente.
 +
 +\\
 <html><pagebreak /></html> <html><pagebreak /></html>
  
  • Ultima modifica: 2021/06/11 15:07