当前位置: 首页 > news >正文

YMS系统开发2-EAP自动化SECS/GEM协议详解

被这个协议搞昏头了,确实很复杂。

简单来说SECS协议分为3个部分:

1.连接层--分为串口连接和TCP/IP连接,前者是使用SECS-I进行连接,后者是用HSMS-SS连接

2.消息结构规范--就是管传输的消息是什么格式,定义消息结构、数据类型(如 List、ASCII、U4 等)及语义(Stream/Function 分类),由SECS-II控制

3.控制层--GEM,这个就是定义有哪些指令你可以发送,控制机台做什么的

HSMS的报文格式:

HSMS报文由三部分组成:

  1. 消息长度(Message Length)​​:4字节无符号整数(大端序),表示消息头部 + 消息文本的总字节数(最小值为10)。
  2. 消息头部(Message Header)​​:固定10字节,包含会话控制、消息类型等关键信息。
  3. 消息文本(Message Text)​​:可变长度,承载SECS-II消息内容(如S1F3、S6F11等)。

eg:00 00 00 0A FF FF 00 00 00 01 00 00 00 00

其中前4位00 00 00 0A指的是报文长度不包括表示长度的起始的4个字节

报文头信息:

会话IDByte 0-1U216位设备唯一标识(最高位固定为0)0x0001(设备ID=1)
Header Byte2Byte 2U1数据消息​:高1位为等待位(W-Bit,1=需回复),低7位为SECS流号(Stream)
控制消息​:状态码(如0x00)
0x81(W=1, Stream=1)
Header Byte3Byte 3U1数据消息​:SECS功能码(Function)
控制消息​:子类型(如SelectStatus)
0x01(Function=1)
PTypeByte 4U1编码格式(0=SECS-II标准;1-127保留;128-255厂商自定义)0x00(默认SECS-II编码)
STypeByte 5U1消息类型:
0=数据消息(Data)
1-9=控制消息(如Select.req、Linktest.rsp等)
0x00(数据消息)
系统字节Byte 6-9U4事务唯一标识(用于匹配请求与响应)0x00000001(事务ID=1)

​:

  • W-Bit规则​:若消息需回复(如S1F1),W-Bit=1;回复消息(如S1F2)W-Bit=0
  • 控制消息特例​:Linktest.req/rsp 的会话ID固定为 0xFFFF

PType:

取值描述
0SECS-II编码
1-127子标准保留
128-255保留,未使用

SType:

取值描述
0数据消息
1select.req
2select.rsp
3deselect.req
4deselect.rsp
5linktest.req
6linktest.rsp
7reject.req
8未使用
9separate.req
10未使用
11-127子标准保留
128-255保留,未使用

消息文本:

