Tipo: |
Blocco funzione |
Disponibile a partire da: |
V1.1.75.6318 |
Ereditato da: |
- |
Implementa: |
CmpEventMgr.ICmpEventCallback |
Questo blocco funzione consente di implementare movimenti definiti dall'utente che non è possibile eseguire con la funzione disponibile.
Se si desidera definire un algoritmo per un movimento specifico non fornito da alcuno dei blocchi funzione disponibili, è necessario implementare un blocco funzione definito dall'utente. Tale blocco funzione definito dall'utente eredita da FB_CustomJobBase (tramite la parola chiave EXTENDS). È possibile ignorare o chiamare solo i metodi Prepare e Calculate.
Quando si avvia un movimento tramite MC_MoveCustomJob con il blocco funzione definito dall'utente come parametro, il movimento viene attivato nel primo ciclo in tempo reale e il sistema chiama il metodo Prepare del blocco funzione definito dall'utente. In questa chiamata, il sistema fornisce le informazioni sullo stato corrente dell'asse e dell'asse master opzionale. Queste informazioni possono essere utilizzate per inizializzare l'algoritmo definito dall'utente e, ad esempio, attivarlo per l'avvio durante il movimento dell'asse. Non è richiesto eseguire i task in Prepare se non richiesto dall'algoritmo definito dall'utente.
Nello stesso ciclo in cui viene chiamato Prepare, il metodo CalculateMovement viene chiamato dal sistema per la prima volta. In seguito, CalculateMovement viene chiamato in ogni ciclo in tempo reale. In questo metodo, posizione, velocità e accelerazione dell'asse devono essere fornite per questo ciclo. Inoltre, è necessario impostare uno stato del job appropriato:
ET_JobState.Executing finché viene eseguito un movimento discreto
ET_JobState.Steady finché viene eseguito un movimento continuo
ET_JobState.Done al termine del movimento
Nome |
Descrizione |
---|---|
CalculateMovement |
Chiamato dal sistema ogni ciclo in tempo reale per calcolare i valori di movimento dell'asse. |
Prepare |
Chiamato una volta dal sistema per inizializzare l'algoritmo del movimento. |
Nome |
Tipo di dati |
Accesso |
Descrizione |
---|---|---|---|
etAxisState |
ET_AxisState |
Lettura/scrittura |
Lo stato operativo della macchina di stato PLCopen in cui deve essere l'asse mentre è in esecuzione il job personalizzato. Sono consentiti solo DiscreteMotion, ContinuousMotion e SynchronousMotion. |
PROGRAM SR_Main
VAR
fbCustomIncrementPosition : FB_CustomIncrementPosition;
fbCustomJob : PLCO.MC_CustomJob;
fbPower : PLCO.MC_Power;
fbReset : PLCO.MC_Reset;
END_VAR
fbReset(Axis := DRV_Lexium32S.Axis);
fbPower(Axis := DRV_Lexium32S.Axis);
fbCustomJob(Axis := DRV_Lexium32S.Axis,
CustomJob := fbCustomIncrementPosition);
FUNCTION_BLOCK FB_CustomIncrementPosition EXTENDS MOIN.FB_CustomJobBase
VAR
udiPrepared : UDINT;
udiCalculated : UDINT;
lrPosition : LREAL;
uiInc : UINT;
END_VAR
Oltre a calcolare posizione, accelerazione e strappo del movimento, il blocco funzione può impostare lo stato. Se viene impostato su ET_JobState.Steady, viene attivata l'uscita InSteadyState di PLCO.MC_CustomJob, come mostrato nell'esempio seguente:
METHOD CalculateMovement
VAR_IN_OUT
iq_stParameter : MOIN.ST_CustomJobCalculateParameter;
END_VAR
VAR_OUTPUT
q_lrPosition : LREAL;
q_lrVelocity : LREAL;
q_lrAcceleration : LREAL;
q_etJobState : MOIN.ET_JobState;
END_VAR
uiInc := uiInc + 1;
IF uiInc > 4096 THEN
uiInc := 0;
END_IF
udiCalculated := udiCalculated + 1;
IF iq_stParameter.xMasterDefined THEN
lrPosition := iq_stParameter.lrMasterPositon;
ELSE
lrPosition := lrPosition + 1.0;
END_IF
q_etJobState := MOIN.ET_JobState.Steady;
q_lrPosition := lrPosition;
METHOD Prepare
VAR_IN_OUT
iq_stParameter : MOIN.ST_CustomJobPrepareParameter;
END_VAR
lrPosition := iq_stParameter.lrSlavePositionLastCycle;
udiPrepared := udiPrepared + 1;