JOG运行和位置控制
在位置控制触发器输入变为TRUE之后,将输出指定数量的脉冲。在达到目标值且脉冲输出停止之前执行减速。当指定通道的控制标志为FALSE且执行条件为TRUE时,脉冲从该通道输出。
输入
包含数据表的区域的开始地址
F171_PulseOutput_Jog_Positioning_Type0_DUT或F171_PulseOutput_Jog_Positioning_Type1_DUT脉冲输出通道:0–3
选择两个不同操作模式之一:
类型0:在指定目标速度范围内可以更改速度。
类型1:当位置控制触发器输入变为TRUE时,可以更改一次目标速度。
脉冲输出特性
脉冲输出频率根据指定加速时间和指定减速时间而变化。
目标速度和初始速度之差决定加速斜坡的斜率。
目标速度和最终速度之差决定减速斜坡的斜率。
在位置控制触发器输入变为TRUE之后,脉冲输出继续,然后当达到目标值时,减速并停止。
可通过以下操作之一停止脉冲输出:
将位置控制触发器变为TRUE(脉冲输出继续,直到已达到目标值且减速已完成):通过将位置控制触发器输入变为TRUE或通过将存储脉冲输出控制代码的数据寄存器的第6位从FALSE设置为TRUE,可以启动位置控制触发器(例如 MOVE(16#140, sys_wHscOrPulseControlCode);
)。
请求减速停止:若要执行减速停止,请将存储脉冲输出控制代码的数据寄存器的第5位从FALSE设置为TRUE(例如MOVE(16#120, sys_wHscOrPulseControlCode);
)。当加速期间请求减速停止时,将以从目标速度减速的相同斜率执行减速。
执行紧急停止:若要执行紧急停止,请将存储脉冲输出控制代码的数据寄存器的第3位从FALSE设置为TRUE(例如,MOVE(16#108, sys_wHscOrPulseControlCode);
)。
停止时,对程序中使用的通道禁用所有脉冲输出功能。
使用以下预定义DUT:F171_PulseOutput_Jog_Positioning_Type0_DUT
可以在DUT中指定以下参数:
控制代码
初始和最终速度
目标速度
加速时间
减速时间
目标值
脉冲输出期间可以更改目标速度。脉冲输出期间更改目标速度
不改变目标速度: |
改变目标速度: |
初始和最终速度
目标速度
目标值
加速时间
减速时间
执行条件
位置控制触发器输入
脉冲输出控制标志
若要更改速度,将执行条件保持为TRUE。
如果目标速度设置为大于50kHz的值,将被修正为50kHz。
如果加速期间经过值超过加速禁止区域开始位置(例如sys_diPulseChannel0AccelerationForbiddenAreaStartingPosition),则无法执行加速。
减速度不可低于修正的最终速度。
如果在中断程序中执行指令,则无法更改目标速度。
使用以下预定义DUT:F171_PulseOutput_Jog_Positioning_Type1_DUT
可以在DUT中指定以下参数:
控制代码
初始和最终速度
目标速度1
加速时间
目标速度2
修改时间
减速时间
目标值
目标速度1<目标速度2: |
目标速度1>目标速度2: |
初始和最终速度
目标速度
目标速度
目标值
加速时间
修改时间
减速时间
执行条件
位置控制触发器输入
在位置控制触发器输入变为TRUE后,脉冲输出频率将更改,使用更改时间对目标速度2加速或减速。无法进一步改变目标速度。如果在加速期间打开,位置控制触发器输出将被忽略。
只要使用此指令开始在线编辑程序(例如在RUN模式中),脉冲输出即停止。
如果主程序和中断程序都包含同一通道的代码,请确保两者不同时执行。
当执行脉冲输出指令且正在输出脉冲时,相应通道的脉冲输出控制标志(例如sys_bIsPulseChannel0Active)为TRUE。只要此标志为TRUE,就无法执行其他脉冲输出指令。
在系统寄存器402中设置位置控制触发器输入(X0、X1、X2、X3)。
对于位置控制触发器输入,仅检测到上升沿(TRUE)。
当已请求减速停止时,无法启动指令。
若要在停止操作后重新启动指令,请将执行条件变为FALSE,然后再次变为TRUE。
强烈建议将强制停止选项包含到位置控制程序中。
在执行扫描时,高速计数器控制标志或脉冲输出控制标志的状态可能改变。例如,如果多次读取接收到的字节数,则在单次扫描中可能存在不同的状态。
所有用于编程此函数的输入和输出变量已在POU头中声明。 所有编程语言使用相同的POU头。
VAR
Start: BOOL:=FALSE;
dutJog: F171_PulseOutput_Jog_Positioning_Type0_DUT:=dwControlCode := 16#010,
diInitialAndFinalSpeed := 1000,
diTargetSpeed := 7000,
diAccelerationTime := 300,
diDecelerationTime := 450,
diTargetValue := 10000;
(*Digit3: 0=Pulse output
Digit2: 1=Fixed
Digit0: 0=CW/CCW2*)
diInitialAndFinalSpeed: DINT:=1000;
@'': @'';
END_VAR
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_F,E_MOVE!,Instance,13,0,19,4,,?DEN?D?AENO?C);
B(B_VARIN,,diInitialAndFinalSpeed,11,2,13,4,);
B(B_VAROUT,,dutJog.diInitialAndFinalSpeed,19,2,21,4,);
B(B_CONTACT,,Start,6,1,8,3,);
L(1,2,6,2);
L(8,2,13,2);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_F,F171_PulseOutput_Jog_Positioning!,Instance,8,0,24,5,,?DEN?Ds_dutDataTable?Hn_iPulseOutputChannel?AENO);
B(B_VARIN,,dutJog,6,2,8,4,);
B(B_VARIN,,0,6,3,8,5,);
B(B_CONTACT,,Start,2,1,4,3,);
L(1,2,2,2);
L(4,2,8,2);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF (Start) then
dutJog.diInitialAndFinalSpeed:=diInitialAndFinalSpeed;
END_IF;
IF (Start) then
F171_PulseOutput_Jog_Positioning(s_dutDataTable := dutJog, 0);
END_IF;