原点返回
输入
包含数据表的区域的开始地址
脉冲输出通道:
FP-S: 0,2
FP-X R: 0,1
FP-XC14T: 0,1,2
FP-X C30T/C60T: 0,1,2,3
已打开驱动系统后,内部位置值(经过值)和轴的机械位置之间有差异;无法预定此差异。内部值必须与轴的实际位置值同步。这将通过原点返回执行,在此期间位置值注册到已知参考点(原点)。当原点返回已完成时,偏差计数器清零输出可设置为TRUE。若要在接近原点位置时减速运动,请指定近原点输入,并将存储脉冲输出控制代码(sys_wHscOrPulseControlCode)的特殊数据寄存器的位4设置为TRUE,然后再次重设回FALSE。在执行原点返回指令期间,持续输出脉冲,直到启用原点输入。I/O分配由所用的通道决定。原点返回期间的经过值区域中的值与当前值不同。当返回完成时,经过值变为0。
选择两个不同操作模式之一:
类型1:无论是否有近原点输入,是否发生减速或是否减速已完成,原点输入均有效。
不带近原点输入:
带近原点输入:
类型2:仅在减速(由近原点输入开始)已完成后,原点输入才有效。
使用以下预定义DUT:
F171_PulseOutput_Home_DUT
可以在DUT中指定以下参数:
控制代码
初始和最终速度
目标速度
加速/减速时间
偏差计数器清零信号
脉冲输出特性
脉冲输出频率根据指定加速/减速时间而变化。
目标和初始速度之差决定斜坡的斜率。
通用编程信息
即使已发生原点输入,执行此指令也会使脉冲输出开始。
如果正在加速时启用近原点输入,将开始减速。
如果主程序和中断程序都包含同一通道的代码,请确保两者不同时执行。
偏差计数器清零信号被分配到各PLC类型特定的专用输出编号。
当正在以RUN模式编辑程序时,脉冲输出停止,但是在已下载程序变更之后会恢复。
FP-X:当执行脉冲输出指令且正在输出脉冲时,相应通道的脉冲输出控制标志(例如sys_bIsPulseChannel0Active)为TRUE。只要此标志为TRUE,就无法执行其他脉冲输出指令。
FPS:高速计数器控制标志(例如sys_bIsHscChannel0ControlActive)和脉冲输出控制标志(例如sys_bIsPulseChannel0Active)被分配为相同的特殊内部继电器编号(例如R903A)。因此,当执行高速计数器指令或脉冲输出指令时,所用通道的高速计数器控制标志(例如sys_bIsHscChannel0ControlActive)和脉冲输出控制标志(例如sys_bIsPulseChannel0Active)均为TRUE。只要此标志为TRUE,就无法执行其他高速计数器指令或脉冲输出指令。
FPS:在系统寄存器中将所有分配到脉冲输出通道的高速计数器设置为"未使用"。
FP-X:在系统寄存器中设置所需通道的"脉冲输出"。
FPS:执行圆弧插补控制指令F176_PulseOutput_Center将圆弧插补控制标志(sys_bIsCircularInterpolationActive)设置为TRUE。保持此标志的状态,直到达到目标值(即使执行条件不再为TRUE)。在此期间,无法执行其他脉冲输出指令。
强烈建议将强制停止选项包含到位置控制程序中。
在执行扫描时,高速计数器控制标志或脉冲输出控制标志的状态可能改变。例如,如果多次读取接收到的字节数,则在单次扫描中可能存在不同的状态。
通道编号 |
偏差计数器清零输出 |
原点输入 |
0 | Y2 | X2 |
2 | Y5 | X5 |
仅当已安装脉冲I/O插件(AFPX-PLS)时,脉冲输出函数才可用。
通道编号 |
偏差计数器清零输出 |
原点输入 |
0 | ||
(插件安装位置1) | Y102 | X102 |
1 | ||
(插件安装位置2) | ||
(仅限C30/60R) | Y202 | X202 |
通道编号 |
偏差计数器清零输出 |
原点输入 |
0 | Y4或Y8 | X4 |
1 | Y5或Y9 | X5 |
2 | – | X6 |
3(仅限C30/60R) | – | X7 |
在全局变量列表中,定义项目中所有POU都可以访问的变量。
DUTF171_PulseOutput_Home_DUT在FP Library中预定义。
所有用于编程此函数的输入和输出变量已在POU头中声明。 所有编程语言使用相同的POU头。
VAR_EXTERNAL
X0_bMotorSwitch: BOOL:=FALSE;
(*at X0*)
END_VAR
VAR
dutHome: F171_PulseOutput_Home_DUT:=dwControlCode := 16#1125;
(*Control code:
Digit 3: 1= Duty ratio 25%
Digit 2: 1= Frequency range 48Hz-100kHz
Digit 1: 2 =Operation mode type 1
Ditig 0: 5= CCW + deviation counter clear signal*)
diInitialSpeed: DINT:=100;
diTargetSpeed: DINT:=2000;
diAccelerationTime: DINT:=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 := 16 ;
NETWORK_BODY
B(B_CONTACT,,X0_bMotorSwitch,4,1,6,3,R);
B(B_F,E_MOVE!,Instance,17,4,23,8,,?DEN?D?AENO?C);
B(B_F,E_MOVE!,Instance,17,8,23,12,,?DEN?D?AENO?C);
B(B_VAROUT,,dutHome.diTargetSpeed,23,6,25,8,);
B(B_VARIN,,diTargetSpeed,15,6,17,8,);
B(B_VAROUT,,dutHome.diAccelerationDecelerationTime,23,10,25,12,);
B(B_VARIN,,diAccelerationTime,15,10,17,12,);
B(B_F,E_MOVE!,Instance,17,12,23,16,,?DEN?D?AENO?C);
B(B_VAROUT,,dutHome.diDeviationCounterClearSignalOutputTime,23,14,25,16,);
B(B_VARIN,,10,15,14,17,16,);
B(B_F,E_MOVE!,Instance,17,0,23,4,,?DEN?D?AENO?C);
B(B_VAROUT,,dutHome.diInitialAndFinalSpeed,23,2,25,4,);
B(B_VARIN,,diInitialSpeed,15,2,17,4,);
L(7,2,7,6);
L(7,6,7,10);
L(1,2,4,2);
L(6,2,7,2);
L(7,2,17,2);
L(7,6,17,6);
L(7,10,17,10);
L(7,10,7,14);
L(7,14,17,14);
L(1,0,1,16);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 8 ;
NETWORK_BODY
B(B_CONTACT,,X0_bMotorSwitch,6,3,8,5,R);
B(B_VARIN,,dutHome,15,4,17,6,);
B(B_VARIN,,0,15,5,17,7,);
B(B_F,F171_PulseOutput_Home!,Instance,17,2,30,7,,?DEN?Ds_dutDataTable?Hn_iPulseOutputChannel?AENO);
B(B_COMMENT,,Example for home position return,1,1,18,2,);
L(1,4,6,4);
L(8,4,17,4);
L(1,0,1,8);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF DF(X0_bMotorSwitch) then
dutHome.diInitialAndFinalSpeed:=diInitialSpeed;
dutHome.diTargetSpeed:=diTargetSpeed;
dutHome.diAccelerationDecelerationTime:=diAccelerationTime;
dutHome.diDeviationCounterClearSignalOutputTime:=10;
END_IF;
(*Example for home position return*)
IF DF(X0_bMotorSwitch) then
F171_PulseOutput_Home(s_dutDataTable := dutHome,
n_iPulseOutputChannel :=0);
END_IF;