这个项目最核心的创新点在于采用了EtherCAT总线+TCP/IP的双网架构设计。欧姆龙NJ501-1300 PLC作为主控制器,通过EtherCAT总线连接分布式I/O模块(ID262/OD2663等),同时通过TCP/IP网络与汇川机器人、基恩士扫码枪等设备通信。这种架构设计使得I/O响应周期可以稳定在2ms以内,远优于传统RS485总线方案。
选择欧姆龙NJ系列PLC主要基于三个关键因素:
分布式I/O模块采用ID262(输入)/OD2663(输出)组合,这种模块化设计带来三个优势:
系统采用星型+菊花链混合拓扑:
code复制[PLC]
├──[EtherCAT交换机]
│ ├──[伺服驱动器1]
│ ├──[伺服驱动器2]
│ └──[I/O从站1]─[I/O从站2]─...
└──[工业交换机]
├──[HMI]
├──[机器人控制器]
└──[扫码枪]
关键网络参数配置:
| 参数项 | EtherCAT网络 | TCP/IP网络 |
|---|---|---|
| 通讯周期 | 1ms | 10ms |
| 抖动 | <50μs | <1ms |
| 最大节点数 | 32 | 64 |
| 冗余设计 | 支持 | 不支持 |
压力控制采用PID+前馈复合算法,通过AD模块采集压力传感器信号(4-20mA),输出控制伺服电机位置。核心算法实现如下:
st复制FUNCTION_BLOCK PressureControl
VAR_INPUT
TargetPressure : REAL;
ActualPressure : REAL;
FeedForward : REAL := 0.0; // 前馈量
END_VAR
VAR_OUTPUT
ServoPosition : REAL;
END_VAR
VAR
PID : PID_CTRL;
FF_Gain : REAL := 0.85; // 前馈增益
END_VAR
// 主控制逻辑
PID(
SetPoint := TargetPressure,
ProcessValue := ActualPressure,
Output => ServoPosition);
ServoPosition := ServoPosition + FeedForward * FF_Gain;
参数整定技巧:
伺服驱动采用汇川IS620P系列,关键配置参数:
| 参数编号 | 参数名称 | 设定值 | 说明 |
|---|---|---|---|
| P1-01 | 控制模式 | 3 | 位置控制模式 |
| P1-37 | 位置指令滤波时间 | 20ms | 平滑轨迹 |
| P2-10 | 速度环比例增益 | 120 | 根据负载惯量调整 |
| P2-11 | 速度环积分增益 | 1000 | 影响跟随性能 |
电子凸轮功能通过CAM表实现,典型配置流程:
威纶通MT8071IE触摸屏上实现实时曲线显示的关键步骤:
st复制// PLC侧数据记录触发逻辑
IF (RecordTrigger) THEN
TrendData[DataIndex].Pressure := ActualPressure;
TrendData[DataIndex].Position := ServoPosition;
DataIndex := DataIndex MOD 1000 + 1; // 循环缓冲区
END_IF
配方数据采用结构体嵌套数组的存储方案:
st复制TYPE BatteryRecipe :
STRUCT
ModelNo : STRING(20);
Thickness : REAL; // 单位mm
Pressure : REAL; // 单位MPa
HoldTime : TIME; // 保压时间
END_STRUCT
END_TYPE
VAR_GLOBAL
Recipes : ARRAY[1..50] OF BatteryRecipe;
CurrentRecipe : USINT := 1;
END_VAR
触摸屏操作流程:
网络状态监测实现代码:
st复制FUNCTION MonitorEtherCAT : BOOL
VAR
SlaveInfo : EC_SLAVE_INFO;
i : UINT;
BEGIN
FOR i := 1 TO EcSlaveCount DO
EcGetSlaveInfo(i, SlaveInfo);
IF SlaveInfo.Status <> EC_SLAVE_STATUS_OPERATIONAL THEN
FaultNodes[faultCount].Alias := SlaveInfo.Alias;
FaultNodes[faultCount].Position := i;
faultCount := faultCount + 1;
END_IF
END_FOR
RETURN (faultCount = 0);
END_FUNCTION
常见故障处理指南:
| 故障现象 | 可能原因 | 解决方案 |
|---|---|---|
| 单个节点通讯中断 | 网线接触不良 | 检查RJ45接头,重做压接 |
| 整个网段通讯失败 | 终端电阻未启用 | 激活末端节点的终端电阻 |
| 周期性通讯抖动 | 电磁干扰 | 改用屏蔽双绞线,增加磁环 |
| 主站报"从站无响应" | 从站供电异常 | 检查24V电源线路 |
HMI端数据库操作实现:
st复制// 创建用户表SQL
CREATE TABLE users (
id INTEGER PRIMARY KEY,
username TEXT UNIQUE,
password TEXT,
level INTEGER
);
// 典型查询语句
SELECT level FROM users WHERE username='operator1';
权限分级设计:
| 等级 | 权限内容 |
|---|---|
| 1 | 仅查看生产数据 |
| 2 | 手动操作设备 |
| 3 | 参数修改 |
| 4 | 配方管理 |
| 5 | 系统配置(含账号管理) |
CT(Cycle Time)计算算法:
st复制// 在每次循环开始时记录时间戳
IF (StartSignal) THEN
CurrentCycleStart := GET_CURRENT_TIME();
IF (LastCycleStart <> 0) THEN
CycleTimes[CycleIndex] := CurrentCycleStart - LastCycleStart;
CycleIndex := CycleIndex MOD 100 + 1;
END_IF
LastCycleStart := CurrentCycleStart;
END_IF
报表生成策略:
这套系统在实际运行中达到了以下性能指标:
调试过程中最大的收获是验证了EtherCAT总线在精密控制领域的优势,特别是其确定的实时性能为压力控制算法提供了可靠的时间基准。而将SQLite数据库集成到HMI的做法,则为中小型锂电设备提供了经济实用的生产管理解决方案。