1 概述
s7--200提供了三种方式的开环运动控制:
• 脉宽调制(pwm)--内置于s7--200,用于速度、位置或占空比控制。
• 脉冲串输出(pto)--内置于s7--200,用于速度和位置控制。
• em253位控模块--用于速度和位置控制的附加模块。
s7—200的内置脉冲串输出提供了两个数字输出通道(q0.0和q0.1),该数字输出可以通过位控向导组态为pwm或pto的输出。
当组态一个输出为pto操作时,生成一个50%占空比脉冲串用于步进电机或伺服电机的速度和位置的开环控制。内置pto功能仅提供了脉冲串输出。您的应用程序必须通过plc内置i/o或扩展模块提供方向和限位控制。
pto按照给定的脉冲个数和周期输出一串方波(占空比50%),如图1。pto可以产生单段脉冲串或者多段脉冲串(使用脉冲包络)。可以指定脉冲数和周期(以微秒或毫秒为增加量):
• 脉冲个数: 1到4,294,967,295
• 周期: 10μs(100k)到65535μs或者2ms到65535ms。
图1
200系列的plc的大脉冲输出频率除 cpu224xp 以外均为20khz。cpu224xp可达100khz。如表1所示:
表1
2 map库的应用
2.1 map库的基本描述
现在,200系列 plc 本体 pto 提供了应用库map serv q0.0 和 map serv q0.1,分别用于 q0.0 和 q0.1 的脉冲串输出。如图2所示:
注: 这两个库可同时应用于同一项目。
各个块的功能如表2所示:
块
功能
q0_x_ctrl
参数定义和控制
q0_x_moverelative
执行一次相对位移运动
q0_x_moveabsolute
执行一次绝对位移运动
q0_x_movevelocity
按预设的速度运动
q0_x_home
寻找参考点位置
q0_x_stop
停止运动
q0_x_loadpos
重新装载当前位置
scale_eu_pulse
将距离值转化为脉冲数
scale_pulse_eu
将脉冲数转化为距离值
表2
总体描述
该功能块可驱动线性轴。
为了很好的应用该库,需要在运动轨迹上添加三个限位开关,如图3:
• 一个参考点接近开关(home),用于定义绝对位置 c_pos 的零点。
• 两个边界限位开关,一个是正向限位开关(fwd_limit),一个是反向限位开关(rev_limit)。
• 绝对位置 c_pos 的计数值格式为 dint ,所以其计数范围为(-2.147.483.648 to +2.147.483.647).
• 如果一个限位开关被运动物件触碰,则该运动物件会减速停止,因此,限位开关的安置位置应当留出足够的裕量δsmin 以避免物件滑出轨道尽头。
图3
2.2 输入输出点定义
应用map库时,一些输入输出点的功能被预先定义,如表3所示:
名称
map serv q0.0
map serv q0.1
脉冲输出
q0.0
q0.1
方向输出
q0.2
q0.3
参考点输入
i0.0
i0.1
所用的高速计数器
hc0
hc3
高速计数器预置值
smd 42
smd 142
手动速度
smd 172
smd 182
表3
2.3 map库的背景数据块
为了可以使用该库,必须为该库分配 68 byte(每个库)的全局变量,如图4所示:
图4
下表是使用该库时所用到的重要的一些变量(以相对地址表示),如表4:
符号名
相对地址
注释
disable_auto_stop
+v0.0
默认值=0意味着当运动物件已经到达预设地点时,即使尚未减速到velocity_ss,依然停止运动; =1时则减速至velocity_ss时才停止
dir_active_low
+v0.1
方向定义,默认值 0 = 方向输出为1时表示正向。
final_dir
+v0.2
寻找参考点过程中的后方向
tune_factor
+vd1
调整因子(默认值=0)
ramp_time
+vd5
ramp time = accel_dec_time(加减速时间)
max_speed_di
+vd9
大输出频率 = velocity_max
ss_speed_di
+vd13
小输出频率 = velocity_ss
homing_state
+vb18
寻找参考点过程的状态
homing_slow_spd
+vd19
寻找参考点时的低速(默认值 = velocity_ss)
homing_fast_spd
+vd23
寻找参考点时的高速(默认值 = velocity_max/2)
fwd_limit
+v27.1
正向限位开关
rev_limit
+v27.2
反向限位开关
homing_active
+v27.3
寻找参考点激活
c_dir
+v27.4
当前方向
homing_limit_chk
+v27.5
限位开关标志
dec_stop_flag
+v27.6
开始减速
pto0_ldpos_error
+vb28
使用q0_x_loadpos时的故障信息(16#00 = 无故障, 16#ff = 故障)
target_location
+vd29
目标位置
deceleration_factor
+vd33
减速因子 =(velocity_ss – velocity_max) /
accel_dec_time (格式: real)
ss_speed_real
+vd37
小速度 = velocity_ss (格式: real)
est_stopping_dist
+vd41
计算出的减速距离 (格式: dint)
表4
2.4 功能块介绍
下面逐一介绍该库中所应用到的程序块。这些程序块全部基于plc-200 的内置pto输出,完成运动控制的功能。此外,脉冲数将通过指定的高速计数器 hsc 计量。通过 hsc 中断计算并触发减速的起始点。
2.4.1 q0_x_ctrl
该块用于传递全局参数,每个扫描周期都需要被调用。功能块如图5,功能描述见表5。
图5
参数
类型
格式
单位
意义
velocity_ss
in
dint
pulse/sec.
启动/停止频率,必须是大于零的数
velocity_max
in
dint
pulse/sec.
大频率
accel_dec_time
in
real
sec.
大加减速时间
fwd_limit
in
bool
正向限位开关
rev_limit
in
bool
反向限位开关
c_pos
out
dint
pulse
当前绝对位置
表5
velocity_ss 是小脉冲频率,是加速过程的起点和减速过程的终点。
velocity_max 是大小脉冲频率,受限于电机大频率和plc的大输出频率。
在程序中若输入超出(velocity_ss,velocity_max)范围的脉冲频率,将会被velocity_ss 或 velocity_max 所取代。
accel_dec_time 是由 velocity_ss 加速到 velocity_max 所用的时间(或由velocity_max 减速到 velocity_ss 所用的时间,两者相等),范围被规定为 0.02 ~ 32.0 秒,但好不要小于0.5秒。
警告:超出 accel_dec_time 范围的值还是可以被写入块中,但是会导致定位过程出错!
2.4.2 scale_eu_pulse
该块用于将一个位置量转化为一个脉冲量,因此它可用于将一段位移转化为脉冲数,或将一个速度转化为脉冲频率。功能块如图6,功能描述见表6。
参数
类型
格式
单位
意义
input
in
real
mm or mm/s
欲转换的位移或速度
pulses
in
dint
pulse /revol.
电机转一圈所需要的脉冲数
e_units
in
real
mm /revol.
电机转一圈所产生的位移
output
out
dint
pulse or pulse/s
转换后的脉冲数或脉冲频率
表6
下面是该功能块的计算公式:
2.4.3 scale_ pulse_eu
该块用于将一个脉冲量转化为一个位置量,因此它可用于将一段脉冲数转化为位移,或将一个脉冲频率转化为速度。功能块如图7,功能描述见表7。
参数
类型
格式
单位
意义
input
in
real
pulse or pulse/s
欲转换的脉冲数或脉冲频率
pulses
in
dint
pulse /revol.
电机转一圈所需要的脉冲数
e_units
in
real
mm /revol.
电机转一圈所产生的位移
output
out
dint
mm or mm/s
转换后的位移或速度
下面是该功能块的计算公式:
2.4.4 q0_x_home
功能块如图8,功能描述见表8。
参数
类型
格式
单位
意义
execute
in
bool
寻找参考点的执行位
position
in
dint
pulse
参考点的绝对位移
start_dir
in
bool
寻找参考点的起始方向
(0=反向,1=正向)
done
out
bool
完成位(1=完成)
error
out
bool
故障位(1=故障)
该功能块用于寻找参考点,在寻找过程的起始,电机首先以 start_dir 的方向,homing_fast_spd 的速度开始寻找;在碰到limit switch (“fwd_limit” or “rev_limit”)后,减速至停止,然后开始相反方向的寻找;当碰到参考点开关(input i0.0; with
q0_1_home: i0.1)的上升沿时,开始减速到 “homing_slow_spd”。如果此时的方向与 “final_dir” 相同,则在碰到参考点开关下降沿时停止运动,并且将计数器hc0的计数值设为 “position” 中所定义的值。
如果当前方向与 “final_dir” 不同,则必然要改变运动方向,这样就可以保证参考点始终在参考点开关的同一侧(具体是那一侧取决于 “final_dir”)。
寻找参考点的状态可以通过全局变量 “homing_state” 来监测,如表9:
homing_state的值
意义
0
参考点已找到
2
开始寻找
4
在相反方向,以速度 homing_fast_spd 继续寻找过程(在碰到限位开关或参考点开关之后)
6
发现参考点,开始减速过程
7
在方向 final_dir ,以速度 homing_slow_spd 继续寻找过程(在参考点已经在 homing_fast_spd 的速度下被发现之后)
10
故障(在两个限位开关之间并未发现参考点)
2.4.5 q0_x_moverelative
该功能块用于让轴按照指定的方向,以指定的速度,运动指定的相对位移。功能块如图9,功能描述见表10。
参数类型格式单位意义executeinbool 相对位移运动的执行位num_pulsesindintpulse相对位移(必须>1)velocityindintpulse/sec.预置频率(velocity_ss <= velocity <=velocity_max)directioninbool 预置方向(0=反向,1=正向)doneoutbool 完成位(1=完成)。
参数
类型
格式
单位
意义
execute
in
bool
相对位移运动的执行位
num_pulses
in
dint
pulse
相对位移(必须>1)
velocity
in
dint
pulse/sec.
预置频率
(velocity_ss <= velocity <=
velocity_max)
direction
in
bool
预置方向
(0=反向,1=正向)
done
out
bool
完成位(1=完成)
2.4.6 q0_x_moveabsolute
该功能块用于让轴以指定的速度,运动到指定的绝对位置。功能块如图10,功能描述见表11。
参数
类型
格式
单位
意义
execute
in
bool
绝对位移运动的执行位
position
in
dint
pulse
绝对位移
velocity
in
dint
pulse/sec.
预置频率
(velocity_ss <= velocity <=velocity_max)
done
out
bool
完成位(1=完成)
2.4.7 q0_x_movevelocity
该功能块用于让轴按照指定的方向和频率运动,在运动过程中可对频率进行更改。功能块如图11,功能描述见表12。
图11
参数
类型
格式
单位
意义
execute
in
bool
执行位
velocity
in
dint
pulse/sec.
预置频率
(velocity_ss <= velocity <=
velocity_max)
direction
in
bool
预置方向
(0=反向,1=正向)
error
out
byte
故障标识
(0=无故障,1=立即停止,3=执行错误)
c_pos
out
dint
pulse
当前绝对位置
表12
注意:q0_x_movevelocity 功能块只能通过 q0_x_stop block 功能块来停止轴的运动。如图12:
2.4.8 q0_x_stop
该功能块用于使轴减速直至停止。功能块如图13,功能描述见表13。
2.4.9 q0_x_loadpos
该功能块用于将当前位置的绝对位置设置为预置值。功能块如图14,功能描述见表14。
表14
注意:使用该块将使得原参考点失效,为了清晰地定义绝对位置,必须重新寻找参考点。
2.5 校准
该块所使用的算法将计算出减速过程(从减速起始点到速度终达到velocity_ss)所需要的脉冲数。但时在减速过程中所形成的斜坡有可能会导致计算出的减速斜坡与实际的包络不完全一致。此时就需要对 “tune_factor” 进行校正。
校正因子 “tune_factor”
“tune_factor” 的优值取决于大、小和目标脉冲频率以及大减速时间。如图15:
如图所示,运动的目标位置是b,算法会自动计算出减速起始点,当计算与实际不符时,当轴已经运动到b点时,尚未到达低速度,此时若位 ”disable_auto_stop” = 0,则轴运动到b点即停止运动,若位 ”disable_auto_stop” = 1,则轴会继续运动直至到达低速度。图中所示的情况为计算的减速起始点出现的太晚了。
确定调整因子
注意:一次新的校准过程并不需要将伺服驱动器连接到cpu。
步骤如下:
1. 置位 ”disable_auto_stop”,即令 ”disable_auto_stop” = 1。
2. 设置 “tune_factor” = 1。
3. 使用 q0_x_loadpos 功能将当前位置的绝对位置设为0。
4. 使用 q0_x_moverelative,以指定的速度完成一次相对位置运动(留出足够的空间以使得该运动得以顺利完成)。
5. 运动完成后,查看实际位置 hc0。tune_factor 的调整值应由 hc0,目标相对位移 num_pulses,预估减速距离 est_stopping_dist 所决定。est_stopping_dist 由下面的公式计算得出:
tune_factor由下面的公式计算得出:
6. 在调用 q0_x_ctrl 的网络之后插入一条网络,将调整后的 tune_factor 传递给全局变量 +vd1,如图16。
7. 复位 ”disable_auto_stop”,即令 ”disable_auto_stop” = 0。
2.6 寻找参考点的若干种情况
在寻找参考点的过程中由于起始位置、起始方向和终止方向的不同会出现很多种情况。
一个总的原则就是:从起始位置以起始方向 start_dir 开始寻找,碰到参考点之前若碰到限位开关,则立即调头开始反向寻找,找到参考点开关的上升沿(即刚遇到参考点开关)即减速到寻找低速 homing_slow_spd,若在检测到参考点开关的下降沿(即刚离开遇到参考点开关)之前已经减速到 homing_slow_spd,则比较当前方向与终止方向 final_dir 是否一致,若一致,则完成参考点寻找过程;若否,则调头找寻另一端的下降沿。若在检测到参考点开关的下降沿(即刚离开遇到参考点开关)之前尚未减速到 homing_slow_spd,则在减速到 homing_slow_spd 后调头加速,直至遇到参考点开关上升沿,重新减速到 homing_slow_spd,后判断当前方向与终止方向 final_dir 是否一致,若一致,则完成参考点寻找过程;若否,则调头找寻另一端的下降沿。(final_dir 决定寻找参考点过程结束后,轴停在参考点开关的哪一侧)
下面的图形会反应不同情形下寻找参考点的过程。
start_dir=0, final_dir=0,如图17:
start_dir=0, final_dir=1,如图18:
start_dir=1, final_dir=1,如图20: