C#_半导体行业-SECS/GEM协议

一、概念

  SECS/GEMI 标准(制造设备通信和控制的通用模型)指的是一组用于半导体行业“设备与设备”之间或“设备与工厂主机系统”之间通信的国际标准协议,由国际半导体协议SEMI发起并维护。SECS基于其他较低级别的协议,如下:

1、SECS-II与SECS-I、HSMS的关系:

协议名称 用途
SECS-I 定义 RS-232 通信的标准(报文)
HSMS 定义 TCP/IP 通讯的标准(报文)
SECS-II 定义交换消息的标准

2、SECS/GEMHSMS协议报文分析

  注:req:请求;rsp:回应。

  报文详细解析见:https://blog.csdn.net/baidu_38174627/article/details/122770726;以下是博文备份。

(1)数据长度

  占4个字节,每个字节都是存储的16进制的数据。

(2)报文头信息

(3)数据信息

3、SECS指令(S:Stream编号,F:功能编号)

  SECS/GEM协议协议使用“SECS指令”进行通讯;发送者发送奇数,响应者响应偶数,如:“发送者发送S1F1,响应者响应S1F2”。

(1)Stream编号含义
Stream编号 代表的含义 Stream编号 代表的含义
1 设备状态 2 设备控制与诊断I
3 原料状态 4 原料控制
5 意外处理 6 数据采集
7 加工程序控制 8 控制程序传输
9 系统错误 10 终端服务
11 主机文件服务 12 晶元定位
13 数据集传输 14 对象服务
15 配方管理 16 加工管理
17 设备控制与诊断II 18 子系统控制与数据
(2)常用指令

① 原文

