马上注册,享受更多特权
您需要 登录 才可以下载或查看,没有帐号?立即注册 
x
本帖最后由 GGG 于 2019-9-16 16:18 编辑
AM600与IS620N多圈绝对值编码器应用指导
1、AM600绝对位置计算方法
1.1 、线性模式(Finite)
AM600的实际位置Axis.fActPosition是通过计算得出的,参与计算的变量有:
A:对象字典0x6064(用户实际反馈指令单位)。
B:Axis.iTurn(溢出次数,PLC记录的伺服相对运动距离大于2^32指令单位时加一,注意:不是读取伺服的多圈值)。
C:Axis.dwRatioTechUnitsDenom(比例单位分母)。
D:Axis.iRatioTechUnitsNum(比例单位分子)。
计算公式:fActPosition = ((iTurn *2^32 + 0x6064)* iRatioTechUnitsNum)/ dwRatioTechUnitsDenom
--------------------
例如:后台软件配置如下图所示(注意电子齿轮比为1:1)
通过后台软件监控当前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.2、旋转模式(Modulo)
该模式下,AM600的实际位置Axis.fActPosition的计算方法是另一种,参与计算的变量有:
A: 对象字典0x6064(用户实际反馈脉冲单位)。
B: Axis.dwPosOffsetForResiduals (剩余位置偏移)。
C:Axis.dwRatioTechUnitsDenom(比例单位分母)。
D:Axis.iRatioTechUnitsNum(比例单位分子)。
计算公式:fActPosition = ((((DWORD)0x6064)- dwPosOffsetForResiduals) * iRatioTechUnitsNum / dwRatioTechUnitsDenom))
--------------------
例如:后台配置
通过后台软件监控当前Axis.fActPosition、A、B、C、D的值分别为:

fActPosition = ((((DWORD)0x6064)- dwPosOffsetForResiduals) * iRatioTechUnitsNum / dwRatioTechUnitsDenom))
= (1282891723–1275068416)* 5 / 8388608
= (2330216 * 45)/ 1048576
= 4.663054347038269(与监控的Axis.fActPositon的值相同)。
2、 AM600如何保存绝对位置信息
2.1、保存功能块
通过上面的计算方法,如果需要掉电保持数据,必须保存B、C、D栏的值。其中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。
|