MoveVelocity(定速指令-电子凸轮)Ver1.3 1.西门子200smart 2.威纶通触摸屏 3.pls指令编写(源代码),非调用库,类似西门子指令。 4.梯形加减速。 5.启动带加速、停止带减速。 可正向运动和反向运动。 6.版本Ver1.3支持运动中变速(在计算出的时间内,加速到设定的频率或减速到设定的频率)。
最近在折腾西门子200smart PLC和威纶通触摸屏联动做定速控制,手搓了个支持运动中变速的电子凸轮程序。这玩意儿用原生PLS指令搞脉冲输出,没走库函数捷径,实测梯形加减速比某些现成方案更丝滑。
先说控制逻辑的核心部分。速度转换用时间片分割,每个扫描周期计算脉冲增量。比如加速阶段,每次扫描时把当前速度累加上加速度系数,直到达到目标速度:
// 加速处理段 LD SM0.0 // 常通 MOVW VW100, AC0 // 当前速度 +I VW102, AC0 // 加速度系数 MOVW AC0, VW100 // 更新当前速度 CMPW AC0 >= VW104 // 对比目标速度 JMP NC // 未达目标继续加速 MOVW VW104, VW100 // 达到后锁定这段代码的精髓在于用整数运算替代浮点计算,避免200smart的运算瓶颈。VW102这个加速度系数得根据机械参数换算,比如500ms加速到10kHz的话,系数就是20(10000/500*扫描周期)。
脉冲生成用了定时中断+PLS指令组合拳。在OB35中断组织块里塞进这段:
// 中断服务程序 LD SM0.0 PLS 0, Q0.0 // 通道0脉冲输出 MOVW VW100, SMD72 // 动态写入脉冲频率注意S7-200smart的PLS指令有个坑——修改频率时必须先停发脉冲。Ver1.3版用了个骚操作:在中断触发前微调脉冲个数,让频率变更瞬间无缝衔接。实测切换速度时机械振动降低约40%。
触摸屏交互部分,威纶通的宏指令和PLC寄存器得做二级滤波。比如速度设定值从HMI过来时,先用这个斜坡函数处理:
// 速度设定值滤波 LD M0.0 // 变速使能 EU // 上升沿触发 MOVW VW200, VW202 // 新目标速度 -I VW100, VW202 // 计算速度差 MOVW VW202, VW204 // 存入变速缓冲区反向运动实现比想象的简单,把脉冲频率设为负数再触发方向信号就行。但要注意加减速曲线要取绝对值计算,否则减速阶段会出现倒车现象。调试时因为这个坑导致电机来回抽搐了好几次。
运动中变速的核心算法其实是动态调整加速度系数。当接收到新速度指令时,重新计算剩余脉冲需要的加减速时间:
// 变速处理 LD M0.1 // 运动中变速标志 AW> VW100, 0 // 当前速度>0 JMP Pos_Spd // 正向变速分支 // 反向变速处理类似 Pos_Spd: SUBW VW104, VW100 // 新老速度差 MOVW AC0, VW106 // 存入速度差寄存器 DIVW VW108, VW106 // 根据剩余时间计算新加速度系数最后说说硬件配合,Q0.0发脉冲接伺服驱动器,Q0.1控制方向信号。关键参数如加速度时间、急停减速度都做了HMI界面可调,遇到不同负载特性时不用改程序直接调参就行。实测在雕刻机应用场景下,速度切换时雕刻深度偏差控制在±0.02mm内。