首页 > 全部分类 > 技术问答 > 帖子内容

大家好,请问下汇川PLC控制2台汇川总线伺服作位置控制。当伺服连续运行多个位置时,需要每走完2个位置后中间不加入一个停顿时间吗?感觉这样效率会很低,若不加停顿时间伺服便会停在中途。请大家指点迷津。谢谢

联系人:16404200487680

电话/手机:联系客服

发布时间:2025-10-05 15:26

浏览:143次

我不是加停顿时间,而是加计数,每个扫描周期加一的那种。

计数结果等于1或2(看计数和下一个轴控运动指令谁在前,先扫描到谁)的时候,再执行下一个运动指令。

明扬工控技术客服2025-10-05 15:34:40
答复内容:

汇川PLC+两台总线伺服:连续多段定位“无停顿”最佳实践

问题:连续执行多个位置点,若不插停顿时间,伺服会在中途停一下;目前用“扫描计数=1/2”再发下条指令,效率低且不稳。

结论先说

  • 不需要人为停顿时间。根因通常是下一条指令未被缓冲/融合进队列,或在每个扫描周期开启指令导致前一条被覆盖/中断
  • 正确做法:使用缓冲/融合(Buffered/Blending)模式,Busy期间预排队下一段,Execute用上升沿触发。
  • 另一条路:在伺服内用PR(定位表)连续模式,由驱动实现无停顿多段定位。
禁忌:用“计数法”控制节拍会导致竞态和重复触发,常引发中途停或运动被Abort。

方案A:PLCopen运动块(推荐)——缓冲/融合队列

关键设置

  • 用MC_MoveAbsolute/MC_MoveRelative等块。
  • BufferMode 设为mcBuffered(先排队顺接)或mcBlending(速度连续过渡)。
  • Execute 采用上升沿(只置位1个扫描周期,FB进入Busy后即复位)。
  • 在前一段Busy=TRUE时,预先把下一段送入(让驱动有时间做队列/融合)。

ST示例(单轴:连续点队列)

// 变量示意
Positions : ARRAY[1..100] OF LREAL;  // 目标位置表
i, iNext  : INT := 1;
preQueued : BOOL := FALSE;
vel:=200.0; acc:=1000.0; dec:=1000.0;

Move1(Execute:=Trig1, Position:=Positions[i], Velocity:=vel, Acceleration:=acc,
      Deceleration:=dec, BufferMode:=mcBlending, Done=>done1, Busy=>busy1, Error=>err1);

// Busy 期间预送下一段(关键)
IF busy1 AND NOT preQueued AND (i+1 <= 100) THEN
  Move2(Execute:=TRUE, Position:=Positions[i+1], Velocity:=vel, Acceleration:=acc,
        Deceleration:=dec, BufferMode:=mcBlending);
  preQueued := TRUE;
END_IF;

// 完成后推进索引
IF Move2.Done THEN
  i := i + 2;
  preQueued := FALSE;
  Trig1 := TRUE;    // 下一波只需1个周期的上升沿
END_IF;

// 执行沿单周期脉冲
IF Trig1 THEN Trig1 := FALSE; END_IF;

双轴同步小技巧

  • 两轴的MoveAbs的Execute上升沿在同一扫描末端统一置位。
  • 需要严格同步可用“群组运动”或MC_GearIn/MC_CamIn。

方案B:伺服内置 PR(定位表)连续模式

适用于大量重复点位、节拍要求更高的场景。

  1. 在驱动内写好 PR 表,开启“连续/平滑切换/前瞻”参数(不同机型命名略异)。
  2. PLC只需下发“起始PR号、段数、启动”,驱动按表连续运行。
  3. 在线改点位时仅需写入表项,PLC侧逻辑更简洁。

常见“中途停”根因与对策

现象 典型原因 处理
段与段之间明显刹停 BufferMode=Abort/Overwrite;下一段未预排队 改mcBuffered/mcBlending;Busy时预送下一段
未到位就“停” 重复触发导致上一条被中断(Abort) Execute改上升沿;忙时禁止再触发同段
必须等InPosition才继续,导致顿挫 以InPosition做节拍信号(带窗口/延时) 以FB的Done或队列完成为条件;Busy期预发下一条
两轴不同步 参数不一致、触发不同时刻 统一Vel/Acc/Dec;统一上升沿;必要时用群组或齿轮/凸轮

为什么“扫描计数=1/2”不可靠?

  • 计数与扫描顺序存在竞态:谁先被扫描到,谁先触发,行为不确定。
  • 一个扫描内可能多次命中条件,导致覆盖/中断运动。
  • 对扫描周期抖动敏感,节拍不稳定。
推荐替代:使用“状态机 + 上升沿 + Busy/Done/Error”作为严谨节拍。

落地执行清单(最小改动)

  1. 把所有 Move 块的BufferMode改为mcBuffered(要连续速度就mcBlending)。
  2. 为Execute加“上升沿触发器”(置1个扫描周期,Busy后自动清0)。
  3. 在Busy=TRUE时就预送下一段(同轴或另一FB),形成“二段排队”。
  4. 不再以“计数=1/2”为条件;改用Done或队列完成信号推进索引。
  5. 统一相邻段的Vel/Acc/Dec,避免因参数差异被迫减速。

需要我帮你改成模板?

把你当前的轴控FB名称/截图(MC_或汇川自带命名)、两轴触发逻辑的一小段代码发我,我按你的平台直接给出:

  • 上升沿触发与去抖模板
  • Busy期预排队的状态机
  • 双轴同步启动/队列融合配置
© 明扬工控 · 技术速解 | 
对不起,请登录后再发表评论!

触屏端
扫一扫手机也能发信息
明扬工控商城-工控网-工控自动化真品,一站式专业服务!