在工业自动化车间里,8个工位共用一台电动运输车的场景非常普遍。想象一下,这就像幼儿园里8个小朋友共用一辆玩具车,谁先举手谁就能先玩——只不过我们的"小朋友"是车间工人,"举手"变成了按下呼车按钮,而"玩具车"则是重达数百公斤的工业运输设备。
这个PLC呼车系统的核心需求可以拆解为三个层次:
基础功能层:
安全防护层:
人机交互层:
关键设计要点:所有工位的指示灯虽然物理上独立接线,但在程序中采用统一控制。这种设计既节省了PLC输出点(实际只用了1个输出点控制所有指示灯),又简化了程序逻辑。不过需要在HMI画面上做好状态映射,避免现场操作人员误解。
根据项目需求,我们选择的硬件配置如下:
| 组件类型 | 型号示例 | 数量 | 备注说明 |
|---|---|---|---|
| PLC主机 | S7-1200 1214C DC/DC/DC | 1台 | 14点输入/10点输出 |
| 数字量输入模块 | SM 1221 DI16x24VDC | 1块 | 扩展工位限位开关信号 |
| HMI面板 | KTP700 Basic | 1台 | 7寸触摸屏,支持ProSave备份 |
| 中间继电器 | MY4N-J 24VDC | 2个 | 控制接触器线圈 |
| 交流接触器 | LC1D09 220VAC | 2个 | 电机正反转控制 |
主电路设计有两个重要保护措施:
IO分配方案特别考虑了信号隔离:
python复制# 输入信号分配(以工位1为例)
I0.0 -> 工位1限位开关 (常开触点)
I0.1 -> 工位1呼车按钮 (自复位式)
I8.0 -> 系统启动按钮 (带灯指示)
I8.1 -> 急停按钮 (常闭触点)
# 输出信号分配
Q0.0 -> 工位1指示灯 (红色LED)
...
Q7.0 -> 工位8指示灯
Q8.0 -> 正转接触器 (KM1)
Q8.1 -> 反转接触器 (KM2)
现场布线经验:限位开关建议使用屏蔽电缆,且与电机动力线保持30cm以上距离。曾有个案例因信号干扰导致台车频繁误动作,最后在PLC输入端并联0.1μF电容解决了问题。
程序采用模块化设计,主要功能块包括:
核心的抢答逻辑采用事件驱动设计:
st复制// 呼车事件处理(简化版SCL代码)
IF #SystemReady THEN
FOR #i := 1 TO 8 DO
IF #Workstation[#i].CallButton AND NOT #VehicleRunning THEN
#CurrentCall := #i;
#CallLock := TRUE;
#AllLights := FALSE;
EXIT; // 确保只有一个工位能抢到呼叫权
END_IF;
END_FOR;
END_IF;
台车移动决策采用三态比较法:
st复制CASE #CurrentCall OF
> #CurrentPosition:
#Forward := TRUE;
#Timer := T#5S; // 加速延时
< #CurrentPosition:
#Reverse := TRUE;
#Timer := T#5S;
ELSE:
#ParkingTimer := T#30S;
END_CASE;
位置检测的防抖处理方案:
st复制// 限位信号滤波(延迟确认)
IF #LS_Input THEN
#FilterTimer := #FilterTimer + T#10MS;
IF #FilterTimer >= T#50MS THEN
#Confirmed := TRUE;
END_IF;
ELSE
#FilterTimer := T#0MS;
#Confirmed := FALSE;
END_IF;
采用WinCC Advanced的脚本控制实现动态按钮组:
javascript复制// 按钮背景色脚本
function ButtonColor(workstation) {
if (GetTagBit("Call_Lock_" + workstation)) {
return "#FF0000"; // 红色-已被呼叫
} else if (GetTagBit("Vehicle_Present_" + workstation)) {
return "#FFFF00"; // 黄色-台车在位
} else {
return "#00FF00"; // 绿色-可呼叫
}
}
配置了三级报警系统:
使用报警组态技巧:
xml复制<AlarmConfiguration>
<AlarmClass Name="Emergency" BackColor="Red" TextColor="White"/>
<AlarmClass Name="Warning" BackColor="Yellow" TextColor="Black"/>
<AlarmClass Name="Info" BackColor="Blue" TextColor="White"/>
</AlarmConfiguration>
静态测试:
空载测试:
带载测试:
压力测试:
| 故障现象 | 可能原因 | 排查方法 |
|---|---|---|
| 台车不启动 | 急停回路未导通 | 测量安全继电器输出端子电压 |
| 随机误停车 | 限位开关信号干扰 | 用示波器检测信号波形 |
| 正反转切换时有火花 | 接触器灭弧器损坏 | 更换灭弧器并检查动作时间差 |
| HMI显示状态滞后 | PLC-HMI通讯周期过长 | 优化PROFINET通讯参数 |
| 30秒停车时间不准 | TON定时器时间基准错误 | 检查OB35循环中断时间设置 |
物流统计功能:
能耗监控模块:
预测性维护:
增加激光扫描仪:
双PLC冗余系统:
安全扭矩关断(STO):
这个PLC呼车系统虽然看似简单,但涵盖了工业自动化控制的精髓——从信号采集、逻辑处理到运动控制和HMI交互。建议初学者可以从修改工位数量开始(比如扩展到16个工位),这会迫使你重新思考程序架构和硬件配置。在实际项目中,我们还需要考虑设备防护等级(至少IP54)、环境温度(-10~55℃范围)以及抗振动性能等工程细节。