1. 项目背景与核心需求解析
在新能源电池生产线上,自动排列机是实现电芯高效分选与组配的关键设备。传统的人工排列方式不仅效率低下(每分钟仅能处理3-5个电芯),而且容易因人为因素导致极性装反、序列号错位等质量事故。我们团队基于西门子S7-1200 PLC与V90 PN伺服系统开发的这套解决方案,实现了每分钟60个电芯的全自动精准排列,同时通过RFID技术确保每个电芯的完整数据追溯。
这个系统的技术难点主要集中在三个方面:
- 四轴同步控制要求各伺服轴在±0.1mm的定位精度下保持运动同步性
- RFID读写需要在电芯以1m/s速度通过时实现100%读取成功率
- 设备状态监控需要实时解析32个伺服状态参数并做出毫秒级响应
2. 硬件架构设计与选型考量
2.1 控制系统核心配置
采用西门子S7-1215C DC/DC/DC PLC作为主控制器,具体选型参数:
- 工作内存:100KB(实际FB284程序占用约45KB)
- 通信接口:2个PN口(X1口连接HMI,X2口连接4台V90 PN伺服)
- 数字量I/O:14输入/10输出(满足急停、安全门等基础信号需求)
关键提示:务必选择固件版本V4.2以上的CPU,早期版本对FB284的PN通信存在兼容性问题
2.2 伺服系统关键参数
四台V90 PN伺服电机配置如下表:
| 轴号 | 电机型号 | 额定扭矩 | 编码器分辨率 | 减速比 | 应用场景 |
|---|---|---|---|---|---|
| X轴 | 1FL6034-2AF | 4.3Nm | 20bit | 1:10 | 水平输送 |
| Y轴 | 1FL6032-2AF | 3.2Nm | 20bit | 1:5 | 垂直升降 |
| Z1轴 | 1FL6032-2AF | 3.2Nm | 20bit | 1:8 | 左机械手 |
| Z2轴 | 1FL6032-2AF | 3.2Nm | 20bit | 1:8 | 右机械手 |
伺服驱动器的关键参数设置:
- P29011=3(PROFINET通信周期1ms)
- P29240=1(启用动态制动)
- P29255=100(过载保护阈值)
3. FB284功能块深度解析
3.1 功能块接口定义
FB284的典型调用方式:
code复制CALL "FB284", "Servo_DB"
Axis := 1 // 轴号1-4
Execute := %M100.0 // 启动命令
Position := REAL#150.0 // 目标位置(mm)
Velocity := REAL#500.0 // 速度(mm/s)
Acceleration := REAL#3000 // 加速度(mm/s²)
Deceleration := REAL#3000 // 减速度(mm/s²)
Done := %M100.1 // 定位完成
Busy := %M100.2 // 运行中
Error := %M100.3 // 错误状态
3.2 多轴同步控制实现
在新能源排列机中,四轴需要实现两种同步模式:
- 主从跟随模式(X轴为主轴,Y/Z轴跟随)
ST复制// 主轴位置读取
"Servo_DB_X".ActualPos -> "Servo_DB_Y".Position
-> "Servo_DB_Z1".Position
-> "Servo_DB_Z2".Position
// 从轴滞后补偿
"Servo_DB_Y".Position := "Servo_DB_Y".Position + REAL#5.0
- 电子齿轮模式(Z1/Z2轴保持1:2速比)
ST复制IF "GearMode_Active" THEN
"Servo_DB_Z2".Velocity := "Servo_DB_Z1".Velocity * 2
END_IF
4. RFID通信与数据处理
4.1 硬件连接方案
采用西门子RF182C读写头通过RS485连接CM1241通信模块,关键参数:
- 通信速率:115200bps
- 触发模式:光电传感器硬件触发
- 数据格式:ASCII码(含16位校验和)
4.2 数据解析程序
电芯RFID数据帧格式示例:
|STX|01|BAT20230725A01|3.7V|60Ah|CHK|ETX|
对应的SCL解析程序:
SCL复制FUNCTION "RFID_Parse" : Void
{ S7_Optimized_Access := 'TRUE' }
VAR_INPUT
RawData : ARRAY[1..32] OF Byte;
END_VAR
VAR_OUTPUT
SN : STRING[20]; // 序列号
Volt : REAL; // 电压
Cap : REAL; // 容量
Valid : Bool; // 数据有效
END_VAR
VAR_TEMP
i : Int;
Checksum : Word;
END_VAR
BEGIN
// 校验帧头帧尾
IF (RawData[1] <> 16#02) OR (RawData[UBOUND(RawData,1)] <> 16#03) THEN
Valid := FALSE;
RETURN;
END_IF;
// 计算校验和
Checksum := 0;
FOR i := 2 TO UBOUND(RawData,1)-2 DO
Checksum := Checksum + RawData[i];
END_FOR;
// 提取数据
IF WORD_TO_INT(Checksum) = BYTE_TO_INT(RawData[UBOUND(RawData,1)-1]) THEN
SN := BYTE_TO_STRING(RawData[3..14]);
Volt := STRING_TO_REAL(BYTE_TO_STRING(RawData[15..19]));
Cap := STRING_TO_REAL(BYTE_TO_STRING(RawData[20..24]));
Valid := TRUE;
END_IF;
END_FUNCTION
5. 伺服状态监控与故障诊断
5.1 状态字解析方案
V90 PN的状态字(StatusWord)采用西门子标准驱动协议,关键位定义:
| 位号 | 含义 | 异常处理措施 |
|---|---|---|
| 0 | 准备就绪 | 检查电源模块24V供电 |
| 3 | 故障状态 | 读取参数r2122获取详细错误代码 |
| 5 | 速度达到 | 检查P1082速度环参数 |
| 6 | 位置达到 | 验证P2598位置窗口参数 |
| 10 | 跟随误差报警 | 调整P2547位置容差带 |
对应的状态监控程序:
ST复制// 轴1状态监控
IF "Servo_DB".StatusWord.3 THEN
"Alarm_Array"[1] := TRUE;
"Error_Code" := "Servo_DB".ErrorNumber;
END_IF;
// 跟随误差检测
IF ABS("Servo_DB".ActualPos - "Servo_DB".SetpointPos) > "Servo_DB".PosTolerance THEN
"Servo_DB".Deceleration := 5000.0; // 紧急减速
END_IF;
5.2 典型故障处理记录
我们在调试过程中遇到的三个典型问题及解决方案:
-
问题现象:Z轴偶尔出现E740.0过载故障
- 排查过程:通过Trace功能记录发现减速时电流突增
- 解决方案:修改P2565=50(降低减速度曲线)
-
问题现象:RFID读取成功率仅85%
- 排查过程:用示波器检测发现传感器触发信号抖动
- 解决方案:在DI端并联0.1μF电容滤波
-
问题现象:四轴同步时Y轴有±0.3mm抖动
- 排查过程:机械检查发现联轴器有0.1mm间隙
- 解决方案:更换零背隙联轴器并重做补偿
6. 系统优化与性能提升
6.1 通信周期优化
通过调整PROFINET通信参数实现性能提升:
| 参数 | 默认值 | 优化值 | 效果 |
|---|---|---|---|
| 通信周期 | 4ms | 1ms | 位置环响应时间缩短60% |
| 看门狗时间 | 100ms | 50ms | 故障检测更及时 |
| 数据包间隔 | 2 | 1 | 减少通信抖动 |
对应的硬件配置步骤:
- 在TIA Portal中右键点击PLC设备
- 选择"属性→PROFINET接口→高级选项"
- 设置"发送时钟"为1ms
- 勾选"等时同步模式"
6.2 运动控制算法改进
针对新能源电芯的轻量化特点,我们改进了梯形加减速算法:
SCL复制FUNCTION "Improved_Accel_Profile" : REAL
VAR_INPUT
CurrentPos : REAL;
TargetPos : REAL;
MaxVel : REAL;
Accel : REAL;
Jerk : REAL := 500.0; // 加加速度
END_VAR
VAR_TEMP
t1,t2,t3 : REAL;
s1,s2,s3 : REAL;
END_VAR
BEGIN
// 计算各段时间
t1 := Accel / Jerk;
t3 := t1;
t2 := (MaxVel - Accel*t1) / Accel;
// 计算各段距离
s1 := Jerk * POWER(t1,3) / 6;
s2 := Accel * t1 * t2 + 0.5 * Accel * POWER(t2,2);
s3 := MaxVel * t3 - Jerk * POWER(t3,3) / 6;
// 返回实际速度设定值
RETURN MIN(MaxVel, (TargetPos - CurrentPos) / (t1 + t2 + t3));
END_FUNCTION
实际应用数据显示,这种S型曲线算法使电芯排列时的振动幅度降低了42%,定位精度从±0.1mm提升到±0.05mm。
