JZGKCHINA
工控技术分享平台
1
前情提要
1
一、SINAMICS驱动器的EPOS功能
EPOS(基本位置控制)是位置环在驱动器侧,由驱动器自身完成位置闭环控制的功能。SINAMICS驱动器里S系列(S110、S120)以及V90PN都内置了此功能,而G120系列中CU250S-2需要通过购买授权和CF卡方式获得该功能。
表1:西门子驱动器EPOS功能
基本定位器功能包括以下几个模式:
(1) 设定值直接给定/MDI
(2) 运行程序段
(3) 回参考点
(4) 点动
(5) 运行到固定挡块
1
二、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指令。
图1:驱动库调用原理
1
三、V90PN 通过111报文定位的实现过程
如上所述FB284库实际上就是通过一致性读写指令去对111报文的IO进行操作,下面我们自己做一个简单的FB来实现FB284基本功能,主要给大家分析如何对报文操作。
1. 111报文
因为是操作111报文,所以我们首先需要了解该报文的详细信息,111报文是带扩展功能定位运行报文,常用于EPOS的控制。111报文在通信组态时映射的IO地址如图2所示,我们实际上就是对此IO的操作,可以看到111报文是12个接受/发送字,每个控制/状态字的含义如表3所示。
图2:111报文IQ地址
过程数据通道 | 地址 | 信号 | 描述 | 数据类型 |
---|---|---|---|---|
PLC-驱动器 | ||||
PZD1 | QW64 | STW1 | 控制字1 | U16 |
PZD2 | QW66 | POS_STW1 | 基本定位器的控制字1 | U16 |
PZD3 | QW68 | POS_STW2 | 基本定位器的控制字2 | U16 |
PZD4 | QW70 | STW2 | 控制字2 | U16 |
PZD5 | QW72 | OVERRIDE | 位置速度倍率 | U16 |
PZD6 | QD74 | MDI_TARPOS | MDI位置 | I32 |
PZD7 | ||||
PZD8 | QD78 | MDI_VELOCITY | MDI速度 | I32 |
PZD9 | ||||
PZD10 | QW82 | MDI_ACC | MDI加速度倍率 | U16 |
PZD11 | QW84 | MDI_DEC | MDI减速度倍率 | U16 |
PZD12 | QW86 | USER | 用户定义接受字 | U16 |
驱动器-PLC | ||||
PZD1 | IW68 | ZSW1 | 状态字1 | U16 |
PZD2 | IW70 | POS_ZSW1 | 基本定位器的状态字1 | U16 |
PZD3 | IW72 | POS_ZSW2 | 基本定位器的状态字2 | U16 |
PZD4 | IW74 | ZSW2 | 状态字2 | U16 |
PZD5 | IW76 | MELDW | 消息字 | U16 |
PZD6 | ID78 | XIST_A | 位置实际值A | I32 |
PZD7 | ||||
PZD8 | ID82 | NIST_B | 转速实际值B | I32 |
PZD9 | ||||
PZD10 | IW86 | FAULT_CODE | 故障代码 | U16 |
PZD11 | IW88 | WARN_CODE | 报警代码 | U16 |
PZD12 | IW90 | USER | 用户定义发送字 | U16 |
表3: 111报文数据格式
2. EPOS功能、111报文及FB284对应关系
EPOS的几种运行模式就是通过对111报文的IO读写实现的,对应关系如表4/5所述。
FB284管脚 | 111报文 | Q区地址 | EPOS功能描述 | |
---|---|---|---|---|
输入参数/控制数据 | ||||
1 | EnableAxis | STW1.0 | Q65.0 | 接通电机/轴使能 |
2 | ConfigEPos.%X0 | STW1.1 | Q65.1 | 1=OFF2(自由停车)无效 |
3 | ConfigEPos.%X1 | STW1.2 | Q65.2 | 1=OFF3(快速停车)无效 |
4 | STW1.3 | Q65.3 | 允许运行(可以使能脉冲) | |
5 | CancelTransing | STW1.4 | Q65.4 | 0=拒绝执行任务 1=不拒绝执行 |
6 | IntermediateStop | STW1.5 | Q65.5 | 0=暂停运行任务 1=不暂停 |
7 | ExecuteMode | STW1.6 | Q65.6 | 激活运行任务 |
STW1.11 | Q64.3 | 启动回参考点命令 | ||
POS_STW2.1 | Q69.1 | 设置参考点 | ||
8 | AckError | STW1.7 | Q65.7 | 故障确认 |
9 | JOG1 | STW1.8 | Q64.0 | 正向点动使能(信号源1) |
10 | JOG2 | STW1.9 | Q64.1 | 反向点动使能(信号源2) |
11 | STW1.10 | Q64.2 | 1=PLC控制 | |
12 | POS_STW1.0-1.5 | Q67.0-5 | 选择运行程序段编号 | |
13 | POS_STW1.8 | Q66.0 | 1=绝对定位 0=相对定位 | |
14 | Positive | POS_STW1.9 | Q66.1 | 两个位组合 0-最短距离绝对定位1-正方向,2-负方向 |
15 | Negative | POS_STW.10 | Q66.2 | |
16 | ConfigEPos.%X8 | POS_STW1.12 | Q66.4 | 1 =连续接受设定值(可以实时改变)0 = STW1.6从 0 变为 1 后,才接收位置设定值的修改。 |
17 | POS_STW1.14 | Q66.6 | 1=信号调整 0=信号定位 | |
18 | POS_STW1.15 | Q66.7 | 1 = MDI 选择 0=运行程序段 | |
19 | ConfigEPos.%X6 | POS_STW2.2 | Q69.2 | 1=参考点挡块激活(原点开关信号) |
20 | FlyRef | POS_STW2.8 | Q68.0 | 1=运行中回零(被动回零)0=不选择运行中回零(主动回零) |
21 | Positive/Negative | POS_STW2.9 | Q68.1 | 1=在负方向搜索参考点 0=在正方向 |
22 | ConfigEPos.%X2 | POS_STW2.14 | Q68.6 | 1=激活软限位开关 |
23 | ConfigEPos.%X3 | POS_STW2.15 | Q68.7 | 1=激活硬件限位 |
24 | Position | MDI_TARPOS | QD74 | ModePos=1 或2 时的位置设定值ModePos=6 时的程序段号 |
25 | Velocity | MDI_VELOCITY | QD78 | ModePos=1、2、3 时的速度设定值 |
26 | OverV | OVERRIDE | QW72 | 速度倍率 |
27 | OverAcc | MDI_ACC | QW82 | 加速度倍率 |
28 | OverDec | MDI_DEC | QW84 | 减速度倍率 |
表4: 111报文控制字详细描述
FB284管脚 | 111报文 | I区地址 | EPOS功能描述 | |
---|---|---|---|---|
输出参数/状态数据 | ||||
1 | AxisEnabled | ZSW1.2 | I69.2 | 驱动已使能 |
2 | AxisError | ZSW1.3 | I69.3 | 驱动故障 |
3 | AxisWarn | ZSW1.7 | I69.7 | 驱动报警 |
4 | AxisPosOk | ZSW1.10 | I68.2 | 轴的目标位置到达 |
5 | AxisRef | ZSW1.11 | I68.3 | 回零位置设置 |
8 | ActPosition | XIST_A | ID78 | 当前位置 |
ActVelocity | NIST_B | ID82 | 当前速度 | |
9 | EPosZSW1 | EPOS ZSW1的状态 | ||
10 | EPosZSW2 | EPOS ZSW2的状态 | ||
12 | ActFault | FAULT_CODE | IW86 | 当前的故障代码 |
ActWarn | WARN_CODE | IW88 | 当前的报警代码 |
表5: 111报文状态字详细描述
3.EPOS各功能配合111报文的具体实现
(1)一致性读写
前面说过通过DPWD/DAT和DPWR_DAT指令实现,如图2所示。
图2:一致性读写指令
(2)轴使能
伺服各种运动模式运行的前提就是先使能接通电机,这里就要提到大家耳熟能详的16#047E和16#047F了。大家用西门子G120包括V20变频器都很清楚这是停止(OFF1)和正转启动控制字,再加上速度给定就可以启停运行了。同样基于SINAMICS平台的V90PN伺服也是如此,区别就是伺服轴需要激活不同的运行任务,所以STW1.6一开始是0,由后面具体任务控制。这样V90轴使能就是把16#047E/16#047F控制字里的第6位改为0,也就是16#043E/16#043F。当然驱动器断电后再上电也需要先赋值停止控制字才能转入启动,轴使能程序如图3所示。
图3:V90PN轴使能
(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三种,如表6所示。
表6:MDI的控制
(5)回原点(主动)如表7所示
表7:主动回原
(6)直接设置参考点
实际就是直接将POS_STW2.1置1。
(7)运行程序段如表8所示
表8:运行程序段
(8)点动/速度如表9所示
表9:点动速度
(9)点动/增量如表10所示
表10:点动增量
(10)设定值实时更改
有时我们需要在当前任务还没结束时触发新的任务(就是加载新的设定值),这时只需要POS_STW1.12置1即可(FB284里的ConfigEPos.%X8就是对应该位)。
4.程序编写注意事项
要注意运行模式切换时报文相关控制位的复位,这样不会导致现有模式的状态干扰到下一模式,比如点动模式里正转和反转位(STW1.8和STW1.9)在其他模式里就要程序里将其置0。下面是编写用于EPOS运行FB的部分程序,未考虑报警等处理,只是实现基本功能演示,实际项目中我们都是用官方的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;
图4:“自制FB284”功能块
作 者 简 介
郭老师
电气自动化专业培训师
西门子工业专家
工业自动化控制系统专家
曾担任某研究院电气所副所长,擅长系统技术架构设计与开发,精通西门子、施耐德电气、罗克韦尔等各主流品牌全集成自动化系统的设计、编程、调试,包括西门子博途自动化平台、施耐德Modicon和Somachine平台等,涉及浮法玻璃生产、除尘环保、天然气能源、卷绕机械、涂装、非标流水线等多个行业。
2014/2016/2018连续三届荣获西门子颁发的“西门子工业专家”称呼,2016和2018年连续两届应邀在西门子工业专家会议上演讲。
往期回顾
S7-200SMART和S7-1200之间的ModbusTCP通讯
姿势已摆好
就等你点啦
更多资讯 请关注我们