恭喜,你发布的帖子
发布于 2019-04-23 14:20:31
3楼
各运动控制功能块都存在几个共性问题,下面一一介绍。
1、CmdAct:运行已激活。这是一个bool变量,可从Sina_Pos块的“Status_table”中的"Epos_zsw2"中读取。当驱动器正在执行运行任务时,该位置的状态是1。在本例程中,出于安全因素考虑,不允许在运行中切换运动模式,即仅当当前运动任务完成后,才允许切换模式。如有特殊应用需要,可删去此限制。
2、AxisPosOk:定位完成。这个bool变量也是从“Status_table”中读取。只要轴使能,且伺服未处于运动状态,该位一直为1。仅当伺服开始运动时,才会置0,运动完成后又一直为1。因此为判断某一运动是否完成,取其上升沿。如在子程序中使用上升沿,在多次调用时会出错,所以取AxisPosOk的上升沿放到功能块外操作。
3、AxisRef:已设置参考点。这个bool变量从"Status_table"中读取。当伺服执行了寻找参考点任务后会一直置1,执行寻找参考点任务时为0。我在程序中用"RefOk"表示,同AxisPosOk,取RefOk的上升沿放到功能块外操作。
4、Enabled:已使能。bool型变量,从"Status_table"中读取。伺服使能时为1,未使能为0。本例程中所有的运动控制命令的前提是使能,否则,运动命令复位并报错。
5、ActMode:当前操作模式。Int型变量,从"Status_table"中读取。这个我重点说明一下,这个ActMode把我狠狠坑了一把。开始在调试的时候,经常出现发出“跨模式”的运动命令,伺服不动作的情况,比如我刚刚执行了寻找参考点命令,这时操作模式是“4”,接下来想执行相对定位,模式是“1”,在发出相对定位命令后,伺服不动作,得再置位一次相对定位命令才会动作。后来我请教了一位前辈,他说V90伺服在切换模式后需要延时一小段时间模式才会生效。具体原因可能有两个:1、Profinet通信需要时间;2、V90驱动器切换模式需要时间。这两个原因,不管哪一个,都暴露出来一个小问题,就是从Sina_Pos块里读出的“当前模式”并不一定是驱动器中已经生效的操作模式。在此提个建议,希望西门子的技术专家能看到,就是让“ActMode”这个变量反映出来的是驱动器中的的确确已经生效的操作模式,这样能避免写很多延时程序。
请填写推广理由:
分享
只看
楼主