Interpolazione lineare
Gli impulsi vengono emessi su due canali contemporaneamente sulla base dei parametri impostati nel Function Block e nella DUT associata, in modo che il percorso per il raggiungimento della posizione target formi una linea retta. Gli impulsi vengono emessi dal canale specificato quando il flag di controllo per tale canale è FALSE e la condizione di esecuzione è TRUE.
Ingresso
La condizione di esecuzione può essere:
con trigger sul fronte
permanente, se è necessario un cambio di velocità.
Modalità di controllo assoluto = TRUE, Modalità di controllo relativo = FALSE
Velocità iniziale e finale: Velocità composta = 1–50000 (1Hz–50kHz)
Velocità target: Velocità composta = 1–50000 (1Hz–50kHz)
Tempo di accelerazione/decelerazione (FPS, FP-X): 0ms–32767ms
Tempo di accelerazione (F171_PulseOutput_Trapezoidal): 0ms–32767ms
Tempo di decelerazione (F171_PulseOutput_Trapezoidal): 0ms–32767ms
Valore target asse X [impulsi]-8388608–8388607
Valore target asse Y [impulsi]-8388608–8388607
Uscita
TRUE se un valore di ingresso applicato non è valido. L'esecuzione del Function Block si arresta.
Viene impostato solo se la costante globale MC_PulseOutput_Library_Basic_bCheckInputs è impostata su TRUE.
Velocità iniziale e finale asse X[Hz]
Velocità target asse X[Hz]
Velocità iniziale e finale asse Y[Hz]
Velocità target asse Y[Hz]
Questa istruzione non in linea è parte delle istruzioni TOOL per uscita ad impulsi. Per una descrizione dettagliata delle istruzioni utilizzate internamente, vedere:F175_PulseOutput_Linear
Utilizzate PulseInfo_IsActive per controllare che il flag di controllo per il canale selezionato sia FALSE.
Con un tipo unità dati (DUT) è possibile definire un tipo unità dati composto da altri tipi di dati. Una DUT è definita prima di tutto nel gruppo DUT e poi elaborata come i tipi di dati standard (BOOL, INT, ecc.) nella lista delle variabili globali o nell'intestazione del POU.
Tutte le variabili di ingresso e uscita utilizzate per programmare questa funzione sono state dichiarate nell'intestazione del POU. La stessa intestazione del POU è utilizzata per tutti i linguaggi di programmazione.
VAR
PulseOutput_Linear: PulseOutput_Linear_FB;
bExecute: BOOL:=FALSE;
bAbsolute: BOOL:=FALSE;
ChannelConfiguration_XY_DUT: PulseOutput_Channel_Configuration_DUT;
bError: BOOL:=FALSE;
rInitialAndFinalSpeed_X: REAL:=0;
rTargetSpeed_X: REAL:=0;
rInitialAndFinalSpeed_Y: REAL:=0;
rTargetSpeed_Y: REAL:=0;
AdditionalOutputs_DUT: PulseOutput_Linear_AdditionalOutputs_DUT;
bConfigureDUT: BOOL:=FALSE;
@'': @'';
END_VAR
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 31 ;
NETWORK_BODY
B(B_CONTACT,,bConfigureDUT,6,1,8,3,);
B(B_F,E_MOVE!,,17,0,23,4,,?DEN?D?AENO?C);
B(B_VARIN,,1,15,2,17,4,);
B(B_F,E_MOVE!,,17,8,23,12,,?DEN?D?AENO?C);
B(B_VARIN,,FALSE,15,10,17,12,);
B(B_VAROUT,,ChannelConfiguration_XY_DUT.bOutput_Pulse_ForwardFalse,23,10,25,12,);
B(B_F,E_MOVE!,,17,12,23,16,,?DEN?D?AENO?C);
B(B_F,E_MOVE!,,17,4,23,8,,?DEN?D?AENO?C);
B(B_VARIN,,TRUE,15,6,17,8,);
B(B_VAROUT,,ChannelConfiguration_XY_DUT.bOutput_Pulse_ForwardTrue,23,6,25,8,);
B(B_VARIN,,TRUE,15,14,17,16,);
B(B_VAROUT,,ChannelConfiguration_XY_DUT.iChannel,23,2,25,4,);
B(B_F,E_MOVE!,,17,16,23,20,,?DEN?D?AENO?C);
B(B_VARIN,,FALSE,15,18,17,20,);
B(B_VAROUT,,ChannelConfiguration_XY_DUT.bDutyRatio25,23,18,25,20,);
B(B_VAROUT,,ChannelConfiguration_XY_DUT.bAccelerationSteps60,23,14,25,16,);
B(B_VAROUT,,ChannelConfiguration_XY_DUT.bFrequencyRange_191Hz_100kHz,23,22,25,24,);
B(B_VARIN,,TRUE,15,22,17,24,);
B(B_F,E_MOVE!,,17,20,23,24,,?DEN?D?AENO?C);
B(B_F,E_MOVE!,,17,24,23,28,,?DEN?D?AENO?C);
B(B_VARIN,,TRUE,15,26,17,28,);
B(B_VAROUT,,ChannelConfiguration_XY_DUT.bExecuteInInterrupt,23,26,25,28,);
L(8,2,17,2);
L(12,18,17,18);
L(12,14,17,14);
L(12,10,17,10);
L(12,6,17,6);
L(12,2,12,18);
L(12,18,12,22);
L(12,22,17,22);
L(12,22,12,26);
L(12,26,17,26);
L(1,2,6,2);
L(1,0,1,31);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 12 ;
NETWORK_BODY
B(B_FB,PulseOutput_Linear_FB!,PulseOutput_Linear,15,1,33,12,,?BbExecute?BbAbsolute?BdiInitialAndFinalSpeed?BdiTargetSpeed?BdiAccelerationTime?BdiDecelerationTime?BdiTargetValue_X?BdiTargetValue_Y?BdutChannelConfiguration_X_Y?AbError?ArInitialAndFinalSpeed_X?ArTargetSpeed_X?ArInitialAndFinalSpeed_Y?ArTargetSpeed_Y?AdutAdditionalOutputs);
B(B_VARIN,,bExecute,13,2,15,4,);
B(B_VARIN,,bAbsolute,13,3,15,5,);
B(B_VARIN,,600,13,4,15,6,);
B(B_VARIN,,12000,13,5,15,7,);
B(B_VARIN,,300,13,6,15,8,);
B(B_VARIN,,600,13,7,15,9,);
B(B_VARIN,,1000,13,8,15,10,);
B(B_VARIN,,2000,13,9,15,11,);
B(B_VARIN,,ChannelConfiguration_XY_DUT,13,10,15,12,);
B(B_VAROUT,,bError,33,2,35,4,);
B(B_VAROUT,,rInitialAndFinalSpeed_X,33,3,35,5,);
B(B_VAROUT,,rTargetSpeed_X,33,4,35,6,);
B(B_VAROUT,,rInitialAndFinalSpeed_Y,33,5,35,7,);
B(B_VAROUT,,rTargetSpeed_Y,33,6,35,8,);
B(B_VAROUT,,AdditionalOutputs_DUT,33,7,35,9,);
L(1,0,1,12);
END_NETWORK_BODY
END_NET_WORK
END_BODY
(* Used DUT parameters *)
ChannelConfiguration_XY_DUT.iChannel := 1;
ChannelConfiguration_XY_DUT.bOutput_Pulse_ForwardTrue := TRUE;
ChannelConfiguration_XY_DUT.bOutput_Pulse_ForwardFalse := FALSE;
ChannelConfiguration_XY_DUT.bAccelerationSteps60 := FALSE;
ChannelConfiguration_XY_DUT.bDutyRatio25 := TRUE;
ChannelConfiguration_XY_DUT.bFrequencyRange_191Hz_100kHz := TRUE;
ChannelConfiguration_XY_DUT.bExecuteInInterrupt := FALSE;
(* FB *)
PulseOutput_Linear(bExecute := bExecute,
bAbsolute := bAbsolute,
diInitialAndFinalSpeed := 600,
diTargetSpeed := 12000,
diAccelerationTime := 300,
diDecelerationTime := 600,
diTargetValue_X := 150000,
diTargetValue_Y := 10000,
dutChannelConfiguration_X_Y := ChannelConfiguration_XY_DUT,
bError => bError,
diInitialAndFinalSpeed_X => diInitialAndFinalSpeed_X,
diTargetSpeed_X => diTargetSpeed_X,
diInitialAndFinalSpeed_Y => diInitialAndFinalSpeed_Y,
diTargetSpeed_Y => diTargetSpeed_Y,
dutAdditionalOutputs => AdditionalOutputs_DUT);