1. 项目概述:双相机四工位检测系统架构解析
这个基于西门子S7-1214PLC和KTP700 Basic PN触摸屏的检测系统,是我去年在汽车零部件行业落地的一个典型项目。系统核心要解决的是多品种小批量生产场景下的高精度尺寸检测问题,整体架构可以形象地理解为"两条检测流水线+四台机械手+两套视觉系统"的协同作业。
1.1 硬件配置方案
主控制器选用1214C DC/DC/DC型号,具体配置考量有三点:
- 脉冲输出能力:需要同时驱动4路步进电机(两工位各两轴)
- 通讯接口需求:标配的PROFINET接口用于连接HMI,外加一个CM1241 RS485模块用于Modbus通讯
- 程序容量:项目预估需要30KB左右代码空间,1214的75KB工作内存完全够用
现场布局采用上下双层设计(如图1),上层工位负责来料初检,下层工位进行复检和分拣。每个工位配置:
- 两套步进系统(X/Y轴)
- 一套SICK视觉传感器
- 光纤检测开关组
- 气动夹爪机构
关键经验:步进驱动器建议选用带细分功能的型号,我们最后用了雷赛DM556驱动器,将脉冲当量提高到0.01mm/脉冲,这个精度完全满足±0.1mm的检测要求。
1.2 软件平台选型
博图V16的选择基于以下实际考量:
- 新版运动控制库支持多轴同步参数配置
- ISO-on-TCP通讯指令集更完善
- 与KTP700 Basic PN的集成开发更便捷
- 新增的配方函数块更适合多品种生产
项目程序结构采用模块化设计:
code复制OB1:主循环
OB35:200ms循环中断(运动控制)
FB101:四轴运动控制功能块
FB201:视觉通讯处理
FB301:Modbus主站协议栈
DB101~DB110:数据交换区
2. 运动控制实现细节
2.1 四轴脉冲控制方案
在脉冲轴配置时需要注意几个关键参数:
javascript复制// 轴参数配置示例
#AxisX.Config.PulseOutput := 2; // 使用PTO2
#AxisX.Config.Mechanical.MicroSteps := 1600; // 驱动器细分设置
#AxisX.Config.Mechanical.LeadScrewPitch := 5.0; // 丝杠导程5mm
#AxisX.Config.Dynamics.MaxVelocity := 100.0; // mm/s
#AxisX.Config.Dynamics.Acceleration := 200.0; // mm/s²
实际调试中发现的问题及解决方案:
-
问题:两轴同步运动时出现位置偏差
- 排查:检查发现两个轴的加减速曲线不一致
- 解决:在轴配置中强制设置相同的Jerk(加加速度)参数
-
问题:高速运行时偶尔丢脉冲
- 排查:示波器检测发现脉冲频率超过100kHz时波形畸变
- 解决:在PLC输出端增加74HC245缓冲器芯片
2.2 状态机编程实践
采用状态机实现多工位协同是项目的关键创新点。我们定义了三级状态层级:
- 主状态(装载→检测→卸载)
- 子状态(各轴运动、相机触发等)
- 异常处理状态
典型代码结构:
pascal复制CASE #MainState OF
STATE_LOAD:
// 执行上料流程
IF 所有轴回零完成 THEN
#MainState := STATE_DETECT;
END_IF;
STATE_DETECT:
// 触发相机检测
#CameraTrigger := TRUE;
IF 检测完成 THEN
#MainState := STATE_UNLOAD;
END_IF;
STATE_UNLOAD:
// 根据检测结果分拣
IF 分拣完成 THEN
#MainState := STATE_LOAD;
END_IF;
END_CASE;
3. 通讯系统实现
3.1 双相机TCP/IP通讯
视觉通讯采用ISO-on-TCP协议,关键配置参数:
sql复制TCON_IP_v4(
InterfaceId := LOCAL.IF_ID,
ID := 1,
ConnectionType := 11, // ISO-on-TCP
ActiveEstablished := TRUE,
RemoteAddress := '192.168.1.100',
RemotePort := 2000,
LocalPort := 2001);
数据交换区设计技巧:
- 使用UDT统一数据结构
- 添加心跳包计数器(500ms周期)
- 设置通讯超时报警(5秒无响应触发)
3.2 Modbus RTU第三方设备集成
RS485模块配置要点:
- 波特率设置必须与从站严格一致
- 建议使用Modbus Poll先单独测试从站
- 在OB1中调用MB_MASTER指令的间隔要大于从站响应时间
典型读保持寄存器代码:
scala复制MB_MASTER(
REQ := #ReadRequest,
MB_ADDR := 1, // 从站地址
MODE := 0, // 读模式
DATA_ADDR := 40001, // 起始地址
DATA_LEN := 4, // 读取长度
DATA_PTR := #TempBuffer);
4. 触摸屏人机界面设计
4.1 多重画面架构
KTP700 Basic PN的画面规划:
- 首页:设备状态总览
- 手动操作页:各轴点动控制
- 配方管理页:产品参数设置
- 报警历史页:故障记录查询
- 系统设置页:权限管理
4.2 配方功能实现
采用DB块存储配方的优势:
- 支持在线修改
- 可进行版本管理
- 断电保持功能可靠
配方数据结构示例:
typescript复制TYPE Recipe_Data :
STRUCT
ProductID : STRING[20];
Length_Tol : REAL;
Width_Tol : REAL;
Camera_Params : ARRAY[1..2] OF Camera_Settings;
END_STRUCT
END_TYPE
5. 现场调试关键问题
5.1 电磁干扰解决方案
遇到的典型干扰现象:
- 步进电机运行时Modbus通讯中断
- 触摸屏出现雪花噪点
- 模拟量信号波动大
采取的改进措施:
- 动力电缆与信号线分层走线
- 所有通讯线改用双绞屏蔽线
- PLC接地线加装磁环
- 开关电源输出端增加LC滤波器
5.2 程序优化技巧
提升运行效率的实践:
- 将周期执行的指令移到OB35中
- 使用ARRAY代替多个单独变量
- 优化DB块访问(减少非必要读写)
- 关键流程添加执行时间监控
6. 系统扩展思考
这个架构其实还有不少可拓展空间:
- 增加OPC UA接口实现MES对接
- 集成RFID实现产品追溯
- 添加第三方力传感器实现压装检测
- 通过Web服务器实现远程监控
最近在另一个项目上,我们就在此基础上增加了机器人上下料模块,通过PROFINET IO实现与PLC的实时数据交换。这也印证了好的系统架构应该像乐高积木一样具备可扩展性。
