Differenze
Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.
Entrambe le parti precedenti la revisione Revisione precedente Prossima revisione | Revisione precedente | ||
strumenti:qmoveplus:j1p20:p1p20f-023:mdo_p1p20f-023 [2021/06/11 15:28] – [8.1.2 Posizionamenti multipli] qem201 | strumenti:qmoveplus:j1p20:p1p20f-023:mdo_p1p20f-023 [2021/06/11 16:53] (versione attuale) – [9.4 Esempio 4: JMPSUB] qem201 | ||
---|---|---|---|
Linea 431: | Linea 431: | ||
</ | </ | ||
\\ | \\ | ||
+ | |||
+ | < | ||
===== - Settaggio delle uscite ===== | ===== - Settaggio delle uscite ===== | ||
Linea 477: | Linea 479: | ||
| {{: | | {{: | ||
| {{: | | {{: | ||
+ | \\ | ||
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%> | |
+ | {{: | ||
+ | </ | ||
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. | ||
+ | \\ | ||
< | < | ||
Linea 502: | 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 | + | |
- | * 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. | + | |
\\ | \\ | ||
\\ | \\ | ||
Linea 538: | Linea 541: | ||
| 19 | GOTO | 2 | altrimenti salta al passo 2 | | | 19 | GOTO | 2 | altrimenti salta al passo 2 | | ||
| 20 | END | | 20 | END | ||
+ | \\ | ||
+ | {{: | ||
+ | \\ | ||
+ | < | ||
+ | |||
+ | ===== - Esempio 2: Registri ===== | ||
+ | |||
+ | Questo esempio esegue sempre dei posizionamenti, | ||
+ | |||
+ | ^ Passo ^ Istruzione ^ Argomenti | ||
+ | | 1 | ASSV | 1, 0 | V1 = 0 | | ||
+ | | 2 | ASSQX | 1, | ||
+ | | 3 | ASSV | 2, 1 | V2 = 1 , salvo su V2 l' | ||
+ | | 4 | ASSQY | 2, | ||
+ | | 5 | ASSV | 3, 2 | V3 = 2 , salvo su V3 l' | ||
+ | | 6 | ASSV | 4, -2000 | V4 = -2000 | | ||
+ | | 7 | ASSV | 5, -1000 | V5 = -1000 | | ||
+ | | 8 | VELXYI | ||
+ | | 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 | ||
+ | | 16 | SOMMAVY | ||
+ | | 17 | WAITIT | ||
+ | | 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. | ||
+ | |||
+ | \\ | ||
+ | < | ||
+ | |||
+ | ===== - Esempio 3: Attesa posizionamenti ===== | ||
+ | |||
+ | In questo esempio viene riproposto il funzionamento delle attese dei posizionamenti. | ||
+ | |||
+ | ^ Passo ^ Istruzione ^ Argomenti | ||
+ | | 1 | VELX% | 20 | Imposta la velocità dell' | ||
+ | | 2 | VELY% | 20 | Imposta la velocità dell' | ||
+ | | 3 | XY | 0.0, 0.0 | Start di X e Y a 0, 0 | | ||
+ | | 4 | NOWAITSXY | ||
+ | | 5 | X | 5000.0 | ||
+ | | 6 | WAITX> | ||
+ | | 7 | Y | 3000.0 | ||
+ | | 8 | WAITY | | Attende che Y sia arrivato a 3000 | | ||
+ | | 9 | Y | -2000.0 | ||
+ | | 10 | WAITY< | ||
+ | | 11 | WAITSX | ||
+ | | 12 | X | -1000 | Start di X a -1000 | | ||
+ | | 13 | WAITSY | ||
+ | | 14 | GOTO | 3 | Salta al passo 3 | | ||
+ | |||
+ | \\ | ||
+ | |||
+ | Da notare che se abbiamo disattivato l' | ||
+ | - Inserire WAITX o WAITY, nell' | ||
+ | - Inserire WAITSX, WAITSY o WAITSXY, nell' | ||
+ | |||
+ | \\ | ||
+ | < | ||
+ | |||
+ | ===== - Esempio 4: JMPSUB ===== | ||
+ | |||
+ | Questo ultimo esempio vuole infine dare una descrizione della istruzione di JMPSUB. | ||
+ | |||
+ | **PROGRAMMA 10** | ||
+ | |||
+ | ^ Passo ^ Istruzione ^ Argomenti | ||
+ | | 1 | VELX% | 50 | Imposta la velocità dell' | ||
+ | | 2 | VELY% | 50 | Imposta la velocità dell' | ||
+ | | 3 | VELXYI | ||
+ | | 4 | WAITSXY | ||
+ | | 5 | JMPSUB | ||
+ | | 6 | GOTO | 4 | Salta al passo 4 | | ||
+ | |||
+ | \\ | ||
+ | |||
+ | **PROGRAMMA 11** | ||
+ | |||
+ | ^ Passo ^ Istruzione ^ Argomenti | ||
+ | | 1 | NOWAITSXY | ||
+ | | 2 | JMPSUB | ||
+ | |||
+ | \\ | ||
+ | |||
+ | **PROGRAMMA 12** | ||
+ | |||
+ | ^ Passo ^ Istruzione ^ Argomenti | ||
+ | | 1 | XYI | 0.0, 0.0 | Start di X e Y a 0, 0 in modo interpolato | | ||
+ | | 2 | X | 1000.0 | ||
+ | | 3 | Y | 1000.0 | ||
+ | | 4 | JMPSUB | ||
+ | |||
+ | \\ | ||
+ | |||
+ | **PROGRAMMA 13** | ||
+ | |||
+ | ^ Passo ^ Istruzione ^ Argomenti | ||
+ | | 1 | X | 5000.0 | ||
+ | | 2 | WAITX> | ||
+ | | 3 | Y | 5000.0 | ||
+ | | 4 | WAITY | ||
+ | |||
+ | \\ | ||
+ | |||
+ | Il programma 10 è quello principale e viene utilizzato per inizializzare le velocità e per l' | ||
+ | \\ \\ 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' | ||
+ | \\ \\ 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. | ||
+ | |||
+ | \\ | ||
< | < | ||