4. 单轴运动进阶:速度模式、点动、停止与暂停
各位同学,欢迎来到第四章。上一章我们聊了绝对运动和相对运动,那是位置控制的基础。今天咱们要进入速度控制的领域了。说白了,位置控制是「我要走到哪」,速度控制是「我要跑多快」。这两者在实际项目中,应用场景完全不同。
我个人习惯把速度控制比作汽车的定速巡航。你设定一个速度,电机就一直按这个速度跑,直到你踩刹车或者改变设定。而点动呢,就像手动挡车的半联动,你按着按钮它就动,松开就停。这两种模式在自动化设备里太常见了。
核心知识点速览
- MC_MoveVelocity:速度模式,电机按设定速度持续运行
- MC_MoveJog:点动模式,按下动,松开停
- MC_Stop:急停,立即停止运动
- MC_Halt:暂停,按减速度平稳停止
4.1 MC_MoveVelocity:速度模式
这个指令,你想想看,就是让电机以一个恒定的速度一直转下去。它不像位置模式那样有个目标位置,它只有目标速度。电机启动后,会加速到你设定的速度,然后一直保持,直到你发别的指令打断它。
我在项目中遇到过这样一个场景:一条包装线上的传送带,需要以每分钟30米的速度恒速运行。这时候用MC_MoveVelocity就特别合适。你设定好速度,它就一直跑,不用管位置。
个人经验:速度模式下的加减速时间一定要设置合理。我见过有人把加速时间设成0,结果电机直接「弹射起步」,把传送带上的产品全震飞了。嗯,这可不是开玩笑。
来看一个典型的调用示例:
// 速度模式调用示例
MC_MoveVelocity(
Axis := Axis1, // 轴引用
Execute := bExecute, // 上升沿触发
Velocity := 500.0, // 目标速度,单位:mm/s
Acceleration := 1000.0, // 加速度,单位:mm/s²
Deceleration := 1000.0, // 减速度,单位:mm/s²
Jerk := 0.0, // 加加速度,0表示不使用
Direction := 1, // 方向:1正向,-1反向
BufferMode := 0, // 缓冲模式
Done => bDone,
Busy => bBusy,
Active => bActive,
CommandAborted => bAborted,
Error => bError,
ErrorID => wErrorID
);
这里有个细节要注意:Direction参数。有些驱动器支持通过正负速度值来控制方向,但PLCopen标准里专门有个Direction参数。我个人习惯用Direction来控制方向,这样代码可读性更好。
避坑指南:我曾经在一个项目中,把速度模式下的Execute信号一直置为TRUE,结果发现电机停不下来。后来才意识到,速度模式的Execute是电平触发,不是边沿触发。你一直给TRUE,它就认为你要一直跑。想让它停,必须把Execute拉低,然后调用Stop或Halt。
4.2 MC_MoveJog:点动模式
点动,说白了就是「手按着动,手松开停」。这个在设备调试阶段特别有用。你想想看,当你要手动把机械臂移动到某个位置时,用点动模式最方便。
MC_MoveJog有两个关键输入:JogForward和JogBackward。这两个信号是电平触发的,你按着它就动,松开它就停。嗯,这里和速度模式不一样,速度模式需要你主动发停止指令。
// 点动模式调用示例
MC_MoveJog(
Axis := Axis1,
JogForward := bJogFwd, // 正向点动,TRUE时运动
JogBackward := bJogBwd, // 反向点动,TRUE时运动
Velocity := 100.0, // 点动速度
Acceleration := 500.0,
Deceleration := 500.0,
Jerk := 0.0,
BufferMode := 0,
Busy => bBusy,
Active => bActive,
CommandAborted => bAborted,
Error => bError,
ErrorID => wErrorID
);
关键区别:MC_MoveJog和MC_MoveVelocity虽然都是速度控制,但行为完全不同:
- MC_MoveJog:电平触发,信号为TRUE时运动,FALSE时停止
- MC_MoveVelocity:边沿触发,启动后持续运行,需要主动停止
我记得有一次调试一台贴标机,操作员反映点动时电机反应太慢。我检查后发现,是加速度设得太小了。点动模式下,加速度直接影响响应速度。如果你希望点动时「即按即动」,加速度要设大一些。
实用技巧:点动速度不要设得太快。我一般建议点动速度设为正常工作速度的10%-20%。太快了容易撞机,太慢了调试效率低。这个平衡需要根据实际设备来调。
4.3 MC_Stop:急停
这个指令,说白了就是「不管三七二十一,给我停下来」。它是最优先级的停止指令。一旦触发,所有正在运行的运动指令都会被中止,电机按设定的减速度停下来。
MC_Stop有一个重要参数:Deceleration。这个减速度可以设得很大,实现快速停止。但要注意,减速度太大可能会造成机械冲击。
// 急停调用示例
MC_Stop(
Axis := Axis1,
Execute := bStop, // 上升沿触发
Deceleration := 5000.0, // 减速度,可以设得很大
Jerk := 0.0,
Done => bDone,
Busy => bBusy,
Active => bActive,
CommandAborted => bAborted,
Error => bError,
ErrorID => wErrorID
);
避坑指南:我曾经在一个项目中,把MC_Stop的减速度设成了驱动器允许的最大值。结果一按急停,整个设备剧烈抖动,把导轨都震歪了。后来我学乖了,急停的减速度要综合考虑机械强度和负载惯性。不是越快越好,是「安全地快」才好。
MC_Stop还有一个特性:它执行完后,轴会处于停止状态。如果你想重新启动轴,必须先复位MC_Stop的Done信号,然后再发新的运动指令。这个顺序搞错了,轴是动不了的。
4.4 MC_Halt:暂停
MC_Halt和MC_Stop看起来很像,但用途完全不同。Halt是「温柔地停下来」,Stop是「粗暴地停下来」。Halt主要用于程序逻辑中的暂停,比如等待某个条件满足后再继续。
Halt的减速度通常设得比较平缓,不会对机械造成冲击。而且,Halt执行完后,轴处于「待命」状态,你可以随时发新的运动指令继续运行。
// 暂停调用示例
MC_Halt(
Axis := Axis1,
Execute := bHalt, // 上升沿触发
Deceleration := 1000.0, // 减速度,通常设得比较平缓
Jerk := 0.0,
Done => bDone,
Busy => bBusy,
Active => bActive,
CommandAborted => bAborted,
Error => bError,
ErrorID => wErrorID
);
Stop vs Halt 对比
| 特性 | MC_Stop(急停) | MC_Halt(暂停) |
|---|---|---|
| 优先级 | 最高,中止所有指令 | 较高,但低于Stop |
| 减速度 | 通常很大,快速停止 | 通常平缓,平稳停止 |
| 轴状态 | 停止后需复位才能再启动 | 停止后可立即发新指令 |
| 应用场景 | 紧急停止、安全保护 | 程序暂停、等待条件 |
| 机械冲击 | 较大 | 较小 |
你想想看,在实际项目中,这两个指令要配合使用。比如,操作员按了急停按钮,你调用MC_Stop。但如果只是程序逻辑需要暂停一下,比如等待传感器信号,那就用MC_Halt。
个人建议:在编写程序时,我习惯把MC_Stop和MC_Halt分开处理。急停按钮直接硬接线到驱动器的STO(安全转矩关闭)功能,同时通过PLC调用MC_Stop做软件保护。而程序中的暂停逻辑,统一用MC_Halt实现。这样层次清晰,不容易出错。
4.5 实际项目中的配合使用
好了,四个指令都讲完了。咱们来看看它们在实际项目中怎么配合。我以一个简单的传送带系统为例:
- 正常运行时:调用MC_MoveVelocity,传送带以设定速度恒速运行
- 手动调试时:切换到点动模式,调用MC_MoveJog,操作员手动控制
- 程序暂停时:调用MC_Halt,传送带平稳停止,等待条件满足
- 紧急情况时:调用MC_Stop,传送带快速停止,确保安全
这里有个编程技巧:状态机管理。我建议用一个状态变量来记录当前轴处于什么模式。比如:
// 状态定义
// 0: 空闲
// 1: 速度模式运行中
// 2: 点动模式
// 3: 暂停中
// 4: 急停中
CASE nAxisState OF
0: // 空闲
// 等待指令
1: // 速度模式
// 监控MC_MoveVelocity状态
2: // 点动模式
// 监控MC_MoveJog状态
3: // 暂停
// 监控MC_Halt状态
4: // 急停
// 监控MC_Stop状态
END_CASE
嗯,这样管理起来就清晰多了。不会出现「发了速度指令又发点动指令」这种冲突情况。
重要提醒:MC_MoveVelocity和MC_MoveJog不能同时调用。如果你在速度模式下想切到点动,必须先停止当前指令。我见过有人直接同时调用两个指令,结果轴直接报错。记住,一个轴同一时间只能执行一个运动指令。
好了,这一章的内容就到这里。四个指令,各有各的用途。速度模式管持续运行,点动管手动控制,急停管安全,暂停管逻辑。掌握了它们,你的单轴控制就基本入门了。
公众号:蓝海资料掘金营,微信deep3321