ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

SMEMA协议电气时序握手与产线联机故障排查

SMEMA协议电气时序握手与产线联机故障排查

简介:这份PDF文档聚焦自动化产线中广泛采用的SMEMA通信标准,面向SMT设备集成、产线运维与自动化测试组装场景的工程师及技术学习者,帮助厘清前后主机、外部搬运设备与主测试组装机之间的信号交互规则。文档围绕电气硬件接口、设备间电缆接线(Pin1~Pin4)、板卡转移的软件控制逻辑展开,并解释出口传感器、入口传感器与中间传感器在T3/T4状态监测、板卡暂存及防碰撞中的作用,兼及兼容性、可靠性与扩展性优势。压缩包仅含1个PDF文件,大小约737KB,篇幅精炼,便于按接口、控制、传感器等模块查阅。已有1217人学习,适合作为产线联调、设备对接和SMEMA知识梳理的参考材料。

1. 一根 14 针电缆里的真相:SMEMA 协议真正的设计核心是电气和时序

很多人第一次拆开产线上两台贴片机之间的那根 SMEMA 连接线,都会以为里面藏着一套复杂的现场总线。剥开护套就会发现,真正在干活的只有 4 根针脚:一根 24V、一根 0V、两根信号线。反直觉的地方也在这里:这个被自动化行业奉为标准几十年的“协议”,本质上不是一份报文规范,而是一份电气与机械层面的时序约定——真正重要的从来不是数据格式,而是针脚定义、电平极性、传感器装在哪个位置、板子什么时候才允许动。搞懂它的价值也不在于会接线;当一条产线突然出现“板卡在中间不动”“传输超时报警但板明明送到了”这类玄学故障,你能不能在三分钟内判断问题出在电气层、时序层还是机械层,区别就在这里。文档资料里那几张针脚图和传感器示意图,其实是整条线运维排查的第一手证据。

2. 电气层:4 根针脚如何在两台机器之间建立可被信任的握手

2.1 公头母头与背面安装:连接器里藏着的维护逻辑

SMEMA 接口在物理上是一个多针连接器,业内常见的是 14 针规格,但标准里真正被定义、被使用的往往只有前 4 针,其余针脚留作厂商自定义或干脆悬空。资料里明确写了“Pin1、2、3、4 is used”,这句话看着平淡,实际是整个接口的最小可用集合:两根供电、两根信号。剩下的针脚不是不能用,而是不敢用——一旦某个厂商占了 pin5 做私有功能,另一家的设备插上去就可能把对方 IO 拉坏,兼容性就是这么被破坏掉的。

接插件的公母搭配也有一层不容易被注意的工程考虑。资料建议把母座(Female Connector)装在机器背面,线缆两端则都是公头(Male Connector)。这么设计的原因主要有以下几点:

  • 机器面板上是凹进去的母座,针脚不外露,操作工搬运板子、推料车经过时不会撞弯针脚;
  • 线缆走机器后方,不占正面操作空间,也不会被安全门夹住;
  • 线是标准件、两端同构,任何一段坏了直接换线,不需要区分“这台机器的线”和“那台机器的线”。

还有一个更隐蔽的点:既然两端机器都是母座、线缆两端都是公头,那么这根线在物理上是直通的。信号语义完全靠“机器角色”来区分——上游机器的 pin3 是输出(Board Available),下游机器的 pin3 是输入。同一根针,在发板方和收板方身份完全不同。这一点在后面排查故障时非常关键,因为很多人会下意识地以为“信号要交叉接”,结果把线做成了交叉线,反而彻底不通。

常见的针脚分配大致如下,具体以设备手册为准:

针脚常见用途方向电平
Pin 124V DC 电源各自机器内部提供24V
Pin 20V / 信号地公共参考0V
Pin 3Board Available(有板可发)上游 → 下游开关量
Pin 4Machine Ready(可接收)下游 → 上游开关量
Pin 5-14厂商自定义 / 备用——

2.2 24V、光耦与极性:为什么“SMEMA 通不上”九成是电气问题

现场调试时最典型的场景是:线接好了,两头设备都上电,上游明明有板,下游明明空着,板就是不动。这时候如果去翻软件日志,什么也看不到——因为根本没有软件层。问题几乎总在电气侧。

为什么用 24V 而不是 5V 或 3.3V?因为产线上有伺服、变频器、传送带电机,电磁环境相当恶劣,几米长的线缆上 5V 信号很容易被干扰到误翻转。24V 的抗扰裕度大得多,而且工业现场的光耦、继电器、接近开关生态全都是围绕 24V 建的。

