JOG运行
此指令用于JOG运行。在位置控制触发器输入变为TRUE之后,将输出指定数量的脉冲。在达到目标值且脉冲输出停止之前执行减速。当指定通道的控制标志为FALSE且执行条件为TRUE时,脉冲从该通道输出。
输入
包含数据表的区域的开始地址
FP-S, FP-X:
F172_PulseOutput_Jog_Type0_DUT_0
F172_PulseOutput_Jog_Type1_DUT_0
FP0R:
F172_PulseOutput_Jog_Type0_DUT_1
F172_PulseOutput_Jog_Type1_DUT_1
脉冲输出通道:
FP-XH C30 T/P: 0~3
FP-XH C60 T/P: 0~5
FP-S: 0,2
FP-X C30T/C60T: 0,1,2,3
FP-XC14T: 0,1,2
FP-X R: 0,1
FP0R: 0,1,2,3
使用以下预定义DUT:F172_PulseOutput_Jog_Type0_DUT_0 (没有目标值的模式)或F172_PulseOutput_Jog_Type1_DUT_0 (目标值匹配停止模式)
可以在DUT中指定以下参数:脉冲输出特性
可在每次扫描中更改频率和目标值。但是,在指令执行期间,无法更改控制代码。选择两个不同操作模式之一:
没有目标值的模式(类型0):
目标值匹配停止模式(类型1):
当达到目标值时,输出停止。在控制代码中设置此模式,并且在DUT中指定目标值(绝对值)。 (FPSV1.4或更高版本,FP-X)
通用编程信息
只要使用此指令开始在线编辑程序(例如在RUN模式中),脉冲输出即停止。
如果主程序和中断程序都包含同一通道的代码,请确保两者不同时执行。
FP-X: 当执行脉冲输出指令且正在输出脉冲时,相应通道的脉冲输出控制标志(例如sys_bIsPulseChannel0Active)为TRUE。只要此标志为TRUE,就无法执行其他脉冲输出指令。
FPS:高速计数器控制标志(例如sys_bIsHscChannel0ControlActive)和脉冲输出控制标志(例如sys_bIsPulseChannel0Active)被分配为相同的特殊内部继电器编号(例如R903A)。因此,当执行高速计数器指令或脉冲输出指令时,所用通道的高速计数器控制标志(例如sys_bIsHscChannel0ControlActive)和脉冲输出控制标志(例如sys_bIsPulseChannel0Active)均为TRUE。只要此标志为TRUE,就无法执行其他高速计数器指令或脉冲输出指令。
FPS:执行圆弧插补控制指令F176_PulseOutput_Center将圆弧插补控制标志(sys_bIsCircularInterpolationActive)设置为TRUE。保持此标志的状态,直到达到目标值(即使执行条件不再为TRUE)。在此期间,无法执行其他脉冲输出指令。
FPS:在系统寄存器中将所有分配到脉冲输出通道的高速计数器设置为"未使用"。
FP-X:在系统寄存器中设置所需通道的"脉冲输出"。
如果以无效频率值开始执行指令,将出现运算错误。如果在指令执行期间频率更改为无效值,频率输出将被调节为允许范围的最小或最大值。
强烈建议将强制停止选项包含到位置控制程序中。
使用以下预定义DUT:F172_PulseOutput_Jog_Type0_DUT_1(没有目标值的模式)或F172_PulseOutput_Jog_Type1_DUT_1(目标值匹配停止模式)
可以在DUT中指定以下参数:
脉冲输出特性
选择两个不同操作模式之一:
没有目标值的模式(类型0):
只要执行条件为TRUE,即根据DUT中设置的条件输出脉冲。只要执行条件为FALSE,即开始减速停止。
目标值匹配停止模式(类型1):
当达到目标值时,输出停止。在控制代码中设置此模式,并且在DUT中指定目标值(绝对值)。当达到目标值时,将执行减速停止。在指定减速时间内执行减速。
脉冲输出期间更改目标速度
减速度不可低于修正的最终速度。
通用编程信息
只要使用此指令开始在线编辑程序(例如在RUN模式中),脉冲输出即停止。
如果主程序和中断程序都包含同一通道的代码,请确保两者不同时执行。
强烈建议将强制停止选项包含到位置控制程序中。
所有用于编程此函数的输入和输出变量已在POU头中声明。 所有编程语言使用相同的POU头。
VAR_EXTERNAL
bActivateJog: BOOL:=FALSE;
END_VAR
VAR
dutJog: F172_PulseOutput_Jog_Type0_DUT_0:=dwControlCode := 16#1110;
(*Control code:
Digit 3: 1=Duty ratio 25%
Digit 2: 1=Frequency range 48Hz-100kHz
Digit 1: 1=Incremental counting
Digit 0: 0=CW*)
diSpeed: 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 := 4 ;
NETWORK_BODY
B(B_CONTACT,,bActivateJog,4,1,6,3,);
B(B_F,E_MOVE!,Instance,16,0,22,4,,?DEN?D?AENO?C);
B(B_VARIN,,diSpeed,14,2,16,4,);
B(B_VAROUT,,dutJog.diSpeed,22,2,24,4,);
L(1,2,4,2);
L(6,2,16,2);
L(1,0,1,4);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_CONTACT,,bActivateJog,4,1,6,3,);
B(B_VARIN,,dutJog,14,2,16,4,);
B(B_VARIN,,0,14,3,16,5,);
B(B_F,F172_PulseOutput_Jog!,Instance,16,0,29,5,,?DEN?Ds_dutDataTable?Hn_iPulseOutputChannel?AENO);
L(1,2,4,2);
L(6,2,16,2);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
(bActivateJog) then
dutJog.diSpeed:=diSpeed;
END_IF;
IF (bActivateJog) then
F172_PulseOutput_Jog(s_dutDataTable := dutJog, 0);
END_IF;