4. 运动控制指令与编程:PLCopen标准
各位工程师朋友,今天我们聊聊运动控制指令的编程。说实话,PLCopen标准在包装机械里已经成了事实上的通用语言。不管你是用倍福、贝加莱还是Codesys,这套指令集基本都长一个样。我个人觉得,搞懂这四条核心指令,你就能搞定80%的包装应用场景。
4.1 MC_Power:让电机“活过来”
MC_Power说白了就是给伺服驱动器上电并使能。你想想看,电机没使能之前,它就是个“死”的,你发任何运动指令它都不理你。
核心参数:
- Axis:你要控制哪个轴?这个必须指定
- Enable:给个TRUE,电机就上电了
- Status:输出信号,告诉你电机是否准备好
- Busy:正在执行使能操作
我在项目中遇到过一个问题:有人把Enable一直置为TRUE,结果每次程序启动时电机都会重新使能一次,导致设备启动慢了好几秒。我的建议是,只在需要运动时才使能,不用时就关掉。特别是包装机这种频繁启停的设备,能省不少电。
注意:MC_Power的Status信号一定要用!我曾经见过一个工程师没检查Status就直接发运动指令,结果电机没使能,指令报错,整条产线停了半小时。
4.2 MC_MoveAbsolute:绝对定位,指哪打哪
绝对定位,就是告诉电机“你给我跑到位置1000那里去”。不管电机当前在哪儿,它都会跑到你指定的绝对坐标。
在包装机械里,这个指令用得最多。比如切刀的位置、灌装头的高度、封口的位置,都是固定的绝对坐标。
// ST语言示例:让轴1跑到位置5000
MC_MoveAbsolute(
Axis := Axis1,
Position := 5000,
Velocity := 1000,
Acceleration := 500,
Deceleration := 500,
Jerk := 200,
Direction := mcPositive_Direction,
Execute := TRUE,
Done => MoveDone,
Busy => MoveBusy,
Active => MoveActive,
CommandAborted => MoveAborted,
Error => MoveError,
ErrorID => MoveErrorID
);
嗯,这里要注意:Execute是上升沿触发的。你给一个脉冲信号,它就开始跑。如果你一直给TRUE,它只会执行一次。我刚开始做的时候也犯过这个错,以为Execute一直为TRUE就会一直跑,结果电机动了一下就停了。
避坑指南:我曾经在包装机的切刀定位上用过绝对定位。有一次发现切刀每次切出来的长度都不一样。查了半天,原来是回零没做好。绝对定位的前提是原点必须准确,否则你发的指令位置和实际位置永远对不上。
4.3 MC_MoveRelative:相对定位,动多少算多少
相对定位和绝对定位的区别,说白了就是一个是“跑到位置X”,一个是“再跑X距离”。
在包装机械里,相对定位常用于连续送料、步进进给这类场景。比如每次包装袋前进200mm,就用相对定位。
| 特性 | MC_MoveAbsolute | MC_MoveRelative |
|---|---|---|
| 目标位置 | 固定坐标值 | 相对于当前位置的偏移量 |
| 典型应用 | 切刀、灌装头、封口 | 送料、步进进给、往复运动 |
| 回零要求 | 必须回零 | 不需要绝对原点 |
| 重复精度 | 高(依赖原点) | 中等(依赖编码器) |
我个人习惯:如果设备有明确的物理原点(比如传感器),我就用绝对定位。如果只是连续运动,比如传送带上的步进送料,用相对定位更省事。
4.4 MC_Home:回零,一切运动的起点
回零,就是让电机找到它的“家”。没有回零,绝对定位就是空中楼阁。
包装机械常用的回零方式有几种:
- 主动回零:电机自己找传感器,碰到后停止
- 被动回零:靠外部信号触发,比如人工推到位
- 直接设定:直接把当前位置设为零点(不推荐,除非你知道自己在做什么)
回零参数要点:
- HomingMode:选择回零方式,常见的有17、18、33、34等模式
- Position:回零完成后,把当前位置设成什么值
- SwitchSensor:回零传感器的输入点
我记得有一次在包装机上调试,回零总是失败。查了半天,发现是回零速度设得太快,传感器还没反应过来电机就冲过去了。后来我把回零速度降到200mm/s,问题就解决了。所以我的建议是:回零速度别太快,稳一点,准一点。
4.5 梯形图 vs 结构化文本:怎么选?
这个问题经常有人问我。我的看法是:
- 梯形图:适合逻辑控制、互锁保护、简单的顺序控制。看得清楚,电工也能看懂。
- 结构化文本:适合复杂计算、数组操作、多轴联动。写起来快,改起来也方便。
在包装机械里,我一般这样分:
- 安全互锁、急停逻辑 → 梯形图
- 运动控制指令、位置计算、配方管理 → 结构化文本
你想想看,如果用梯形图写一个MC_MoveAbsolute,那得画多少条线?而用ST,一行代码就搞定了。但反过来,如果用ST写一个急停逻辑,调试的时候你可能会疯掉——因为看不清楚信号流。
我的习惯:在同一个项目中混用两种语言。梯形图做“骨架”,ST做“血肉”。这样既保证了可读性,又保证了效率。
4.6 知识体系总览
下面这张图是我自己整理的,把本章的核心内容串起来了。你可以把它当成一个“地图”,以后写程序时对照着看。
这张图把四个指令的关系、关键参数和编程语言选择都串起来了。你写程序的时候,可以照着这个思路来:先MC_Power使能,再MC_Home回零,最后根据需求选MC_MoveAbsolute或MC_MoveRelative。
总结一下:
- MC_Power是前提,Status信号必须检查
- MC_MoveAbsolute适合固定位置,但依赖原点
- MC_MoveRelative适合连续运动,不需要绝对原点
- MC_Home是绝对定位的基础,回零速度别太快
- 梯形图做逻辑,ST做运动,混着用最舒服
好了,这一章的内容就这些。记住,写运动控制程序,最重要的是把“使能→回零→运动”这个流程理清楚。流程对了,程序就成功了一半。
公众号:蓝海资料掘金营,微信deep3321