光耦隔离则是另一层保护。两台机器的 24V 是两套独立电源,如果信号线直接把两套电路连在一起,两个“0V”之间只要存在几伏的电位差,就会形成地环流,轻则信号乱跳,重则把一端的 IO 板烧掉。光耦把信号变成“电流点亮 LED”,两端只通过光传递,地彻底断开。代价是:每一侧的输入回路必须由本机自己的 24V 供电,如果某一侧的光耦没有供电,信号永远读不到。

真正最容易出问题的是漏型(NPN)和源型(PNP)的匹配。日系设备常用漏型输出,导通时把信号线拉到 0V;欧系设备常用源型输出,导通时把信号线推到 24V。如果上游是源型、下游期待漏型输入,那么上游输出 24V 时,下游光耦两端都是 24V,没有压差,永远不导通。线接得完全正确,逻辑上却永远是“无信号”。

排查方法其实很朴素:万用表直流档,黑表笔搭 pin2,红表笔搭 pin3,让上游放一块板到出口位置,看电压是从 0V 跳到 24V,还是从 24V 掉到 0V。记下这个方向,再去量下游 pin4 的期待方向,两者一对就清楚了。这个动作花不到两分钟,却能省掉半天的猜谜。

注意:带电测量时务必确认表笔不会同时碰到相邻针脚,14 针连接器的针距很小,短接一下可能就是一块 IO 板。

2.3 2910±10mm 与 450mm:传送面高度为什么是硬约束

资料里给了两个很具体的高度:顶部传送带 2910±10mm,底部传送带 450mm。这两个数字看着像随手写的,其实决定了整条线能不能拼起来。

2910mm 是主传送面的离地高度。这个值不是随便定的,它是人体工学(操作工不必弯腰或抬手太多)、设备内部结构(下方要放电气柜、气路、顶升机构)和行业历史沉淀三者折中的结果。一旦定了,所有接驳台、上下板机、缓存机、AOI、贴片机都得按这个高度做。

±10mm 的容差值得单独说。它不是一个“差不多就行”的宽容度,而是一个必须被验证的窗口。两条传送带的导轨面高差如果超过 10mm,会依次出现这些问题:

  • 板边撞下游导轨的倒角,轻则卡板,重则板边崩裂;
  • 0.6mm 的薄板在前端悬空段下垂,直接插进两段链条的缝隙里;
  • 板子从链条上被顶起,脱离夹持,位置偏移,到了下游贴片机就贴歪。

450mm 则是下层回板轨道或底部传送带的高度。双轨结构里,上层送产品板,下层送回空载具或回流板,两层各自独立,但同样要跟上下游对齐。上下层的高度关系还决定了中间缓存机构能不能做得下——顶升、横移、缓存,全在这个夹层里。

实际装配时我一般会这么干:先在空载状态下用卷尺和水平尺逐段量导轨面高度,记在纸上;再用一块废板手动推过每一段接缝,感受阻力;最后才通电跑自动。听起来笨,但比出了故障再拆机架强得多。

3. 信号层:Board Available 与 Machine Ready 组成的四态握手

3.1 四种电平组合里只有一种允许放行

SMEMA 的控制逻辑,说穿了只有一句话:上游有板可发,且下游准备好接收,板才允许移动。资料里那句 “Up-line machine has a board available to send, Down-line machine ready to receive”,就是全部规则。

把两根信号线组合起来,只有四种状态:

Board AvailableMachine Ready含义动作
00上游无板,下游未就绪双方待机
10上游有板,下游不接板停在上游出口,禁止移动
01下游空等上游可以继续生产下一块
11双方就绪允许传输

这实质上是一个 AND 门。为什么不用一问一答的串行通信?因为串行通信有解析延迟、有丢包、有版本协商,还有“对方死机了但线还连着”的模糊状态。电平语义不一样:任何一方的状态变化会立刻反映在电平上,没有中间态,没有缓冲。更重要的是失效安全——线断了、光耦坏了、对方断电了,信号自然变成无效,板就不动。这是一个默认安全的系统,而不是默认危险的系统。

这里还有个容易被忽略的细节:下游的 Machine Ready 不是“我空着”这么简单。它通常要同时满足一堆条件——轨道内无板、无报警、气压正常、上游请求允许、自检完成。把这些条件全部与进一个继电器输出,是这个标准最聪明的地方:对上游而言,它只需要看一根线。

3.2 T1 到 T4:握手时序里的四个时间窗各自在防什么

光有电平还不够,因为“什么时候该变、多久没变算异常”必须有定义。资料里提到“Outlet & Inlet Sensor is needed to check T3 & T4 Status”,这里的 T3、T4 就是时序窗口。

