以目标值进行JOG运行
此指令用于JOG运行。在位置控制触发器输入变为TRUE之后,将输出指定数量的脉冲。在达到目标值且脉冲输出停止之前执行减速。当指定通道的控制标志为FALSE且执行条件为TRUE时,脉冲从该通道输出。当指定通道的控制标志为FALSE且执行条件为TRUE时,从该通道输出脉冲。当达到目标值时,脉冲输出停止。
输入
执行条件可以是:
通过边沿触发器
永久,如果需要改变速度。
F171_PulseOutput_Trapezoidal: 绝对值控制 = TRUE, 相对值控制 = FALSE
F171_PulseOutput_Trapezoidal:初始和最终速度 = 1~50000 (1Hz~50kHz)
目标速度: 根据PulseOutput_Channel_Configuration_DUT中所选的频率范围设置此值:
FPS、FP-X:1~9800(1,5Hz~9,8kHz)
48~100000(48Hz~100kHz)
191~100000(191~100kHz)
F171_PulseOutput_Trapezoidal:1~50000(1Hz~50kHz)
FP0、F168_PulseOutput_Trapezoidal:40~5000(40Hz~5kHz)
加速时间 (F171_PulseOutput_Trapezoidal): 1ms~32760ms(直至最大速度)
减速时间 (F171_PulseOutput_Trapezoidal): 1ms~32760ms(从最大速度开始)
目标值[脉冲]:-2147483648~2147483647
输出
如果应用的输入值无效,则为TRUE。功能块停止执行。
FPS、FP-X的补充错误条件:
TRUE,如果应用通道未在系统寄存器中启动或如果bAbsolute为TRUE
这种非内联指令是脉冲输出工具指令的一部分。有关内部使用指令的详细描述,请参阅:F172_PulseOutput_Jog. 使用PulseInfo_IsActive检查所选通道的控制标志是否为FALSE。
使用数据单元类型(DUT),可以定义由其他数据类型组成的数据单元类型。DUT首先在DUT池中定义,然后像全局变量列表或POU头中的标准数据类型(BOOL、INT等)一样进行处理。
所有用于编程此函数的输入和输出变量已在POU头中声明。 所有编程语言使用相同的POU头。
VAR
PulseOutput_Jog_TargetValue: PulseOutput_Jog_TargetValue_FB;
bExecute: BOOL:=FALSE;
bAbsolute: BOOL:=FALSE;
ChannelConfiguration_DUT: PulseOutput_Channel_Configuration_DUT;
bError: BOOL:=FALSE;
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 := 28 ;
NETWORK_BODY
B(B_CONTACT,,bConfigureDUT,3,1,5,3,);
B(B_F,E_MOVE!,,14,0,20,4,,?DEN?D?AENO?C);
B(B_VARIN,,1,12,2,14,4,);
B(B_F,E_MOVE!,,14,8,20,12,,?DEN?D?AENO?C);
B(B_VARIN,,FALSE,12,10,14,12,);
B(B_VAROUT,,ChannelConfiguration_DUT.bOutput_Pulse_SignReverse,20,10,22,12,);
B(B_F,E_MOVE!,,14,12,20,16,,?DEN?D?AENO?C);
B(B_F,E_MOVE!,,14,4,20,8,,?DEN?D?AENO?C);
B(B_VARIN,,TRUE,12,6,14,8,);
B(B_VAROUT,,ChannelConfiguration_DUT.bOutput_Pulse_SignForward,20,6,22,8,);
B(B_VARIN,,TRUE,12,14,14,16,);
B(B_VAROUT,,ChannelConfiguration_DUT.iChannel,20,2,22,4,);
B(B_F,E_MOVE!,,14,16,20,20,,?DEN?D?AENO?C);
B(B_VARIN,,FALSE,12,18,14,20,);
B(B_VAROUT,,ChannelConfiguration_DUT.bDutyRatio25,20,18,22,20,);
B(B_VAROUT,,ChannelConfiguration_DUT.bAccelerationSteps60,20,14,22,16,);
B(B_VAROUT,,ChannelConfiguration_DUT.bFrequencyRange_191Hz_100kHz,20,22,22,24,);
B(B_VARIN,,TRUE,12,22,14,24,);
B(B_F,E_MOVE!,,14,20,20,24,,?DEN?D?AENO?C);
B(B_F,E_MOVE!,,14,24,20,28,,?DEN?D?AENO?C);
B(B_VARIN,,TRUE,12,26,14,28,);
B(B_VAROUT,,ChannelConfiguration_DUT.Jog_bNoCountingInCWCCWNoTargetValueMatch,20,26,22,28,);
L(5,2,14,2);
L(9,18,14,18);
L(9,14,14,14);
L(9,10,14,10);
L(9,6,14,6);
L(9,2,9,18);
L(9,18,9,22);
L(9,22,14,22);
L(9,22,9,26);
L(9,26,14,26);
L(1,2,3,2);
L(1,0,1,28);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 11 ;
NETWORK_BODY
B(B_FB,PulseOutput_Jog_TargetValue_FB!,PulseOutput_Jog_TargetValue,13,1,29,11,,?BbExecute?BbAbsolute?BdiInitialAndFinalSpeed?BdiTargetSpeed?BdiAccelerationTime?BdiDecelerationTime?BdiTargetValue?BdutChannelConfiguration?AbError);
B(B_VARIN,,bExecute,11,2,13,4,);
B(B_VARIN,,bAbsolute,11,3,13,5,);
B(B_VARIN,,600,11,4,13,6,);
B(B_VARIN,,12000,11,5,13,7,);
B(B_VARIN,,300,11,6,13,8,);
B(B_VARIN,,600,11,7,13,9,);
B(B_VARIN,,50000,11,8,13,10,);
B(B_VARIN,,ChannelConfiguration_DUT,11,9,13,11,);
B(B_VAROUT,,bError,29,2,31,4,);
L(1,0,1,11);
END_NETWORK_BODY
END_NET_WORK
END_BODY
(* Used DUT parameters *)
ChannelConfiguration_DUT.iChannel := 1;
ChannelConfiguration_DUT.bOutput_Pulse_ForwardTrue := TRUE;
ChannelConfiguration_DUT.bOutput_Pulse_ForwardFalse := FALSE;
ChannelConfiguration_DUT.bAccelerationSteps60 := FALSE;
ChannelConfiguration_DUT.bDutyRatio25 := TRUE;
ChannelConfiguration_DUT.bFrequencyRange_191Hz_100kHz := TRUE;
ChannelConfiguration_DUT.Jog_bNoCountingInCWCCWNoTargetValueMatch := FALSE;
ChannelConfiguration_DUT.bExecuteInInterrupt := FALSE;
(* FB *)
PulseOutput_Jog_TargetValue(bExecute := bExecute,
bAbsolute := bAbsolute,
diInitialAndFinalSpeed := 600,
diTargetSpeed := 12000,
diAccelerationTime := 300,
diDecelerationTime := 600,
diTargetValue := 50000,
dutChannelConfiguration := ChannelConfiguration_DUT,
bError => bError);