基于PLC的工业流水线防错机制:自动拦截错装、漏装等生产异常
流水线防错不靠人盯,核心是把“身份—工单BOM—工位动作—结果反馈”做成闭环。物理防错放第一层(定位销、非对称治具),传感器+PLC互锁放第二层(到位、型号、计数、扭矩),视觉/力觉放第三层;错装漏装主要在第二层用PLC硬逻辑拦,第三层做复核。
一、信息模型与身份采集
每件/每托盘绑RFID或条码,上线写VIN/工单/机型;PLC读身份后向MES要BOM清单,返回“应装零件号+数量+扭矩窗口+必经工位”。汽车混线可用滑橇HF RFID,读VIN后MES下发车型BOM,机器人/拧紧/加注自动切程序,型号不符直接互锁。 现场轻量方案用条码枪通过串口/以太网把SN发边缘网关,网关查BOM再写PLC数据区,PLC不直连数据库更稳。
二、SCL防错功能块
按工位建FB,输入身份、各零件到位、型号码、动作完成计数、扭矩合格、超时时间;输出允许继续、报警、NG锁定、追溯字符串。
TYPE E_Poka : (IDLE,IDENT,BOM_CHK,ASSEM,VERIFY,NG,PASS); END_TYPE
FUNCTION_BLOCK FB_AntiMiss
VAR_INPUT RFID:STRING[32]; SN:STRING[32];
PartPresent:ARRAY[1..6] OF BOOL; // 各零件到位
PartModel:ARRAY[1..6] OF INT; // 实际型号码
ActCount:INT; // 实际装配数/拧螺丝数
TorqueOK:BOOL; // 扭矩工具合格信号
ExpBOM:ARRAY[1..6] OF INT; // MES下发应装型号
ExpCount:INT; Tout:TIME:=T#3S; Ack:BOOL; END_VAR
VAR_OUTPUT Allow:BOOL; Alarm:BOOL; NG:BOOL; Trace:STRING[80]; END_VAR
VAR Stat:E_Poka:=IDLE; Ton:TON; cnt:INT; END_VAR
CASE Stat OF
IDLE: IF RFID<>'' THEN Stat:=IDENT; END_IF;
IDENT: IF SN<>'' THEN Stat:=BOM_CHK; END_IF;
BOM_CHK:
FOR cnt:=1 TO 6 DO
IF NOT PartPresent[cnt] THEN Stat:=NG; Trace:='MISS:'+INT_TO_STRING(cnt); EXIT; END_IF;
IF PartModel[cnt]<>ExpBOM[cnt] THEN Stat:=NG; Trace:='WRONG:'+INT_TO_STRING(cnt); EXIT; END_IF;
END_FOR;
IF Stat=BOM_CHK THEN Stat:=ASSEM; END_IF;
ASSEM: Ton(IN:=TRUE,PT:=Tout);
IF ActCount>=ExpCount AND TorqueOK THEN Stat:=VERIFY; Ton(IN:=FALSE); END_IF;
IF Ton.Q THEN Stat:=NG; Trace:='TIMEOUT/LESS'; END_IF; // 漏装、超时、未达标全拦
VERIFY: IF ActCount=ExpCount AND TorqueOK THEN Stat:=PASS; ELSE Stat:=NG; END_IF;
NG: Allow:=FALSE; Alarm:=TRUE; NG:=TRUE;
IF Ack THEN Stat:=IDLE; Alarm:=FALSE; END_IF;
PASS: Allow:=TRUE; Trace:='OK '+RFID+' '+SN;
END_CASE;
接近开关未到位时,拧紧/压装使能直接置0,不靠HMI弹窗; 相似零件用不同型号码比对,装反可用非对称传感器或视觉补判。
三、边缘侧BOM比对
多品牌PLC用Python边车拉MES,按工单缓存BOM,定时下发并回收结果:
import requests
def load_bom(wo):
r=requests.get("http://mes/bom",params={"wo":wo},timeout=2).json()
return {p["slot"]:(p["model"],p["qty"],p["torque_min"],p["torque_max"]) for p in r["items"]}
def check(station,bom,feed):
for slot in bom:
exp_m,exp_q,tmin,tmax=bom[slot]
if feed[slot]["model"]!=exp_m: return False,f"WRONG {slot}"
if feed[slot]["qty"]<exp_q: return False,f"MISS {slot}"
if not (tmin<=feed[slot]["torque"]<=tmax): return False,f"TORQUE {slot}"
return True,"OK"
PLC只认边车写好的ExpBOM/ExpCount,网络断了按上一工单缓存执行并打“离线防错”标志,恢复后补传追溯。
四、拦截与追溯闭环
错装:型号/零件码不等→立即Hold工位、锁工具、亮红灯、Andon推班长;漏装:到校验步计数不足或到位超时→不进下一站,NG品打标;扭矩不合格:拧紧枪回传NG→复拧一次仍不行转人工,不自动放行。 每条记录写SN、工位、RFID、BOM版本、实际型号、数量、扭矩、时间、操作人,落本地SQL再上MES,支持按序列号倒查哪一步漏做。
五、验收与防绕过
上线前用“挑战件”测试:故意少一件、换错型号、扭矩偏低、条码污损,确认全部拦截而非仅报警;运行期统计防错触发次数、误拦率、拦截不良率、MTTR。 互锁不允许HMI一键旁路,调试旁路须密码+时限+审计;传感器每月点检接近距离、RFID场强、条码识别率,视觉定期重采光照模板。按“身份绑定工单—BOM下发电 PLC—到位/型号/计数/扭矩四级校验—NG Hold追溯”落地,错装漏装可在本工位截住,不流到终检和客户端。