按我理解的常见实现,四个时间窗大致是这样分工的:

  • T1:下游置起 Machine Ready 之后,上游开始送板的响应时间上限。防的是“你 ready 了我却不动”,避免下游空等。
  • T2:板前沿从上游出口到达下游入口传感器的时间上限。防的是皮带打滑、板卡在接缝、电机丢步。
  • T3:板后沿离开上游出口传感器的时间上限,确认“板已经完全交出去了”。T3 成立后,上游才允许撤销 Board Available。
  • T4:板后沿离开下游入口传感器、完全进入下游的时间上限,确认“收妥”。

为什么要设超时?因为如果没有超时,一旦传感器脏了、皮带断了、板卡在缝里,整条线会安安静静地停在那里,没有任何报警,运维人员只能一段一段地手动查。这正是产线上最难查的那类黑匣子故障。超时报警至少把范围缩小到了“某一段传送”。

血泪经验是:新线调试时,把每一段的 T1-T4 实测值记在本子上,同时记下当时的板长和皮带速度。以后一旦报警,先对比实测值和记录值,能立刻判断是节拍变慢了还是真卡住了。这份手写记录,是排查传输问题时最好用的后悔药。

3.3 用一段状态机代码把握手跑一遍

把上面的逻辑落到代码,就是一个典型的状态机。下面这段 Python 描述的是“上游视角”的单段传送带控制,输入是两根信号和两只传感器,输出是电机命令:

from dataclasses import dataclass @dataclass class Inputs: board_available: bool # 本机有板待发(输出给自己,同时决定 pin3) machine_ready: bool # 下游给的 pin4 outlet_sensor: bool # 出口传感器被遮挡 inlet_sensor: bool # 入口传感器被遮挡 middle_sensor: bool # 中间缓存位被遮挡 class SmemaLink: """单段传送带的 SMEMA 握手状态机(上游侧)""" def __init__(self, t1=2.0, t2=10.0, t3=10.0, t4=10.0, board_len_mm=200, speed_mm_s=150): self.t1, self.t2, self.t3, self.t4 = t1, t2, t3, t4 # 板完全通过一只传感器所需的理论时间,用于给超时值兜底 self.pass_time = board_len_mm / speed_mm_s self.state = "IDLE" self.timer = 0.0 self.fault = None def tick(self, dt: float, i: Inputs) -> dict: self.timer += dt motor = False board_available_out = False if self.state == "IDLE": # 有板且下游就绪,才允许进入传输 if i.board_available and i.machine_ready: self.state, self.timer = "TRANSFER", 0.0 elif self.state == "TRANSFER": board_available_out = True # 传输期间 pin3 保持有效 motor = True # 皮带正转 # T2:板前沿必须在限定时间内到达下游入口 if i.inlet_sensor and self.timer > self.t2: self.state, self.fault = "FAULT", "T2 timeout: board never arrived" # 板后沿离开出口传感器 -> 主段落完成(T3) if not i.outlet_sensor and self.timer > self.t3: self.state, self.fault = "FAULT", "T3 timeout: board stuck at outlet" elif self.state == "FAULT": motor = False return {"motor": motor, "board_available": board_available_out, "state": self.state, "fault": self.fault}

这段代码有几个地方值得展开说。

board_available是本机输出给下游的信号,不是本机的内部状态;它必须在板真正到出口位置之后才置起来,否则下游会提前伸板。machine_ready是外部输入,代码里只读不写。

pass_time这个字段不是 SMEMA 标准里的东西,是我自己加的安全垫。传输超时值的设定没有统一答案,但一个可靠的经验是:它至少要大于“板长 / 皮带速度”的 1.5 倍,甚至 2 倍。设太小会频繁误报警,设太大则失去诊断意义。

TRANSFER状态里同时检查 T2 和 T3,是因为这两个窗口防的故障完全不同——T2 防板没到,T3 防板没走完。把两者混成一个总超时,报警时就分不清是入口堵了还是出口堵了。

最后,代码里没有处理“撤销 Board Available 的时机”。实际实现中,它应该在板后沿离开出口传感器的那一刻撤销,而不是传输一开始就撤销,否则下游会在板还没完全过去时就以为这块板已经属于自己了,第二块板的请求就没法正确排队。

4. 传感器层:Inlet、Outlet、Middle 三只传感器各自守哪道门

4.1 出口与入口传感器:T3/T4 是被“看”出来的

资料里画了两只传感器:出口传感器(Outlet Sensor)在机器出口边缘,入口传感器(Inlet Sensor)在入口边缘。它们不是用来“数板”的,而是用来把时间变成状态的。

