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、代码
略
本文来自博客园,作者:꧁执笔小白꧂,转载请注明原文链接:https://www.cnblogs.com/qq2806933146xiaobai/p/17639768.html