PLC_OPEN MC_MoveAbsolute 位置相同
PLC_OPEN MC_MoveAbsolute with same position
有时可能会发生调用 MC_MoveAbsolute 时轴的当前位置相同的情况,在这种情况下,“完成”或“忙碌”状态不能用于管理函数的结束,因为函数不得执行任何移动。
我是这些类型控件的新手,我研究过的示例总是使用这样的状态机:
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
结构的本质是,当步长递增时,新的代码直到下一次程序扫描才会执行。因此,假设您在 case
之外的每次扫描中执行 MC_MoveAbsolute
功能块,done
位将在它之前适当设置(取决于是否需要运动)在 case
.
的第 2 步中检查
有时可能会发生调用 MC_MoveAbsolute 时轴的当前位置相同的情况,在这种情况下,“完成”或“忙碌”状态不能用于管理函数的结束,因为函数不得执行任何移动。 我是这些类型控件的新手,我研究过的示例总是使用这样的状态机:
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
结构的本质是,当步长递增时,新的代码直到下一次程序扫描才会执行。因此,假设您在 case
之外的每次扫描中执行 MC_MoveAbsolute
功能块,done
位将在它之前适当设置(取决于是否需要运动)在 case
.