板子的完整旅程是这样的:板前沿遮住出口传感器,说明板开始往外走;板后沿离开出口传感器,说明板已经完全离开本机,这时候 T3 成立,Board Available 才允许撤销。下游那边,板前沿遮住入口传感器,说明板进来了;板后沿离开入口传感器,说明板完全进来了,T4 成立。

这套设计的关键在于:传感器装的位置决定了信号的语义。出口传感器如果装得太靠里,板还有一截在本机轨道上,信号就已经说“走了”,下游一接手就会两头抢板;装得太靠外,板已经悬空到下游了,本机还以为板在,就一直发 Board Available,下游拼命想送第二块,就撞了。

传感器的选型也有讲究。对射式(一侧发射、一侧接收)比漫反射可靠得多,因为板子有镂空、有深色阻焊、有反光焊盘,漫反射的接收强度波动很大。安装高度一般略高于传送面 2 到 3mm,保证 0.4mm 的薄板也能挡住光,同时不会被板边的毛刺刮到。

还有一条容易被忽略的:入口传感器往往不只参与 T4,它还参与下游的 Machine Ready 判断。入口有板时,Machine Ready 必须撤掉,否则上游会认为还能再送一块进来。

4.2 中间传感器与单板缓冲:为什么一条轨道只准存一块板

资料里对中间传感器的描述相当准确:下游没有给出 Machine Ready 时,用中间传感器把板停住、存在这段传送带里。并且明确写了“Only 1 middle sensor is used in conveyor, to ensure 1 conveyor only store 1 board, and to avoid board to board crash”。

为什么不能干脆让板停在入口传感器上等?因为那会形成死锁。板停在入口位置时,下游的入口传感器被遮挡,下游逻辑会一直认为“已经有一块板在我这儿了”,于是 Machine Ready 永远不置起。上游这边呢,板还压在出口传感器上,Board Available 也撤不掉。两边互相等着对方先动,谁都不动,这就是典型的协议死锁。

更要命的是物理层面:板压在两台机器的接缝上,前端悬空、后端被推,是最容易被夹住、被顶翻的位置。所以正确做法是让板往里走一段,完全停在自己的轨道上,停在中间传感器位置。

中间传感器只有一个,这个设计约束本身就是背压机制。板停在中间位,板后沿一定已经离开了入口传感器,下游的 Machine Ready 逻辑恢复正常——但这块板的存在又会让“本段已满”的条件成立,本段对上游不再置 Machine Ready。于是上游被自然阻断,压力一级一级往回传。整条线不需要任何中央调度,靠电平就能形成正确的节拍。

单缓冲的代价也很直接:这段轨道同一时刻只能存一块板,缓冲深度为 1。想要更高吞吐,就得做多缓冲——多装几个传感器、多分几个区段,或者加垂直缓存塔。但每加一级缓冲,状态机的状态数就翻一倍,调试难度也翻倍。很多产线最终选择“不缓冲、直接卡上游”,反而是更稳的选择。

4.3 位置、遮挡与去抖:传感器装歪了会发生什么

中间传感器到入口传感器的距离,必须大于最长板长。这个约束如果破了,会出现一种很诡异的故障:板尾还在入口传感器上,板头已经触发中间传感器。于是下游认为板已到位、上游认为板已送出,两套逻辑同时成立,节拍就乱了。短板上看不出来,换一款长板立刻复现,这种“换产品就出事”的问题最耗时间。

去抖参数是另一处。皮带接头、板边毛刺、机械振动都会造成 1 到 5ms 的毛刺,而 PLC 的扫描周期通常是 1 到 10ms,正好落在这个量级上。所以输入点一般要加 10 到 20ms 的滤波。但滤波不能太大:高速产线上板速可能到 500mm/s,20ms 就是 10mm 的位移,滤波再长一点,板头已经撞到挡停机构了传感器才确认。

实际调试我一般按这个顺序来:先手动推板,用肉眼看传感器指示灯的动作是否干净利落;再看 PLC 输入点的在线监视,确认没有闪烁;最后跑自动,用示波器或者高速计数器量一下遮挡持续时间,跟理论值(板长 / 板速)对一下。对不上就说明位置或选型有问题,别急着调滤波参数去“盖住”它。

5. 避坑排查:SMEMA 联机调试里最常见的五个翻车现场

联机调试是最容易出问题的环节,因为两台设备分属不同厂商,各自都觉得自己没问题。下面这五条是从实际现场归纳出来的,按“现象 → 原因 → 解决”记录。

第一条:线接好了,板永远不动,两端都没有报警。

