一、SINAMICS驱动器的EPOS功能
EPOS(基本位置控制)是位置环在驱动器侧,由驱动器自身完成位置闭环控制的功能。SINAMICS驱动器里S系列(S110、S120)以及V90PN都内置了此功能,而G120系列中CU250S-2需要通过购买授权和CF卡方式获得该功能。
图1:西门子驱动器EPOS功能
基本定位器功能包括以下几个模式:
(1) 设定值直接给定/MDI
(2) 运行程序段
(3) 回参考点
(4) 点动
(5) 运行到固定挡块
二、TIA Portal 驱动库程序
FB284属于TIA Portal提供的驱动库程序,用于基于博途编程环境的S7-1200、S7-1500、S7-300/400等SIMATIC控制器对G/S120、V90等SINAMICS驱动器的基本定位控制。目前博途驱动库主要包含以下三种类型的功能块:
图2:博途常用驱动库
上面提到了循环和非循环数据交换,在功能块里是如何实现的?实际上FB284/FB285用到了DPRD/DAT和DPWR_DAT指令,即“读取标准DP从站的一致性数据”,而FB286/287则使用了RDREC指令和WRREC指令,如图3所示。
图3:博途驱动库调用原理
说明一下:
(1)博途DPWD/DAT和DPWR_DAT指令前身其实就是经典STEP7 V5里的SFC14和SFC15。大家用DP通信控制变频器等应该都用过,在PROFIBUS或PROFINET网络中主站读取或者写入从站(大于4个字节)连续的数据需要使用 SFC14/SFC15,当然也有个别CPU型号可以不需要。
(2)博途RDREC和WRREC指令前身则是经典STEP7 V5里的SFC58和SFC59。
三、FB284的实现过程(以V90PN为例)
如上所述FB284库实际上就是通过一致性读写指令去对111报文的IO进行操作,下面我们自己做一个简单的FB来实现FB284基本功能,主要给大家分析如何对报文操作。
1、111报文
因为是操作111报文,所以我们首先需要了解该报文的详细信息,111报文是带扩展功能定位运行报文,常用于EPOS的控制。111报文在通信组态时映射的IO地址如图4所示,我们实际上就是对此IO的操作,可以看到111报文是12个接受/发送字,每个控制/状态字的含义可以查找V90或G120/S120手册。
图4:111报文映射IO地址
2. FB284管脚、111报文、EPOS功能间的对应关系,如图5/6所示。
图5:控制输出对应关系
图6:状态反馈对应关系
3.EPOS各功能配合111报文控制V90PN的具体步骤
(1)一致性读写
前面说过通过DPWD/DAT和DPWR_DAT指令实现,如图7所示。
图7:一致性读取指令
(2)轴使能
伺服各种运动模式运行的前提就是先使能接通电机,这里就要提到大家耳熟能详的16#047E和16#047F了。大家用西门子G120包括V20变频器都很清楚这是停止(OFF1)和正转启动控制字,再加上速度给定就可以启停运行了。同样基于SINAMICS平台的V90PN伺服也是如此,区别就是伺服轴需要激活不同的运行任务,所以STW1.6一开始是0,由后面具体任务控制。这样V90轴使能就是把16#047E/16#047F控制字里的第6位改为0,也就是16#043E/16#043F。当然驱动器断电后再上电也需要先赋值停止控制字才能转入启动,轴使能程序如图8所示。
图8:轴使能
(3)设定值和反馈值
位置设定值单位是LU,速度的设定值是1000LU/分钟,111报文的OverV控制字10进制整数16384(十六进制16#4000)对应100%的速度设定值,最大设定速度是十进制32767(对应200%)。而实际速度(反馈值)因为是双字,所以十六进制的40000000H 对应100%的速度基准值(P2000的参数值),实际速度值处理程序如下所示。
#Vel_act.%W0 := "111".R[8];
#Vel_act.%W1 := "111".R[7];
#TR[0] := DINT_TO_REAL(#Vel_act);
#TR[1] :=#参考转速 *(#TR[0] / 1073741824); //16#40000000H//
#当前速度 := REAL_TO_DINT(#TR[1]);
(4)MDI控制
MDI指设定值直接给定,就是通过外部给定来控制驱动器,包括FB284里的运行模式1、2、3三种,如图9所示。
图9:MDI的模式控制
(5)回原点(主动)如图10所示
图10:主动回原点
(6)直接设置参考点
实际就是直接将POS_STW2.1置1。
(7)运行程序段如图11所示
图11:运行程序段
(8)点动/速度如图12所示
图12:点动速度
(9)点动/增量如图13所示
图13:点动增量
(10)设定值实时更改
有时我们需要在当前任务还没结束时触发新的任务(就是加载新的设定值),这时只需要POS_STW1.12置1即可(FB284里的ConfigEPos.%X8就是对应该位)。
4.程序编写注意事项
要注意运行模式切换时报文相关控制位的复位,这样不会导致现有模式的状态干扰到下一模式,比如点动模式里正转和反转位(STW1.8和STW1.9)在其他模式里就要程序里将其置0。下面是编写用于EPOS运行FB的部分程序(参考了FB284),未考虑报警还有容错等处理,只是实现基本功能演示。实际项目中我们都是用官方的FB284库,考虑更全面周到,逻辑更严谨,而且FB284库的程序代码在博途里也能看到。
IF #MODE = 2 THEN
"111".W[1].%X9 := 0;
"111".W[1].%X10 := 0;
"111".W[1].%X12 := #连续接受设定值;
"111".W[1].%X14 := 0;
"111".W[1].%X15 := 1;
"111".W[2].%X2 := 0;
"111".W[0].%X11 := 0;
"111".W[0].%X6 := #定位启动;
"111".W[2].%X5 := 0;
"111".W[1].%X8 := 1;
"111".W[0].%X8 := 0;
"111".W[0].%X9 := 0;
"111".W[2].%X9 := 0;
"111".W[2].%X1 := 0;
IF #TB[3] THEN
"111".W[0].%X6 := 0;
END_IF;
END_IF;
IF #MODE = 3 THEN
IF #正方向 AND NOT #负方向 THEN
"111".W[1].%X9 := 1;
"111".W[1].%X10 := 0;
ELSIF #负方向 AND NOT #正方向 THEN
"111".W[1].%X9 := 0;
"111".W[1].%X10 := 1;
END_IF;
IF #拒绝任务 THEN
"111".W[0].%X4 := 0;
ELSE
"111".W[0].%X4 := 1;
END_IF;
IF #暂停任务 THEN
"111".W[0].%X5 := 0;
ELSE
"111".W[0].%X5 := 1;
END_IF;
"111".W[1].%X12 := #连续接受设定值;
"111".W[0].%X11 := 0;
"111".W[2].%X2 := 0;
"111".W[1].%X14 := 1;
"111".W[1].%X15 := 1;
"111".W[0].%X6 := #定位启动;
"111".W[2].%X5 := 0;
"111".W[0].%X8 := 0;
"111".W[0].%X9 := 0;
"111".W[2].%X9 := 0;
"111".W[2].%X1 := 0;
END_IF;
IF #MODE = 4 THEN
IF #正方向 AND NOT #负方向 THEN
"111".W[2].%X9 := 0;
ELSIF #负方向 AND NOT #正方向 THEN
"111".W[2].%X9 := 1;
ELSE
"111".W[2].%X9 := 0;
END_IF;
"111".W[1].%X9 := 0;
"111".W[1].%X10 := 0;
"111".W[1].%X12 := 0;
"111".W[2].%X2 := #原点开关;
"111".W[0].%X11 := #定位启动;
"111".W[2].%X5 := 0;
"111".W[0].%X8 := 0;
"111".W[0].%X9 := 0;
"111".W[2].%X1 := 0;
图14:自制的简易类FB284功能块
个人总结:大家知道西门子驱动器都叫SINAMICS系列,所有产品遵循通用的平台架构设计,EPOS是SINAMICS里的一个标准功能。实际上就是在变频器速度控制(通过1#报文)基础上扩展了位置控制(通过111报文)就变成了EPOS(基本定位控制),无论是什么驱动器还是离不开电流环-速度环-位置环这样一个由内及外的套路。FB284的使用跟速度控制一样很简单,因为最核心的位置环是伺服完成的,我们仅仅是操作了一下报文而已。当然PLC负责位置环也是一样(比如工艺对象),核心的位置环也是PLC系统内部完成的,我们只是调用了PLCOPEN指令完成一些逻辑控制。