1. 项目背景与核心需求
去年在东莞某新能源电池生产线实施的自动排列机项目,本质上是要解决电池模组在装配前的精准队列编排问题。这个看似简单的物料排列动作,在实际工业场景中却需要协调多个关键子系统:
- 多轴协同控制:四台V90伺服电机需要以±0.1mm的重复定位精度,将电池模组从传送带搬运到指定工装位置
- RFID信息绑定:每个模组上的RFID标签需要实时读取并验证,确保产品追溯信息准确
- MES系统交互:需要与工厂MES系统交换生产订单数据,实现动态排产
- 异常处理机制:当出现定位偏差、RFID读取失败等情况时,系统需在300ms内完成状态判断并触发相应处理流程
2. 硬件架构设计要点
2.1 核心设备选型
项目采用的硬件配置经过严格验证,关键设备选型逻辑如下:
| 设备类型 | 型号 | 选型依据 |
|---|---|---|
| PLC控制器 | S7-1217C DC/DC/DC | 自带3个Profinet端口,可直连4台伺服(通过交换机扩展),满足150μs的循环通讯周期 |
| 伺服驱动器 | V90 PN (200V系列) | 支持Profinet IRT通讯,内置EPOS功能,固件版本2.04支持多轴同步控制 |
| RFID读头 | SIMATIC RF200 | M30接口防护等级达IP67,适应产线油污环境,读取距离稳定在30±2mm |
| HMI | TP700 Comfort | 7寸触摸屏支持WinCC Advanced V16,可实时显示四轴运动轨迹和报警信息 |
2.2 电气设计关键细节
CAD图纸中几个值得注意的设计:
- 伺服使能回路:所有伺服驱动器的使能信号(63/64)串联急停按钮和光栅信号,形成硬件级安全回路
- 电源分配:
- 伺服主电源:独立63A空开+滤波器
- 控制电源:24V分三路(PLC+I/O、伺服控制、传感器)各带过流保护
- 接地处理:
- 动力电缆与信号电缆分层走线
- 每个伺服驱动器PE端子单独接地线(截面积≥4mm²)
3. 软件架构实现
3.1 轴控制状态机设计
核心轴控制FB采用状态机模式,这是工业控制中处理顺序逻辑的经典方法。代码中的状态迁移逻辑如下:
pascal复制// 状态定义
TYPE AxisState :
(
IDLE, // 待机状态
HOMING, // 回零中
POSITIONING, // 定位中
HOLDING, // 保持位置
FAULT // 故障状态
)
END_TYPE
// 状态处理核心逻辑
CASE stCurrentState OF
AxisState.IDLE:
IF bStartCmd THEN
rTargetPos := CalculateTarget(); // 计算目标位置
stCurrentState := AxisState.POSITIONING;
END_IF;
AxisState.POSITIONING:
fbV90.Execute := TRUE;
IF fbV90.Done THEN
stCurrentState := AxisState.HOLDING;
ELSIF fbV90.Error THEN
stCurrentState := AxisState.FAULT;
END_IF;
// 其他状态处理...
END_CASE;
关键经验:状态机的每个状态转换必须设置超时监控,建议采用TON定时器实现,避免因信号丢失导致系统死锁
3.2 RFID数据交互实现
RFID读写采用非标准校验策略,具体处理流程:
- 数据采集:通过RF200的DB块直接读取原始字节数据
- 格式转换:将BCD码转换为ASCII字符串
- 校验处理:采用异或校验算法验证数据有效性
- MES对接:通过TSEND_C指令将有效数据发送至MES服务器
pascal复制// RFID数据处理示例
FUNCTION ProcessRFID : Bool
VAR_INPUT
dbRawData : BLOCK_DB;
END_VAR
VAR
sDecoded : STRING[20];
byCheckSum : BYTE;
END_VAR
// BCD转ASCII
sDecoded := BCD_TO_STRING(dbRawData.DBW0, LEN := 10);
// 校验位计算(第4字节与第10字节异或)
byCheckSum := BYTE_TO_INT(sDecoded[4]) XOR BYTE_TO_INT(sDecoded[10]);
IF byCheckSum <> 16#FF THEN
RAISE_ALARM(ALARM_ID := 1001);
RETURN FALSE;
END_IF;
RETURN TRUE;
4. 运动控制关键技术
4.1 多轴同步策略
实现四轴协同运动的关键参数配置:
| 参数项 | 设定值 | 说明 |
|---|---|---|
| Profinet循环周期 | 2ms | 需在TIA Portal中配置为同步域(Sync Domain) |
| 位置环更新时间 | 1ms | V90参数P29003设为1000 |
| 同步窗口时间 | ±50μs | 通过FB284的"GroupID"参数实现多轴同步 |
| 加减速曲线类型 | S曲线 | 设置P29010=3可减少机械冲击 |
4.2 动态队列管理
物料队列采用环形缓冲区实现,核心数据结构:
pascal复制TYPE QueueItem :
STRUCT
iSlotID : INT; // 槽位编号
sRFID : STRING[24]; // 产品标识
rTargetPos : REAL; // 目标位置
bProcessed : BOOL; // 处理标志
END_STRUCT
END_TYPE
VAR_GLOBAL
arrQueue : ARRAY[1..50] OF QueueItem;
iHead : INT := 1; // 队列头指针
iTail : INT := 1; // 队列尾指针
END_VAR
队列操作算法:
- 入队操作:当RFID读取成功后,将数据写入arrQueue[iTail],iTail循环递增
- 出队操作:轴完成定位后,标记arrQueue[iHead].bProcessed为TRUE,iHead循环递增
- 队列监控:当(iTail - iHead) MOD 50 > 40时触发队列报警
5. 故障诊断系统设计
5.1 报警代码体系
采用分层式报警编码方案:
- 位15:紧急停止(1)/警告(0)
- 位14-12:设备分类(1=PLC, 2=伺服, 3=RFID...)
- 位11-0:具体故障代码
示例报警处理逻辑:
pascal复制// 报警处理函数
METHOD HandleAlarm : VOID
VAR_INPUT
wAlarmCode : WORD;
END_VAR
CASE wAlarmCode AND 16#F000 OF
16#1000: // PLC相关报警
CASE wAlarmCode AND 16#0FFF OF
16#0001: AddAlarm("CPU看门狗超时", EAlarmLevel.EMERGENCY);
16#0002: AddAlarm("IO模块通讯故障", EAlarmLevel.WARNING);
END_CASE;
16#2000: // 伺服相关报警
CASE wAlarmCode AND 16#0FFF OF
16#0001: AddAlarm("V90超程报警", EAlarmLevel.EMERGENCY);
16#0002: AddAlarm("跟随误差过大", EAlarmLevel.WARNING);
END_CASE;
END_CASE;
5.2 典型故障处理方案
实际项目中遇到的几个典型问题及解决方案:
-
伺服定位抖动
- 现象:轴运动到目标位置后出现±0.5mm波动
- 排查:检查机械联轴器间隙→调整V90参数P29021(位置环增益)从35降到28
- 根治:在伺服电机与丝杠间加装弹性联轴器
-
RFID间歇性漏读
- 现象:同一标签有时读取失败
- 排查:用示波器检测电源纹波→发现24V电源存在200mVpp噪声
- 根治:在RFID读头电源端增加π型滤波器(100μF+10Ω+100μF)
-
PN通讯闪断
- 现象:偶发轴控FB284报"通讯故障"
- 排查:通过Wireshark抓包发现IP地址冲突
- 根治:修改PLC和所有V90的IP为静态地址,并设置交换机端口隔离
6. 系统优化经验
6.1 性能提升技巧
-
通讯优化:
- 将FB284的调用周期从10ms改为5ms,响应速度提升40%
- 在OB35中集中处理所有轴控FB调用,避免时序混乱
-
运动曲线优化:
- 采用S曲线加减速替代梯形曲线,振动降低60%
- 通过V90参数P29012-P29015优化各轴速度前馈
-
内存管理:
- 使用优化的SCL算法替代LAD梯形图,扫描周期缩短30%
- 对频繁访问的DB块启用"优化块访问"属性
6.2 维护性设计
-
调试接口:
- 在HMI预留"工程师菜单",可手动调整各轴参数
- 通过Web服务器实时监控PLC负载率
-
故障再现:
- 开发专用的诊断FB,可记录最后100个运动指令
- 在触摸屏集成"故障回放"功能
-
版本管理:
- 使用TIA Portal的版本控制功能
- 每个程序块头部包含修改历史注释
7. 项目交付成果
最终实现的系统指标:
| 指标项 | 设计值 | 实测值 |
|---|---|---|
| 定位精度 | ±0.1mm | ±0.08mm |
| 节拍时间 | 6s/件 | 5.4s/件 |
| RFID读取成功率 | 99.5% | 99.8% |
| 系统MTBF | 2000小时 | 2350小时 |
特别值得分享的两个实用技巧:
-
伺服参数快速克隆:
- 通过TIA Portal的"导出参数集"功能
- 使用Startdrive的"设备替换"功能批量配置多台V90
-
HMI动画优化:
- 采用WinCC的"间接变量"实现动态图标
- 使用VBS脚本预处理运动轨迹数据
- 启用"平滑移动"算法避免画面闪烁