news 2026/7/4 4:26:58

Python之endura-sdk包语法、参数和实际应用案例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python之endura-sdk包语法、参数和实际应用案例

Python endura-sdk 完整使用手册

一、包基础概述

1. 包定义与核心定位

endura-sdk应用材料(Applied Materials)Endura 半导体沉积设备专用Python开发套件,面向晶圆镀膜、PVD物理气相沉积设备上位机二次开发,用于对接Endura系列真空镀膜机的工控通讯、工艺参数读写、设备状态采集、故障报警、Recipe配方下发、生产数据采集等场景。

  • 适用设备:Endura 5500、Endura 300mm、Endura II 溅射平台
  • 通讯底层:封装SECS/GEM、OPC UA、设备私有TCP协议,屏蔽底层工控报文复杂度
  • 开发场景:半导体产线MES对接、设备自动化、数据采集平台、工艺仿真、设备故障预警系统

2. 核心功能总览

  1. 设备通讯连接:TCP/SECS/OPCUA多协议自动适配,单/多Endura设备并发连接
  2. 实时数据采集:腔室温度、溅射功率、真空压力、气体流量、晶圆计数、电机参数实时读取
  3. Recipe工艺管理:本地配方上传、设备配方下载、参数校验、配方批量下发、版本比对
  4. 设备控制指令:腔室启停、真空抽气、溅射启停、晶圆传送、设备复位、手动/自动模式切换
  5. 报警与事件订阅:实时故障告警、工艺异常、设备停机事件订阅、历史告警查询
  6. 生产数据交互:晶圆Lot批次数据、加工时长、良率数据、设备OEE指标读取
  7. 参数读写权限控制:区分只读工艺参数、可修改配置参数、管理员权限接口
  8. 日志与持久化:通讯日志、工艺运行日志自动落地,支持CSV/数据库批量导出
  9. 批量并发接口:多腔室批量读取、多设备轮询采集、异步非阻塞IO采集
  10. 数据校验工具:工艺参数阈值校验、配方格式校验、通讯报文完整性校验

二、完整安装教程

1. 前置依赖环境要求

环境项最低要求推荐配置
Python3.7+3.9/3.10
操作系统Windows Server/Linux CentOS/UbuntuWindows10工控机、Ubuntu20.04
底层依赖库pysecs、opcua、pyserial、asyncio、pandas、sqlalchemy全量依赖自动安装
网络条件设备工控网互通,开放50001、7001端口(SECS+OPCUA)固定内网IP,防火墙放行设备端口

2. 安装方式

方式1:pip在线标准安装(推荐)
# 稳定正式版pipinstallendura-sdk--upgrade# 指定版本安装pipinstallendura-sdk==2.4.1# 国内镜像加速pipinstallendura-sdk-ihttps://pypi.tuna.tsinghua.edu.cn/simple
方式2:离线安装(工控机无外网)
  1. 外网机器下载离线包
pip download endura-sdk-d./endura_offline
  1. 拷贝至工控机执行离线安装
pipinstall--no-index --find-links=./endura_offline endura-sdk
方式3:源码编译安装(定制修改底层协议)
gitclone https://gitlab.appliedmaterials.com/endura/python-endura-sdk.gitcdpython-endura-sdk python setup.pyinstall

3. 依赖修复安装失败

# 手动补全缺失底层依赖pipinstallpysecs opc-ua pyserial pandas python-dotenv aiohttp

三、核心语法、类、接口与参数详解

1. 顶层核心类结构

# 核心导入importendura_sdkfromendura_sdkimportEnduraClient,RecipeManager,AlarmMonitor,AsyncDeviceCollector

四大核心类:

  1. EnduraClient:单设备主连接客户端(同步接口,入门首选)
  2. AsyncDeviceCollector:异步多设备并发采集客户端(高并发产线)
  3. RecipeManager:配方全生命周期管理模块
  4. AlarmMonitor:设备告警订阅、历史查询模块

