马上注册,享受更多特权
您需要 登录 才可以下载或查看,没有帐号?立即注册 
x
问题现象描述:客户在给整机断电或者给PLC断电后,再重新上电,通过触摸屏监控轴的实时位置与断电前的位置数值不一样,即PLC断上电前后伺服轴位置发生了突变,例如断电前伺服轴位置是1000,断上电之后发现伺服轴位置变成了-300,而伺服轴实际的物理位置并没有发生改变,特别注意,该类问题基本都是建立在伺服轴断上电后的位置不是0的基础上的,因为断上电之后轴位置变成0一般都是因为伺服没有装编码器电池或者H02-01没有设成1绝对值式导致的,并不属于此类问题的范畴,这种PLC断上电后伺服轴位置发生突变的原因基本都是由于PLC端发给伺服的目标位置指令607A数据类型溢出导致的;
问题原理分析: 1.从触摸屏上监控到的轴实时反馈位置本质上就是PLC中的轴结构体其中的一个元素,假设PLC中轴的名称为Axis,则轴的实时反馈位置对应的轴结构体元素就是Axis.fActPosition,而PLC断上电之后观察到伺服轴位置发生突变其实也就代表着Axis.fActPosition的值在PLC断上电的过程中发生了改变;
2.轴实时反馈位置数值在PLC中的计算公式如下所示,主要分为两种情况: 第一种情况:PLC端轴设置:线性模式;绝对值伺服(H02-01=1):线性模式;(多数情况) 此时轴目标位置(Axis.fSetPosition)、反馈位置(Axis.fActPosition)计算方法如下所示: Axis.fSetPosition=((Axis.iTurn*2^32+Axis.dwLastPosition)*Axis.iRatioTechUnitsNum)/Axis.dwRatioTechUnitsDenom; Axis.fActPosition=((Axis.iTurn*2^32+Axis.dwActPosition)*Axis.iRatioTechUnitsNum)/Axis.dwRatioTechUnitsDenom; 其中变量含义: Axis.iTurn :溢出次数; Axis.dwLastPosition:上一次命令位置(每个周期会同步607A目标位置值) Axis.dwActPosition :当前周期6064位置反馈的值 Axis.iRatioTechUnitsNum :比例缩放分子 Axis.dwRatioTechUnitsDenom :比例缩放分母 当目标位置607A(数据类型是DINT)大于2^32-1数据溢出时,PLC将以轴结构体Axis.iTurn记忆607A溢出次数(线性模式)。当0->2^32-1递增变化,每溢出一次Axis.iTurn变量加 1,而2^32-1->0递减变化,每溢出一次Axis.iTurn变量减1。 由于Axis.iTurn属于轴内存变量,掉电数据不保持。所以PLC重启、热复位、下载程序操作导致Axis.iTurn值变成默认值0。因而导致目标位置(Axis.fSetPosition)、反馈位置 (Axis.fActPosition)与断电前不一致。 溢出次数Axis.iTurn与目标位置607A的数值大小息息相关,因此可以通过减小607A的数值来限制数值溢出,目标位置607A在PLC端的计算公式如下(单位为脉冲单位): 通过目标位置607A的计算公式可以看出如果想减小脉冲数的值大小,在移动距离和工作台旋转一圈的工作行程不变的情况下,可以减小电机旋转一圈的指令脉冲数或者齿轮比分子,也可以增大齿轮比分母,但是要注意,在更改了参数后导致607A减小后,相当于伺服输出的脉冲数也变少了,因此需要在伺服端设置齿轮比分子来平衡PLC端607A的减小,例如将电机旋转一圈的指令脉冲数缩小了16倍,那么目标位置607A的数值也相当于缩小了16倍,此时应该将伺服端的齿轮比分子即H05-07乘于16设成16即可保证换算平衡,这个缩小倍数可以自己定义;
第二种情况:PLC端轴设置:旋转模式;绝对值伺服(H02-01=1):线性模式; 此时轴目标位置(Axis.fSetPosition)、反馈位置(Axis.fActPosition)计算方法如下所示: Axis.fSetPosition = ((Axis.dwLastPosition-Axis.dwPosOffsetForResiduals)* Axis.iRatioTechUnitsNum)/ Axis.dwRatioTechUnitsDenom Axis.fActPosition = ((Axis.dwActPosition-Axis.dwPosOffsetForResiduals)* Axis.iRatioTechUnitsNum)/ Axis.dwRatioTechUnitsDenom 其中变量含义: Axis.dwPosOffsetForResiduals : 剩余偏差; Axis.dwLastPosition:上一次命令位置(每个周期会同步607A目标位置值) Axis.dwActPosition :当前周期6064位置反馈的值 Axis.iRatioTechUnitsNum :比例缩放分子 Axis.dwRatioTechUnitsDenom :比例缩放分母 PLC端轴旋转模式与线性模式计算完全不同,当目标位置数据607A增量大于旋转周期值(Axis.dwOneTurn)时,PLC将记忆剩余偏差变量(Axis.dwPosOffsetForResiduals)。当607A以0->2^32-1递增变化,每运转一个旋转周期剩余偏差变量(Axis.dwPosOffsetForResiduals)自加一个旋转周期值(Axis.dwOneTurn),而2^32-1->0递减变化,每运转一个旋转周期剩余偏差变量(Axis.dwPosOffsetForResiduals)自减一个旋转周期值(Axis.dwOneTurn)。机械运转一个旋转周期电机所产生的编码器增量不能被607A数据宽度(2^32)整除的时候溢出位置不为0。如果能够整除,607A溢出时刻,目标位置、反馈位置都为0或者周期值。
由于剩余偏差变量Axis.dwPosOffsetForResiduals 属于轴内存变量,掉电数据不保持。当 Axis.dwPosOffsetForResiduals值溢出后,PLC 重启、热复位、下载程序操作导致 Axis.dwPosOffsetForResiduals值变为默认值0。因而导致目标位置(Axis.fSetPosition)、反馈位置(Axis.fActPosition)与断电前可能不一致。
问题解决方案图片在文档中,有需要请自取。
|