1. 项目背景与方案选型
最近完成了一个基于S7-1500 PLC和FB284功能块控制三台V90 PN伺服驱动器的项目,整个系统通过PROFINET网络实现通信。这种架构在工业自动化领域非常典型,特别适合需要多轴协调控制的场景,比如包装机械、物料输送等应用。
为什么选择FB284方案?在西门子生态中,控制V90驱动器主要有三种方式:
- 直接使用工艺对象(TO)实现闭环控制
- 通过FB284功能块进行控制
- 自行开发报文通信程序
FB284方案的最大优势在于它完美平衡了开发效率和灵活性。相比工艺对象方案,FB284提供了更底层的控制接口;而相比自行开发报文通信,它又大大简化了开发流程。FB284已经封装了所有PROFINET通信细节,开发者只需要关注业务逻辑即可。
2. 硬件配置与网络组态
2.1 硬件准备清单
- S7-1516-3 PN/DP PLC(6ES7 516-3AN00-0AB0)
- V90 PN伺服驱动器(6SL3210-5FE10-1UF0)×3
- SIMATIC HMI KTP700 Basic触摸屏
- PROFINET交换机(推荐使用西门子SCALANCE XB005)
2.2 GSD文件导入与设备命名
在TIA Portal V17中导入V90的GSDML文件时,我强烈建议使用西门子官网提供的最新版本。老版本的GSD文件可能会导致某些参数无法正确映射。导入后,三台V90会出现在硬件目录的"Other field devices"→"PROFINET IO"→"Drives"→"SIEMENS AG"下。
设备命名是新手最容易踩坑的地方之一。每台V90的设备名称必须满足:
- 在PROFINET网络中唯一
- 与驱动器实际设置的名称完全一致(包括大小写)
- 不超过127个字符
- 只包含字母、数字和下划线
我通常采用"V90_轴号_位置"的命名规则,比如"V90_1_Feeder"、"V90_2_Conveyor"等。设置完成后,一定要在V90的调试软件中确认设备名称已经正确写入。
2.3 硬件标识符分配
在硬件组态中,每个V90驱动器都会自动分配一个硬件标识符(HW ID)。这个ID非常重要,它是FB284识别不同驱动器的关键参数。在我的项目中,三个轴的硬件标识符分别是:
- 轴1:256
- 轴2:257
- 轴3:258
重要提示:硬件标识符在编译后会自动生成,不要手动修改这个值。如果需要查看,可以在项目树的"PLC变量"→"显示所有系统变量"中找到。
3. FB284功能块详解与PLC编程
3.1 FB284接口参数解析
FB284是西门子提供的标准功能块,用于通过PROFINET控制第三方驱动器。它的接口参数可以分为几大类:
-
基本控制参数:
- Axis (HW_ID):硬件标识符,对应组态中的HW ID
- Execute (BOOL):功能块执行使能
- Error (BOOL):错误状态输出
-
运动控制参数:
- Position (REAL):目标位置(单位:用户定义)
- Velocity (REAL):目标速度(单位:用户定义)
- Acceleration (REAL):加速度(单位:用户定义/s²)
- Deceleration (REAL):减速度(单位:用户定义/s²)
-
状态反馈参数:
- StatusWord (WORD):驱动器状态字
- ActualPosition (REAL):实际位置
- ActualVelocity (REAL):实际速度
3.2 PLC程序实现
对于多轴控制,我建议为每个轴创建单独的数据块(DB)。以下是轴1的控制程序示例:
pascal复制// 轴1控制程序
"Axis1_DB".Axis := 256; // 硬件标识符
"Axis1_DB".Execute := #Axis1_Enable;
"Axis1_DB".Position := #Axis1_SetPosition;
"Axis1_DB".Velocity := 500.0; // 默认速度500单位/秒
CALL "FB284", "Axis1_DB"
Axis := "Axis1_DB".Axis
Execute := "Axis1_DB".Execute
Position := "Axis1_DB".Position
Velocity := "Axis1_DB".Velocity
// 其他参数...
Error => #Axis1_Error
StatusWord => #Axis1_Status;
3.3 控制字设置技巧
伺服使能序列是调试中最容易出问题的环节。正确的控制字设置流程应该是:
- 上电初始化:16#0006 → 16#0007
- 伺服使能:16#000F → 16#047E → 16#047F
- 运动控制:根据模式设置相应控制字
我专门编写了一个功能块来处理这个序列:
pascal复制FUNCTION_BLOCK "FB_ServoEnable"
VAR_INPUT
Enable : BOOL;
Reset : BOOL;
END_VAR
VAR_OUTPUT
ControlWord : WORD;
Ready : BOOL;
END_VAR
VAR
state : INT;
timer : TON;
END_VAR
CASE state OF
0: // 初始状态
ControlWord := 16#0006;
IF Enable THEN state := 1; END_IF;
1: // 上电初始化
ControlWord := 16#0007;
timer(IN := TRUE, PT := T#500MS);
IF timer.Q THEN state := 2; timer(IN := FALSE); END_IF;
2: // 伺服使能准备
ControlWord := 16#000F;
state := 3;
3: // 伺服使能过渡
ControlWord := 16#047E;
timer(IN := TRUE, PT := T#200MS);
IF timer.Q THEN state := 4; timer(IN := FALSE); END_IF;
4: // 伺服使能完成
ControlWord := 16#047F;
Ready := TRUE;
END_CASE;
IF Reset THEN
state := 0;
Ready := FALSE;
timer(IN := FALSE);
END_IF;
4. V90参数配置关键点
4.1 基本参数设置
在V90调试软件中,以下参数必须正确配置:
-
通信参数:
- p29009[0]:PROFINET设备名称(必须与TIA Portal中一致)
- p29010[0]:IP地址分配方式(通常设为1,自动获取)
-
控制模式参数:
- p29000:控制模式选择(设为3,PROFINET控制)
- p29001:报文类型(设为402,标准报文)
4.2 位置控制相关参数
对于定位应用,这些参数需要特别注意:
- p2625:位置到达窗口(默认50,建议设为20)
- p2630:位置超时时间(单位ms)
- p2640:速度阈值(低于此值认为速度为0)
4.3 报警处理配置
为了在HMI上显示详细的报警信息,需要配置:
- p29013:PROFINET报警使能(设为3,启用所有报警)
- p29014:报警掩码(根据需要设置)
5. HMI界面设计与变量连接
5.1 控制面板设计要点
在WinCC中设计多轴控制面板时,我遵循以下原则:
- 每个轴独立区域,用不同颜色区分
- 状态信息集中显示
- 手动操作与自动模式分离
典型的控制元素包括:
- 伺服使能按钮
- 报警复位按钮
- 点动控制(正/反转)
- 位置显示(设定值/实际值)
- 速度显示/设置
5.2 变量连接技巧
HMI变量应直接绑定到PLC的DB块,而不是M区。这样做的好处是:
- 变量有明确的语义名称
- 便于维护和扩展
- 支持结构体变量访问
例如,在WinCC中创建变量时,路径应该是:
"PLC1"."Axis1_DB".ActualPosition
5.3 报警信息显示
将V90的报警代码转换为可读信息是提升用户体验的关键。我的做法是:
- 在PLC中创建一个报警代码转换功能块
- 建立报警代码与文本的映射表
- 在HMI中使用文本列表显示
pascal复制FUNCTION "ConvertAlarmCode" : STRING
VAR_INPUT
Code : WORD;
END_VAR
CASE Code OF
16#7300: "过载报警";
16#7380: "过压报警";
16#2310: "编码器故障";
// 其他报警代码...
ELSE: "未知报警";
END_CASE;
6. 调试经验与故障排除
6.1 常见问题及解决方案
-
问题:伺服无法使能
- 检查控制字时序是否正确
- 确认V90参数p29000设为3
- 检查PROFINET连接状态
-
问题:位置到达信号不触发
- 调整p2625参数(减小窗口值)
- 检查实际位置与目标位置的差值
- 确认速度是否真的降到0
-
问题:通信中断
- 检查设备名称和IP地址
- 确认PROFINET电缆连接可靠
- 检查交换机配置
6.2 调试步骤建议
-
单轴调试阶段:
- 先测试伺服使能/禁用
- 然后测试点动控制
- 最后测试定位控制
-
多轴联调阶段:
- 测试轴间同步
- 检查PROFINET网络负载
- 验证急停逻辑
6.3 性能优化技巧
- 降低PROFINET通信周期(最小可到1ms)
- 优化PLC程序扫描周期
- 使用OB35等周期性组织块处理运动控制
- 合理设置V90的滤波参数
7. 项目总结与扩展建议
经过这个项目的实践,FB284方案确实展现出了它的优势:开发效率高、运行稳定、维护方便。三轴同步控制时,PROFINET网络的实时性完全满足要求,抖动时间控制在1ms以内。
对于更复杂的运动控制需求,我有几点扩展建议:
- 考虑使用西门子工艺对象(TO)实现更高级的运动控制功能
- 对于需要高精度同步的应用,可以尝试IRT通信
- 增加安全功能,通过PROFIsafe实现安全转矩关断
这个项目的PLC程序和HMI界面我已经整理成模板,包含以下功能:
- 多轴独立/协调控制
- 完善的报警处理
- 参数保存与恢复
- 手动/自动模式切换