1. 线性模式(Finite)

      AX的实际位置Axis.fActPosition是通过计算得出的,参与计算的变量有:

      A:对象字典0x6064(用户实际反馈指令单位)。

      B:Axis.iTurn(溢出次数,PLC记录的伺服相对运动距离大于2^32指令单位时加一,注意:不是读取伺服的多圈值)。

      C:Axis.dwRatioTechUnitsDenom(比例单位分母)。D:Axis.iRatioTechUnitsNum(比例单位分子)。

      E:Axis.fOffsetPosition(位置偏移)。

计算公式:

fActPosition = ((iTurn *2^32 + 0x6064)* iRatioTechUnitsNum)/ dwRatioTechUnitsDenom – fOffsetPosition


通过后台软件监控当前Axis.fActPosition、A、B、C、D的值分别为:

((iTurn 2^32 + 0x6064) iRatioTechUnitsNum)/ dwRatioTechUnitsDenom

= ((1 * 2^32 +(-100663300)) * 1)/8388608

= (2^32/8388608) – 100663300/8388608

= 512 –12.000000476837158203125

= 499.999999523162841796875(与监控的Axis.fActPositon的值相同)

  1. 旋转模式(Modulo)

    该模式下,AX的实际位置Axis.fActPosition的计算方法是另一种,参与计算的变量有:

    A: 对象字典0x6064(用户实际反馈脉冲单位)。

    B:
    Axis.dwPosOffsetForResiduals (剩余位置偏移)。

    C:Axis.dwRatioTechUnitsDenom(比例单位分母)。D:Axis.iRatioTechUnitsNum(比例单位分子)。

    E:Axis.fOffsetPosition(位置偏移)。

计算公式:

fActPosition = ((((DWORD)0x6064)- dwPosOffsetForResiduals) * iRatioTechUnitsNum / dwRatioTechUnitsDenom)) – fOffsetPosition

例如:后台配置:

通过后台软件监控当前Axis.fActPosition、A、B、C、D的值分别为:


(1176735336–1174405120)* 45 / 1048576

= (2330216 * 45)/ 1048576

= 100.00202178955078125(与监控的Axis.fActPositon的值相同)。、

  1. AX如何保存绝对位置信息

    2.1、保存功能块

    通过上面的计算方法,如果需要掉电保持数据,必须保存B、C、D、E栏的值。其中0x6064是从编码器读取的,不需要保存。而C、D栏的数据在下载程序的时候已存储到PLC。所以程序只要保存B栏数据:iTurn(溢出次数)、dwPosOffsetForResiduals (剩余位置偏移)。多圈绝对值编码器位置保存功能块提供了保存、加载B栏数据的功能,功能块如下图所示:

功能块的参数的解释如下

2.2、保存功能块的使用

2.2.1、新建一个SMC3_PersistPosition类型的实例,命名SMC3_PersistPosition_0。

2.2.2、新建一个SMC3_PersistPosition_Data类型实例persistentData。变量类型为RETAIN PERSISTENT,如下图:

SMC3_PersistPosition_Data结构体变量如下

2.2.3、SMC3_PersistPosition_0实例的bEnable变量初始化为 TRUE,或者直接给输入端口赋值TRUE、Axis输入端为需要保存位置的轴。

2.2.4、新建保持变量文件,添加完成后,重新编译程序。


2.2.5、编译无误后,打开”PersistentVars”文件,在文件空白处右击选择”Add all instance paths(添加所有实例路径)”后,编译下载程序,绝对值编码器的数据保存功能已生效,如图:


注意:为了保证上电后SMC3_PersistPosition_0加载数据的正确性,需判断输出变量bPositionRestored的状态,如果数据读取正确,bPositionRestored的状态为TRUE。