一、为什么我必须自己搭EAP去年车间新进一台刻蚀机设备厂商配的EAP报价38万还只支持3个事件上报。我一看需求——至少要对接12个事件、5个远程命令、还要实时采集FDC数据。找厂商定制加20万还要等3个月。最后我花了2周用Python从零搭了一套跑到现在零故障。这篇文章把我踩过的坑、调通的代码全部整理出来希望帮同行省下这几十万。二、EAP到底是什么5分钟搞懂架构EAPEquipment Automation Program是半导体设备与MES之间的桥梁。简单说它做三件事1. 让设备开口说话——把设备状态、报警、事件上报给MES2. 让MES远程指挥——远程下发配方、控制设备执行3. 让数据自动流动——实时采集过程数据FDC送分析系统层级协议作用传输方式L1SECS-I定义消息帧格式串口(RS232)L2SECS-II定义消息语义(数据项)独立于传输层L3HSMSTCP/IP高速传输网口(以太网)L4GEM设备行为模型(状态机)应用层规范三、环境准备与HSMS连接我用的是secsgem Python库这是目前最成熟的开源SECS/GEM实现。安装很简单pip install secsgemHSMS被动模式连接设备端主动连EAPimport secsgemimport logginglogging.basicConfig(levellogging.INFO)# HSMS配置 - 被动模式(EAP作为服务端)hsms_settings secsgem.HsmsSettings(address0.0.0.0, # 监听所有网卡port5000, # HSMS默认端口connect_modesecsgem.HsmsConnectMode.PASSIVE,device_id0,nameEAP-Server)handler secsgem.HsmsHandler(hsms_settings)handler.enable()print(EAP HSMS服务端已启动等待设备连接...)四、SECS消息处理核心通信逻辑EAP的大脑是消息分发器按Stream/Function路由到对应的Handler。以下是完整的消息处理框架class EAPMessageHandler:SECS消息路由处理器def __init__(self):self.handlers {(1, 1): self.on_alarm_report, # S1F1 报警上报(1, 13): self.on_establish_comm, # S1F13 建立通信(2, 33): self.on_link_event, # S2F33 事件定义(2, 41): self.on_remote_command, # S2F41 远程命令(5, 1): self.on_exception_report, # S5F1 异常上报(6, 11): self.on_event_report, # S6F11 事件上报}def dispatch(self, stream, function, data):key (stream, function)handler self.handlers.get(key, self.on_unknown)return handler(data)def on_event_report(self, data):# S6F11 事件上报 - 最核心的消息ceid data.get(CEID, 0)reports data.get(RPT, [])print(f[事件] CEID{ceid}, 数据项{len(reports)})self.forward_to_mes(ceid, reports)return {ack: 0} # S6F12 确认def forward_to_mes(self, ceid, reports):# 转发到MES系统mes_payload {equipment_id: self.equip_id,event_id: ceid,timestamp: datetime.now().isoformat(),data: reports}self.mes_client.send(mes_payload)五、GEM状态模型实现GEM定义了设备控制状态机EAP必须正确处理状态转换。以下是关键状态的Python实现状态代码说明EQUIPMENT_OFFLINE1设备离线未建立通信ATTEMPT_ONLINE2尝试上线中HOST_OFFLINE3主机离线ONLINE_LOCAL4在线-本地模式ONLINE_REMOTE5在线-远程模式(目标状态)class GEMStateManager:GEM状态机管理VALID_TRANSITIONS {EQUIPMENT_OFFLINE: [ATTEMPT_ONLINE],ATTEMPT_ONLINE: [ONLINE_LOCAL, ONLINE_REMOTE,EQUIPMENT_OFFLINE],ONLINE_LOCAL: [ONLINE_REMOTE, EQUIPMENT_OFFLINE],ONLINE_REMOTE: [ONLINE_LOCAL, EQUIPMENT_OFFLINE],}def __init__(self):self.current EQUIPMENT_OFFLINEdef transition(self, target):valid self.VALID_TRANSITIONS.get(self.current, [])if target not in valid:raise ValueError(f非法转换: {self.current} - {target})old self.currentself.current targetprint(f[状态] {old} - {target})return True六、踩坑记录这5个问题卡了我最久问题原因解决方案耗时连接建立后30秒断开HSMS Linktest超时每25秒主动发Linktest(S1F1)2天S6F11偶发丢事件未发S6F12确认每个S6F11必须回S6F121天中文报警码乱码SECS-II字符串编码强制指定JIS-8编码3天设备重启后重连失败Session ID未重置重连时清除原有session1天多设备并发崩溃全局变量共享每设备独立handler实例2天七、完整系统部署与效果把所有模块整合起来一个完整的EAP系统就成型了• 支持HSMS被动/主动双模式连接• 完整的SECS消息路由S1/S2/S5/S6• GEM状态机管理• 事件实时上报到MES• 远程命令下发与确认上线后效果设备通信建立时间从人工30分钟缩短到自动15秒事件上报准确率从92%提升到99.97%远程控制成功率99.5%以上。写在最后搭建EAP最难的不是代码是理解SECS/GEM协议的那堆文档。我刚开始也被几千页的spec吓到但其实核心就那么几个消息。先把S1F13(建立通信)、S6F11(事件上报)、S2F41(远程命令)这3个跑通80%的场景就覆盖了。---更多半导体实战工具欢迎访问我的VIP资源区SPC控制图工具、CPK计算器、FDC规则模板等帮你快速落地你在搭EAP时遇到过什么坑欢迎评论区交流我会一一回复标签#半导体 #EAP #SECS_GEM #设备自动化 #Python #智能制造
从0搭建一套EAP系统:半导体设备自动化的Python实战
发布时间:2026/6/15 13:07:10
一、为什么我必须自己搭EAP去年车间新进一台刻蚀机设备厂商配的EAP报价38万还只支持3个事件上报。我一看需求——至少要对接12个事件、5个远程命令、还要实时采集FDC数据。找厂商定制加20万还要等3个月。最后我花了2周用Python从零搭了一套跑到现在零故障。这篇文章把我踩过的坑、调通的代码全部整理出来希望帮同行省下这几十万。二、EAP到底是什么5分钟搞懂架构EAPEquipment Automation Program是半导体设备与MES之间的桥梁。简单说它做三件事1. 让设备开口说话——把设备状态、报警、事件上报给MES2. 让MES远程指挥——远程下发配方、控制设备执行3. 让数据自动流动——实时采集过程数据FDC送分析系统层级协议作用传输方式L1SECS-I定义消息帧格式串口(RS232)L2SECS-II定义消息语义(数据项)独立于传输层L3HSMSTCP/IP高速传输网口(以太网)L4GEM设备行为模型(状态机)应用层规范三、环境准备与HSMS连接我用的是secsgem Python库这是目前最成熟的开源SECS/GEM实现。安装很简单pip install secsgemHSMS被动模式连接设备端主动连EAPimport secsgemimport logginglogging.basicConfig(levellogging.INFO)# HSMS配置 - 被动模式(EAP作为服务端)hsms_settings secsgem.HsmsSettings(address0.0.0.0, # 监听所有网卡port5000, # HSMS默认端口connect_modesecsgem.HsmsConnectMode.PASSIVE,device_id0,nameEAP-Server)handler secsgem.HsmsHandler(hsms_settings)handler.enable()print(EAP HSMS服务端已启动等待设备连接...)四、SECS消息处理核心通信逻辑EAP的大脑是消息分发器按Stream/Function路由到对应的Handler。以下是完整的消息处理框架class EAPMessageHandler:SECS消息路由处理器def __init__(self):self.handlers {(1, 1): self.on_alarm_report, # S1F1 报警上报(1, 13): self.on_establish_comm, # S1F13 建立通信(2, 33): self.on_link_event, # S2F33 事件定义(2, 41): self.on_remote_command, # S2F41 远程命令(5, 1): self.on_exception_report, # S5F1 异常上报(6, 11): self.on_event_report, # S6F11 事件上报}def dispatch(self, stream, function, data):key (stream, function)handler self.handlers.get(key, self.on_unknown)return handler(data)def on_event_report(self, data):# S6F11 事件上报 - 最核心的消息ceid data.get(CEID, 0)reports data.get(RPT, [])print(f[事件] CEID{ceid}, 数据项{len(reports)})self.forward_to_mes(ceid, reports)return {ack: 0} # S6F12 确认def forward_to_mes(self, ceid, reports):# 转发到MES系统mes_payload {equipment_id: self.equip_id,event_id: ceid,timestamp: datetime.now().isoformat(),data: reports}self.mes_client.send(mes_payload)五、GEM状态模型实现GEM定义了设备控制状态机EAP必须正确处理状态转换。以下是关键状态的Python实现状态代码说明EQUIPMENT_OFFLINE1设备离线未建立通信ATTEMPT_ONLINE2尝试上线中HOST_OFFLINE3主机离线ONLINE_LOCAL4在线-本地模式ONLINE_REMOTE5在线-远程模式(目标状态)class GEMStateManager:GEM状态机管理VALID_TRANSITIONS {EQUIPMENT_OFFLINE: [ATTEMPT_ONLINE],ATTEMPT_ONLINE: [ONLINE_LOCAL, ONLINE_REMOTE,EQUIPMENT_OFFLINE],ONLINE_LOCAL: [ONLINE_REMOTE, EQUIPMENT_OFFLINE],ONLINE_REMOTE: [ONLINE_LOCAL, EQUIPMENT_OFFLINE],}def __init__(self):self.current EQUIPMENT_OFFLINEdef transition(self, target):valid self.VALID_TRANSITIONS.get(self.current, [])if target not in valid:raise ValueError(f非法转换: {self.current} - {target})old self.currentself.current targetprint(f[状态] {old} - {target})return True六、踩坑记录这5个问题卡了我最久问题原因解决方案耗时连接建立后30秒断开HSMS Linktest超时每25秒主动发Linktest(S1F1)2天S6F11偶发丢事件未发S6F12确认每个S6F11必须回S6F121天中文报警码乱码SECS-II字符串编码强制指定JIS-8编码3天设备重启后重连失败Session ID未重置重连时清除原有session1天多设备并发崩溃全局变量共享每设备独立handler实例2天七、完整系统部署与效果把所有模块整合起来一个完整的EAP系统就成型了• 支持HSMS被动/主动双模式连接• 完整的SECS消息路由S1/S2/S5/S6• GEM状态机管理• 事件实时上报到MES• 远程命令下发与确认上线后效果设备通信建立时间从人工30分钟缩短到自动15秒事件上报准确率从92%提升到99.97%远程控制成功率99.5%以上。写在最后搭建EAP最难的不是代码是理解SECS/GEM协议的那堆文档。我刚开始也被几千页的spec吓到但其实核心就那么几个消息。先把S1F13(建立通信)、S6F11(事件上报)、S2F41(远程命令)这3个跑通80%的场景就覆盖了。---更多半导体实战工具欢迎访问我的VIP资源区SPC控制图工具、CPK计算器、FDC规则模板等帮你快速落地你在搭EAP时遇到过什么坑欢迎评论区交流我会一一回复标签#半导体 #EAP #SECS_GEM #设备自动化 #Python #智能制造