📅 · 阅读时长 4 分钟 · Meta Smart Factory 团队
关于仓储管理系统的文字,几乎都是为配送写的,搬到工厂里并不合用。配送中心的客户是一张有截单时间的订单:已下达的订单当然会变,但那种变化只是同一班车次之下、一个波次内部的重新排列。工厂的 WMS 服务的是一台机器——它在某一分钟开始一道工序,运行中持续领料,把没用完的退回来,而且会在早上九点被重排,一次带动几十个相关的时间节点。
配送中心做的是收货、存储、拣货、打包、发运。工厂仓库这些也做,此外还要按生产工单备料、向产线配送、做齐套、存放形态已经改变又流回来的在制品、接收余料和退料,并强制执行那些优先于效率的约束:批次或序列号身份、保质期、质量状态、分开存放。
围绕订单履行构建的软件,通常只把其中一两项做对,其余的全部塌缩成对生产工单的一笔发料过账:一个数量、一个工单号,所有值得保留的结构都被抹掉——哪个批次或序列号、哪个搬运单元、哪道工序、退回来的是什么。
备料是在工序开始前,把物料移到一个与单张工单绑定的库位上。备好的料仍然是库存:有位置、有预留,计划一变就需要重新排定时间或者解除预留。如果解除预留只能靠人工冲销,工厂就会不断积累针对没人会用的物料的预留,可用量随之变成一种虚构。
线边配送补充的是使用点的容器,触发信号应当与零件类别相匹配。消耗型信号——扫空的料箱、一张看板卡、一个料位信号、一个设备计数——适合通用的高频用量零件,这类零件的补料单位是一个容器而不是一个 BOM 用量。按订单和按顺序的配送适合变型件、大件或高价值零件,这类零件只有单张工单的物料清单才说得清该送哪个变型。代价最大的错误是所有零件用同一种方法,最常见的是对通用件采用 BOM 驱动的补料,结果工位上实际摆着的东西一个班次之内就会与计划脱节。
齐套是把若干组件为一张工单组装进一个搬运单元,而缺件齐套是它的典型失效方式。十二个组件到了十一个,系统可以扣住这个齐套件、把它按缺件放行并在工序上标出短缺、或者做替代。这几种做法都可能是对的;唯独把一个看上去完整的缺件齐套件放出去永远不对,因为调机时间已经白白耗掉,产线随后才停下来。拆解齐套件时,组件必须以其本来的身份退回,批次保持完整。
在制品是工厂账目腐烂的地方,原因通常是缓冲区不是库位。工序之间,物料总在某个地方待着——固化、冷却、等待检验、在某台设备前排队——如果这个“某个地方”没有地址,在制品就只是 ERP 里的一个数字和车间里的一次猜测。
缓冲区有一些货架没有的属性:最短停留时间,因为零件必须静置或冷却之后才允许进入下一道工序;以及最长停留时间,因为喷涂过的零件必须在一个时间窗内进炉,调好的胶水适用期可能只有几分钟,而且这个时间从调胶那一刻算起,不是从最后一次扫描算起。缓冲区不建模,这两条都无从强制。
余料是另一处渗漏。一道工序从 6 米的棒料上取走 4.3 米,剩下的并不是 1.7 米:是 1.7 米减去锯缝、端面切削量,以及卡盘夹持掉的那一段。这段料要么成为带新身份的库存,要么是废料,要么就是靠在墙边的一截金属,下个月被谁用掉而不告诉任何人。只有第一种是可管理的,而且前提是长度在退料时实测而不是算出来的,挂到一个继承母批次并占有库位的搬运单元上。一次需要班组长和一台台式电脑才能完成的退料,明天做,或者永远不做。
在工厂里,库位规划优化的是到使用点的搬运时间而不是拣货行走距离,权重来自排程调用该物料的频次;分区跟随消耗资源的程度不亚于跟随周转率:供给某一族加工单元的物料就该放在它旁边,哪怕它周转很慢。
最关键的决定是产线端的颗粒度。七号工位的流利货架是不是一个库位,还是说物料一离开货架就算消耗?两种选择各自错向一边。取出即消耗,库存就被低估:站在工位上的物料不在账上,计划会为现场明明有的零件提出补货建议,消耗时间也变成一种虚构,取决于谁在什么时候挪了一个托盘。把线边放在库位模型之外、却仍算在工厂库存之内,可用量就被高估:净需求计算会把已经承诺给某一台机器的物料算进去。给线边建模要付出过账的代价,换来的是诚实的使用点库存。请有意识地选择你要犯哪一种错。
工厂库位带有配送很少需要的属性:温区、防静电(ESD)、不相容化学品不能共用一个围堰的分开存放要求、地面承重,以及哪些设备够得到这个库位。库位重规划需要一个责任人和一个节奏,因为一套上线时定好、此后再没碰过的方案,正是三年后周转最快的组件躺在最远巷道里的原因。
在配送中心,收货就是点数、核对、上架。在工厂里,收货创建的是一个带状态的批次,而这个状态支配着下游的一切。
收货过账创建一个搬运单元,它带着你自己的标识、供应商批号,以及一个“不可用”的状态。抽样按该物料、该供应商的检验计划进行,最后由一次使用决策结束:放行、针对某一张工单或某一数量让步接收、限定用途使用、或者判退待返厂。质保书挂在批次上;在受管制的流程里,货和文件两者都到齐之前,物料不可使用。
如果系统经过验证、状态在分配时被强制执行,上架可以在这个决定之前完成,待检状态也可以跟着搬运单元走,而不必占用月台旁边的一个笼子——待检区的地面永远是最先不够用的。判退物料是例外,多数规范要求它被标识并物理隔离;因危险品、过敏原或温度原因需要分开存放的东西也一样。请明确哪些冻结是状态冻结,哪些必须是物理隔离。
难办的是物料已经动过之后才落下的冻结:十一点冻结的一个批次,已经备了料、进了齐套件、一部分到了线边。系统必须把它所有的下级搬运单元逐一列出来,包括在齐套件里的那些,并说出每一个此刻站在哪里。如果冻结只是阻止新的拣货,那么这种管控就是演戏,物料仍然在四号工位上。
先到期先出(FEFO)只是浅层版本。工厂需要的是消耗那一刻的剩余保质期,而不是拣货那一刻的:一支还剩四十天的胶水,今天完全合规地拣给一道排在五十天后的工序,这就是拣货规则自己制造出来的不合格。
这里的时钟比一个日期所暗示的要多样。未开封的桶和已开封的桶剩余寿命不同;有些物料带复验日期,可以复验后重新放行而不是销毁;还有一些带的是累积温度暴露额度,于是移动履历本身就成了保质期记录。
有些批次约束完全凌驾于到期顺序之上——规范要求一个生产批次只能用同一个批次、色差匹配把一轮生产绑定到某个批次、资质认定点名某个批次——这时正确的拣货就不是最老的那一批。这些是系统在分配时施加的约束,不是贴在货架上的规定,而且每一次强制放行都需要一个原因代码和一个人名。
波次拣选在配送里行得通,是因为波次内部需求稳定、存在一个像车次发车这样的硬性外部截止时间,而且作业可以朝一个打包工位归集。工厂把这三条全打破了:需求是一份会在班中被重排的排程;没有单一截止时间,只有几十个工序开始时刻;也没有共同的终点,只有各自在不同分钟需要不同东西的工位。
合适的是按滚动计划窗口下达:为在某个时域内开始的工序生成拣货任务,这个时域由实际备料所需的时间加上余量决定,而不是由班次边界决定,这样九点的一次重排只会扰动尚未下达的作业。
优先级是最容易被留给默认值的东西。拣货顺序应当由工序开始时间和消耗资源的关键度推导出来,让瓶颈用的物料压过其他一切;一个只按行走距离排序的引擎,会为了给叉车省几米路而让约束资源断料。短拣是一次尚未发生的停机,因此它应当产生一条带解决时限的异常,让计划部门看见,而不只是仓库主管看见。
在选技术之前,先决定要标识什么。容器唯一标识(LPN)——搬运单元上的一个唯一编号,内容物记在系统里而不是印在标签上——才是让扫描变便宜的东西:一次扫描就能移动几百件货的一个托盘。
条码是默认选项。工程难点在标签,不在码制。热敏纸从固化炉里出来是一片全黑;蜡基碳带会糊;聚酰亚胺或耐高温聚酯上的树脂基碳带能熬过这个循环。用于冲洗环境、冷库、烘炉或切削液的标签是一份规格——基材、胶、碳带,以及经过实测的温度与停留时间——而不是一次耗材采购。
RFID 在读取不能依赖人工呈现的场合才对得起成本:整托盘通过闸口、标签能在多年里摊薄成本的周转资产、因为没有标签能存活而内嵌标签的周转箱。物理特性才是这个项目本身。金属失谐、液体吸收,读取区必须受控,因为一个会读到隔壁巷道的闸口会产生幽灵移动,比读不到还糟。
实时定位给的是连续位置,而不是扫描点上的一个事件。按它能改变的决策来选规格。区域级精度回答的是一台料车在哪个货区或哪条巷道,而且便宜。亚米级系统能把你带到某条巷道的某一段,而不是某个托盘位,更不是某一层:垂直分辨率和金属货架里的多径会击穿数据表上的数字。如果你需要的是具体位置,那就是在那个位置上扫一次码。通常被漏掉的成本是标签数量和它们的电池,这也是给耗材贴标签很少划算的原因。
错有两种,代价不一样。账有实无——系统里有、现场没有——是贵的那一种:计划以它做净需求计算,于是不提采购建议,排程把工序排定下去,错误最后在拣货时才暴露,那是所有时机里最晚、最贵的一个。账无实有则是买两遍、占地方,最后到期报废。
真正的代价在于传播。一个在库数量喂给净需求计算,算出采购建议和计划订单,被有限产能排程排成顺序,再由某个人变成一句交期承诺。一个错误的数字产出的不是一个错误的数字,而是一句错误的承诺,以及一次把别人一周安排都打乱的重排。请按库位和按记录条数衡量准确率,而不是按金额,因为金额会掩盖几乎每一个小零件都错了的事实,而小零件停线的能力不亚于贵零件。
盘点既要按日历驱动,也要按事件驱动:一次拣货时发现库位是空的、一个负库存、拣货时的一次数量差异,以及任何一个库位刚刚空掉的那一刻——那是这栋楼里最便宜的一次核对。没有原因代码的调整只是记账而不是改善,因为反复出现的永远是同一张短名单:从没登记过的产线退料、与实际用量对不上的倒冲数量、过到错误批次上的收货。
在任何人开始设计接口之前,先把三个归属问题写下来定清楚;此后每一次集成争论,都是其中某一条又浮上来了。
库存。ERP 拥有用于账务的估价库存;WMS 拥有库位和搬运单元层面的实物库存。同一个事实的两种分辨率,所以对账规则必须明确:哪些字段同步、在什么事件上同步、意见不一致时以谁为准。两套系统都认为自己拥有库位数量,就会产生一个谁也停不下来的调整循环。
订单。ERP 拥有计划订单、采购订单和交货单;MES 拥有工序、工序报工和报废。WMS 拥有由它们派生出来的任务,而每一个任务都应当带着工单和工序,这样一次移动才能对着一个真实的东西判定是否延误。
移动。WMS 拥有实物移动;ERP 拥有与之对应的过账。要决定的是过账颗粒度:把每一次库位到库位的移动都发过去,会淹没一套从未为此设计的系统;只发跨厂区边界的移动,ERP 里的库位数据就没有意义——只要所有人都接受库位问题由 WMS 回答、而且只由它回答,后者才是正确的取舍。
消耗方式是后果最重的一个选择,而这几种方法的差别首先在时效性,其次才是准确性。报工时倒冲最便宜,它把所有误差推迟到以后的一次盘点。按 BOM 规则做设备计数,把同样是理论值的消耗推近到实时,于是库存更早转负、错误的 BOM 用量早几周暴露,但它过的仍然是 BOM 说的数量,而不是操作员实际用掉的数量。在使用点扫码或称重发料,是唯一记录真实消耗的方法,也是唯一能带批次或序列号级谱系的方法;代价是每次发料一笔过账。无论选哪一种,移动必须幂等,而且链路断掉的时候仓库还得能继续干活。
搬运自动化是最后一步,而它的前提条件常被跳过。库位模型必须被强制执行,因为车辆没法问同事托盘到底放到哪儿了。载具需要一致的尺寸和状态:一个破托盘卡住车辆的方式,是它永远不会卡住一个司机的;而且托盘一定会被丢在行驶通道上,所以混行巷道和被堵的通道需要规则。无线覆盖必须在金属货架之间稳得住,充电要按高峰小时去配,还得有人有权限在凌晨三点去处理一台卡死的车,否则整支车队一个季度之内就会变成一支停着的车队。
车队的水平也不会高于喂给它的任务队列。先用数字化运输请求和系统派工跑一个月,然后读任务日志:如果这些任务是连贯的,车辆可以执行它们;如果不连贯,它只会以更快的速度和更高的资本成本执行这份不连贯。
功能清单区分不出候选者,因为入围的每一家都有上架、拣货和盘点。用你自己的主数据跑场景才行。
请每一家供应商把一张生产工单在班中提前两小时,而且是在拣货任务已经下达之后,然后看已备的料和未完成的任务发生了什么。冻结一个已经备料、且有一部分在齐套件里的批次,问它每一份此刻站在哪里。如果你的召回敞口在序列号层面,让他们把一个序列化组件追进齐套件、追进成品、再追出来。用手持终端退三件没用掉的零件和一段实测的余料。给瓶颈单元的一个组件做一次短拣,记下计划员看到了什么、什么时候看到。然后断开 ERP 连接,再跑一遍其中一个场景。
把归属问题直接问出来:某个库位的在库数量以什么为准,什么创建和释放预留,排程变化时那条预留会怎样。按每小时峰值事务量给系统定规格——收货窗口和交接班时的过账洪峰,不是日均值——再单独按交接班时的手持终端并发会话数定规格。不要按托盘货位数。还要定下谁来清理库位主数据、谁来写标签标准、谁来定义计量单位换算:这些活儿才是项目本身,软件是其中容易的那一半。
Meta Smart Factory 的智能仓储管理与物流模块,与 MES、APS、MRP 和质量模块位于同一个平台之上。凡是仓库必须知道排程的地方,这一点就有意义:针对工单的预留、排程顺序变化时会重新排定时间的备料、由生产事件而不是班末过出来的消耗,以及一次能够找到已经备好的料的质量冻结。RTLS 与闸口管理模块与它并列。
以上所有内容,都是与供应商无关、始终存在的设计决策。库位模型、标签标准、消耗方式、线边的颗粒度,以及与 ERP 的归属边界,对结果的决定作用大于软件本身。有价值的第一次对话,是你的工厂里这些之中还有哪些没有定下来。
与我们的专家交流探讨