L'asse slave (inseguitore) viene gestito secondo le fasi seguenti:
•M_POSITIONING: la fase di posizionamento iniziale deve essere richiesta dall'utente impostando gli appositi bit del parametro command della struttura di riferimento. La richiesta di posizionamento deve necessariamente essere invocata a partire da una condizione in cui lo slave è fermo sia in velocità che in accelerazione (controllare che il bit della maschera ax_in_mov2 dell'asse corrispondente sia a 0). Se è stato richiesto il posizionamento alla quota di parcheggio, l'asse slave si porta alla posizione qParkSlave, utilizzando i parametri di cinematica velPositSlave, accPositSlave e jerkPositSlave. Nel caso in cui il movimento della funzione venisse interrotto (per esempio in seguito ad una condizione di emergenza), se il master nel frattempo non si è spostato di tanto, è possibile eseguire il posizionamento alla posizione del ciclo relativa alla quota attuale del master. Per fare questo utilizzare il bit corrispondente del parametro command. Durante la fase di posizionamento alla quota relativa del master è fondamentale che il master sia fermo. L'utente può anche eseguire il posizionamento in modo differente, calcolato tramite una funzione esterna, l'importante è che si preoccupi di portare l'asse slave alla posizione corretta prima di utilizzare la funzione mv_follow2(). Se alla prima esecuzione della funzione (con richiesta di posizionamento) lo slave si trova già nella posizione corretta è possibile lasciare a 0 i parametri di cinematica velPositSlave, accPositSlave e jerkPositSlave
•M_WAITING: l'asse rimane fermo alla quota di parcheggio qParkSlave; vengono eseguiti i calcoli per verificare se è arrivato il momento di partire in inseguimento in funzione della quota attuale del master, della quota qSyncMaster e delle posizioni impostate per le varie fasi dello slave. Se è troppo tardi per partire durante il ciclo attuale, la fase M_WAITING passa a M_WAITING_NEXT_CYCLE
•M_FOLLOWING: l'asse parte in inseguimento eseguendo un movimento calcolato in modo tale da raggiungere la velocità dell'asse master in corrispondenza della quota slave qSyncSlave e della quota master qSyncMaster. Se l'asse slave è lineare viene eseguita una rampa jerkata semplice (in cui lo spazio percorso dal master è doppio rispetto allo spazio percorso dallo slave). Se invece l'asse slave è ciclico il movimento eseguito in questa fase dipende da tutti gli altri parametri che compongono il ciclo; in questo caso la rampa di inseguimento può anche presentare sovra-elongazioni
•M_SYNCHRONIZED: l'asse slave si mantiene agganciato al master, fino a che sia stata raggiunta o superata la quota slave qSyncOut. Durante questa fase la velocità dell'asse slave è data dalla seguente formula: vSlave = velMaster * kSlaveMaster
Al termine della fase sincronizzata il comportamento differisce in funzione di come è stata configurata la struttura stru_follow2:
•Nel caso di slave lineare (slaveCycle = 0) si passa alla fase di decelerazione M_DECEL in cui lo slave rallenta fino a fermarsi percorrendo lo spazio di frenata spaceStopSlave ed eseguendo una rampa jerkata semplice (spazio percorso dal master doppio rispetto allo spazio percorso dallo slave).
Al termine della fase di decelerazione lo slave lineare passa alla fase di ritorno alla posizione di parcheggio M_HOMING nella quale viene eseguito un movimento con profilo di velocità a campana tale da consentire di raggiungere la posizione di parcheggio qParkSlave e mantenerla per la durata spaceWaitInPark prima dell'inizio della successiva fase di inseguimento
•Nel caso di slave ciclico (slaveCycle > 0) con fermata alla quota qParkSlave abilitata durante il ciclo (vedi bit corrispondente del parametro command) si passa direttamente alla fase di M_HOMING nella quale viene eseguito un movimento calcolato in modo tale da consentire di raggiungere la posizione di parcheggio qParkSlave e mantenerla per la durata spaceWaitInPark prima dell'inizio della successiva fase di inseguimento
•Nel caso di slave ciclico (slaveCycle > 0) con fermata alla quota qParkSlave disabilitata durante il ciclo (vedi bit corrispondente del parametro command) si passa direttamente alla fase successiva di inseguimento senza fermarsi alla quota qParkSlave. Il movimento viene calcolato in modo tale da partire in velocità e raggiungere il sincronismo successivo sempre in velocità alle quote qSyncSlave e qSyncMaster. Se lo spazio mancante al master per raggiungere la quota di sincronismo fosse significativamente maggiore dello spazio mancante allo slave, lo slave potrebbe rallentare e fermarsi ad una quota intermedia che potrebbe anche essere diversa dalla quota qParkSlave
Se il ciclo del master non ha durata fissa (vedi il bit corrispondente del parametro command) è necessario impostare ad ogni ciclo il nuovo valore di qSyncMaster per tempo: le fasi utili per impostare la quota di sincronismo qSyncMaster relativa al ciclo successivo sono la fase di inseguimento M_FOLLOWING e la fase sincronizzata M_SYNCHRONIZED relative al ciclo corrente.
Se la quota qSyncMaster viene impostata oltre la fine della fase sincronizzata M_SYNCHRONIZED l'asse slave andrà verso la quota di parcheggio qParkSlave.
Anche in caso di master a ciclo di durata variabile è obbligatorio impostare il parametro masterCycle in modo tale da fissare una durata minima del ciclo master. La durata minima serve per limitare la velocità della fase di recupero e, nel caso in cui la quota qSyncMaster non viene impostata per tempo, per stabilire la velocità della fase di homing.
In caso di slave ciclico con sosta alla quota di parcheggio qParkSlave disabilitata durante il ciclo è possibile recuperare una quota qSyncMaster assegnata oltre il tempo limite abilitando il bit corrispondente del parametro command. In questo caso, appena la nuova quota di sincronismo qSyncMaster viene impostata, verrà eseguito (se possibile) un raccordo al volo tra il movimento verso la quota di parcheggio qParkSlave e il movimento di inseguimento verso il nuovo sincronismo.
Il parametro kSlaveMaster risulta molto utile in quei casi in cui l'unità di misura dell'asse slave è differente da quella dell'asse master (caso tipico un master espresso in mm e uno slave in gradi). Specificando il fattore K esistente fra i due assi è possibile eseguire l'inseguimento come se le grandezze fossero omogenee fra loro. Inoltre, variando leggermente il parametro kSlaveMaster rispetto al suo valore nominale, è possibile eseguire il sincronismo a velocità differenti (ad esempio se l'asse slave è la ganascia che salda e taglia il film di una macchina incartatrice è utile ridurre la velocità dell'asse slave rispetto a quella del master in modo tale da evitare di strappare il film durante la saldatura).
La prima volta che la funzione mv_follow2() viene chiamata, è necessario aver preventivamente caricato nella struttura stru_follow2 una serie di valori opportuni. Inoltre, per avere la certezza di quale sarà la fase iniziale, è opportuno eseguire una richiesta di posizionamento tramite gli appositi bit del parametro command.
Se alcuni parametri che caratterizzano il ciclo non sono coerenti, la funzione restituisce l'esito negativo M_IN_ALARM. In questo caso è possibile testare il parametro errorCode per avere un'indicazione di cosa c'è di sbagliato.
Se vengono impostati i parametri di maxSpe e maxAcc e se non vengono disabilitati i test sui bit relativi del parametro command, ad ogni esecuzione della funzione mv_follow2() viene eseguita una verifica per evitare di superare i limiti impostati. In caso di limiti superati la funzione ritorna l'esito negativo M_IN_ALARM ed esegue una rampa di arresto lineare con accelerazione maxAcc. Anche in questo caso è possibile consultare il parametro errorCode per capire in quale fase la velocità e/o l'accelerazione sono state superate.
|