② 中文翻译(

  注:① send翻译的不好,有些感觉是“切换控制命令的意思”,有些是“请求的意思”,等我确认后再更新翻译;

    ② 该文档不是最新的文档,最新文档内容还多;我会把手里新版指令截图放在文章末尾。

发送者发送的指令 代表的含义 发送者发送的指令 代表的含义
S1F1 询问是否可连接(使用S1F2应答是否可连接) S7F1 进程程序加载 查询
S1F3 请求设备状态 S7F3 发送 加工程序
S1F5 请求Formatted(格式化)状态 S7F5 请求 加工程序
S1F7 请求Fixed()状态  S7F7 请求 加工程序ID
S1F9 请求 原料传输状态 S7F9 请求 原料或工艺路线
S1F11 请求 变量名称列表 S7F11 发送 原料或工艺路线
S1F13 请求建立通信 S7F13 发送 原料或工艺路线入口
S1F15 请求离线 S7F15 发送 工艺路线Mode
S1F17 请求在线 S7F17 删除 加工程序
S1F19 获取属性 S7F19 请求 当前设备的加工程序的资料
S1F23 查询 可用事件列表(新版本内容)    
S2F1 查询 Service程序负载 S7F21 获取 设备加工程序能力
S2F3 请求 发送Service程序 S7F23 发送 格式化加工程序的命令
S2F5 请求 Service程序加载  S7F25 请求 格式化加工程序
S2F7 请求 Service程序运行  S7F27 发送 加工程序验证
S2F9 请求 Service程序运行结果  S7F29 查询 加工程序验证结果
S2F11 获取 Service程序的资料  S7F31 发送 加工程序验证请求
S2F13 请求设备常量Constant  S7F33 请求 可用的加工程序
S2F15 发送新设备常量Constant  S7F35 请求 Mid$的加工程序
S2F17 请求 数据和时间  S8F1 请求 启动程序
S2F19 请求 重置或初始化  S8F3 请求 执行程序
S2F21 请求 远程控制  S9F1 无法识别的设备Id
S2F23 请求 初始化Trace(跟踪)  S9F3 无法识别的Stream类型
S2F25 请求 回路诊断  S9F5 无法识别的Function类型
S2F27 启动处理请求  S9F7 非法数据
S2F29 请求 设备常量名称列表  S9F9 事务计时器超时
S2F31 请求 日期和时间设置  S9F11 数据太长
S2F33 定义报告  S9F13 对话超时
S2F35 给 事件设定 事件组  S10F1 请求 终端
S2F37 订阅/退订事件  S10F3 终端单个显示
S2F39 多块(Multi-block)查询  S10F5 终端Multi-block(多个)显示
S2F41 发送 Host主机命令  S10F7 不允许Multi-block(多块)
S2F43 重置后台Streams和Functions  S10F9 广播 Map设置的数据
S2F45 定义 可变的限制属性  S12F1 发送 Map设置的数据
S2F47 请求 可变的限制属性  S12F3 请求 Map设置的数据
S2F49 请求 创建数据报告  S12F5 查询 Map传输
S2F51 请求 删除数据报告  S12F7 Map数据发送类型1
S2F53 请求 创建Trace(跟踪)  S12F9 Map数据发送类型2
S2F55 请求 删除Trace(跟踪)  S12F11 Map数据发送类型3
S2F57 请求 收集 Link (连接)事件  S12F13 Map数据请求类型1
S2F59 请求 收集 UnLink (断开连接)事件  S12F15 Map数据请求类型2
S2F61 请求 重置 Trace(跟踪)  S12F17 Map数据请求类型3
S2F63 请求 强制远程控制  S12F19 Map错误报告
S3F1 请求 原料状态  S13F1 发送 数据集发送
S3F3 请求 完成时间  S13F3 请求 打开数据集
S3F5 发现原料 通知  S13F5 请求 读取数据集
S3F7 原料丢失 通知 S13F7 关闭 数据集发送
S3F9 原料ID EquateSend S13F9 重置 数据集发送
S3F11 请求 原料ID S13F11 查询 数据集多块
S3F13 发送 原料ID S13F13 发送 表格数据
S4F1 准备发送原料 S13F15 请求 表格数据
S4F3 发送原料 S14F1 请求 获取Attr
S4F5 握手完成 S14F3 请求 设置Attr
S4F7 未准备好发送 S14F5 请求 获取类型(GetType)
S4F9 卡在发送端  S14F7 GetType 的数据
S4F11 卡在接收端 S14F9 请求 创建 Object
S4F13 发送超时 S14F11 请求 删除 Object
S4F15 接收到的原料 S14F13 请求 附加对象
S4F17 请求接收 S14F15 请求 附加的Object
S4F19 创建 Transfer Job(转移) S14F17 请求 监督对象
S4F21 控制 Transfer Job(转移) S15F1 查询 Multi-Block(多块)配方管理
S4F23 Transfer Job(转移)报警 S15F3 请求 操作 配方的命名空间
S4F25 多块(Multi-block)查询 S15F5 请求 重命名 配方的命名空间
S4F27 切换(Handoff )就绪 S15F7 请求 配方空间(RecipeSpace)
S4F29 切换(Handoff )命令 S15F9 请求 配方状态
S4F31 切换(Handoff )命令完成 S15F11 请求 重命名 配方的命名空间
S4F33 切换(Handoff )已验证 S15F13 请求 创建配方
S4F35 切换(Handoff )取消就绪 S15F15 请求 存储配方
S4F37 切换(Handoff )取消就绪确认 S15F17 请求 检索配方
S4F39 切换(Handoff )停止 S15F19 请求 重命名配方
S4F41 切换(Handoff )停止确认 S15F21 请求 操作配方
S5F1 发送 报警报告 S15F23 请求 配方描述符
S5F3 启用或禁用 报警 S15F25 更新 配方参数范围
S5F5 请求 报警列表 S15F27 请求 下载配方
S5F7 请求 已启用的报警列表 S15F29 请求 验证配方
S5F9 发送 异常报警 S15F31 请求 卸载配方
S5F11 清除 异常报警 S15F33 请求 选择配方
S5F13 请求 异常恢复 S15F35 请求 删除配方
S5F15 异常恢复 完成通知 S15F37 请求 批准 DRNS分割行为
S5F17 中止 异常恢复 请求 S15F39 请求 分割 DRNS记录器
S6F1 发送 Trace(跟踪)数据 S15F41 请求 修改 DRNS记录器
S6F3 发送 离散型变量数据 S15F43 请求 获取DRNS变更
S6F5 查询 “发送的多块(Multi-block)数据” S15F45 请求 批准DRNS变更
S6F7 请求“数据传输” S15F47 请求 重建DRNS管理器
S6F9 发送“Formatted(格式化)变量” S16F1 查询 多块(Multi-block)加工程序数据
S6F11 发送 事件报告(设备上传数据) S16F3 请求 创建加工程序
S6F13 发送 注释事件报告 S16F5 请求 控制加工程序
S6F15 请求 事件报告 S16F7 加工程序 警告通知
S6F17 请求 注释事件报告 S16F9 加工程序 事件通知
S6F19 请求 特定报告 S17F1 请求 创建数据报告
S6F21 请求 带注释的个人报告请求 S17F3 请求 删除数据报告
S6F23 请求 后台数据 S17F5 请求 创建Trace(跟踪)
S6F25 发送 通知报告 S17F7 请求 删除Trace(跟踪)
S6F27 发送 Trace(跟踪)报告 S17F9 请求 收集 Link(链接)事件
S6F29 请求 Trace(跟踪)报告 S17F11 请求 收集 UnLink(断开连接)事件
(3)TimeOut
  T1 T2 T3 T4 RTY
SEMI标准(秒) 0.5 10 45 45 3(次)
含义   握手超时 Primary信息发送后等待回复超时   超时后可以重试的次数
范围(秒) 0.1~10 0.2~25 1~120 1~120 0~31(次)

4、SECS/GEM协议调试软件

  ① 仿真软件1(本实例演示):SEComSimulator(美国AIM Systems公司的基于C#开发的SECS标准协议模拟器;咸鱼搜索 执笔小白)

  ② 仿真软件2:SECS-Simulator(其他公司开的Java版;备份下载地址:PCtoLCD2002完美版.zip)

(1)软件中出现的关键字如下:
  • Host/Local:主机模式与本地模式
  • Remote:远程模式(RCMD)
  • Passive/Active:服务器与客户端
  • EQP:设备
  • Device ID:设备标识
  • VID:设备变量ID
  • SVID:设备状态ID(key-value,如:1000代表‘一号轮子的转速’)
// 1 举例:如定义1000代表轮子1的转速;1001代表轮子2的转速;
// 1.1 主机请求写法(给我变量1000(轮子1的转速)和1001的值(轮子2的转速)):
S1F3 W
L<2,
   <U4,1 1000>
   <U4,1 1001>
 >.
// 1.2 设备回复写法(轮子1为800转速;轮子2为600转速):
S1F4
L <2,
    <U4,1,800>
    <U4,1,600>
 >.
  • RPTID:报告编号
  • CEID:事件编号(事件为 设备主动给主机推送数据;一个事件中可以包含多个报告)
// 1 举例:如有一个事件(ID为3000)需要通知主机,这个事件(ID3000)中有一个报告(ID2000),报告2000中有一个变量(1000))
// 1.1 设备发送写法(解释如下):
S6F11 W
<L,3  // 长度3
    <U4,1,0>    // 是当事件需要多次发送时,需要的唯一标识
    <U4,1,3000>  // 事件(CEID)
    <L,1         // 事件中的报告List(RPTID )
        <L,2             // 报告List的长度
           <U4,1,2000>    // 报告ID
           <L,1            // 报告ID的长度
               <U4,1,120>  // 变量ID(SVID)的值
           >
        >
    >
 >.
// 1.2 主机回复写法(我收到了)
S6F12 
<B,1,0> 
  • ECID:设备常量
  • PPID:配方编号(配方为一组变量,可以一次请求一组数据)
  • DATAID:数据ID
  • 设置或清除报警ALCD /报警编号ALID / 报警文本ALTX
  • Send Primary Message:发送主要消息
  • Send Reply Message:发送回复消息
  • Send Control Message:发送控制消息
  • MDLN:设备模型类型
  • SOFTRE:软件修订版本
  • 设备常数(EC)/状态变量(SV) /数据变量(DV)
(2)使用SEComSimulator作为服务器时的配置

(3)使用SEComSimulator作为客户端时的配置

(4)开始连接

(5)连接后的效果

二、C# 示例

1、界面样式

2、代码

  略

posted @ 2023-08-18 10:37  ꧁执笔小白꧂  阅读(8209)  评论(4编辑  收藏  举报