SMEMA协议握手时序与缓存位:自动化产线停线撞板排查
简介:《用与自动化机行业标准SMEMA协议》是一份面向SMT产线设备集成、现场调试与运维人员的PDF技术文档,聚焦不同厂商自动化设备之间的通信对接问题,帮助读者理解流水线前后主机及搬运设备如何按统一标准完成信号交换与板卡传递。文档围绕电气硬件接口、连接器与电缆接线规则展开,说明Pin1至Pin4等信号用途,并梳理上游有板可发、下游就绪接收的软件控制逻辑;同时讲解出口、入口及中间传感器在T3、T4状态监测、板卡暂存与防碰撞中的作用。资源包仅含1个PDF文件,大小约737KB,便于随身查阅和现场对照。目前已有1219人学习。内容较适合用于设备联调、产线改造、培训讲义和故障排查时快速核对SMEMA接口定义与传感器配置要点。
1. 停线故障八成不在程序里:SMEMA 到底约定了什么
一条自动化产线联调时最贵的故障,常常不是控制程序写错,而是两台设备之间四根线里有一根接反,或者一端是源型输出、另一端按漏型输入去接。整线几十台设备来自不同厂商,谁都不肯为对方的机箱改自己的接口板,于是行业里沉淀出一套最低限度的公共约定——SMEMA 协议。它只干一件事:约定板卡在设备之间交接时,机械上怎么对齐、电气上用哪几路信号、按什么先后顺序放行。
对运维来说,这套约定最大的价值是把「接得上」变成一件不需要逐台谈判的事:电缆两头一个规格,接插件位置固定在机背,信号语义写死。但反过来,它对想搞懂产线为什么莫名停机的人也是最容易忽略的一层——撞板、叠板、板卡停在半路,绝大多数不是上位机逻辑写错,而是这四根线的握手条件没满足,或者满足了但被误判。搞懂这四根线为什么这么排、传感器为什么这么装,比背十本设备手册都管用。
2. 电气接口层:四芯线为什么只做两根半的握手
2.1 母座固定在机背、电缆两头都是公头
这套接口在机械上有个很值得琢磨的细节:每台设备背面固定安装一个 female connector(母座),设备之间用一根两端都是 male connector(公头)的电缆连接。初看只是个接线习惯,实际是一条关于「谁承担磨损」的明确分工。
设备是资产,电缆是耗材。插拔动作带来的针脚磨损、弯针、氧化,如果发生在设备端,维修就得拆机箱、换接口板,停机按小时算;发生在电缆端,运维从备件柜里抽一根新的换上,两分钟的事。所以标准把易损件做成线缆,把耐久件固定在机器上。同一条产线几十台设备,只要备一种两头公头的电缆,就能覆盖任意两台之间的连接,备件种类被压到最少——这是典型的运维友好型设计,代价是每台设备都必须多一个固定母座。
这条约定还隐含了一个排查动作:当你怀疑两台设备之间的信号有问题,最省事的验证不是去量设备内部,而是换一根已知良好的电缆。因为线缆是唯一可快速替换的环节,标准在设计时就把「可替换」这个属性留给了故障率最高的部件。
2.2 四芯里真正承载语义的只有两路
接口是四芯,Pin1 到 Pin4 都用上了,但真正构成握手的只有两路语义:一路叫 Board Available(我这有板可发),由上游设备输出、下游设备接收;另一路叫 Machine Ready(我这能接板),由下游设备输出、上游设备接收。第三路通常作为信号参考与回路,第四路在很多实现里留给 Failed Board(失败板)语义。
输入资料里那句「No need failed board available」,说的正是第四路的一个常见取舍:这条线只处理正常板流,失败板不下线、不触发专门的旁路信号,而是走人工挑拣或者由上层系统记录。这么做的直接后果是接口从「三态握手」退化成「两态握手」——上游只关心下游能不能接,不再关心下游接的是好板还是坏板。对一条只做正常流的测试组装段来说,这省掉了一整套失败板分流逻辑和对应的传感器,接线、程序、排查三条线同时变简单。
注意:Pin 编号到具体信号的映射在不同厂商的设备手册里写法不完全一致,有的把输入输出各占两芯做成回读。判断依据不要看针脚号,看信号语义是「状态输出」还是「状态输入」。
2.3 24V 与光耦隔离:为什么值得多花一个器件
信号电平最常见的实现是 24V DC,输入侧经过光耦隔离。多加一个光耦,成本不高,但它解决的是自动化产线上最阴的一类问题:地电位差。
一条线跨几十米,各台设备的开关电源各自接地,两个「地」之间可能差几百毫伏甚至几伏。信号线一长,这个差值就叠加在逻辑电平上,轻则误触发,重则把输入口打穿。光耦把信号域和地域隔开,两边只通过光传递状态,共模干扰被切断。这也是为什么排查时不能想当然地拿万用表一端搭在自己机箱地上量对方信号——量出来的值可能根本没有意义。
隔离带来的另一个副作用是极性:光耦输入侧要么共阳极、要么共阴极,对应现场说的「源型」和「漏型」。两台设备如果一边按源型设计、一边按漏型设计,线接对了信号也是反的,甚至一直为高。这类问题在联调阶段最容易被误判成「下游程序没写对」,实际是两边的电气约定没对齐。
2.4 2910±10 与 450:±10mm 是装配预算,不是精度指标
机械侧的两个关键尺寸是上下两层输送面的高度基准:顶层输送带定位在 2910±10mm,下层输送带在 450mm。±10mm 这个公差常被误读成「加工精度要求」,其实它是留给装配和调平的预算。
板卡在设备之间过渡时,靠的是两条皮带对板边的连续支撑。如果两台设备的输送面高度差超过一定值,板边会在接缝处被顶起或跌落,薄板会翘、厚板会磕。这 10mm 要同时吸收机架焊接变形、地脚调平误差、皮带张紧后的厚度变化、以及设备搬迁后的重新就位偏差。把它理解成「误差的容器」而不是「精度的承诺」,现场处理接缝落差时思路就完全不一样——不是去追求更高的加工精度,而是把可调的环节(地脚、皮带张紧、接驳过渡板)调到位。
上下两层同时存在的结构,通常对应双轨或者上下回流的设计,两层各自有独立的输送与传感逻辑。做接线和排查时必须先确认当前信号属于哪一层,把上层的 Board Available 接到下层的 Machine Ready 上,是联调期最常见的低级错误之一。
3. 握手时序:Board Available 与 Machine Ready 为什么要保持电平
3.1 转移条件的与逻辑
协议对「什么时候可以送板」只给了一个条件组合:上游有板可发,并且下游准备好接收。两个条件同时成立才放行,这是纯粹的与逻辑。听起来简单到不值得写进标准,但它的价值在于把责任边界划清楚了——上游不为下游的忙闲负责,下游也不为上游有没有板负责,各自只对外声明自己的状态。
这个划分让设备可以独立开发。做测试机的厂商不需要知道下游组装机内部有几个工位、节拍多少秒,它只需要在自己有板的时候把 Board Available 拉起来,然后等对方的 Machine Ready。反过来,组装机只要自己缓冲没满就把 Machine Ready 拉高。双方的接口实现可以完全不同,只要这两个电平的语义一致,线就能通。
3.2 电平信号而不是脉冲:掉电、复位、急停时的行为差异
如果只从「通知对方」的角度看,脉冲信号更省线——发一个上升沿表示「我要送板」,收一个上升沿表示「我收到了」。但这套接口选的是电平保持,原因藏在异常场景里。
电平信号的语义是「我当前处于这个状态」,状态持续可见。下游一旦因为急停、缺料、报警而把 Machine Ready 拉低,上游立刻能看到这个变化,正在等待的送板动作自然中止。脉冲信号则不然,它表达的是「刚刚发生过一件事」,如果接收方当时正在处理别的事情,或者中途掉电重启,这个沿就永久丢失了,双方对状态的认知出现分叉,只能靠超时机制补救。而电平信号在任意一方复位后重新上电,读到的就是对方当前的真实状态,不需要重放历史。
这也是排查时一个很实用的判断依据:如果一台设备重启后立刻出现误送板,问题通常不在握手逻辑,而在于某个输入被强制置位、或者上电瞬间输出默认电平不对。电平接口没有「历史包袱」,它只会如实反映当下。
3.3 T3/T4:用两只传感器把「我以为发出去了」变成可验证
握手信号只能证明双方「同意交接」,证明不了「板真的过去了」。所以标准在输送路径上规定了两只传感器:Outlet Sensor 装在出口侧,Inlet Sensor 装在入口侧。板开始移出时出口传感器状态翻转,板进入下游时入口传感器状态翻转,两者配合用来检查 T3 与 T4 两个时间窗的状态。
常见的实现思路是:T3 衡量板从离开上游出口传感器、到触发下游入口传感器所花的时间,T4 衡量板完全通过入口传感器的时间。这两个时间窗把「信号层面的握手」和「物理层面的移动」对上了账。如果 Board Available 和 Machine Ready 都正常,但 T3 超时,说明板卡在中途卡住、掉落或者皮带打滑;如果 T4 异常,说明板没有完全进入下游,可能是下游皮带没启动或者板长与传感器位置不匹配。
这两个时间窗是整条产线上最有价值的诊断数据,可惜现场常常只把它们当作报警条件,报完就复位,不去看数值分布。真正常态化运维的做法是把 T3/T4 的实测值记下来,看趋势:某台设备的 T3 从 3.2 秒缓慢涨到 4.8 秒,多半是皮带张紧度下降或者过渡板有异物,而不是程序问题。
3.4 一台设备端口的状态机长什么样
把上面这些约束落到代码,单台设备的接口端口大致是这样一个状态机。下面这段是示意实现,用来把「与逻辑」「电平保持」「超时监控」三件事写清楚,具体寄存器映射以设备手册为准。
# 单台设备的 SMEMA 端口状态机(示意,非厂商实现) class SmemaPort: def __init__(self, t3_limit=6.0, t4_limit=1.5): # 输出侧:本机对外声明的两个状态,必须保持,不能只发一个沿 self.board_available = False # 我这有板可发(输出) self.machine_ready = False # 我这能接板(输出) # 输入侧:读到的对方状态 self.upstream_available = False # 上游有板(输入) self.downstream_ready = False # 下游就绪(输入) # 时间窗参数,单位秒,按设备手册设定 self.t3_limit = t3_limit # 出口传感器到入口传感器的允许耗时 self.t4_limit = t4_limit # 板完全通过入口传感器的允许耗时 self.t_out = None # 板离开出口传感器的时刻 def can_send(self): # 送板放行条件:本机有板 与 下游就绪,二者缺一不可 return self.board_available and self.downstream_ready def tick(self, outlet_occluded, inlet_occluded): # 1) 板开始移出:记录时刻,用于后续 T3 判定 if outlet_occluded and self.t_out is None: self.t_out = self.now() # 2) 板触发下游入口:计算 T3,超限即判定传输异常 if inlet_occluded and self.t_out is not None: t3 = self.now() - self.t_out if t3 > self.t3_limit: self.raise_fault("T3_TIMEOUT", t3) # 卡板 / 掉板 / 打滑 # 3) 板完全通过入口:判定 T4,同时清空本次传输记录 if not inlet_occluded and self.t_out is not None: self.t_out = None # 4) 输出侧状态必须每周期重算并保持,不能依赖上一周期的残留 self.machine_ready = self.has_buffer_space() and not self.has_fault()三处关键点。board_available和machine_ready是持续输出而不是一次性置位,所以每周期都要重算,掉电恢复后读到的才是真状态。can_send()只做与运算,不掺入任何节拍逻辑——节拍是设备内部的事,接口层不该知道。t_out的置位与清零必须成对出现,漏清零会导致下一块板的 T3 从上一块板开始算,产生一个永远超时的假报警,这种问题在现场非常典型:报警只在下游连续进板时出现,单块调试永远复现不了。
4. 中间传感器:一个缓存位如何吸收上下游的节拍差
4.1 没有缓存位时,产能被最慢工位锁死
如果一条线只有出入口两只传感器,板卡的行为是「无缝接驳」:上游一放行,板直接进入下游。此时整线的节拍等于最慢那台设备,任何一台慢半拍,上游就停在那里等 Machine Ready,累积成整线停机。
中间传感器的引入改变了这件事。它的位置在输送带中段,作用是当下游没有发出就绪信号时,把板停在这一段上暂存,让上游的出口腾出来。上游把板交出去之后立刻可以做下一片,下游什么时候空出来什么时候取。一个缓存位看起来微不足道,但它把「两台设备必须同步动作」放松成「两台设备在一个缓存位的窗口内允许异步」,节拍抖动被吸收掉了。
这种效果在测试段特别明显。测试机的单板耗时本身就有波动(不同产品测试项数量不同),组装段则是固定节拍。没有缓存位时,测试机慢的那一拍会直接传导成整线的等待;有缓存位,测试机可以连续出两片,其中一片暂存在中间段,组装段按自己的节奏取。
4.2 为什么一条带只允许一个中间传感器
标准里那句「Only 1 middle sensor is used in conveyor」,是整套设计里最克制的一条。一个中间传感器意味着一个停止位,一个停止位意味着一块板。为什么要卡死在「一条带只存一块板」,而不是多加几个传感器做成多缓存?
物理原因是主因。皮带输送面上没有分区,板与板之间只有很小的间距。如果允许两块板同时停在这一段上,先停的那块会被后到的顶推着往前蹭,板边相互挤压,薄板会翘曲、板面会刮伤,严重的会叠起来。而带面本身没有任何机械挡块能保证「第二块停在这里、第一块停在那里」,只有传感器没有挡停机构,位置控制就无从谈起。一个停止位,是这套纯靠皮带摩擦与传感器定位的方案能做到的上限。
第二个原因是排障成本。多缓存需要多套停止逻辑、多组位置判定参数,还要处理「板长不一致时如何判断哪块板在哪」的问题。而现场运维最需要的恰恰是简单可预测:一条带一块板,看到板停在那里,就知道是下游没就绪,不用猜。
提示:中间传感器位置一旦调整,停止距离参数必须同步重算,否则板会停偏。板头越过停止位压到下游入口传感器的情形,会被下游误判成「有板进入」而提前启动带子。
4.3 停止距离与板长:缓存位的物理上限
板停在哪里、要提前多久开始减速,取决于带速、板重和板长。传感器检测到板头的那一刻启动减速,板还会继续滑行一段距离。这段滑行距离加上板长,必须落在传感器和下游入口之间的可用空间里。
这里有个容易被忽略的约束:停止参数通常按最短板、最轻板标定,因为小板滑行距离短、容易尽快停住。但长板、厚板、带载具的板惯性大,同样的减速曲线下会多滑一段,板头就越过了预期停止位。现场出现的「小批量产品跑得好好的,换成长板就撞」,根子往往在这里——不是逻辑错,是物理参数没跟着产品换。
合理的做法是把停止距离按最大板重、最长板长核算,然后留出余量;同时把中间传感器的检测位置尽量往上游侧挪,给滑行留空间。如果空间实在不够,只能降带速,用节拍换稳定,这是硬件布局决定的天花板。
4.4 三种缓存策略的取舍
| 策略 | 缓存容量 | 产能收益 | 实现复杂度 | 主要风险 |
|---|---|---|---|---|
| 无中间传感器 | 0 | 无,整线等于最慢工位 | 最低,只有出入口逻辑 | 任一台慢即整线停,抖动直接传导 |
| 单中间传感器 | 1 块 | 吸收一个节拍周期内的抖动 | 中,需停止距离参数 | 板长板重变化后停止位偏移,易撞板 |
| 多传感器多缓存 | 2 块以上 | 理论上可吸收更长抖动 | 高,需位置判定与间距控制 | 板上滞留时间变长,叠板与工艺暴露风险 |
从表里能看出,单缓存不是「折中方案」,而是这套纯皮带加传感器架构下的最优点:收益已经拿到大部分,复杂度和风险还在可控范围。真正需要多缓存的场景,通常要换掉整个输送结构,加挡停机构或者改用载具,那就不是调参数能解决的事了。
5. 避坑与排查:接线全对却仍然撞板的五种现场
5.1 电气与接线类
现象一:换线后第一块板必撞,第二块开始正常。原因多半是上下游方向接反——设备的 Upstream 端口接到了对方的 Upstream 端口,两边都在等对方发信号,第一块板在超时逻辑触发后被强行放行。解决方式是上电前做强制信号验证:把下游的 Board Available 输入端短接到有效电平,看上游是否动作,30 秒就能分辨方向是否正确,不要把这件事留到跑板的时候发现。
现象二:两台设备都显示 Machine Ready,板停在中段不动。常见原因是两边的输出极性相反,一端源型一端漏型,光耦始终不导通,软件读到的电平被上拉电阻维持在一个「看起来像就绪」的中间态。解决办法是断电后用万用表分段量通断、上电后量实际电平,确认是 24V 有效还是 0V 有效,再统一改跳线或加中间继电器。
现象三:白天正常,夜班偶尔误动作。这类间歇性故障多半和地电位差、变频器干扰有关,信号线与动力线捆在同一线槽里走,长距离耦合进共模噪声。处理方式是分开走线、加屏蔽层单端接地,必要时在输入端并一个小容量滤波电容,但要注意滤波会让信号边沿变慢,不能加得太大。
5.2 时序与传感器类
现象四:偶尔叠板,一天一两次,怎么都复现不了。最常见的原因是板上的开孔或者镂空刚好从传感器下方经过,对射式光电被穿透,检测不到板在。换成漫反射式、或者把传感器位置调整到板面实心区域,能解决大部分;如果板型太多无法统一,就得在停止逻辑里加延时确认,让信号必须持续一段时间才被认可。
现象五:长板产品上线后撞板,短板产品一切正常。这是停止距离按小板标定导致的——长板惯性大,同样减速曲线下滑行更远,板头越过停止位顶到下游。处理办法是把停止距离按最大板长、最大板重重新核算,把中间传感器的检测位置往上游侧调整,或者在换型工单里把带速作为一个必须同步修改的参数。
这五类问题有个共同点:都不是「逻辑写错了」,而是物理参数、电气约定、产品换型三者没有同步。排查的时候先问一句「最近改了什么」,比盯着程序看半天有效得多。
6. 标准化的边界:SMEMA 为什么故意不规定数据协议
把接口翻完会发现一件有意思的事:这套约定管了机械高度、管了连接器位置、管了四芯信号的语义和先后顺序,却完全没有规定两台设备之间怎么交换数据——没有报文格式,没有地址,没有校验。它是一套纯硬线握手,连一颗处理器都不需要,几个继电器就能实现。
这不是疏漏,是刻意的边界。标准要能被最便宜的设备实现,要能让一台二十年前的老设备和今年新买的机器接在一起。一旦规定了数据层,标准就绑死了实现方式,任何一方升级都要拉着对方一起改,兼容性反而崩塌。只规定到「电气语义」这一层,各家内部怎么做都行,只要对外的两个电平含义一致,线就能通。
这个取舍的代价也很清楚:能保证「接得上」,保证不了「跑得快」。产能、节拍、缓存深度、换型切换,全在标准之外,需要产线集成方自己去算。所以遇到整线产能不达标,去翻接口文档是没用的,得回到第 4 章那张表,看缓存策略和停止参数是不是匹配当前产品。
要验证这套接口到底有没有按标准实现,我的做法是三步。第一步,用强制信号盒(其实就是几个开关加 24V)模拟下游,把 Machine Ready 手动拉高拉低,看上游的 Board Available 和送板动作是否跟随,这一步验证方向与极性。第二步,用逻辑分析仪长时间抓四根线的电平,看有没有窄脉冲、掉电复位后的默认电平是否正确,这一步能抓到软件看不出来的毛刺。第三步,把 T3/T4 的实测值按产品型号记一周,看分布和趋势,这一步能提前发现皮带老化、传感器偏移这类慢性问题。
从那以后,我每次上线新设备或者换型,都强制先走一遍第一步——一根短接线把下游就绪强制拉高,看上游会不会提前送板。这个动作只要半分钟,却能一次性暴露方向接反、极性不匹配、上电默认电平错误这三类最常见的翻车。那份接口资料的原始版式里,连接器位置、传感器安装点、上下层高度基准都标在图上,配合这里讲的时序和状态机一起看,现场对着实物找位置会快很多。希望帮到你。
本文还有配套的精品资源,点击获取