原点返回
此指令根据功能块和指定DUT中的参数执行原点返回。当指定通道的控制标志为FALSE且执行条件为TRUE时,从该通道输出脉冲。
输入
上升沿激活功能块
移动方向:正转 = FALSE,反转 = TRUE
初始速度/目标速度:根据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)
加速/减速时间(FPS、FP-X):
30步幅:30ms~32760ms(以30为步幅指定)
60步幅:60ms~32760ms(以60为步幅指定)
加速/减速时间 (FP0, F168_PulseOutput_Trapezoidal): 30ms~32760ms
加速时间 (F171_PulseOutput_Trapezoidal): 1ms~32760ms
减速时间 (F171_PulseOutput_Trapezoidal): 1ms~32760ms
爬坡速度 (F171_PulseOutput_Trapezoidal): 1至50000(1Hz~50kHz)
输出
如果应用的输入值无效,则为TRUE。功能块停止执行。
这种非内联指令是脉冲输出工具指令的一部分。有关内部使用指令的详细描述,请参阅:
FPS, FP-X: F171_PulseOutput_Home
FP-e, FP0: F168_PulseOutput_Home
使用PulseInfo_IsActive检查所选通道的控制标志是否为FALSE。使用PulseInfo_IsHomeInputTrue检查原点输入是否为TRUE。
避免故障或运算错误:
使用原点输入时,确保将系统寄存器设置为脉冲输出模式。
脉冲捕捉输入、中断输入或高速计数器等其他指令可能无法使用原点输入。
使用数据单元类型(DUT),可以定义由其他数据类型组成的数据单元类型。DUT首先在DUT池中定义,然后像全局变量列表或POU头中的标准数据类型(BOOL、INT等)一样进行处理。
所有用于编程此函数的输入和输出变量已在POU头中声明。 所有编程语言使用相同的POU头。
VAR
PulseOutput_Home: PulseOutput_Home_FB;
bExecute: BOOL:=FALSE;
bReverse: BOOL:=FALSE;
bError: BOOL:=FALSE;
ChannelConfiguration_DUT: PulseOutput_Channel_Configuration_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 := 32 ;
NETWORK_BODY
B(B_CONTACT,,bConfigureDUT,4,1,6,3,);
B(B_F,E_MOVE!,,15,0,21,4,,?DEN?D?AENO?C);
B(B_VARIN,,1,13,2,15,4,);
B(B_F,E_MOVE!,,15,8,21,12,,?DEN?D?AENO?C);
B(B_VARIN,,FALSE,13,10,15,12,);
B(B_VAROUT,,ChannelConfiguration_DUT.bOutput_Pulse_SignReverse,21,10,23,12,);
B(B_F,E_MOVE!,,15,12,21,16,,?DEN?D?AENO?C);
B(B_F,E_MOVE!,,15,4,21,8,,?DEN?D?AENO?C);
B(B_VARIN,,TRUE,13,6,15,8,);
B(B_VAROUT,,ChannelConfiguration_DUT.bOutput_Pulse_SignForward,21,6,23,8,);
B(B_VARIN,,TRUE,13,14,15,16,);
B(B_VAROUT,,ChannelConfiguration_DUT.iChannel,21,2,23,4,);
B(B_F,E_MOVE!,,15,16,21,20,,?DEN?D?AENO?C);
B(B_VARIN,,FALSE,13,18,15,20,);
B(B_VAROUT,,ChannelConfiguration_DUT.bDutyRatio25,21,18,23,20,);
B(B_F,E_MOVE!,,15,20,21,24,,?DEN?D?AENO?C);
B(B_VAROUT,,ChannelConfiguration_DUT.bAccelerationSteps60,21,14,23,16,);
B(B_VAROUT,,ChannelConfiguration_DUT.bFrequencyRange_191Hz_100kHz,21,22,23,24,);
B(B_VARIN,,TRUE,13,22,15,24,);
B(B_F,E_MOVE!,,15,24,21,28,,?DEN?D?AENO?C);
B(B_VARIN,,FALSE,13,26,15,28,);
B(B_VAROUT,,ChannelConfiguration_DUT.Home_bEnableHomeOnlyAfterNearHomeDeceleration,21,26,23,28,);
B(B_F,E_MOVE!,,15,28,21,32,,?DEN?D?AENO?C);
B(B_VAROUT,,ChannelConfiguration_DUT.Home_iDeviationCounterClearSignalOutputTime_in_0p5ms,21,30,23,32,);
B(B_VARIN,,5,13,30,15,32,);
L(10,2,10,6);
L(10,10,10,14);
L(10,6,10,10);
L(10,14,10,18);
L(10,18,10,22);
L(10,22,10,26);
L(6,2,10,2);
L(1,2,4,2);
L(10,26,10,30);
L(10,30,15,30);
L(10,26,15,26);
L(10,22,15,22);
L(10,18,15,18);
L(10,6,15,6);
L(10,14,15,14);
L(10,10,15,10);
L(10,2,15,2);
L(1,0,1,32);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 11 ;
NETWORK_BODY
B(B_FB,PulseOutput_Home_FB!,PulseOutput_Home,15,1,28,11,,?BbExecute?BbReverse?BdiInitialAndFinalSpeed?BdiTargetSpeed?BdiAccelerationTime?BdiDecelerationTime?BdiCreepSpeed?BdutChannelConfiguration?AbError);
B(B_VARIN,,bExecute,13,2,15,4,);
B(B_VARIN,,bReverse,13,3,15,5,);
B(B_VARIN,,1500,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,,500,13,8,15,10,);
B(B_VARIN,,ChannelConfiguration_DUT,13,9,15,11,);
B(B_VAROUT,,bError,28,2,30,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.Home_bEnableHomeOnlyAfterNearHomeDeceleration := FALSE;
ChannelConfiguration_DUT.Home_iDeviationCounterClearSignalOutputTime_in_0p5ms := 5;
ChannelConfiguration_DUT.bExecuteInInterrupt := FALSE;
(* FB *)
PulseOutput_Home(bExecute := bExecute,
bReverse := bReverse,
diInitialAndFinalSpeed := 1500,
diTargetSpeed := 12000,
diAccelerationTime := 300,
diDecelerationTime := 600,
diCreepSpeed := 500,
dutChannelConfiguration := ChannelConfiguration_DUT,
bError => bError);