问题描述
有时可能会在轴的相同当前位置调用 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 步中检查。