原点返回
此指令根据指定DUT中的参数执行原点返回。当指定通道的控制标志为FALSE且执行条件为TRUE时,脉冲从该通道输出。
输入
包含数据表的区域的开始地址
脉冲输出:0或1
已打开驱动系统后,内部位置值(经过值)和轴的机械位置之间有差异;无法预定此差异。内部值必须与轴的实际位置值同步。这将通过原点返回执行,在此期间位置值注册到已知参考点(原点)。 在执行原点返回指令期间,持续输出脉冲,直到启用原点输入。I/O分配由所用的通道决定。 若要在接近原点位置时减速运动,请指定近原点输入,并将存储脉冲输出控制代码(sys_wHscOrPulseControlCode)的特殊数据寄存器的位4设置为TRUE,然后再次重设回FALSE。 原点返回期间的经过值区域中的值与当前值不同。当返回完成时,经过值变为0。
选择两个不同操作模式之一:
类型1: 无论是否有近原点输入,是否发生减速或是否减速已完成,原点输入均有效。
不带近原点输入:
带近原点输入:
类型2: 仅在减速(由近原点输入开始)已完成后,原点输入才有效。
可以在DUT中指定以下参数:F168_PulseOutput_Home_DUT
控制代码
初始和最终速度
目标速度
加速/减速时间
脉冲停止(固定)
脉冲输出频率根据指定加速/减速时间而变化。
目标和初始速度之差决定斜坡的斜率。
在系统寄存器中将所有分配到脉冲输出通道的高速计数器设置为"未使用"。
当正在以RUN模式编辑程序时,脉冲输出停止,但是在已下载程序变更之后会恢复。
高速计数器控制标志(例如sys_bIsHscChannel0ControlActive)和脉冲输出控制标志(例如sys_bIsPulseChannel0Active)被分配为相同的特殊内部继电器编号(例如R903A)。因此,当执行高速计数器指令或脉冲输出指令时,所用通道的高速计数器控制标志(例如sys_bIsHscChannel0ControlActive)和脉冲输出控制标志(例如sys_bIsPulseChannel0Active)均为TRUE。只要此标志为TRUE,就无法执行其他高速计数器指令或脉冲输出指令。
即使已发生原点输入,执行此指令也会使脉冲输出开始。
如果正在加速时启用近原点输入,将开始减速。
如果主程序和中断程序都包含同一通道的代码,请确保两者不同时执行。
强烈建议将强制停止选项包含到位置控制程序中。
在执行扫描时,高速计数器控制标志或脉冲输出控制标志的状态可能改变。例如,如果多次读取接收到的字节数,则在单次扫描中可能存在不同的状态。
若要以FP0兼容模式运行FP0R,可以将FP0程序下载到FP0R。请注意以下限制:
FP0R支持经过值和目标值的有符号的32-位数据;FP0支持有符号的24-位数据。在FP0兼容模式中,即使数据超过FP0范围,也会继续进行计数和脉冲输出。
无论指令中的设置如何,占空比始终为25%。通过脉冲输出方法"脉冲/方向",在已输出方向信号之后,输出脉冲约300ms;电机驱动器特性同时考虑在内。
FP0R不支持"不计数"设置。相反,当FP0脉冲输出指令设置为"不计数"时,将执行递增计数。
最大脉冲输出频率为10000Hz。
确保脉冲输出指令不使用正同时用作标准输出的输出。
如果PLC类型(C10、C14、C16、C32和T32)精确匹配,FP0只能以FP0兼容模式运行。FP0兼容模式不可用于F32类型FP0R。
通道和脉冲输出编号
通道编号 | 脉冲输出 | 脉冲输出方式 |
0 |
Y0 |
脉冲 |
Y2 |
方向 | |
1 |
Y1 |
脉冲 |
Y3 |
方向 |
所用内存区的系统变量. 括号中的值对FP0 T32有效。
描述 |
系统变量 |
|
---|---|---|
脉冲输出:通道的控制标志 |
0 |
sys_bIsPulseChannel0Active |
1 |
sys_bIsPulseChannel1Active |
|
脉冲输出:通道的经过值 |
0 |
sys_diPulseChannel0ElapsedValue |
1 |
sys_diPulseChannel1ElapsedValue |
|
脉冲输出:通道的目标值 |
0 |
sys_diPulseChannel0TargetValue |
1 |
sys_diPulseChannel1TargetValue |
|
高速计数器或脉冲输出控制代码 |
sys_wHscOrPulseControlCode |
通道编号 | 原点输入 |
0 |
X0 |
1 |
X1 |
所有用于编程此函数的输入和输出变量已在POU头中声明。 所有编程语言使用相同的POU头。
VAR_EXTERNAL
X0_bMotorSwitch: BOOL:=FALSE;
(*at X0*)
END_VAR
VAR
dutHome: F168_PulseOutput_Home_DUT:=wControlCode := 16#102,
iInitialAndFinalSpeed := 0,
iTargetSpeed := 0,
iAccelerationAndDecelerationTime := 0;
iInitialAndFinalSpeed: INT:=3000;
iTargetSpeed: INT:=7000;
iAccelerationTime: INT:=300;
@'': @'';
END_VAR
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 13 ;
NETWORK_BODY
B(B_CONTACT,,X0_bMotorSwitch,4,2,6,4,R);
B(B_F,E_MOVE!,Instance,17,1,23,5,,?DEN?D?AENO?C);
B(B_VAROUT,,dutHome.iAccelerationAndDecelerationTime,23,3,25,5,);
B(B_F,E_MOVE!,Instance,17,5,23,9,,?DEN?D?AENO?C);
B(B_VAROUT,,dutHome.iInitialAndFinalSpeed,23,7,25,9,);
B(B_F,E_MOVE!,Instance,17,9,23,13,,?DEN?D?AENO?C);
B(B_VAROUT,,dutHome.iTargetSpeed,23,11,25,13,);
B(B_VARIN,,iAccelerationTime,15,3,17,5,);
B(B_VARIN,,iInitialAndFinalSpeed,15,7,17,9,);
B(B_VARIN,,iTargetSpeed,15,11,17,13,);
L(1,3,4,3);
L(6,3,17,3);
L(8,3,8,11);
L(8,11,17,11);
L(8,7,17,7);
L(1,0,1,13);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_CONTACT,,X0_bMotorSwitch,4,1,6,3,R);
B(B_F,F168_PulseOutput_Home!,Instance,11,0,24,5,,?DEN?Ds_dutDataTable?Hn_iPulseOutputChannel?AENO);
B(B_VARIN,,dutHome,9,2,11,4,);
B(B_VARIN,,0,9,3,11,5,);
L(1,2,4,2);
L(6,2,11,2);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF DF(X0_bMotorSwitch) then
dutHome.iInitialAndFinalSpeed:=iInitialAndFinalSpeed
dutHome.iTargetSpeed:=iTargetSpeed
dutHome.iAccelerationAndDecelerationTime:=iAccelerationTime
END_IF;
IF DF(X0_bMotorSwitch) then
F168_PulseOutput_Home(s_dutDataTable := dutHome,
n_iPulseOutputChannel :=0);
END_IF;