本文来源于:施家邦 工控邦
07.LMC078伺服控制系统中的LXM28S多圈位置溢出功能块
LMC078控制系统与M262PLC系统中的LXM28S多圈位置溢出功能块的编程思路有所不同,采用了两个功能块来实现多圈编码器在溢出后进行位置补偿,第一个是codesys提供的功能块SMC3_PersistPositionSingleturn,第二个是编制了一个新的功能块FB_OverFlowPositionRetore,这个功能块用于位置恢复前的双重验证。
(1)LMC078伺服控制系统中的工作过程
SERCOS通信工作正常后,LMC078将LXM28S伺服编码器位置值翻译成以浮点数形式的轴的位置值时会出现问题,它不像M262那样翻译成一个固定的值,所以,笔者采用了另外的编程思路,新创建的功能块FB_OverFlowPositionRetore先记录断电前的伺服编码器位置和LMC078中的轴位置,上电后记录伺服LXM28S的伺服位置,得到伺服轴位置的变化量,同时检查在机器断电期间是否发生了新的溢出,将位置变化值和溢出根据机械参数计算出总的位置补偿值,当LXM28S伺服使能后,伺服轴处于静止的情况下,与SMC3_PersistPositionSingleturn功能块比较,偏差值小于一个很小的门槛值后,SMC3_PersistPositionSingleturn功能块的位置补偿值才被认为是正确的,如果大于这个门槛值,则输出报警,这样就保证了上电后LMC078中LXM28的轴位置值与机械位置保持正确的对应关系。
(2)SMC3_PersistPositionSingleturn功能块说明
Codesys中对SMC3_PersistPositionSingleturn功能块的说明,如图7所示。
SMC3_PersistPositionSingleturn功能块的位置补偿是在LXM28通信正常后,伺服轴无使能条件下自动进行补偿的,如果补偿时电机轴发生了移动,会导致位置补偿精度降低,甚至出现位置错误的情况。
图7 SMC3_PersistPositionSingleturn功能块的说明
(3)SMC3_PersistPositionSingleturn添加过程
在SoMachine软件中 创建一个POU,在【输入助手】中输入SMC3_PersistPositionSingleturn,如图8所示。
图8 创建SMC3_PersistPositionSingleturn功能块
Axis管脚输入要保持位置的轴名称,PersistentData管脚输入在PersistentVars创建的用于保持轴位置的变量名,bEnable管脚设为true,usiNumberOfAbsoluteBits管脚输入32,完成后程序如图9所示。
图9 SMC3_PersistPositionSingleturn功能块
在PersistentVars创建的用于保持轴位置变量名,如图10所示。
图10 在PersistentVars创建断电保持变量
最后在Motion task中调用persisPositionAxis的POU,完成编程。
(5)FB_OverFlowPositionRetore的管脚
LMC078伺服控制器中,溢出位置补偿功能块FB_OverFlowPositionRetore的管脚定义,如图11所示。
图11 管脚定义
(6)FB_OverFlowPositionRetore补偿量的计算和编程
程序根据正转和反转两种情况,同时考虑溢出,以电机的旋转方向一直是正转为例,没有溢出时位置偏差等于当前位置反馈值减去断电前的位置。
如果正向溢出,则用2147483647减去断电前位置值,再加上当前位置值减去-2147483648,再使用机械参数计算出位置偏差。
如果发生反向溢出,使用断电前的位置值减去-2147483648,再加上2147483647减去当前使能的位置值,调整符号后,再使用机械参数计算出位置偏差。
当电机的旋转方向一直是反转时,计算位置偏差值的方法与此类似,不再赘述,FB_OverFlowPositionRetore的程序和注释,如图12所示。
图12 FB_OverFlowPositionRetore的程序和注释
使用功能块补偿后,轴位置值在发生溢出后是可以正常保持的,值得注意的是A3轴的模值是120,所以0.00113到119.896跳动是正常的。HMI显示的上电前的轴的位置值,如图13所示。
图13 上电前的轴的位置值
HMI显示的上电后的轴的位置值,如图14所示。
图14 加入功能块后断电前后即使溢出位置依然保持
08.总 结
本文从提出问题、分析原因、到解决思路、方案论证、计算公式、伺服驱动器的调试和参数设置等诸多方面,详细说明了创建客户专属的POU功能块的设计方法、程序编制和管脚定义。掌握了这两种LXM28S多圈电机位置溢出补偿功能块的原理之后,大家就可以参照此功能块的编程思路在不同的网络或平台中进行调用和移植,例如LMC058的CANMotion和PacDrive3平台。
LXM28S多圈电机位置溢出补偿功能块,在张江研发实验室经过一个多月的测试后,又在多个客户的现场进行了实验,其中,江苏常州客户现场就运行了四个多月,证明了这个功能块的开发是成功而且是十分有效的,读者可以将这个FB功能块程序中的轴配置的模值、每圈脉冲数、减速比的分子和分母,通过ifscaling.Scaling的成员变量来获取,伺服轴的圈数等信息也可以全部在功能块内完成,这样功能块的接口变量就会显得简洁。笔者保留了这些变量是为了方便大家跨平台进行程序的移植,在倍福+LXM28E的伺服控制系统中,使用此功能块的编程思路在东南区的客户现场进行编程和调试,高效而实用。
往期回顾
上一篇:工程师的21个瞬间!