Identificatore di un blocco di istruzioni (eseguite su interrupt ($RULE) a frequenza impostata tramite l'istruzione rule_freq) destinato a descrivere e determinare le regole di comportamento di uno o più assi.
Sintassi |
|
|
---|---|---|
num |
È il numero di identificazione della rule. Deve essere una costante. All'interno del file $RULE l'utente può scrivere infinite rule. Fino a 32 esecutori di rule (rc) possono essere attivi contemporaneamente nella battuta. Per decidere quali rule far eseguire nella prossima battuta, l'utente ha a disposizione l'istruzione group, mentre per decidere l'ordine di esecuzione nella battuta, l'utente ha a disposizione l'istruzione order. order: istruzione usata solo una volta in inizializzazione. group: istruzione largamente utilizzata in quanto le regole attive devono cambiare in funzione dello stato della macchina. |
|
axes (n[,n,n]) |
(alternativa ad axes_m) È l'identificatore usato per dichiarare quali sono gli assi manipolati dalla rule (1-:-32). n sono gli identificatori degli assi. Deve essere dichiarato almeno un asse. |
|
axes_m (mask) |
(alternativa ad axes) Permette di scrivere la maschera degli assi interessati (il valore può essere una espressione). NOTA: Anche questa dichiarazione è opzionale. Nessun controllo viene eseguito né in compilazione né in esecuzione. |
|
ref |
Se omesso, il compilatore provvederà a gestire l'algoritmo di chiusura dell'anello di posizione tramite la seguente formula predefinita "Chiusura anello di posizione proporzionale con feed forward di velocità": epos(n) = p_ip(n, ipp_idx) - cp(n) sref(n) = epos(n) * pro_gai(n) + kff(n) * iv(n) L'utente dovrà semplicemente utilizzare le variabili predefinite pro_gai e kff per tarare gli assi. Se non si desidera avere una componente di feed forward di velocità, è sufficiente impostare a 0 le variabili kff degli assi interessati. Se invece si impone un valore nullo di pro_gai si ottiene un pilotaggio dell'asse in anello aperto. Si tenga presente che con una retroazione di tipo puramente proporzionale l'errore di posizione che si ottiene è direttamente proporzionale alla velocità. La componente di feed forward viene inserita per portare a zero l'errore in velocità. L'utente dovrà settare i valori di ser_thr e ser_gai in modo opportuno per una corretta gestione dell'allarme d'inseguimento (sam). Si ricorda che nella variabile predefinita ser_cthr RTE mette a disposizione la soglia attuale (calcolata battuta per battuta) dell'allarme servo. Usare il tool oscilloscopio da RDE per impostare i valori corretti ser_thr e ser_gai. |
|
end_ref |
Fine del blocco ref. |
|
motion |
Nel campo motion delle rule sono descritte le equazioni che regolano lo stato del sistema governato dai controlli asse Robox e programmato in linguaggio R3. Le equazioni legheranno le variabili di stato del sistema, variabili che potranno essere, in generale, di tipo qualunque, ma, stante la tipologia delle unità di governo Robox, saranno fondamentalmente di tipo cinematico e cioè posizioni, velocità, accelerazioni. Ovvero, in linguaggio R3: •ip (ideal position) cioè la posizione ideale •iv (ideal velocity) cioè la velocità ideale •ia (ideal acceleration) cioè l'accelerazione ideale e anche: •cp (current position) cioè la posizione reale •cv (current velocity) cioè la velocità reale •ca (current acceleration) cioè l'accelerazione reale Dove le grandezze ideali sono le grandezze di riferimento, cioè il valore che, in un dato momento, si vorrebbe avessero posizione, velocità ed accelerazione. Le grandezze reali sono i valori attuali di posizione, velocità ed accelerazione come misurati attraverso gli opportuni trasduttori. La grandezza misurata è di norma la posizione, per cui velocità ed accelerazione reali sono ricavate per derivazione numerica. La velocità sarà la variazione di posizione in un intervallo di campionamento (pari a si); analogamente l'accelerazione sarà la variazione di velocità in un intervallo di campionamento. Si deve focalizzare che la posizione ideale (ip) rappresenta la posizione desiderata per un certo asse in un determinato momento. Non va confusa con la posizione dove si desidera che l'asse vada, obbedendo ad una certa legge di movimento (e impiegando pertanto un certo tempo). Nel campo motion di ciascuna rule è espressa la legge di movimento di uno o più assi. Una e una sola delle variabili ip, iv, ia potrà esservi rappresentata in forma esplicita (cioè comparire in una istruzione di assegnamento a sinistra del segno "="). Non è permesso assegnare valori a più di una delle tre variabili sopra citate. RTE si fa carico di calcolare correttamente le due variabili mancanti, secondo le modalità sotto riportate. Se due o tre variabili, riferite allo stesso asse, vengono assegnate nel campo motion, RTE genera l'allarme 2800 durante l'esecuzione. Se nessuna delle tre variabili è assegnata in forma esplicita, non si ha segnalazione di errore da parte del compilatore, ma in esecuzione vengono a mancare alcuni controlli importanti (allarme servo, allarme crash, allarme speed etc.); viene inoltre a mancare il calcolo automatico delle rimanenti variabili legate agli assi. Leggi relative a più assi sono ammesse nella RULE. È sconsigliabile utilizzare la stessa RULE per descrivere il movimento di assi fra loro indipendenti. In particolare: |
|
|
•SE È ASSEGNATO IP IL COMPORTAMENTO SARÀ IL SEGUENTE: Se la posizione impostata è maggiore/minore dei finecorsa software parametrizzati nelle variabili predefinite max_str(n) e min_str(n) e la variabile predefinita cam è abilitata allora: * Se la quota ideale ip è fuori dai finecorsa software max_str e min_str e ci si vuole allontanare ulteriormente RTE genera l'allarme crash e la IP imposta viene ignorata (viene mantenuta la precedente) * Se la quota ideale ip è sul finecorsa software max_str e min_str e si vuole uscire RTE genera l'allarme crash e la ip imposta viene limitata al paracarro relativo. Finchè la ip sarà fuori dal paracarro non sarà possibile resettare l'allarme. Agendo sulla variabile predefinita ip_write_bounds, cambiandogli il valore di default (0xFFFFFFFF), sarà possibile modificare il comportamento come segue: * Se la quota ideale ip è sul finecorsa software max_str e min_str e si vuole uscire RTE genera l'allarme crash e la ip imposta, anche se fuori dal paracarro viene assunta. Anche se la ip risulta fuori dal paracarro sarà possibile resettare l'allarme. Verrà rigenerato se si cercherà di allontanarsi ulteriormente. Viene quindi calcolata da RTE la velocità. Se essa risulta maggiore della velocità massima parametrizzata nelle variabili predefinite max_spe(n) e l'allarme spam è abilitato, viene emesso l'allarme velocità. Viene calcolata da RTE l'accelerazione. Se essa risulta maggiore della accelerazione massima parametrizzata nella variabile predefinita max_acc(n) e l'allarme acam è abilitato, viene emesso l'allarme accelerazione. L'allarme Servo (inseguimento) viene gestito se abilitato tramite la variabile predefinita sam.
|
|
|
•SE È ASSEGNATO IV IL COMPORTAMENTO SARÀ IL SEGUENTE: Se la velocità impostata è maggiore della velocità massima parametrizzata nelle variabile predefinita max_spe(n): * Viene limitata alla velocità massima stessa (max_spe(n)) se e solo se la variabile predefinita spam è abilitata. * Viene data segnalazione all'utente tramite la variabile predefinita splm se e solo se la variabile predefinita spam è abilitata. Viene calcolata da RTE l'accelerazione. Se essa risulta maggiore della accelerazione massima parametrizzata nella variabile predefinita max_acc(n): * Viene generato allarme accelerazione se e solo se la variabile predefinita acam è abilitata. Viene quindi calcolata da RTE la posizione in base alla formula: ip = ip + iv * si Se la posizione risulta maggiore/minore dei finecorsa software parametrizzati nelle variabili predefinite max_str(n) e min_str(n) e la variabile predefinita cam è abilitata, viene emesso l' allarme crash (lower e upper). L'allarme Servo (inseguimento) viene gestito se abilitato tramite la variabile predefinita sam.
|
|
|
•SE È ASSEGNATO IA IL COMPORTAMENTO SARÀ IL SEGUENTE: Se l'accelerazione è maggiore della accelerazione massima parametrizzata nelle variabili predefinite max_acc(n): * Viene limitata alla accelerazione massima stessa se e solo se la variabile predefinita acam è abilitata. * Viene data segnalazione all'utente tramite la variabile predefinita acclm se e solo se la variabile predefinita acam è abilitata. Viene quindi calcolata da RTE la velocità in base alla formula: iv = iv + ia * si Se la velocità risulta maggiore della velocità massima parametrizzata nelle variabili predefinite max_spe(n) e l'allarme spam è abilitato, viene emesso l'allarme velocità. Viene quindi calcolata da RTE la posizione in base alla formula = ip + iv * si Se la posizione risulta maggiore/minore dei finecorsa software parametrizzati nelle variabili predefinite max_str(n) e min_str(n) e la variabile predefinita cam è abilitata, viene emesso l' allarme crash (lower e upper). L'allarme servo (inseguimento) viene gestito se abilitato tramite la variabile predefinita sam.
|
|
end_motion |
Fine del blocco motion. |
|
aux |
Nei campi aux di ciascuna RULE tipicamente sono espresse tutte quelle condizioni di contorno necessarie per la gestione del processo. L'ordine di scrittura dei blocchi aux, motion è libero e ne determina l'ordine di esecuzione. |
|
end_aux |
Fine del blocco aux. |
|
Validità |
Rule. |
|
Note |
Il blocco ref, se presente, deve essere il primo blocco della rule. Non c'è limite al numero di blocchi aux all'interno di un blocco rule. Non è possibile avere più di un blocco motion, ne più di un blocco ref. La dichiarazione delle formule userà le normali istruzioni del linguaggio R3. |
Esempio di utilizzo:
Esempio di utilizzo:
|