西门子V90伺服问题的解决:参考点不能断电保存和不能多次执行寻参指令的问题
"三阶段"工程师之路
1、基础阶段:博途PLC的系统化与专项学习。
2、中级阶段:博途实例与C#基础学习视频,完成OT与IT融合化学习。
3、阶段:博途的标准化编程方法学习。
标准化方法之路!
一、概述
SINAMICS V90是西门子推出的一款小型、高效便捷的伺服系统。2016年7月底,推出了带PROFINET接口的V90驱动器,配合SIEMENS PLC, 能够组成一套完善的、经济的、可靠的运动控制解决方案, 轻松实现位置控制,速度控制,扭矩控制等多种控制方式。
PN控制V90伺服,可设置报文111,PZD12/12,通过官方提供的FB284功能块进行控制。
在使用定位模式EPOS控制时,需要先进行回参考点操作。如伺服驱动带增量式编码器,共计三种回参考点模式可用:
· 通过数字量输入信号 REF 设置回参考点
· 通过外部参考点挡块(信号 REF)和编码器零脉冲回参考点
· 仅通过编码器零脉冲回参考点
如伺服驱动带值编码器,共计三种回参考点模式可用。也可以通过 BOP 功能"ABS"调整值编码器(将当前位置设为零位)。详细信息可参见章节"调整值编码器" 。
通过设置参数 p29240 可以选择其中一种模式:
值编码器回参考点模式
如连接值编码器,三种回参考点模式可用。可以通过参数 p29240 选择不同的回参考点模式。当 p29240 = 1 或 2 时,仅能在使用“ABS”功能之前执行回参考点操作。一旦使用“ABS”功能,这两种回零方式将不再生效。
二、存在问题
根据现场调试发现,在V90的使用中,使用值编码器时,发现有两个问题
执行回参考点动作后,设备重新上电,参考点丢失。需要在调试软件“V-ASSISTANT”中点击“保存参数到ROM”按钮。
2. 在执行寻找外部信号REF设置参考点后,不能触发第二次寻找参考点指令。
官方提供的FB38000功能块,只能解决个问题,将当前位置记为“0”点,并执行
“保存至ROM”,并不能执行寻找参考点的功能。
同时FB38000,官方提供使用方法,需要在中断OB中调用。实际使用效果,反馈时间很长,大约要3,4秒。
三、解决办法
为了解决存在问题,在阅读V90参数手册后,总结这两个问题的解决方法:
需要使用FB功能块 SINA_PARA_S (FB287)
过程中用到如下参数:
P2507 值编码器状态
值编码器寻参后,不能被第二次触发寻参,是由于P2507已被更改为3。如想再次进行寻找参考点指令,需要将此参数的值改为0。
在寻参指令运行结束后,将P2507数值改为2,会将当前位置记为P2599的预设值。
P0971 存储驱动对象参数
将寻参后的编码器数值保存至ROM,伺服断电后,参考点不会丢失。
将P0971写入1,激活保存参数功能。
四、总结调用参数过程,总结如下:
值回零,在p2507为3时,不能执行回零动作。
仅在p2507为1时,才能执行回零动作
回零流程:
1.将p2507改为1
2.执行回零动作
3.将p2599改为0(参考点坐标值)
4.将p2507改为2(执行值校准)
5.将p971改为1(保存参数从RAM至ROM)
五、应用效果
在项目中使用效果,伺服使用值编码器,并使用传感器作为REF信号时。执行回参考点动作后,参数可以保存至ROM。设备重新上电后,不用重新回参考点。
在有回参考需求时,可通过在HMI上的按钮激活回参动作,并在回参动作后,自动执行修改相关参数指令。解决了不能多次执行回参考点的问题。
由于V90伺服控制器的保存参数功能需要大约2,3秒。寻参动作完成标志变量会在伺服回零动作完成后2,3秒亮起,而在手动模式下,这种延时并不会对其他操作造成大的影响。
六、参考测试后的程序
IF #sCtrl.sFindRef AND #ref_set.Step = 0 THEN
#ref_set.done := false;
#ref_set.Step := 10;
END_IF;
IF NOT #sCtrl.sFindRef THEN
#ref_set.Step := 0;
#ref_set.Ref_active := FALSE;
#ref_set.Servo_disable := FALSE;
#ref_set.SINA_PARA_start := false;
END_IF;
REGION p2507_to_1
//p2507 set to 1
IF #ref_set.Step = 10 AND NOT #SINA_PARA_S.Start THEN
#ref_set.Servo_disable := true;
#ref_set.Step += 1;
END_IF;
IF #ref_set.Step = 11 AND NOT #SINA_PARA_S.Start AND NOT #SINA_POS.AxisEnabled THEN
#SINA_PARA_S.ReadWrite := 1;
#SINA_PARA_S.Parameter := 2507;
#SINA_PARA_S.ValueWrite1 := 1.0;
#SINA_PARA_S.ValueWrite2 := 1;
#ref_set.SINA_PARA_start := true;
END_IF;
IF #ref_set.Step = 12 AND #SINA_PARA_S.Busy THEN
END_IF;
IF #ref_set.Step = 13 AND #SINA_PARA_S.Done AND NOT #SINA_PARA_S.Error THEN
#ref_set.SINA_PARA_start := false;
#ref_set.Servo_disable := FALSE;
#ref_set.Step := 20;
END_IF;
END_REGION
REGION active REF move
//active ref move
IF #ref_set.Step = 20 AND NOT #SINA_PARA_S.Start AND #SINA_POS.AxisEnabled THEN
#ref_set.Ref_active := TRUE;
END_IF;
IF #ref_set.Step = 21 AND NOT #SINA_POS.AxisRef THEN
END_IF;
IF #ref_set.Step = 22 AND #SINA_POS.AxisRef THEN
#ref_set.Ref_active := FALSE;
#ref_set.Step := 30;
END_IF;
END_REGION
REGION p2599_to_0
//p2599 set to 0
IF #ref_set.Step = 30 AND NOT #SINA_PARA_S.Start THEN
END_IF;
IF #ref_set.Step = 31 AND NOT #SINA_PARA_S.Start AND NOT #SINA_POS.AxisEnabled THEN
#SINA_PARA_S.Parameter := 2599;
#SINA_PARA_S.ValueWrite1 := 0.0;
#SINA_PARA_S.ValueWrite2 := 0;
END_IF;
IF #ref_set.Step = 32 AND #SINA_PARA_S.Busy THEN
END_IF;
IF #ref_set.Step = 33 AND #SINA_PARA_S.Done AND NOT #SINA_PARA_S.Error THEN
#ref_set.Step := 40;
END_IF;
END_REGION
REGION p2507_to_2
//p2507 set to 1
IF #ref_set.Step = 40 AND NOT #SINA_PARA_S.Start THEN
END_IF;
IF #ref_set.Step = 41 AND NOT #SINA_PARA_S.Start AND NOT #SINA_POS.AxisEnabled THEN
#SINA_PARA_S.ValueWrite1 := 2.0;
#SINA_PARA_S.ValueWrite2 := 2;
END_IF;
IF #ref_set.Step = 42 AND #SINA_PARA_S.Busy THEN
END_IF;
IF #ref_set.Step = 43 AND #SINA_PARA_S.Done AND NOT #SINA_PARA_S.Error THEN
#ref_set.Step := 50;
END_IF;
END_REGION
REGION p971 to 1
//p2599 set to 0
IF #ref_set.Step = 50 AND NOT #SINA_PARA_S.Start THEN
END_IF;
IF #ref_set.Step = 51 AND NOT #SINA_PARA_S.Start AND NOT #SINA_POS.AxisEnabled THEN
#SINA_PARA_S.Parameter := 971;
END_IF;
IF #ref_set.Step = 52 AND #SINA_PARA_S.Busy THEN
END_IF;
IF #ref_set.Step = 53 AND #SINA_PARA_S.Done AND NOT #SINA_PARA_S.Error THEN
#ref_set.Step := 99;
END_IF;
END_REGION
REGION end
IF #ref_set.Step = 99 THEN
#ref_set.done := TRUE;
#ref_set.SINA_PARA_start := FALSE;
END_IF;
END_REGION
//SINA_PARA_S
#SINA_PARA_S(Start:=#ref_set.SINA_PARA_start,
AxisNo:=16#02,
hardwareId:=#HW_access);
五、总结调用参数过程,总结如下:
值回零,在p2507为3时,不能执行回零动作。
仅在p2507为1时,才能执行回零动作
回零流程:
1.将p2507改为1
2.执行回零动作
3.将p2599改为0(参考点坐标值)
4.将p2507改为2(执行值校准)
5.将p971改为1(保存参数从RAM至ROM)
六、应用效果