梯形控制
此指令根据指定DUT中的参数自动执行梯形控制。当指定通道的控制标志为FALSE且执行条件为TRUE时,脉冲从该通道输出。
输入
包含数据表的区域的开始地址
脉冲输出:0或1
使用以下预定义DUT:F168_PulseOutput_Trapezoidal_DUT
控制代码
初始和最终速度
目标速度
加速/减速时间
目标值
脉冲停止(固定)
脉冲输出频率根据指定加速/减速时间而变化。目标和初始速度之差决定斜坡的斜率。
在系统寄存器中将所有分配到脉冲输出通道的高速计数器设置为"未使用"。
当正在以RUN模式编辑程序时,脉冲输出停止,但是在已下载程序变更之后会恢复。
如果主程序和中断程序都包含同一通道的代码,请确保两者不同时执行。
高速计数器控制标志(例如sys_bIsHscChannel0ControlActive)和脉冲输出控制标志(例如sys_bIsPulseChannel0Active)被分配为相同的特殊内部继电器编号(例如R903A)。因此,当执行高速计数器指令或脉冲输出指令时,所用通道的高速计数器控制标志(例如sys_bIsHscChannel0ControlActive)和脉冲输出控制标志(例如sys_bIsPulseChannel0Active)均为TRUE。只要此标志为TRUE,就无法执行其他高速计数器指令或脉冲输出指令。
如果仅以一个方向旋转,当超过内部经过值的上限值时,脉冲输出停止。作为对策,请在执行此指令之前将经过值复位至0。当以FP0兼容模式使用FP0R时,脉冲输出不停止,因为经过值的数据范围为有符号的32位值。
强烈建议将强制停止选项包含到位置控制程序中。
在执行扫描时,高速计数器控制标志或脉冲输出控制标志的状态可能改变。例如,如果多次读取接收到的字节数,则在单次扫描中可能存在不同的状态。
若要以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 |
如果初始速度< 40
如果初始速度>最大速度
如果初始速度< 40
如果初始速度>最大速度
在全局变量列表中,定义项目中所有POU都可以访问的变量。
DUTF168_PulseOutput_Trapezoidal_DUT在FP Library中预定义。
所有用于编程此函数的输入和输出变量已在POU头中声明。 所有编程语言使用相同的POU头。
VAR
dutTrapez: F168_PulseOutput_Trapezoidal_DUT:=wControlCode := 16#102,
iInitialAndFinalSpeed := 1000,
iTargetSpeed := 7000,
iAccelerationAndDecelerationTime := 300,
diTargetValue := 10000;
END_VAR
VAR_EXTERNAL
X0_bMotorSwitch: BOOL:=FALSE;
(*at X0*)
END_VAR
VAR
@'': @'';
@'': @'';
END_VAR
当X0_bMotorSwitch变为TRUE时,执行此函数。
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
B(B_CONTACT,,X0_bMotorSwitch,4,2,6,4,R);
B(B_VARIN,,dutTrapez,11,3,13,5,);
B(B_VARIN,,0,11,4,13,6,);
B(B_F,F168_PulseOutput_Trapezoidal!,Instance,13,1,28,6,,?DEN?Ds_dutDataTable?Hn_iPulseOutputChannel?AENO);
L(6,3,13,3);
L(1,3,4,3);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF DF(X0_bMotorSwitch) then
F168_PulseOutput_Trapezoidal(s_dutDataTable := dutTrapez,
n_iPulseOutputChannel :=0);
END_IF;