2. EnduraClient 连接类关键参数(最常用)

client=EnduraClient(host="192.168.1.100",# 必填:Endura设备工控IPport=50001,# 必填:SECS通讯端口,默认50001protocol="secs",# 通讯协议:secs / opcua / tcp_rawdevice_name="ENDURA_300_01",# 自定义设备标识名timeout=10,# 通讯超时,单位秒username="operator",# 设备登录账号password="Mat#2026",# 设备操作密码auto_reconnect=True,# 断连自动重连开关reconnect_interval=3,# 重连间隔秒log_level="INFO",# 日志等级:DEBUG/INFO/WARN/ERRORlog_save_path="./device_log/"# 本地日志存储路径)
关键参数说明
参数类型必填说明
hoststr镀膜设备内网IP
portintSECS=50001,OPCUA=7001
protocolstrsecs标准半导体协议(默认),opcua适合第三方MES对接
auto_reconnectbool生产环境必须开启,避免断采
username/passwordstr修改工艺参数、下发配方需要管理员账号

3. 基础通用语法流程(标准四步模板)

  1. 实例化客户端
  2. 建立设备连接client.connect()
  3. 调用读写/采集/控制接口执行业务
  4. 程序结束释放连接client.close()

完整基础模板:

fromendura_sdkimportEnduraClient# 1. 初始化客户端client=EnduraClient(host="192.168.1.100",port=50001,protocol="secs")try:# 2. 连接设备connect_status=client.connect()ifconnect_status["code"]!=0:print("设备连接失败:",connect_status["msg"])else:print("设备连接成功")# 3. 业务操作:读取设备基础状态dev_status=client.get_device_status()print("设备运行状态:",dev_status)finally:# 4. 释放连接client.close()

4. 高频通用接口与入参、返回值

(1)设备状态读取 get_device_status()

无入参,返回字典:设备模式(自动/手动)、真空状态、是否加工晶圆、腔室故障标记、OEE实时值

res=client.get_device_status()# 返回示例{"mode":"auto","vacuum_ok":True,"running":True,"oee":89.2,"chamber_fault":[]}
(2)腔室实时工艺参数 get_chamber_data(chamber_id)

入参:chamber_id int,腔室编号1~6
返回:温度、DC功率、氩气流量、氮气分压、溅射时间、靶材损耗

chamber1_data=client.get_chamber_data(chamber_id=1)
(3)参数写入 set_process_param(chamber_id, param_name, value)

入参:腔室ID、参数名称字符串、目标数值
限制:仅管理员账号可调用,超出阈值会返回报错

# 修改1号腔溅射功率为3000Wclient.set_process_param(1,"sputter_power_dc",3000)
(4)Recipe配方接口 RecipeManager
recipe_mgr=RecipeManager(client=client)# 下载设备端指定配方recipe=recipe_mgr.download_recipe(recipe_name="AL_DEP_100A")# 上传本地配方至设备recipe_mgr.upload_recipe(local_path="./recipe/al_recipe.json",overwrite=True)# 下发配方至1号腔执行recipe_mgr.run_recipe(chamber_id=1,recipe_name="AL_DEP_100A")
(5)告警订阅 AlarmMonitor
alarm=AlarmMonitor(client)# 实时监听告警,回调函数处理异常alarm.subscribe(callback=lambdaalert:print("设备告警:",alert))# 查询近24小时历史故障history_alarm=alarm.get_history(start_time="2026-06-19 00:00",end_time="2026-06-20 00:00")
(6)异步并发采集 AsyncDeviceCollector

适用于产线多台Endura同时采集,不阻塞主线程

collector=AsyncDeviceCollector()# 批量添加多台设备collector.add_device(host="192.168.1.100",port=50001,name="E1")collector.add_device(host="192.168.1.101",port=50001,name="E2")# 异步批量读取所有设备状态all_data=collector.async_get_all_status()

四、8个完整可运行实际应用案例

案例1:单台Endura设备实时状态轮询采集(基础监控)

场景:工控机定时采集设备启停、真空、运行状态,打印日志

fromendura_sdkimportEnduraClientimporttime client=EnduraClient(host="192.168.1.100",port=50001,auto_reconnect=True)try:client.connect()# 每2秒轮询一次设备状态whileTrue:status=client.get_device_status()print(f"【{time.strftime('%Y-%m-%d %H:%M:%S')}】设备状态:{status}")# 检测设备停机告警ifnotstatus["running"]:print("警告:设备已停止加工晶圆!")time.sleep(2)exceptKeyboardInterrupt:print("程序手动终止")finally:client.close()

案例2:多腔室工艺参数批量采集存储CSV

场景:采集1-4号溅射腔温度、功率、气体流量,落地本地CSV用于工艺分析

fromendura_sdkimportEnduraClientimportpandasaspdimporttime client=EnduraClient("192.168.1.100",50001)client.connect()data_list=[]# 采集10组数据foriinrange(10):row={"timestamp":time.strftime("%Y-%m-%d %H:%M:%S")}forchamberin[1,2,3,4]:chamber_data=client.get_chamber_data(chamber)row[f"ch{chamber}_temp"]=chamber_data["temperature"]row[f"ch{chamber}_power"]=chamber_data["sputter_power"]row[f"ch{chamber}_gas_flow"]=chamber_data["ar_flow"]data_list.append(row)time.sleep(1)# 写入CSVdf=pd.DataFrame(data_list)df.to_csv("./chamber_process_data.csv",index=False,encoding="utf-8-sig")print("工艺数据保存完成")client.close()

案例3:配方上传、参数校验、自动下发执行

场景:本地新镀膜配方上传设备,校验参数阈值无误后自动在2号腔运行

fromendura_sdkimportEnduraClient,RecipeManager# 带管理员账号,支持修改/下发配方client=EnduraClient(host="192.168.1.100",port=50001,username="admin",password="Admin#2026")client.connect()recipe_mgr=RecipeManager(client)# 1. 本地配方上传,覆盖同名旧配方upload_res=recipe_mgr.upload_recipe("./recipe/cu_sputter.json",overwrite=True)ifupload_res["code"]!=0:print("配方上传失败:",upload_res["msg"])else:# 2. 参数合法性校验(功率、温度阈值检查)check=recipe_mgr.check_recipe_param("cu_sputter")ifcheck["pass"]:# 3. 下发2号腔自动执行recipe_mgr.run_recipe(chamber_id=2,recipe_name="cu_sputter")print("配方下发执行成功")else:print("配方参数超标:",check["error_params"])client.close()

案例4:设备故障告警实时监听+异常弹窗记录

场景:实时捕获真空泄漏、靶材耗尽、气体中断告警,保存告警日志

fromendura_sdkimportEnduraClient,AlarmMonitorimportjson client=EnduraClient("192.168.1.100",50001)client.connect()alarm_monitor=AlarmMonitor(client)# 告警回调处理函数defalert_handler(alert_info):print("="*50)print("触发设备告警:",json.dumps(alert_info,ensure_ascii=False,indent=2))# 追加写入告警日志文件withopen("./alarm_log.txt","a",encoding="utf-8")asf:f.write(json.dumps(alert_info)+"\n")# 订阅实时告警流alarm_monitor.subscribe(callback=alert_handler)print("告警监听已启动,等待故障信号...")# 持续监听try:whileTrue:passexceptKeyboardInterrupt:alarm_monitor.unsubscribe()client.close()

案例5:异步并发多台Endura设备集群采集(产线MES对接)

场景:工厂5台镀膜设备同时异步采集,无阻塞,汇总全部设备实时数据

fromendura_sdkimportAsyncDeviceCollectorimportasyncioasyncdefcollect_all_device():collector=AsyncDeviceCollector()# 批量添加产线5台设备device_ips=[("192.168.1.100","E01"),("192.168.1.101","E02"),("192.168.1.102","E03"),("192.168.1.103","E04"),("192.168.1.104","E05")]forip,nameindevice_ips:collector.add_device(host=ip,port=50001,name=name)# 异步批量读取所有设备腔室数据result=awaitcollector.async_get_all_chamber_data()print("集群设备采集汇总数据:",result)# 执行异步采集asyncio.run(collect_all_device())

案例6:远程修改腔室工艺参数+阈值保护校验

场景:远程调整溅射功率,内置参数上下限校验,防止超温超功率损坏靶材

fromendura_sdkimportEnduraClient client=EnduraClient("192.168.1.100",50001,username="admin",password="Admin#2026")client.connect()chamber_id=1target_power=3500# 先读取参数阈值范围param_limit=client.get_param_limit(chamber_id,"sputter_power_dc")min_p,max_p=param_limit["min"],param_limit["max"]# 阈值校验ifmin_p<=target_power<=max_p:res=client.set_process_param(chamber_id,"sputter_power_dc",target_power)ifres["code"]==0:print(f"功率修改成功,当前功率:{target_power}W")else:print("参数写入失败:",res["msg"])else:print(f"参数越界!允许范围{min_p}~{max_p}W")client.close()

案例7:读取晶圆Lot批次生产数据写入MySQL数据库

场景:对接MES系统,自动抓取每批次晶圆加工时长、良率、腔室号存入数据库

fromendura_sdkimportEnduraClientfromsqlalchemyimportcreate_engineimportpandasaspd# 数据库连接engine=create_engine("mysql+pymysql://user:pass@127.0.0.1:3306/semiconductor_db")client=EnduraClient("192.168.1.100",50001)client.connect()# 获取最新加工批次数据lot_data=client.get_lot_production_data()df=pd.DataFrame(lot_data)# 写入生产数据表df.to_sql(name="endura_lot_record",con=engine,if_exists="append",index=False)print(f"成功写入{len(df)}条批次生产记录至数据库")client.close()

案例8:设备自动运维脚本(故障复位+停机自检)

场景:检测轻微告警后自动执行设备复位、真空自检,减少人工介入

fromendura_sdkimportEnduraClient,AlarmMonitor client=EnduraClient("192.168.1.100",50001,username="admin",password="Admin#2026")client.connect()alarm=AlarmMonitor(client)defauto_repair_alert(alert):# 轻微气体波动告警自动复位ifalert["alarm_code"]in["GAS_LOW","VACUUM_FLUCT"]:print("检测到轻微故障,执行自动复位")client.device_reset()# 执行真空自检check_res=client.vacuum_self_check()ifcheck_res["vacuum_normal"]:print("自检通过,设备恢复正常运行")else:print("真空自检异常,需人工检修")alarm.subscribe(callback=auto_repair_alert)print("自动运维程序启动,监控轻微故障自动复位")try:whileTrue:passexceptKeyboardInterrupt:client.close()

五、常见错误、报错原因与解决方案

1. 连接类报错

报错1:ConnectionRefusedError: [Errno 61] Connection refused
  • 原因:①设备IP/端口错误;②工控机防火墙拦截50001端口;③设备SECS服务未启动;④网线断开
  • 解决:核对IP端口;机房运维放行端口;重启Endura设备SECS后台服务;ping设备IP测试网络
报错2:auto_reconnect失效,频繁断连
  • 原因:reconnect_interval设置过大;工控网网络波动;设备最大连接数已满
  • 解决:调整reconnect_interval=2;优化交换机网络;设备后台释放闲置连接

2. 权限与参数读写报错

报错3:Code 403 Permission Denied 无权修改参数
  • 原因:客户端未传入admin管理员账号,普通operator仅可读不可写
  • 解决:实例化EnduraClient时传入username/password管理员凭证
报错4:ParamValueOutOfRange 参数超出阈值
  • 原因:set_process_param写入数值超过设备预设上下限,保护靶材/腔室
  • 解决:调用get_param_limit查询合法区间,修改数值至范围内

3. Recipe配方相关报错

报错5:RecipeParseError 配方文件解析失败
  • 原因:本地配方JSON格式错误;配方参数字段与设备不兼容;版本不匹配
  • 解决:格式化JSON校验;使用设备导出标准模板修改;升级endura-sdk至匹配设备版本
报错6:RecipeRunFailed 配方下发执行失败
  • 原因:腔室处于手动锁定模式;真空未达标;靶材损耗超限;配方依赖气体未开启
  • 解决:切换设备至auto自动模式;等待真空达标;更换靶材;检查供气系统

4. 异步采集并发报错

报错7:AsyncTaskTimeoutError 异步采集超时
  • 原因:同时并发设备过多,工控网络带宽不足;timeout参数过小
  • 解决:分批采集设备;调高timeout至15s;优化产线内网带宽

5. 安装与依赖报错

报错8:ModuleNotFoundError: No module named ‘endura_sdk’
  • 原因:未正确安装包;多Python环境混淆;离线安装缺失依赖
  • 解决:重新执行pip安装;确认使用当前环境pip;离线包补全依赖库
报错9:ImportError: cannot import name ‘AsyncDeviceCollector’
  • 原因:sdk版本过低,异步采集类为2.2.0后新增
  • 解决:pip install endura-sdk --upgrade升级最新稳定版

6. 告警监听报错

报错10:AlarmSubscribeFailed 告警订阅通道占用
  • 原因:已有上位机MES连接设备告警通道,单设备仅支持1路告警订阅
  • 解决:断开其他MES客户端;使用OPCUA协议多路订阅模式

六、使用注意事项与生产环境规范

1. 网络与工控安全规范

  1. 禁止公网直接访问Endura工控设备,必须隔离产线内网,增加网闸
  2. 所有通讯账号密码禁止硬编码在代码,使用.env环境文件加密存储
  3. 生产环境必须开启auto_reconnect=True,防止断采丢失工艺数据

2. 工艺操作风险规范

  1. 远程修改溅射功率、温度、气体流量前必须调用get_param_limit做阈值校验,避免烧毁靶材、损坏真空腔室
  2. 配方下发仅允许非生产时段或空晶圆腔室测试,量产中下发会中断镀膜流程造成晶圆报废
  3. 设备复位、真空自检等高风险指令增加人工确认逻辑,禁止无限制自动执行

3. 性能与并发优化

  1. 单线程同步客户端最多控制3台以内设备,5台以上必须使用AsyncDeviceCollector异步采集
  2. 轮询采集间隔最低设置1s,禁止毫秒级高频轮询,会占用设备工控CPU导致卡顿
  3. 长期采集程序增加日志滚动分割,避免日志文件无限膨胀占用硬盘

4. 版本兼容规范

  1. Endura老款5500设备适配sdk 1.x版本;300mm新款平台使用2.4+版本
  2. 升级sdk前必须在测试机验证配方、接口兼容性,避免产线程序崩溃
  3. 协议选择:MES对接优先opcua,单纯工艺采集使用secs协议,速度更快

5. 日志与数据存储规范

  1. 生产程序强制配置log_save_path,完整留存通讯日志用于故障追溯
  2. 批量工艺数据建议分小时分片存储CSV/数据库,单表避免千万级数据堆积
  3. 告警日志永久留存,满足半导体工厂生产追溯合规要求

6. 程序健壮性规范

  1. 所有设备操作必须使用try-finally包裹,确保程序异常退出时执行client.close()释放连接
  2. 增加心跳检测逻辑,定时读取设备状态判断通讯存活
  3. 增加异常捕获兜底,单个设备故障不影响其他产线设备采集流程

《动手学PyTorch建模与应用:从深度学习到大模型》是一本从零基础上手深度学习和大模型的PyTorch实战指南。全书共11章,前6章涵盖深度学习基础,包括张量运算、神经网络原理、数据预处理及卷积神经网络等;后5章进阶探讨图像、文本、音频建模技术,并结合Transformer架构解析大语言模型的开发实践。书中通过房价预测、图像分类等案例讲解模型构建方法,每章附有动手练习题,帮助读者巩固实战能力。内容兼顾数学原理与工程实现,适配PyTorch框架最新技术发展趋势。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/4 4:25:59

终极指南:如何用E-Hentai-Downloader实现漫画资源的智能收藏方案

终极指南&#xff1a;如何用E-Hentai-Downloader实现漫画资源的智能收藏方案 在数字漫画收藏领域&#xff0c;E-Hentai-Downloader为用户提供了一个高效便捷的解决方案&#xff0c;能够将在线画廊内容智能打包为ZIP文件&#xff0c;实现漫画资源的自动化管理。这款工具通过创新…

作者头像 李华
网站建设 2026/7/4 4:25:54

AI粮食烘干机器人Qt信创完整项目

# AI粮食烘干机器人Qt信创完整项目 ## 项目说明 1. 技术栈:Qt5.15/Qt6 兼容、C++、QSerialPort串口、QChart数据曲线、多线程温湿度采集、AI烘干智能算法、信创适配(银河麒麟/统信UOS) 2. 硬件模拟:虚拟串口模拟粮食烘干机器人PLC,无硬件也能运行 3. 功能模块: - 主界…

作者头像 李华
网站建设 2026/7/4 4:24:47

EVE-NG v7 重磅更新:付费功能全免费,流量可视化人人可用

前言 长期以来&#xff0c;EVE-NG 都是网络从业者公认的仿真利器&#xff0c;能够完整模拟华为、华三、思科、锐捷等多厂商硬件设备&#xff0c;是考证练习、网络架构调试验证的核心工具。早在 v6 版本&#xff0c;官方就上线了 Traffic Filters 流量可视化功能&#xff0c;依靠…

作者头像 李华
网站建设 2026/7/4 4:24:31

我用PyQt5手搓了一款小米车机软件系统(详细图文说明)

文章目录一&#xff0e;前言二&#xff0e;技术介绍1.PyQt52.QSS3.QThread多线程技术4.QRC资源管理5.黑白主题切换三&#xff0e;效果展示1.主界面2.APP页面3.空调控制页面4.导航页面5.电话页面6.360全景页面7.设置页面1.基本设置2.车辆控制3.灯光设置4.辅助驾驶5.显示设置6.声…

作者头像 李华
网站建设 2026/7/4 4:23:31

23. 【C语言】共用体与枚举类型:当数据需要“变脸”

前面我们用结构体把不同数据打包在一起&#xff0c;一个 struct Student 里同时有姓名、学号、成绩&#xff0c;各占各的空间&#xff0c;互不干扰。 但有时候&#xff0c;我们需要的恰恰相反&#xff1a;同一个存储空间&#xff0c;在不同时刻存放不同类型的数据。 比如一个变…

作者头像 李华
网站建设 2026/7/4 4:20:30

WWDC 最大赢家不是苹果,是一个你看不见的 AI 模式

WWDC 2026 最让我意外的不是 Siri 终于变聪明了&#xff0c;是苹果选的人。今年 1 月&#xff0c;苹果和谷歌联合宣布了一项多年 AI 合作协议&#xff1a;苹果每年向谷歌支付约 10 亿美元授权费&#xff0c;把 Gemini 模型作为 Siri AI 的底层引擎。WWDC 上这事正式落地——Sir…

作者头像 李华