STIF RealAxis.iMovementType = 0 THEN //循环轴 fCycPos := stAxisParam.aAxisPosData[iPosIndex].fTargetPos + stAxisParam.aAxisPosData[iPosIndex].fOffset; //fCycPos定长距离 //1.需要重新计算目标位置,比如目标是100,假如当前位置是10,那么只需要再走90 //当前位置/定长距离的余数就是还需要走的距离 ModReal(In1 := RealAxis.fSetPosition, //当前位置 In2 := fCycPos, //定长距离 Out => fCycModTarget //新的目标位置 ); //2.计算出最终目标位置,这里用轴的当前位置+定长距离-已经走的距离 //由于是循环值伺服,需要除以循环值,得到余数,就是最终目标 ModReal(In1 := RealAxis.fSetPosition + fCycPos - fCycModTarget , In2 := RealAxis.fPositionPeriod, //循环值 Out => fPosition //最终定位目标 ); END_IF
STFOR i := 0 TO AxisConst.MAX_POS_COUNT BY 1 DO //stAxisParam.aAxisPosData[i].fVelocity:=50; IF RealAxis.iMovementType = 0 THEN //循环模式,设定的目标位置是步长 ModReal(In1 :=stAxisState.fAxisPos, //当前位置 In2 := stAxisParam.aAxisPosData[i].fTargetPos + stAxisParam.aAxisPosData[i].fOffset, //目标定长 Out => fCycArrive //余数 ); aPosArrive[i] := RealAxis.nAxisState=SMC_AXIS_STATE.standstill AND ABS(fCycArrive) < stAxisParam.fSetPosWidth; ELSE aPosArrive[i] :=RealAxis.nAxisState=SMC_AXIS_STATE.standstill AND ABS(stAxisParam.aAxisPosData[i].fTargetPos + stAxisParam.aAxisPosData[i].fOffset - stAxisState.fAxisPos) < stAxisParam.fSetPosWidth; END_IF END_FOR

每次走200,目前位置在1474.70

触发绝对定位后,位置到1600

本文作者:zhusenlin
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 版权所有:zhusenlin 许可协议。转载请注明出处!