Questo blocco funzione attiva l'accoppiamento di un asse master e di un asse subordinato con il profilo di una camma elettronica specificato in una tabella camma.
La libreria supporta i seguenti tipi di camma (leggi di movimento) tramite la libreria CommonMotionTypes (vedere ST_MultiCam e ET_CamType nella guida della libreria CommonMotionTypes per informazioni):
Linea retta
Seno semplice
Polinomio generico di quinto grado
Polinomio standard di quinto grado
ST_MultiCam è la stessa struttura dati utilizzata da PacDrive3 e quindi può essere creata con lo stesso editor camma.
AVVERTIMENTO | |
---|---|
Nel caso della modalità di avvio di un asse subordinato assoluto, la commutazione tra due camme con alcune combinazioni di scalatura asse subordinato e master tramite gli ingressi MasterScaling e SlaveScaling può provocare salti nella posizione dell'asse subordinato se non viene impostato un offset appropriato della posizione dell'asse subordinato nel punto di commutazione.
AVVERTIMENTO | |
---|---|
Il blocco funzione fornisce un meccanismo di salita in rampa. Il meccanismo di salita in rampa viene attivato impostando l'ingresso SlaveStartMode su RampIn e configurato tramite gli ingressi VelocityOffsetRampIn, AccelerationOffsetRampIn, DecelerationOffsetRampIn e JerkOffsetRampIn. La direzione di salita in rampa di un asse modulo può essere impostata tramite l'ingresso RampInDirection.
Il blocco funzione consente di implementare le camme interpolate. Sono disponibili quattro tipi di camme interpolate:
Interpolazione lineare
Interpolazione con legge camma Poly5
Interpolazione lineare non equidistante
Interpolazione cubica
La camma viene interpolata da un array di punti camma. Per utilizzare una camma interpolata, creare un array nell'applicazione con almeno 3 punti e fino a 10000 punti.
Interpolazione lineare:
L'array descrive la funzione della camma (Y = f(X)). I valori specificati per l'array sono le coordinate Y dei punti camma. Tali valori Y sono distribuiti uniformemente lungo l'asse X (ossia le coordinate X sono determinate dal blocco funzione). I valori dell'array sono assegnati in ordine crescente ai singoli punti da sinistra a destra, a partire dall'indice array più basso come il valore X più basso.
Interpolazione con legge camma Poly5:
L'array descrive la funzione della camma in termini di posizione del master (X), posizione dell'asse subordinato (Y), velocità al punto camma (V, corrisponde alla pendenza) e accelerazione al punto camma (A, corrisponde alla curvatura). Utilizzare valori crescenti strettamente monotoni per X.
Interpolazione lineare non equidistante:
L'interpolazione lineare non equidistante consente di definire una camma con punti aventi diverse distanze di coordinata X tra due punti consecutivi. Utilizzare valori crescenti strettamente monotoni per X.
Interpolazione cubica:
La modalità di interpolazione cubica consente di definire punti di interpolazione non equidistanti utilizzati per l'interpolazione con spline cubiche. I punti di interpolazione equidistanti possono essere specificati definendo esplicitamente i valori X e Y. Utilizzare valori crescenti strettamente monotonici per X. La spline cubica naturale standard viene utilizzata per un massimo di 100 punti di interpolazione (la curvatura ai punti limite è uguale a zero). Questo algoritmo precalcolato fornisce una curvatura continua. In caso di più di 100 punti di interpolazione, si utilizza l'interpolazione della spline cubica di Hermite (nessuna curvatura continua). I precalcoli non sono richiesti.
Per avviare una camma interpolata, impostare l'ingresso InterpolationPoints all'indirizzo dell'array dove sono memorizzati i punti camma. Se l'ingresso InterpolationPoints non è uguale a zero su un fronte positivo dell'ingresso Execute, il blocco funzione MC_CamIn avvia una camma interpolata parametrizzata tramite l'ingresso InterpolationParameter. I dati forniti tramite l'ingresso CamTableID vengono ignorati. Se l'ingresso InterpolationPoints è uguale a zero su un fronte positivo dell'ingresso Execute, il blocco funzione avvia la camma e ignora i dati forniti tramite l'ingresso InterpolationParameter.
Il tipo di dati MC_Interpolation_Parameter è utilizzato per parametrizzare la camma interpolata. È un alias della struttura ST_Interpolation_Parameter della libreria MotionInterface. Parametrizzazione:
udiNumCamPoints
Numero di voci dell'array contenenti punti camma. Se l'array è maggiore della quantità di punti camma compilati, gli elementi aggiuntivi dell'array vengono ignorati.
lrMinMasterPosition e lrMaxMasterPosition
Per un array per interpolazione lineare, l’intervallo di posizioni del master viene impostato tramite lrMinMasterPosition e lrMaxMasterPosition. Il punto camma nell'indice array inferiore corrisponde a lrMinMasterPosition. Il punto camma nell'indice array impostato tramite udiNumCamPoints corrisponde a lrMaxMasterPosition. Gli altri punti camma sono distribuiti uniformemente tra queste posizioni master. lrMinMasterPosition e lrMaxMasterPosition vengono ignorati per l'interpolazione Poly5 e l'interpolazione cubica.
etInterpolationMode
Questa enumerazione specifica il tipo di interpolazione.
YArrayLinear (la camma è una linea retta tra ciascun punto camma)
XYVAArrayPoly5 (polinomio di quinto grado)
XYArrayLinear (la camma è una linea retta tra ciascun punto camma, il valore X può essere non equidistante)
XYArrayCubic (interpolazione cubica)
AVVERTIMENTO | |
---|---|
Per informazioni sulla parametrizzazione di una camma interpolata tramite ST_InterpolationParameter, consultare la guida della libreria MotionInterface.
L'ingresso MasterStartPosition viene fornito per avviare una camma nella posizione specificata del master. Questo ingresso viene ignorato a meno che il modo buffer non sia impostato su StartAtMasterPosition mediante MC_BufferMode.
Se viene avviato MC_CamIn con il modo buffer StartAtMasterPosition, l'asse subordinato deve eseguire un'altra camma. In caso diverso, MC_CamIn rileva un errore senza interferire con il movimento dell'asse subordinato. Il valore fornito tramite l'ingresso MasterStartPosition deve essere compreso nell'intervallo di MasterAsSeenBySlave definito dalla camma correntemente in esecuzione. In caso diverso, MC_CamIn rileva un errore senza interferire con il movimento dell'asse subordinato.
Se è già presente un altro job nel buffer dietro la camma correntemente in esecuzione quando si avvia MC_CamIn con il modo buffer StartAtMasterPosition (ingresso Execute impostatoTRUE a), il job nel buffer viene impostato su CommandAborted come se il blocco funzione con il modo buffer StartAtMasterPosition avesse interrotto la camma in esecuzione con il modo buffer Aborting.
Se la camma in esecuzione termina l'ultimo segmento (uscita EndOfProfile impostata su TRUE) prima che venga raggiunta la posizione MasterStartPosition di un blocco funzione con il modo buffer StartAtMasterPosition, la camma in esecuzione si comporta come se non fosse avviato alcun altro comando.
Se la posizione MasterStartPosition di un blocco funzione con il modo buffer StartAtMasterPosition viene raggiunta prima che la camma in esecuzione finisca l’ultimo segmento, la camma in esecuzione si comporta come se fosse stata interrotta dal blocco funzione bufferizzato (CommandAborted è impostato su TRUE, EndOfProfile rimane FALSE).
Se un blocco funzione MC_CamIn con il modo buffer StartAtMasterPosition viene attivato durante l'esecuzione di una camma periodica in esecuzione e se la camma in esecuzione raggiunge EndOfProfile prima della posizione MasterStartPosition, la camma in esecuzione "ruota" e imposta la sua uscita EndOfProfile su TRUE per un ciclo.
Nel ciclo successivo della camma periodica in esecuzione, la posizione MasterStartPosition viene raggiunta prima che la camma periodica in esecuzione raggiunga EndOfProfile, ossia quando si avvia la nuova camma con il modo buffer StartAtMasterPosition.
La figura seguente illustra questo comportamento:
Legenda:
MSP = Posizione MasterStartPosition
SAMP = MC_CamIn con modo buffer StartAtMasterPosition attivato
EOP = Posizione a EndOfProfile
Se un blocco funzione MC_CamIn con il modo buffer StartAtMasterPosition viene attivato durante l'esecuzione di una camma in esecuzione singola e se la camma in esecuzione raggiunge EndOfProfile prima della posizione MasterStartPosition, la camma in esecuzione imposta la sua ’uscita EndOfProfile su TRUE e rimane nella posizione come se non fosse attivata alcuna altra camma.
Quando il master "ruota" e viene raggiunta la posizione MasterStartPosition, viene avviato il blocco funzione MC_CamIn con il modo buffer StartAtMasterPosition. CommandAborted è impostato su TRUE, EndOfProfile rimane FALSE.
La figura seguente illustra questo comportamento:
Legenda:
MSP = Posizione MasterStartPosition
SAMP = MC_CamIn con modo buffer StartAtMasterPosition attivato
EOP = Posizione a EndOfProfile
MTA = Il master “ruota”
Ingresso |
Tipo di dati |
Descrizione |
---|---|---|
Master |
Axis_Ref |
Riferimento all'asse per cui deve essere eseguito il blocco funzione. |
Slave |
Axis_Ref |
Riferimento all'asse per cui deve essere eseguito il blocco funzione. |
Execute |
BOOL |
Campo valori: FALSE, TRUE. Valore predefinito: FALSE. Un fronte di salita dell'ingresso Execute avvia il blocco funzione. Il blocco funzione continua a essere eseguito e l'uscita Busy è impostata a TRUE. È possibile riavviare questo blocco funzione durante l'esecuzione. I valori di destinazione vengono sovrascritti dai nuovi valori nel momento in cui si verifica il fronte di salita. |
CamTableID |
MC_CAM_ID |
Identificativo della tabella camma da utilizzare. Il tipo di dati MC_CAM_ID è un alias di ST_MultiCam della libreria CommonMotionTypes. Per informazioni, consultare la guida della libreria CommonMotionTypes. |
BufferMode |
Valore predefinito: Aborting Modo buffer. Valori possibili:
Per una descrizione dei valori, vedere MC_Buffer_Mode. |
|
Periodic |
BOOL |
Campo valori: FALSE, TRUE. Valore predefinito: FALSE. TRUE avvia la modalità periodica per MC_CamIn. Questa modalità ripete continuamente l'esecuzione della camma. FALSE avvia la camma in modalità single-shot. La posizione dell'asse subordinato del fronte più vicino (primo o ultimo punto camma) viene bloccata se è esterna all'intervallo definito, ossia, l'asse subordinato è fermo (ma ancora nello stato SynchronizedMotion) se la camma è al di fuori dell'intervallo definito.
NOTA: Indipendentemente dal fatto che la camma sia avviata in modalità periodica o single-shot, essa segnala EndOfProfile e un job di movimento bufferizzato (se esiste tale job) si attiva quando si raggiunge EndOfProfile (anche se la camma è definita periodica).
|
MasterOffset |
LREAL |
Intervallo valori: -2147483648...2147483647 Valore predefinito: 0 MasterOffset è utilizzato per camme interpolate e camme multiple. Se la camma viene avviata in modalità periodica (ingresso Periodic impostato su TRUE), l'offset viene applicato solo nel primo periodo. L'offset non è supportato con MasterStartMode Relative. Calcolo se MC_CamIn viene eseguito con MasterStartMode Absolute, MasterScaling e MasterOffset:
Un offset del master diverso da zero può essere utilizzato solo con il modo buffer Aborting. Se si utilizza un offset del master diverso da zero, gli assi master e subordinato devono essere disaccoppiati. Questo significa che MC_CamIn non può essere attivo sullo stesso master e sullo stesso asse subordinato quando si cerca di avviare una camma con un offset master. |
SlaveOffset |
LREAL |
Intervallo valori: -2147483648...2147483647 Valore predefinito: 0 Un'analogia meccanica a un offset dell'asse subordinato è una camma saldata con ulteriore spessore costante del livello. SlaveOffset è utilizzato per camme interpolate e camme multiple. Se la camma viene avviata in modalità periodica (ingresso Periodic impostato su TRUE), l'offset viene applicato solo nel primo periodo. L'offset non è supportato con SlaveStartMode Relative. Per un asse modulo, il valore di offset dell'asse subordinato deve essere inferiore al periodo modulo. |
MasterScaling |
LREAL |
Campo valori: un valore LREAL positivo Valore predefinito: 1 Il fattore MasterScaling consente di calcolare la posizione del master vista dall'asse subordinato moltiplicando la posizione del master (in caso di modalità di avvio assoluto) o l'offset della posizione del master (in caso di modalità di avvio relativo). |
SlaveScaling |
LREAL |
Intervallo valori: -2147483648...2147483647 Valore predefinito: 1 Il fattore SlaveScaling viene applicato moltiplicando la posizione dell'asse subordinato ottenuta dalla camma (in caso di modalità di avvio assoluto) o dall'offset della posizione dell'asse subordinato (in caso di modalità di avvio relativo). |
MasterStartMode |
Valore predefinito: Absolute Valori possibili:
Per una descrizione dei valori, vedere MC_Master_Start_Mode. |
|
SlaveStartMode |
Valore predefinito: Relative Valori possibili:
Per una descrizione dei valori, vedere MC_Slave Start_Mode. |
|
RampInDirection |
Direzione della salita in rampa per l'accoppiamento se l'asse subordinato è un asse modulo. La direzione è verso la destinazione assoluta del meccanismo di salita in rampa (dove MC_CamIn viene considerato come InSync) dalla posizione dell'asse subordinato, non il periodo Y del profilo di camma. Se l'asse subordinato non è un asse modulo, i valori di questo ingresso non hanno alcun effetto. Valore predefinito: PositiveDirection Valori possibili:
Per una descrizione dei valori, vedere MC_Direction. |
|
VelocityOffsetRampIn |
LREAL |
Intervallo valori: -2147483648...2147483647 Valore predefinito: 0 Offset velocità per meccanismo di salita in rampa in unità definite dall'utente. |
AccelerationOffsetRampIn |
LREAL |
Campo valori: un valore LREAL positivo Valore predefinito: 0 Offset accelerazione per meccanismo di salita in rampa in unità definite dall'utente. |
DecelerationOffsetRampIn |
LREAL |
Campo valori: un valore LREAL positivo Valore predefinito: 0 Offset decelerazione per meccanismo di salita in rampa in unità definite dall'utente. |
JerkOffsetRampIn |
LREAL |
Intervallo valori: un valore LREAL positivo e zero
Valore predefinito: 0 |
InterpolationPoints |
POINTER TO BYTE |
Indirizzo di memoria di un array con lunghezza da 3 fino a 10.000. Il tipo di array dipende dal valore di etInterpolationMode per l'ingresso InterpolationParameter, ARRAY OF LREAL o ARRAY OF ST_InterpolationPointXYVA. Intervallo di valori: 0 e 3 ... 10000 Valore predefinito: 0
NOTA: Il valore deve essere uguale a quello udiNumCamPoints di ST_InterpolationParameter utilizzato dall'ingresso InterpolationParameter. Per informazioni, consultare la guida della libreria MotionInterface.
|
InterpolationParameter |
MC_Interpolation_Parameter |
Utilizza MC_InterpolationParameter per la parametrizzazione di una camma interpolata. Per informazioni, vedere MC_InterpolationParameter. |
MasterStartPosition |
LREAL |
Intervallo valori: -2147483648...2147483647 Valore predefinito: 0 Posizione del master (visto dall'asse subordinato) di una camma precedente quando diventa attiva una nuova camma. Questo ingresso viene ignorato, a meno che StartAtMasterPosition sia utilizzato per MC_BufferMode. |
Uscita |
Tipo di dati |
Descrizione |
---|---|---|
InSync |
BOOL |
Campo valori: FALSE, TRUE. Valore predefinito: FALSE.
|
Busy |
BOOL |
Campo valori: FALSE, TRUE. Valore predefinito: FALSE.
|
Active |
BOOL |
Campo valori: FALSE, TRUE. Valore predefinito: FALSE.
|
CommandAborted |
BOOL |
Campo valori: FALSE, TRUE. Valore predefinito: FALSE.
|
Error |
BOOL |
Campo valori: FALSE, TRUE. Valore predefinito: FALSE.
|
ErrorID |
Questa enumerazione fornisce informazioni diagnostiche. |
|
EndOfProfile |
BOOL |
Campo valori: FALSE, TRUE. Valore predefinito: FALSE.
|
RampInDuration |
TIME |
Indica il tempo che precede il completamento della procedura di salita in rampa e l'impostazione dell'uscita InSync su TRUE. |
Rispetto alle specifiche di PLCopen Motion Control Part 1, Version 2.0, la libreria non fornisce un blocco funzione separato MC_CamTableSelect. La tabella camma è specificata come un ingresso di MC_CamIn.
La libreria non fornisce un blocco funzione separato MC_CamOut. Un blocco funzione in esecuzione può essere sostituito da un altro blocco funzione.
Questo blocco funzione fornisce alta flessibilità per movimenti assoluti e relativi. Ad esempio, non esiste necessariamente una relazione tra il modulo di un asse master (o subordinato) e il periodo di applicazione di una camma nella direzione X (o Y). Perciò, le correzioni dell'offset possono essere applicate al volo regolando leggermente il periodo applicazione del profilo di camma nella direzione X o Y. Questo non sarebbe possibile con il modulo asse che non può essere modificato mentre l'asse esegue un blocco funzione.
Le funzioni FC_GetCamSlaveMovementFromGivenMasterForInterpolatedCam e FC_GetCamSlaveMovementFromGivenMasterForMultiCam della libreria MotionInterface assistono l'utente nel recupero della posizione dell'asse dopo un'interruzione o un arresto di un movimento risultante da un errore rilevato. Queste funzioni calcolano la velocità, l'accelerazione e la posizione di destinazione di un asse subordinato nel momento dell'esecuzione della funzione se questo asse è accoppiato al movimento di un asse master attraverso una camma. L'asse subordinato non viene spostato o altrimenti influenzato. Queste funzioni possono essere richiamate una sola volta per determinare le condizioni di avvio dell'asse subordinato, in modo che non entri in rampa. Non possono essere utilizzate ciclicamente per leggere continuamente i valori dell'asse subordinato.
Le funzioni FC_GetMasterPositionFromGivenSlavePositionForInterpolatedCam e FC_GetMasterPositionFromGivenSlavePositionForMultiCam della libreria MotionInterface consentono di calcolare la posizione del master da una data posizione dell'asse subordinato.