FB_CustomJobBase - Informazioni generali

Panoramica

Tipo:

Blocco funzione

Disponibile a partire da:

V1.1.75.6318

Ereditato da:

-

Implementa:

CmpEventMgr.ICmpEventCallback

Task

Questo blocco funzione consente di implementare movimenti definiti dall'utente che non è possibile eseguire con la funzione disponibile.

Descrizione

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

Metodi

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.

Proprietà

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.

Esempio

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;