1. 系统整体设计与需求拆解
入行做工业自动化这些年,我接触过不少产线级的配给项目,但像卷烟厂原辅料这样“品类多、批次严、逻辑杂”的系统,确实值得单独拿出来好好聊聊。很多人一听“自动配给系统”就以为是堆几个传感器、写段 PLC 程序让料仓按顺序出料,真做起来才发现,难点根本不在硬件,而在逻辑设计——如何把配方、批次、库存、称量、输送、追溯这些环节串成一个不打架、不出错、可追溯的闭环。
这个项目的核心目标,通俗讲就一句话:让卷烟生产所需的烟叶、薄片、香精香料、添加剂等原辅料,在生产计划下达后,能够自动、精准、按顺序地配送到对应工位,整个过程无需人工干预或少人干预,同时每批料用了什么、用了多少、来自哪个批次,全部有据可查。它解决的痛点非常明确:
- 原辅料种类多,人工配料容易拿错、漏配、重复配;
- 配方比例靠经验记忆,缺乏标准化流程,质量波动大;
- 批次追溯靠纸质单据,出了问题溯源难;
- 产线换批换料时调整慢,影响生产节拍。
适合参考这套逻辑的,不只是卷烟行业,食品、医药、日化这些有配方管理、批次追溯要求的流程型产线,都可以把思路迁移过去。
1.1 工艺背景与需求拆解
卷烟生产的原辅料配给,和普通物料输送有本质区别。普通输送看重的是“把 A 点的东西搬到 B 点”,而配给系统看重的是“在正确的时间、按正确的配方比例、用正确的批次、送到正确的工位”。这四个“正确”缺一个,整批烟叶的口感配方就可能出问题,轻则批量返工,重则整批报废。
具体到工艺端,原辅料大致分三类:
第一类是烟叶原料。不同产地、不同年份的烟叶,等级和理化指标差异很大,配方里对每种烟叶的比例有严格要求。这类物料形态松散、密度不稳定,称量时不能简单按体积估算,必须按重量精确配料。
第二类是香精香料和添加剂。这部分用量小、种类多,有的单批用量只有几百克甚至几十克,但直接影响吸味和香气。它们通常以液态或膏状形态存放,配给时需要高精度的计量泵或称重模块。
第三类是卷烟纸、滤棒、包装材料等辅料。这类属于标准规格物料,更偏“数量配给”而非“重量配给”,逻辑上相对简单,但要和上游供应商批次绑定。
需求拆解下来,系统必须覆盖几条主线:配方管理、批次管理、库存与库位管理、配给任务生成、取料称量控制、输送逻辑、交接确认、异常处理、数据追溯。每条主线下面又有若干子逻辑,后面逐个展开。
1.2 系统架构与技术选型
自动化系统的逻辑设计,永远要回答一个问题:这活儿由谁说了算?卷烟厂原辅料配给系统,目前主流做法是“上位系统定计划,中间层排任务,PLC 层执行动作,现场层反馈结果”的四级架构。
- 计划层:MES 或 ERP 下发生产工单,包含产品牌号、批次号、计划产量、要求完成时间;
- 调度层:WMS/LES(仓储物流执行系统)接收工单,结合库存、配方、库位信息,生成配给任务序列;
- 控制层:PLC/SCADA 根据任务序列控制输送线、称量设备、阀门、机器人的动作;
- 感知层:传感器、称重仪表、RFID 读头、条码枪把现场数据反馈给上层。
我见过不少项目,一上来就想在 PLC 里实现全套配方管理和批次追溯,结果程序写得异常复杂,改一种配方就要重新下载程序,后期的维护成本高得离谱。正确做法是:PLC 只负责“动作执行”和“实时安全”,配方、库存、任务调度这些“决策逻辑”尽量放上位机。这样换配方不用动 PLC,换班记录、报表查询也方便,系统扩展性会好非常多。
1.3 关键术语与设计边界
在项目启动前,有几个术语先得对齐,否则后面沟通全是坑:
- “配给”和“输送”的区别。输送只管搬运,配给包含“该拿多少、拿哪个批次、给到哪台设备”的决策,前者是执行层,后者是决策层;
- “工单”和“配给任务”的区别。一个工单可能拆分出多个配给任务,比如同一批烟叶配方要分三次配给,因为料仓容量有限;
- “批次”和“批号”的区别。烟叶原料有供应商批次,生产过程中的中间品也有内部批号,设计数据模型时不能混为一谈;
- “自动模式”和“半自动模式”的切换边界。必须设计成:上位机故障时,现场操作员可以在触摸屏上手动指定配方和数量,完成配给,而不是整个产线停摆。
边界定义清楚之后,逻辑设计才不会跑偏。我在这个项目里吃过亏:早期没把“配给任务”和“工单”拆开,结果一个工单挂了五个配方,任务状态乱成一团,后来硬是重构了数据模型才理顺。
2. 核心逻辑设计与数据模型
逻辑设计做得好不好,一半看数据模型。数据模型理顺了,后面的任务调度、称量控制、追溯查询就是顺水推舟;模型没理顺,后面每加一个功能都是在补窟窿。
2.1 配方管理与批处理
配方管理是配给系统的“大脑”。烟厂配方有个特点:同一个品牌,可能有好几个“版本”,比如不同年份烟叶配比不同、不同批次微调比例。所以配方表不能只存一套固定值,必须带版本号和生效时间。
设计配方数据结构时,至少包含以下几层:
- 配方头:配方编号、配方名称、版本号、状态(草稿/发布/停用)、生效时间;
- 配方明细:原辅料编码、理论配比(百分比或每批用量)、允许偏差范围、替代料规则、投料顺序;
- 批次关联:当前生产批次使用的配方版本快照。
这里特别强调“快照”这个词。假设系统当前用的是 V2.1 版配方,结果生产到一半,工艺员把配方升到了 V2.2。如果不做快照,后续批次的追溯数据就会和新版本混在一起,根本说不清楚这批烟叶到底按哪个配方生产的。正确的做法是,生产工单生成的那一刻,把当时的配方版本完整复制一份,和工单号绑定,之后即使配方更新,已生成工单的数据不受影响。
投料顺序在配方里也必须显式定义。烟叶配给不是把所有原料一股脑倒进去就完事,不同烟叶的混合顺序对最终均匀性有影响。配方明细里的“顺序号”字段,控制的是取料和投料的先后逻辑,而不是简单做个排序显示。
2.2 库存与库位管理
原辅料库存和成品库存的管理逻辑差别很大。原辅料是“先入先出”还是“先到期先出”,取决于物料特性。烟叶原料长期存储会自然醇化,适当存放反而改善品质,但香精香料这类有保质期的物料,必须严格按到期日先后出库。
库位管理我建议采用“虚拟库位 + 实物标识”的双轨方式。所谓虚拟库位,是指系统里把仓库划分成若干个逻辑区域,比如“烟叶库 A 区 01 货位”“香料库 B 区 03 罐位”,每个库位可以绑定多个批次。但实物上不可能做到一料一位,尤其是烟叶这种大体积物料,一个货位往往堆了好几批。
解决办法是强化“实物标识”:每一托、每一箱原辅料入库时,都要贴唯一条码或 RFID 标签,标签内容包含物料编码、供应商批次号、入库数量、生产日期、到期日期。系统里的库位是逻辑归属,实物识别靠标签。配给任务下发到现场时,操作员或机械手通过扫码/读 RFID 确认“拿的是这一批”,系统再校验该批次是否属于当前工单允许的批次范围。
这套逻辑的好处是,账实可以做到动态一致,不需要频繁盘点。当然,系统里也要定期跑“账实差异分析”,比如某个库位账面上还有 500kg,但实物扫码出去的累计量已经 510kg,这时候就要触发异常告警,而不是等到下次盘点才发现。
2.3 需求计算与任务调度
需求计算是整个配给系统最核心的逻辑模块。它解决的是:一个工单下来,系统要配多少料、分几次配、先配什么后配什么、哪台配料站执行。
需求计算的输入包括:工单计划产量、产品配方(版本快照)、库存可用量、库位信息、设备状态、生产节拍。输出是一组有序的配给任务。
计算公式不复杂,基本上是:某个原料的需求量 = 计划产量 × 配方比例。真正复杂的是“分批”和“优先级”逻辑。
举例说明:某配方中 A 烟叶占 40%,B 烟叶占 30%,C 薄片占 25%,D 香料占 5%。某一批工单计划投料 2000kg,那么理论需求量是 A=800kg、B=600kg、C=500kg、D=100kg。但配给站的称量斗容量只有 500kg,那么 A 烟叶的需求量就必须拆成两个任务:第一批 500kg,第二批 300kg。拆批逻辑的标准是:不能超过设备容量上限,同时尽量让每个任务满载,减少换料次数。
任务优先级排序,我的经验是按两个维度综合判定:一是投料顺序(配方里的顺序号),二是物料齐套性。比如配方里要求先投 A 再投 B,但如果 A 的库存还没到位,B 的库存已经齐了,系统可以适度调整顺序,前提是不影响工艺。这个“允许调整”的开关必须由工艺部门确认,不能由自动化工程师自行决定。
调度逻辑还要处理“撞车”问题。多台配料站同时向同一个料仓要料,或者真空输料管道同时被两个任务占用,都需要在任务调度层做互锁。我的做法是,建立“设备占用表”,任务下发前先尝试锁定所需设备资源,锁定成功才执行,失败则进入等待队列,防止现场设备和管道冲突。
3. 实操过程与关键环节实现
逻辑设计不能只停留在框图和数据字典层面,最终要能在现场跑起来。这一节我挑几个关键环节,把实现细节掰开讲,包括我实际调试时记录的参数和处理方式。
3.1 取料称量环节的闭环控制
取料称量是配给系统物理执行的第一步,也是最容易出偏差的一步。烟叶原料松散、流动性差,称量时如果只靠“开启料门-关闭料门”这种简单的两步控制,冲击力和残余料会让实际重量和设定值差得离谱。
我采用的方法是“双速给料 + 提前量补偿”。具体来说:
- 粗加料阶段:料门全开,以最大速度出料,目标是尽快达到设定值的 80%~90%;
- 精加料阶段:料门开度减小,或改用振动给料器,以小流量慢速补料;
- 停止判定:在精加料阶段,PLC 实时采集称重传感器的稳定值,当“当前重量 + 预计冲击量”达到目标值时发出停止信号。
这里有个关键参数:冲击量补偿值。料流从停止到完全截止,还有一小段“惯性料”会落入称量斗,这个量的大小受物料密度、落料高度、料门结构影响。我实测下来,烟叶的冲击补偿量通常在 0.5%~1.5% 之间,香精类液体则几乎为零。补偿值需要在试生产阶段逐料实测标定,记录到系统参数表里。
称量精度的校验逻辑也不能省。每次称量完成后,PLC 要把实际称重值、设定值、偏差值三条数据上传到上位机。当偏差超过允许范围(比如烟叶配料允许 ±0.5%,香料允许 ±0.2%)时,系统自动触发“修正配给”或“异常标记”,而不是默认接受。实际运营中,我建议把“偏差趋势”纳入监控——如果某一个配料站连续多次出现同一方向的偏差,大概率是给料机构磨损或传感器漂移,需要安排检修,而不是单次超偏差才告警。
3.2 输送与交接环节的状态机设计
配给任务从“取料完成”到“送达工位”,中间要经过输送带、提升机、管道或者 AGV。这一段逻辑设计的关键是交接确认。
状态机设计是我最推荐的方式。每个配给任务都有明确的状态:待下发 → 已下发 → 取料中 → 取料完成 → 输送中 → 到达待卸 → 卸料完成 → 已确认。任何异常都对应一个“异常待处理”状态,处理完成后可以恢复到正常流转,而不是直接跳转。
输送环节最容易出的问题是物料“张冠李戴”。比如输送管路里有残留物料,上一批的 A 烟叶还没走完,这一批的 B 烟叶就开始输送,结果到了下游工位,料已经不是设定的料了。
我采用的防护组合是“物理隔离 + 逻辑校验”:
- 物理隔离:长距离输送管道设置清洁吹扫工位,批次切换时自动吹扫,并配置气流检测,确认管路清洁后放行下一批;
- 逻辑校验:到达工位卸料前,系统首先核对“任务批次号 + 工位号”,RFID 读头或条码枪负责读取“物料标签”,工控机比对标签信息和任务信息一致后才允许开卸料门。
这个环节我踩过不小的坑:早期系统把“输送完成”等同于“交接完成”,结果物料到了工位、卸料都卸了一半了,才发现物料批次不对。后来强制加入“卸料前双确认”逻辑,才彻底解决。
3.3 信息追溯与异常处理
追溯是配给系统的“审计日志”,平时没人看,出事的时候就是救命稻草。设计追溯数据时,我遵循一条原则:每一条追溯记录必须能回答“5W1H”——谁、什么时间、在哪台设备、做了什么操作、针对哪个批次、结果如何。
具体落地,我在数据库里维护了以下几张核心表:
- 配给任务表:任务号、工单号、配方版本号、原料物料号、目标工位、计划数量、实际数量、偏差、状态、创建人、完成时间;
- 设备动作表:每次称量、输送、卸料动作的关键参数,包括设备编号、动作类型、设定值、实测值、时间戳;
- 批次关联表:生产批次号与原料供应商批次的对应关系;
- 异常记录表:异常编号、异常类型、触发条件、现场快照数据、处理方式、处理人、处理时间。
异常处理的等待逻辑尤其重要。比如某批烟叶在称量时连续三次超差,系统自动将该任务挂起并通知上位机。此时操作员可以选择:放行(确认偏差可接受)、重配(废弃当前称量结果重新配料)、换批(改用其他批次库存)。无论哪种处理,都必须留痕。我还在异常记录表里增加了一个字段叫“处理前后状态对比”,方便事后复盘。
3.4 网络与数据落地的几个细节
配给系统的数据流分为实时数据和非实时数据两类。实时数据包括称重值、设备状态、输送速度,走工业以太网或现场总线,要求延迟在毫秒级;非实时数据包括配方、库存、报表,走管理层网络,对延迟不敏感但对完整性要求高。
在项目里,我给配给系统设计了两层网络:控制层网络和管理层网络,中间通过工业防火墙做隔离。这样做有两点好处:一是避免管理层的大数据量传输干扰实时控制;二是万一管理网络出了问题,控制层还能独立运行,现场不会失控。
数据落地的时间戳统一用 PLC 时钟还是上位机时钟,这个细节很多人忽略。我踩过的坑是:PLC 和上位机各自打时间戳,结果追溯时发现称重记录时间和任务下发时间差了好几百毫秒,对不上账。后来统一以 PLC 时钟为准,上位机通过 NTP 定时同步 PLC 时间,彻底解决了这个问题。
4. 常见问题与排查技巧实录
做这类系统,现场调试期是最熬人的。我把自己遇到过的典型问题整理成了一张表,后面是详细的排查思路,希望能帮大家少走弯路。
| 现象 | 可能原因 | 排查方向 | 解决方案 |
|---|---|---|---|
| 称重偏差持续偏大 | 给料门磨损/冲击量补偿值不准 | 对比多次称量记录,分析偏差方向 | 重新标定补偿值,更换给料门密封件 |
| 任务状态卡在“取料中” | 称重传感器信号未稳定/信号丢失 | 查 PLC 诊断缓存,看传感器实时值 | 增加信号稳定判定时间,检查接线屏蔽 |
| 批次信息对不上账 | 标签绑定错误/扫描漏读 | 查标签打印和扫码记录 | 增加入库校验环节,扫码必比对 |
| 输送管路异响 | 管路内部残留物/气流不稳 | 检查清洁吹扫逻辑是否触发 | 增加输送压差检测,超限自动停 |
| 多站抢料冲突 | 任务调度层缺少资源锁 | 查看设备占用表 | 增加锁定/释放逻辑,细化互锁粒度 |
| 追溯报表查询慢 | 数据表无索引/查询条件过大 | 分析慢查询日志 | 按时间分区建索引,限制默认查询范围 |
4.1 称重偏差问题的深度排查
这是现场最头疼的问题,因为偏差来源太多了。有些项目组一看到偏差超标就调 PID 参数或者换硬件,我建议先做一次“偏差来源分离”:
第一步,做静态标定。在称量斗空斗状态下,放标准砝码,看仪表显示值是否和砝码一致。这一步排除传感器和仪表本身的问题。
第二步,做动态空跑。不给料,只触发给料门开关动作,观察称重值是否受到开关冲击影响。有些振动会给传感器带来干扰。
第三步,做实体料测试。以固定设定值反复配料十次,记录每次的实际值和偏差。分析这些数据的标准差和偏差方向。
我遇到过一种很隐蔽的问题:某配料站偶发超差,但静态标定和动态空跑都正常。后来通过长时间录制称重值曲线发现,给料机在某一特定频率下产生共振,导致给料速度波动。解决办法是在 PLC 里跳过该频段的给料速度设定值,问题才彻底消失。这类“软故障”排查起来最费时间,但做完一次,对整个系统的理解也会加深很多。
4.2 任务状态卡死的常见原因
状态机设计得再完善,现场也难免出现状态卡死。最常见的情况是:任务已经实际完成卸料,但系统状态还停在“输送中”。这种情况十有八九是“到位信号”没触发。
到位信号一般来自接近开关、光电传感器或 RFID 读取。排查顺序:先到现场看传感器指示灯是否亮,再查 PLC 输入点是否收到信号,接着查上位机是否收到 PLC 上报的状态,最后看数据库记录。只要有一个环节断了,状态就传不上去。
我的处理经验是,在 PLC 里给每个状态转换设置“超时看门狗”。例如:输送中状态超过设定时间(比如 5 分钟)未转换为到达待卸,系统自动触发告警并记录当前所有相关设备的状态快照。这样一来,问题一发生,值班人员就能从告警信息里直接看出是哪个环节超时,不用大海捞针式地排查。
4.3 追溯数据对不上的修复技巧
追溯数据出问题,最怕的是“生产已经完成了,发现数据缺了一段”。这种事后补数据非常痛苦,所以一定要靠日常机制防患于未然。
我在系统中加了两个小功能:每日定时巡检、数据完整性校验。每天凌晨系统自动比对“工单应产生的配给任务数”和“实际任务记录数”,不一致就生成差异报表。数据完整性校验则是检查关键字段是否为空,比如配给任务表里的实际数量如果是 0,但状态显示已完成,这明显是异常数据。
补录逻辑必须带“补录标记”。因系统故障导致的数据缺失,允许手工补录,但补录记录必须自动标记为“人工补录”,录入人、录入时间都要留痕。这样即使有补录数据,审计时也能分清哪些是自动采集的、哪些是人工干预的,不会影响追溯的公信力。
4.4 多批次共线生产的防错设计
现在很多烟厂一条产线同时生产多个品牌,共线生产时,原辅料配给最怕“串味”和“串批”。我设计的防错逻辑有一道“硬隔离”和一道“软校验”。
硬隔离指的是,配方切换时,所有与物料接触的设备表面必须完成清洁确认。这个“确认”不是操作员拍脑袋点一下按钮就行,而是系统记录清洁动作的时间、执行人、清洁介质、清洁时长,并且在管道出口设置检测点。
软校验指的是,共线生产的每个工位要有“允许任务清单”。比如 3 号配料站当前服务于牌号 X 的工单,那么系统只允许下发牌号 X 的配给任务到 3 号站。即使操作员在触摸屏上手动选择了其他牌号的任务,系统也会弹出警告并要求输入授权密码才允许执行。
我在现场调试时发现一个很有意思的现象:硬件防错大家都重视,软件防错却常常被认为“多此一举”。但实际上,大量配给错误都发生在“人偷懒想走捷径”的时候——比如直接复制上一批的任务参数,忘记改批号。软校验拦住的恰恰就是这种人为疏忽。
5. 实操心得与经验总结
现在系统已经在现场稳定运行了相当长一段时间,回头整理这个项目的经验,我有几点想跟大家分享的心得。
关于逻辑设计的优先级,我最大的体会是“先理顺数据模型,再谈控制程序”。很多自动化工程师习惯拿到需求就直接写梯形图或者结构化文本,但配给系统这种牵扯配方、批次、库存、调度的系统,不先把数据模型理清楚,程序写到后面一定会东改西补。我这一版系统,前期花了将近四成的时间在设计数据结构和接口协议上,后面编码和调试反而顺畅得多。
关于异常处理,很多新手容易忽略“异常恢复路径”的设计。大家往往花大力气设计正常流程,异常分支则草草处理。实际上,在卷烟厂连续生产的场景下,异常恢复路径用到的频率远高于你想象。配给任务卡住了怎么办、称量重复执行会不会重复扣库存、人工干预后系统怎么重新同步状态——这些问题在逻辑设计阶段就应该想清楚,而不是等现场出了状况再临时打补丁。
关于系统冗余,我的建议是“关键环节必须有手动兜底”。即使自动化程度再高的系统,也要保留操作员在触摸屏上的手动干预能力。这不是倒退,而是工程现实:设备维护、清洁、试生产这些场景,都需要从自动模式切到手动模式。手动模式下,系统依然要记录操作日志,只是不再执行自动校验。
最后再分享一个小技巧:配给系统的“配方参数表”里,我习惯把所有物料的冲击补偿值、允许偏差、输送速度、吹扫时间做成一张可以动态调整的参数表,而不写死在程序里。这样每次换料调试,维护人员只需要在 HMI 上修改参数,不需要改程序、停机下载。这个细节看着不起眼,实际运维时省下的时间非常多。
如果你正在规划类似的配给系统,我建议先花几天时间去车间蹲点,看看操作员是怎么应对异常情况、拿料时有哪些习惯动作、最怕哪个环节出问题。把现场的“潜规则”摸清了,再动手做逻辑设计,你会发现很多原来以为很复杂的方案其实根本不需要,而很多看着不起眼的细节反而是系统成败的关键。