Funzione che porta gli assi (1-:-32) indicati verso il valore di posizione target prefissato con un profilo velocità verso tempo trapezoidale.
NOTA: La differenza con la funzione mva_to_n() consiste nel fatto che può essere chiamata ad asse/i già in movimento e può essere specificata la velocità finale sul target, anche diversa da zero.
|
i32 mva_to_n_v (i32 start, stru_mvgenitp stru [, i32 nDef=1] [, i32 holdFlag=0] [, real fr=1])
|
|
Flag per abilitare la riassunzione dei dati (anche ad assi in movimento).
Il flag viene azzerato quando i dati vengono assunti.
|
|
Struttura di tipo stru_mvgenitp contenente i parametri relativi alla movimentazione.
|
|
Dimensione dell'array di informazione (numero di assi coinvolti). (opzionale, default 1)
|
|
Flag per comandare lo stato di HOLD alla missione. (opzionale, default 0)
|
|
Valore di riduzione delle velocità (0-1). (opzionale, default 1)
Vedi fr.
|
|
Variabile contenente informazioni relative allo stato della funzione (vedi codici di reso).
|
|
-5 [M_ILLEGAL_ARGS]
|
Parametro illegale (acc=0 o numero asse illegale).
|
-6 [M_IN_ALARM]
|
Allarme (ip asse già impostata).
|
6 [M_REACHED]
|
Target raggiunto.
Ciò significa che o la direzione è 0 e l'asse è fermo, oppure la direzione è +1 o -1 e l'asse ha raggiunto uno dei paracarri.
|
14 [M_HOLDED]
|
Movimento arrestato causa flag HOLD.
Viene restituito anche nei casi in cui la velocità desiderata dell’asse viene impostata a 0 oppure il feedrate viene impostato a zero.
|
15 [M_ACCEL]
|
Accelerazione in corso.
|
16 [M_AT_SPEED]
|
Movimentazione a regime.
|
17 [M_DECEL]
|
Decelerazione in corso.
|
|
|
Rule.
|
|
La missione può coinvolgere più assi (max 32).
Essi verranno interpolati linearmente al fine di raggiungere tutti insieme i loro target.
Se il target è distante meno di (pos_thr/10), RTE considera lo spazio nullo. Quindi nel caso l'utente desideri effettuare dei micro avanzamenti (< pos_thr/10) dovrà impostare la variabile pos_thr opportunamente.
|
Esempio di utilizzo:
int fase, restartFlag, esito
stru_mvgenitp m1[2]
motion
if(first_time())
fase = 1
endif
select(fase)
case 1
rr(1000) = 30
rr(1001) = 10
rr(1002) = 10
rr(1003) = 10
rr(1004) = 0
rr(2000) = 100
rr(2001) = 10
rr(2002) = 0
rr(2003) = 10
rr(2004) = 0
restartFlag = true
fase = 2
break
case 2
if(esito = M_REACHED)
fase = 3
endif
break
case 3
rr(1000) = 70
rr(1001) = 10
rr(1002) = 10
rr(1003) = 10
rr(1004) = 0
rr(2000) = 100
rr(2001) = 0
rr(2002) = 0
rr(2003) = 10
rr(2004) = 0
restartFlag = true
fase = 4
break
case 4
if(esito = M_REACHED)
fase = 5
endif
break
case 5
rr(1000) = 100
rr(1001) = 10
rr(1002) = 0
rr(1003) = 10
rr(1004) = 0
rr(2000) = 0
rr(2001) = 10
rr(2002) = 0
rr(2003) = 10
rr(2004) = 0
restartFlag = true
fase = 6
break
case 6
if(esito = M_REACHED)
fase = 7
endif
break
case 7
rr(1000) = 0
rr(1001) = 10
rr(1002) = 0
rr(1003) = 10
rr(1004) = 0
rr(2000) = 0
rr(2001) = 0
rr(2002) = 0
rr(2003) = 10
rr(2004) = 0
restartFlag = true
fase = 8
break
case 8
if(esito = M_REACHED)
fase = 1
endif
break
end_select
m1[0].nAx = 1
m1[0].target = rr(1000)
m1[0].v = rr(1001)
m1[0].vf = rr(1002)
m1[0].acci = rr(1003)
m1[0].accf = rr(1004)
m1[0].accH = max_acc(1)
m1[1].nAx = 2
m1[1].target = rr(2000)
m1[1].v = rr(2001)
m1[1].vf = rr(2002)
m1[1].acci = rr(2003)
m1[1].accf = rr(2004)
m1[1].accH = max_acc(2)
esito = mva_to_n_v(restartFlag, m1[0] , 2, hold, fr)
end_motion
|
Esempio di utilizzo 2:
motion
if(first_time())
fase = 1
endif
if(rise(inp(1)))
fase = 2
m1[0].nAx = 1
m1[0].target = 0
m1[0].v = max_spe(1)
m1[0].vf = 0
m1[0].acci = max_acc(1)
m1[0].accf = 0
m1[0].accH = max_acc(1)
restartFlag = true
endif
if(fase = 1)
iv(1) = ramp(iv(1), 50 + sin(torad(mod(tfb*100, 360))), 10)
else
esito = mva_to_n_v(restartFlag, m1[0], 1, hold, fr)
if(esito = M_REACHED)
fase = 1
endif
endif
end_motion
|
|