PLC_OPEN MC_MoveAbsolute 位置相同

问题描述

有时可能会在轴的相同当前位置调用 MC_MoveAbsolute,在这种情况下,“done”或“busy”状态不能用于管理函数的结束,因为函数不能执行任何移动. 我是这些类型控件的新手,我研究过的示例总是使用这样的状态机:

1: MC_MoveAbsolute .exec: = true;
  if MC_MoveAbsolute .busy then // never goes high if AxisActPos = MC_MoveAbsolute.position;
   MC_MoveAbsolute .exec: = false;
   nextStep: = 2;
end_if
2:
    if MC_MoveAbsolute.done then
          // do something

处理这些情况的最佳方法是什么?

解决方法

我通常不使用忙碌位。

1: MC_MoveAbsolute .exec: = true;
   nextStep: = 2;

2: if MC_MoveAbsolute.done then
       MC_MoveAbsolute .exec: = false;
       // do something
   end_if

case 结构的本质是当步递增时,新代码直到下一次程序扫描才会执行。因此,假设您在 MC_MoveAbsolute 之外的每次扫描中执行 case 功能块,done 位将在它之前适当设置(取决于是否需要运动)在 case 的第 2 步中检查。