Interpolazione circolare (centro)
Gli impulsi vengono emessi su due canali contemporaneamente sulla base dei parametri impostati nella DUT associata, in modo che il percorso per il raggiungimento della posizione target formi un arco. Il raggio del cerchio viene calcolato specificando il centro e la posizione finale. Gli impulsi vengono emessi dal canale specificato quando il flag di controllo per tale canale è FALSE e la condizione di esecuzione è TRUE.
Ingresso
Canale uscita ad impulsi: 0, 2
Ingresso/uscita
Indirizzo di partenza dell'area contenente la tabella dati
Utilizzare la seguente DUT predefinita: F176_PulseOutput_Center_DUT
Nella DUT possono essere specificati i seguenti parametri:
Codice di controllo
Velocità composta
Valore target asse X
Valore target asse Y
valore centro asse X
Valore centro asse Y
I seguenti parametri per ogni asse vengono calcolati all'esecuzione dell'istruzione e memorizzati nell'area riservata ai risultati dei calcoli della DUT.
Raggio
Caratteristiche dell’uscita ad impulsi
(1) |
Direzione rotazione: dal canale 0 (asse X) al canale 2 (asse Y) (per un movimento in direzione positiva su entrambi i canali)
|
(2) |
Direzione rotazione: dal canale 2 (asse Y) al canale 0 (asse X) (per un movimento in direzione positiva su entrambi i canali)
|
Fv: |
Velocità composta | O (Xo,Yo): |
Centro |
Fx: |
Velocità asse X | S (Xs,Ys): |
Posizione corrente (inizio) |
Fy: |
Velocità asse Y | P (Xp,Yp) |
Punto di passaggio |
r: |
Raggio | E (Xe,Ye) |
Posizione target (fine) |
Sia il canale 0 l'asse X e il canale 2 l'asse Y.Il modo di controllo è la modalità di controllo assoluto.
La posizione corrente è (q=60°, Xs=5000, Ys=8660). Il centro O (Xo=0, Yo=0) viene utilizzato come punto di riferimento. Gli impulsi vengono emessi dall'asse X (canale 0) e dall'asse Y (canale 2) a una velocità di Fv=2000Hz fino a quando la posizione target (q=-30°, Xe=8660, Ye=-5000) viene raggiunta.
La condizione di esecuzione per questa istruzione deve essere continuamente TRUE. Quando la condizione di esecuzione è FALSE, l'emissione di impulsi si ferma.
Il flag di controllo del contatore veloce (p.es. sys_bIsHscChannel0ControlActive) e il flag di controllo dell’uscita ad impulsi (p.es. sys_bIsPulseChannel0Active) vengono allocati allo stesso numero di flag interno speciale (p.es. R903A). Pertanto, quando viene eseguita un'istruzione contatore veloce o un'istruzione uscita ad impulsi, il flag di controllo del contatore veloce (p.es. sys_bIsHscChannel0ControlActive) e il flag di controllo dell'uscita ad impulsi (p.es. sys_bIsPulseChannel0Active) per il canale utilizzato sono TRUE. Finché questo flag è TRUE non può essere eseguita nessun’altra istruzione contatore veloce o istruzione uscita ad impulsi.
L’esecuzione dell’istruzione di controllo di interpolazione circolare F176_PulseOutput_Center imposta il flag controllo interpolazione circolare (sys_bIsCircularInterpolationActive) su TRUE. Lo stato di questo flag viene mantenuto fino a quando viene raggiunto il valore target (anche se la condizione di esecuzione non è più TRUE). Durante questo lasso di tempo non è possibile eseguire altre istruzioni uscita ad impulsi Per riavviare l'interpolazione circolare, eseguite uno stop uscita impulsi (arresto dell'emissione di impulsi) per impostare il flag controllo interpolazione circolare (sys_bIsCircularInterpolationActive) su FALSE.
Se è stato selezionato "Continua" per la modalità per esecuzione di interpolazioni consecutive, utilizzate un flag speciale (sys_bIsCircularInterpolationOverwritingPossible) per permettere la sovrascrittura del valore target. Il flag è TRUE per una scansione quando viene eseguita l'istruzione di interpolazione circolare.
Il valore target per ciascun asse deve essere compreso nell'intervallo -8388608–8388607. Quando questa istruzione viene utilizzata in combinazione con altre istruzioni uscita ad impulsi, p.es. F171_PulseOutput_Trapezoidal, il valore target in queste istruzioni deve essere compreso nel medesimo intervallo.
L'accuratezza dell'interpolazione circolare può diminuire se il tempo di scan è troppo lungo.
La modifica online durante la modalità RUN non è disponibile per questa istruzione.
Se sia il programma principale sia il programma di interrupt contengono un codice per lo stesso canale, essi non devono poter esser eseguiti contemporaneamente.
Specificando lo stesso valore per la posizione corrente e la posizione target, si otterrà un'operazione a disegno circolare.
Dal momento che non vi sono funzioni di interpolazione per l'Home Return (ritorno alla posizione iniziale), questo deve essere eseguito per ciascun canale.
In caso di utilizzo in applicazioni di precisione, è necessario effettuare test run con la macchina vera e propria.
Nei registri di sistema impostare un contatore veloce assegnato ad un canale di uscita ad impulsi su "Non utilizzato".
Si raccomanda vivamente di incorporare un'opzione di stop uscita impulsi nel proprio programma di posizionamento.
Lo stato del flag di controllo del contatore veloce o del flag di controllo dell'uscita ad impulsi può variare durante lo svolgimento di una scansione. For example, if the number of received bytes is read more than once different statuses may exist within one scan.
(1) |
Condizione di esecuzione X0 |
(2) |
Flag di controllo dell'uscita ad impulsi, canale 0(sys_bIsPulseChannel0Active) |
(3) |
Flag di controllo dell'uscita ad impulsi, canale 2(sys_bIsPulseChannel2Active) |
(4) |
Flag controllo interpolazione circolare (sys_bIsCircularInterpolationActive) |
(5) |
Flag possibile sovrascrittura valore target (sys_bIsCircularInterpolationOverwritingPossible) |
a |
Avvio |
b |
Condizione di esecuzione FALSE |
c |
Valore target raggiunto |
d |
Avvio modalità continua |
e |
1 scansione |
Tutte le variabili di ingresso e uscita utilizzate per programmare questa funzione sono state dichiarate nell'intestazione del POU. La stessa intestazione del POU è utilizzata per tutti i linguaggi di programmazione.
VAR
Trigger: BOOL:=FALSE;
dutCenterData: F176_PulseOutput_Center_DUT:=dwControlCode := 16#01012,
diSpeed := 15000,
diTargetPos_X := 8000000,
diTargetPos_Y := 5000000,
diCenterPos_X := 8300000,
diCenterPos_Y := 5500000;
(*Control code :
Digit 4: 0=Operation connection mode: stop
Digit 3: 1=Rotation direction: CCW (left)
Digit 2: 0=Fixed
Digit 1: 1=Absolute value control
Digit 0: 2=Pulse/direction (Forward FALSE)
*)
@'': @'';
END_VAR
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 7 ;
NETWORK_BODY
B(B_CONTACT,,Trigger,3,2,5,4,);
B(B_VARIN,,dutCenterData,10,4,12,6,);
B(B_VARIN,,0,10,3,12,5,);
B(B_F,F176_PulseOutput_Center!,Instance,12,1,27,6,,?DEN?Hn_iPulseOutputChannel?Ds_dutDataTable?As_dutDataTable?AENO);
L(1,3,3,3);
L(5,3,12,3);
L(1,0,1,7);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF DF(Trigger) then
F176_PulseOutput_Center(n_iPulseOutputChannel := 0,
s_dutDataTable := dutCenterData);
END_IF;