消息文本即SECS-II消息体,采用嵌套的 ​数据项(Item)​​ 和 ​列表(List)​​ 结构

  1. 数据项头部(Item Header)​​:
    • 格式字节​(1字节):
      • 高6位:数据类型(如ASCII=010000,二进制=001000
      • 低2位:长度字段字节数(0/1/2/3字节)。1个字节最大值为255,如果后面的数据没有超过255后面两位就用 01 表示 及 01000001 十六进制表示为 41;
    • 长度字段​(1-3字节):数据内容的实际长度(大端序)。
  2. 数据内容(Item Body)​​:具体数据值(如字符串、整数等)。

格式字节的第1位和第2位:定义Format byte后面有几个字节来表述Item Body的长度。取值只能1、2、3。( 如果值为2,则表示有2个字节表述Item Body的长度,即第2个和第3个字节。值为0是非法的,会产生错误。

示例:

| 格式字节 | 长度字段 | 数据内容          |
| 01000001 | 00000011 | 01000001 01000010 01000011 |
(0x41表示ASCII+1字节长度,0x03表示长度=3)  

 HSMS支持的数据类型:

工作模式与超时机制

  1. 连接模式​:
    • 主动模式(Active)​​:设备作为客户端,主动连接Host(默认端口5000).此时设备的设置应该为remote IP/port:Host IP/port;  local IP/port:equipment IP/port
    •  ​被动模式(Passive)​​:设备作为服务端,监听Host连接,此时设备的配置为:remote IP/port:equipment IP/port ; local IP/port: equipment IP/port
  2. 状态机​:
    • Not Connected → Connected(含子状态 Not Selected/Selected
  3. 关键计时器​:
    • T3​:回复超时(默认10秒),超时则重发或报错
    • T5​:连接间隔(指断开连接和重新连接的最小时间,防频繁重连)
    • T6​:控制指令超时时间(

      控制会话超时 T6 (T6 control transaction timeout)表示一个控制会话所能开启的最长时间,超过该时间就认为这次通信失败。当发送<xx>.req 控制消失时 T6计时器开启,若在 T6 超时之前收到相应的<xx>.rsp 消息则计时器关闭,否则控制消息的发起者将关闭这次会话,并认为出现一个通信故障

    • T7:连接超时(指TCP/IP连接成功后到连接选择之间的最大时间,也就是发送stype=1 到收到stype=2 回复的这段时间,表示当建立了 TCP/IP 连接之后通信处于 Not Select 状态的最长时间,通信必须在该时间完成 select 操作,否则将会断开 TCP/IP 连接。)
    • T8:接收超时(网络字符超时 T8 (T8 network intercharacter timeout)表示成功接收到单个HSMS 消息的字符之间的最大时间间隔。鉴于 TCP/IP 是面向流的通信协议,因此一个 HSMS 通信消息可能被分为若干个 TCP/IP 消息进行传输,若 T8 计时器超时则认为这次传输失败。)

SECS指令:

由S-Stream和F-Function 组成

SECS命令由 SxFy 格式标识:

  • ​**Sx**​:Stream(流),表示功能大类(如设备状态、报警管理)。
  • ​**Fy**​:Function(功能),表示具体操作(如请求、响应、主动上报)。
  • 奇偶规则​:
    • 奇数 Fy(如 S1F1):​请求/命令​(主机或设备发起)。
    • 偶数 Fy(如 S1F2):​响应/确认​(必须回复前一条奇数指令)。

一些变量含义:

名称含义
DeviceID用于Host识别的设备号
CEIDevent ID 即事件ID
SVID设备状态变量ID
ECID设备常量ID
VID变量ID
RPTIDreport ID 即上报ID
PPIDrecipe ID 即配方ID(工艺ID)
CHIPID芯片ID

SECS / GEM标准定义了3类数据项:

状态变量(SV)

状态变量是用于标识设备或其任何组件(例如传感器,仪表等)的状态的数据项。工艺设备的状态变量的示例包括–温度,压力,气流,RF正向功率,旋转速度,这些数据项通常不附加到诸如批次开始,晶圆开始等事件中。工厂主机可以随时向设备查询状态变量,也可以定义跟踪数据设置以请求设备提供状态变量。工厂主机不能更改设备的状态变量。

数据值变量(DV)

数据值变量是与特定事件相关的数据项,例如批次开始,设备上发生的警报/错误,晶圆处理/测量完成等。数据值变量的示例包括–批次ID,槽号,当前配方等等。这些变量仅在发生特定事件(例如选择配方,开始批处理等)时才更改。工厂主机通过定义报告并将报告与事件相关联来查询数据值变量。

与状态变量不同,数据值变量可能没有值。例如,数据值变量之一是“警报ID”,它指定最新警报的ID。但是,如果自打开设备以来没有任何警报,则该字段可以为空。工厂主机不能更改设备的数据变量。

设备常数(EC)

设备常数是与设备配置有关的数据项–它们可以包含与设备硬件,软件或SECS/GEM软件有关的项。与状态变量和数据值变量不同,工厂主机可以通过SECS消息更改设备常数。设备常数的示例包括–抽空时间限制,设备待机时间,固定销等待时间等。

指令介绍

1. ​通信管理与状态控制​(Stream 1)
  • ​**S1F1(Are You There Request)​**​
    • 功能​:设备向主机发送连接探测请求。
    • 响应​:主机需回复 S1F2(在线数据)确认连接。
  • ​**S1F13/S1F14(Establish Communication)​**​
    • 功能​:设备主动请求建立通信链路(S1F13),主机回复 S1F14 确认。
  • ​**S1F17/S1F18(Request ON-LINE)​**​
    • 功能​:主机请求设备切换至“联机/远程”控制模式(最高控制权限),设备回复 S1F18 确认。
2. ​设备状态监控与查询​(Stream 1 & 2)
  • ​**S1F3/S1F4(Selected Equipment Status)​**​
    • 功能​:主机查询指定状态变量(SVID),设备返回当前值(S1F4)。
    • 应用场景​:实时监控温度、压力等关键参数。
  • ​**S2F13/S2F14(Equipment Constant)​**​
    • 功能​:主机查询或设置设备常量(ECID),如抽空时间限制(S2F13请求,S2F14返回数据)。
3. ​报警与异常管理​(Stream 5)
  • ​**S5F1/S5F2(Alarm Report)​**​
    • 功能​:设备主动上报报警事件(S5F1),主机需回复 S5F2 确认接收。
  • ​**S5F3/S5F4(Enable/Disable Alarm)​**​
    • 功能​:主机启用/禁用特定报警通知(如仅监控高危报警)。
4. ​数据采集与事件报告​(Stream 6)
  • ​**S6F11/S6F12(Event Report)​**​
    • 功能​:设备主动上报事件(如批次开始、晶圆完成),主机回复 S6F12 确认。这个巨复杂,功能巨多,是核心指令,根据CEID和RPTID分为很多种。
    • 数据关联​:可绑定状态变量(SV)、数据变量(DV)生成结构化报告。
  • ​**S6F15/S6F16(Event Report Request)​**​
    • 功能​:主机请求特定事件的历史数据(如追溯故障原因)。
5. ​远程控制与指令下发​(Stream 2)
  • ​**S2F41/S2F42(Host Command)​**​
    • 功能​:主机发送远程控制命令(如 STARTSTOP),设备回复 S2F42 执行结果。
  • ​**S2F49/S2F50(Enhanced Remote Command)​**​
    • 功能​:扩展指令集,支持复杂控制逻辑(如多步骤工艺触发)。
6. ​配方与程序管理​(Stream 7)
  • ​**S7F1/S7F2(Process Program Load)​**​
    • 功能​:主机查询设备能否加载新配方(S7F1),设备回复许可状态(S7F2)。
  • ​**S7F5/S7F6(Process Program Request)​**​
    • 功能​:主机下发配方数据(S7F5),设备回复加载结果(S7F6)。

消息体包含两种类型List和item,对应十六进制为00和其他几种值类型,格式都是一样,类型+长度,也可以混着用,和文件结构一样。

例子:

S1F13请求报文(设备->主机)

报文功能

设备请求与主机建立通信,携带设备 ID、软件版本等基本信息。

00 00 00 1A   // 消息长度 = 30 字节(10 头部 + 20 消息体)
00 01         // 会话 ID = 0x0001
00            // Byte2:Stream = 1(S1),W-bit = 0(无需回复)
0D            // Byte3:Function = 13(F13)
00            // Byte4:PType = 0(SECS-II 编码)
00            // Byte5:SType = 0(数据消息)
12 34 56 78   // Byte6-9:系统字节 = 0x12345678
-------------- 消息体开始(SECS-II 部分) --------------
01 02                   // L2 列表(List)包含 2 个元素
41 05 45 51 31 32 33    // 设备 ID: "EQ123" ASCII 字符串(5 字节)
41 05 31 2E 30 2E 30    // 软件版本:"1.0.0"  ASCII 字符串(5 字节)
http://www.dtcms.com/a/269234.html

相关文章:

  • python的瑜伽体验课预约系统
  • vue时间轴,antd时间轴,带卡片时间轴
  • Windows 和 Linux 好用网络命令
  • 【动态规划】两个数组的dp问题(一)
  • 基于 STM32+FPGA 的快速傅里叶频域图像在 TFT 中显示的设计与实现(项目资料)(ID:8)
  • Python Day6
  • 【Netty基础】Java原生网络编程
  • 洛谷刷题7.7
  • Java源码的前端编译
  • tomcat部署多个端口以及制定路径部署-vue3
  • Java创建型模式---原型模式
  • docker进入启动失败的容器
  • 图像处理中的边缘填充:原理与实践
  • AJAX vs axios vs fetch
  • [java: Cleaner]-一文述之
  • Python与Mongo数据库:下载安装mongodb与CompassGUI、python中安装monggo模块、如何在Mongo中插入一条数据
  • 10.5 实战ChatGLM3私有数据微调之提示工程:批量生成数据稳定性秘籍
  • HarmonyOS从入门到精通:自定义组件开发指南(二):组件属性与参数传递
  • Python实现MCP Server的完整Demo
  • 《声音的变形记:Web Audio API的实时特效法则》
  • Web 前端安全防护:防范常见攻击与漏洞的策略
  • SKUA-GOCAD入门教程-第八节 线的创建与编辑7和8
  • 特别放送:关于一个无法修复的系统级Bug
  • Eslint基础使用
  • 插入数据优化
  • 镜头OIS系统方案全面解析:从基础原理到前沿应用
  • 【ElasticSearch实用篇-01】需求分析和数据制造
  • Spring Cloud Config(微服务配置中心详解)
  • 七牛云Java开发面试题及参考答案(60道面试题汇总)
  • 华为OD机试 2025B卷 - 最小循环子数组(C++PythonJAVAJSC语言)