现象是上游有板、下游空着,但传送带纹丝不动,也查不到任何错误码。原因八成是漏型与源型不匹配,光耦两端没有压差,信号永远读成无效。解决方式是万用表量 pin3 和 pin4 的对地电压,确认跳变方向,再对照两侧手册的信号类型;如果无法改设备,就在中间加一个继电器或者光耦转换板做极性翻转。这类问题不会烧设备,但会让人怀疑人生。

第二条:传输超时报警,但板确实已经到下游了。

现象是每隔几块板就报一次 T3 超时,人工确认板已经到位。原因通常是出口传感器脏了,或者板后沿有缺口、有开槽,导致后沿离开的瞬间信号抖动,PLC 抓到的“离开”时刻比实际晚。解决方式是先清洁传感器镜头,再检查板型;如果是板型问题,就得把 T3 的判定从“瞬时离开”改成“持续离开超过 X 毫秒”,也就是给退出边沿也加滤波。

第三条:白天正常,夜班频繁误动作。

现象很有规律,跟时间相关。原因往往是接地。两台机器各自接地,接地电阻不同,到了夜里大功率设备启动,两个“0V”之间的电位差变大,共模干扰窜进信号线。解决方式是检查两端信号地是否真的通过光耦隔离、屏蔽层是否单端接地、线缆是否和电机动力线走同一个线槽。最后一条尤其常见——为了省事把信号线和变频器输出线捆在一起,干扰不大才怪。

第四条:中间传感器位置不对,频繁撞板。

现象是偶尔听到“咔”一声,两块板贴在一起,或者板被顶起来。原因是中间传感器到入口的距离小于最长板长,板头已经到中间位、板尾还压在入口上,两套逻辑同时成立。解决方式是拿最长的板实测,把中间传感器往后挪,保证板完全进入本段之后才触发;挪不了就在程序里加一个“入口传感器已释放”的联锁条件。

第五条:一上电下游就置起 Machine Ready,板全堆在入口。

现象是开机瞬间下游就“表示可以接收”,上游哗哗往下送,结果全堆在入口。原因是下游把 Machine Ready 直接接到了“无报警”这一个条件上,没有等自检完成、轨道归零。解决方式是给 Machine Ready 加延时和联锁:上电后先自检、轨道回原点、确认无板,才允许置起。这条属于设计缺陷,不是接线问题,改起来要动 PLC 程序,所以最好在设备验收阶段就提出来。

6. 设计取舍:为什么一个只传 2 bit 的电气标准活到了今天

把 SMEMA 和今天的软件协议放在一起看,差距是刺眼的。它一次只能表达两个比特的信息,传不了板 ID、传不了配方号、传不了追溯数据,甚至连“我是什么型号的设备”都说不出来。

维度SMEMA 电气握手现代软件协议
信息量2 bit 状态结构化报文
延迟微秒级,硬实时毫秒到秒级
故障表现电平无效,默认安全需定义超时与降级
互操作性接上就能用需版本协商与配置
可诊断性万用表就能查需抓包与日志

但它活下来了,而且活得很好。原因不复杂:它把“能不能动”和“该怎么动”彻底分开了。SMEMA 只回答前者,后者交给各自的设备程序。这个切分让互操作性变成了一件不需要开会讨论的事——任何两家厂商的设备,只要遵守这几根线的电平语义,接上就能跑。相比之下,越是“功能丰富”的协议,越容易在版本、方言、可选字段上打架。

它的第二个优势是故障可诊断。一根线、一个万用表、一块废板,就能把整条链路验证完。不需要抓包工具,不需要协议文档,不需要厂商工程师到场。对于 24 小时运转的产线,这个特性比带宽重要得多。

代价当然也有。因为只能传 2 bit,所有跟“这块板是什么”相关的信息都得靠别的通道走,于是后来才有了更上层的设备通信标准来补位。但补位不等于取代——底层那两根线的握手逻辑,至今仍然是绝大多数产线真正在跑的东西。

如果要做验证,我建议不要一上来就接真机。用一块带 4 路数字输入输出的 IO 模块,配合一段脚本模拟上下游,把四态组合和 T1-T4 超时全跑一遍,包括故意断线、故意反极性、故意让传感器常亮。这套台架测试能在一小时内暴露掉八成的接线问题,比在现场跟另一家厂商互相甩锅高效得多。

有个教训我记了很久:早些年调试一条新线,为了赶进度跳过了极性核对,直接上电跑自动。结果板卡在中间位不动,两端厂商各执一词,扯了两个小时,最后是我拿万用表量了一下发现一端是源型、一端是漏型。从那以后,我每次接 SMEMA 线,都强制走一遍“量电压、看跳变方向、手动推一块废板”这三步,不管多赶时间。希望帮到你。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进