这里我们先学习 SECS-II 协议,给我的感受是先学完 SECS-II 协议,再去学习 SECS-I 和 HSMS 协议更加容易理解,所以这里我先介绍 SECS-II 协议。
文章的内容基本上来自参考资料和自己看的文档,若有侵权,请联系删除,谢谢。
消息协议用于在主机和设备( Host and Equipment)
之间发送 SECS-II 消息。每个SECS-II消息都包含一条主消息( primary message )
和一个可选的次回复消息( optional secondary reply message)
。这也被称为一个事务(transaction)。
SECS-II 标准定义了使用如SECS-I、HSMS等传输协议在设备和主机之间交换的消息的形式和含义。
定义了以消息的形式在设备和主机之间传递信息,消息按其流分类,称为Stream。有很多不同流的Stream,每个Stream又包括具体的消息,称为Function。
标准还定义了消息的结构,消息由数据项和数据项列表 ( items and lists of items ) 构成
。该结构允许自描述数据格式,以保证对消息的正确解释。
SECS-II还规定了事务协议,用于管理消息的交换、分块等,对SECS-II实现提出了一些最低要求。
SECS-II消息被称为行为和函数(Streams and Functions)
。每条消息都有一个流值(Sx)和一个函数值(Fy)。比如:Stream 1 Function 1,写作:S1F1,并被称为“S1F1”。流是消息的类别,而函数是该类别中的特定消息。
注意:
Stream和Function按照数字进行编号。所有的Primary Message的Function编号为奇数,其对应的Secondary Message(即 Reply Message)的Function编号为偶数且为其Primary Message的Function编号加1。
如果Primary Message不需要应答,则其对应的偶数编号(Primary Message Function 编号加1)的Function不使用,保留。
我们来看一个例子:
接下来我们一起看看哪些 Streams and Functions 是保留的,那些是我们可以自定义的。
Stream | **Function ** | Availability |
---|---|---|
0 | 0 to 255 | 系统保留的 |
1 to 63 | 0 to 63 | 系统保留的 |
64 to 127 | 0 | 系统保留的 |
1 to 63 | 64 to 255 | 用户可自定义使用的 |
64 to 127 | 1 to 255 | 用户可自定义使用的 |
注意:
All function 0’s have a special meaning. They are sent as a reply to an aborted primary message.
上面这句话的意思是:所有Stream中Function编号为0的Message保留,用于中止事务。
上面我们了解了 Streams and Functions 的基础介绍,接下来一起学习下 Stream 的分类。
Stream | Catagory | 含义 |
---|---|---|
1 | Equipment Status | 设备状态 |
2 | Equipment Control and Diagnostics | 设备控制和诊断 |
3 | Material Status | 原料状态 |
4 | Material Control | 原料控制 |
5 | Alarm Handling | 异常处理 |
6 | Data Collection | 数据采集 |
7 | Recipe Management | 工艺程序管理 |
8 | Control Program Transfer | 控制程序传输 |
9 | System Errors | 系统错误 |
10 | Terminal Services | 终端服务 |
11 | Host File Services (Deleted) | 主机文件服务(已删除) |
12 | Wafer Mapping | 晶片图形布置 |
13 | Data Set Transfers | 数据集传输 |
14 | Object Services:对象服务; | 对象服务 |
15 | Recipe Management | 配方管理 |
16 | Processing Management | 工艺进程管理 |
17 | Equipment Control and Diagnostics | 设备控制和诊断 |
18 | Subsystem Control and Data | 子系统控制和数据 |
事务:是信息交换的基础
。一个事务由不需要Reply的Primary Message或需要Reply的Primary Message及其Reply Message组成。这里我理解的事务指的是:一次完整的请求或者一次完整的请求响应。
下列是SECS-II在事务层面所规定的要求:
会话:是用于完成特定任务的一系列的一个或多个相关事务
。会话应包括完成任务所需的所有事务,会话结束时,会话双方应释放相关资源。
会话超时:表示会话在规定时间内未完成
。会话超时时间和检测由用户应用程序自定义。
会话超时将终止会话的进一步操作,并将允许清除任何已提交的资源。在设备上检测到会话超时后,应发送S9F13给主机。
SECS-II中定义了7种类型的会话:
1、一个无需回复的Primary Message是最简单的会话。此消息必须是一个单块的SECS-II消息。
2、如果响应端有发起端想要的数据,则会使用Primary Message请求这些数据,响应端将这些数据作为Reply Message回复给发起端。这是一个 request / data conversation(请求/数据对话)。
3、如果发起端将单块消息中的数据发送给响应端,并期望从响应端回复确认。这是一个 send / acknowledge conversation(发送/确认会话)。
4、如果发起端有一个要为特定的交互发送的多块消息,则发起端必须在发送数据之前获得响应端的许可。
会话中的第1个事务请求发送权限,响应端授予或拒绝发送权限。如果授予权限,发起端发送数据,响应端进行相应地回复。
这是一个 inquire / grant / send / acknowledge conversation(询问/授予/发送/确认对话)。
5、一个关于在设备和主机之间传输未格式化的数据集的对话,这个会话在 Stream 13 中有详细描述。
6、 一个关于设备之间原料处理的会话。这个会话在 Stream 4中详细描述。
7、发起端可以向响应端请求需要一段时间才能获取的信息(例如,操作员的输入)。
会话中的第一个事务请求信息,并且响应端以三种方式之一响应:(1)返回信息,(2)响应端表示不能或不会获得信息,(3)响应端表示将在随后的事务中获得并返回信息。
对于方式(3),响应端将在信息可用时启动后续事务返回信息。方式(3)是一个 request / acknowledge / send / acknowledge conversation(请求/确认/发送/确认对话)。
所有根据SECS-II标准的消息使用两种数据结构,即 Item (项目) 和 List(列表)。消息数据结构定义了消息的逻辑划分,与消息传输协议的物理划分不同。
消息的数据结构旨在为在设备和主机之间传递的消息提供一个自描述的内部结构。
一个Item是一个具有长度和格式的信息包。由Item Header 和 Item Body
组成。
Item的前2个、前3个或前4个字节称为 Item Header,用以描述Item的长度和格式。Item Header后的字节称为 Item Body,Item Body是Item的实际数据。
下图是 Item Header 的结构图
:
这个图看着是不是挺复杂的,不用急,我们一步一步的捋清楚后,就会发现并不难。
LSB和MSB的含义:
MSB(Most Significant Bit):最高有效位,二进制中代表最高值的比特位,这一位对数值的影响最大。
LSB(Least Significant Bit):最低有效位,二进制中代表最低值的比特位
例如,在二进制的1001(十进制的9)中,最左边的“1”即是MSB对数值影响最大,从1到9的变化幅度。而最右边的1是LSB因为仅会让数值产生8到9的变化。
总结:MSB指二进制中表示的最高有效位,LSB指数据的最低有效位,1(
MSB
)001(LSB
)
从上图中我们知道,Header的第1个字节为Format byte,其后的字节为Length byte。
注意这里的其后的字节为 Length byte,这里的 字节数不是固定的。
Format byte 被各位了两部分,前面两位表示:Item Body的长度,后面的表示:数据的格式,即ItemBody中的字节数据类型
。
Format byte的第1位和第2位:
定义Format byte后面有几个字节来表述Item Body的长度。取值只能1、2、3。如果值为2,则表示有2个字节表述Item Body的长度,即第2个和第3个字节。值为0是非法的,会产生错误。
这里就解释了上面为什么说:其后的字节为 Length byte,这里的 字节数不是固定的。因为Format byte的第1位和第2位一共有意义的值有1、2、3,即 Item Header 的 字节可能为 :前2个、前3个或前4个字节。
这里有一个需要特别注意的点,图中的 No. of length bytes 为 0 时,说的是错误的数据格式。但是我看其他的文档,说的是 0 代表 无Item 。这里暂不清楚谁对谁错,也可能是不同的设备厂商有不同的定义。这里大家一定要注意!!!
Format byte的第3位至第8位:
定义数据的格式,即ItemBody中的字节数据类型。下图为数据类型定义表:
List是一组有序的元素,其中元素可以是Item或List
。
List 的Header与数据类型为0的Item的Header形式相同。不过List的Header中的长度表示List中元素的个数,Item的Header中的长度表示数据字节的个数。
这里我页不太明白,清楚的朋友,请不吝赐教。
本地化字符串项是一个用于表示由多字节字符组成的字符串的Item。其Header中的Format Code为22(Octal)。它由string header和string组成。
因为字符有许多不同的编码方案,所以有一个附加的string header来表述字符集。
string header 是一个2字节16位的数字,它在 Item Header 之后,在string之前。
string header 是 Item 的 实际数据的一部分,所以它的长度计算包含在Item Header 的 Length byte 中。
下图为string header的编码集对应。
上面看了这么多理论,接下来一起看看几个 Item 的数据实例,来帮助我们进行理解。
1、包含一个二进制数据 10101010
的 Item。
00100001 Item, binary, 1 length byte 00000001 1 byte length 10101010 data byte
理解了上面这张图代表的含义,上面说的内容基本上就理解了。
2、 包含三个ASCII字符ABC的Item。
01000001 Item ASCII, 1 length byte 00000011 Three bytes long 01000001 ASCII A 01000010 ASCII B 01000011 ASCII C
3、包含三个2字节有符号整型数字的Item。
01101001 Item, 2-byte integers 00000110 6 bytes total (6/2=3 integers) xxxxxxxx MSByte number x xxxxxxxx LSByte number x yyyyyyyy MSByte number y yyyyyyyy LSByte number y zzzzzzzz MSByte number z zzzzzzzz LSByte number z
4、 包含一个4字节浮点数的Item。
10010001 Item, 4-byte floating point 00000100 4 bytes (4/4=1 number) ffffffff ffffffff Floating point number ffffffff ffffffff
SECS-II 消息包含一个 structure or layout (结构或布局)
。该布局定义了SECS-II消息的所有数据项。布局是消息中遵循Stream and Function notation (流和函数符号)
的一部分。
上面中 L、A
这种是什么意思呢,还记得我们在 4.1 Item
中介绍的 Format byte 中 第3位到第8位
的作用吗?这里就是的 L、A
就是表示 Item Body 中的数据类型。我们称之为Data Item
。接下来一起看看有哪些 Data Item吧。
数据项由 format codes(格式代码)
定义。下表中列出了所有可能的数据项及其格式代码。格式代码仅由6位来定义。
需要注意的是,List 类型的数据项可以包含 其他数据项,当然了,也可以包含 List 数据项。
Type 缩写 | Type | 含义 | Format Code |
---|---|---|---|
L | List | 列表 | 000000 |
A | ASCII | ASCII字符 | 010000 |
B | Binary | 二进制数 | 001000 |
Boolean | Boolean | 布尔值 | 001001 |
I1 | 1-byte Singed Integer | 1字节有符号整数 | 011001 |
I2 | 2-byte Singed Integer | 2字节有符号整数 | 011010 |
I4 | 4-byte Singed Integer | 4字节有符号整数 | 011100 |
I8 | 8-byte Singed Integer | 8字节有符号整数 | 011000 |
U1 | 1-byte UnSinged Integer | 1字节无符号整数 | 101001 |
U2 | 2-byte UnSinged Integer | 2字节无符号整数 | 101010 |
U4 | 4-byte UnSinged Integer | 4字节无符号整数 | 101100 |
U8 | 8-byte UnSinged Integer | 8字节无符号整数 | 101000 |
F4 | 4-byte Floating-Point | 4 字节浮点数 | 100100 |
F8 | 8-byte Floating-Point | 8字节浮点数 | 100000 |
JIS-8 | 网上的资料说是:JIS-8是一种 半导体器件的防水等级标准, 表示该器件能够在水深超过1米 的水下保持正常工作。 不知道对不对哈 |
010001 |
SECS-II消息可以使用几个约定进行注释。下面显示了两个更常见的惯例:
按照我的理解,这里的A[6] 是不对的,第一个 A[6]应该是A[4]。第二个 A[6]应该是A[7]。
这里我放出来我看的文档的英文原版,大家自行理解。
Before a SECS-II message can be sent, the layout must be encoded. Each data item in the message layout is encoded and becomes part of the Data Structure. This is repeated until all the data items in the layout are encoded. The Data Structure is subsequently sent via the SECS-I protocol.
说说我的理解:
在发送SECS-II消息之前,我们要对数据进行编码,这里的数据指的是 5、Message Layout 中的完整数据。消息布局中的每个数据项都被编码,并成为数据结构的一部分。将重复此操作,直到布局中的所有数据项都被编码为止。数据结构随后通过
SECS-I 协议
发送。(这里其实还可以通过HSMS协议
发送)
接下来我们要重点理解了,我们将一起来看看如何将 Data Item 编码:
这里我们先对 Item 有一个整体的认知,方便后面的叙述:
Encoded Data Item
的第一个字节包含数据项的 format code(格式代码)
,并定义了接下来的将用几个字节
来表示数据项的长度。format code
用第2位到第7位表示, the number of length bytes
用第0位和第1位表示,那可以知道,数据项的长度的取值范围是:0字节、1字节、2字节、3字节。
接下来的0、1、2或3个字节定义了数据的长度。例如,如果数据的大小为1000字节,那么将需要2个长度的字节来表示1000(03 E8十六进制 或 00000011 11100100二进制)
下表显示了可以用长度字节数表示的最大数据字节数。
Number of length bytes | Max data size |
---|---|
0 | Empty item |
1 | 256 bytes |
2 | 64 Kbytes |
3 | 7.99 Mbytes |
接下来的n个字节包含了该数据项的数据。
下面显示了如何对ASCII数据项进行编码。根据它所包含的数据字节数,它可能需要0、1、2或3个长度的字节来表示数据字节的总数。
010000 -> 表示 ASCII 。
下面显示了一个示例SECS-II消息布局是如何编码的。请注意,在本例中,只有消息布局被编码,流和函数没有被编码。所有数值均以十六进制为单位,(例如: 52 = 01010010)
这里的 01、02 共同组成了 Item Header。
其中 01 中的 Format code 是:000000,表示 List 类型。长度是: 01,表示接下的一个字节表示数据的长度。
02 则表示 有2个元素。
由于SECS-I协议中的数据大小限制,编码的SECS-II消息(数据结构)可能不适合于一个SECS-I事务。因此,编码的SECS-II消息被划分为更小的块,一次发送一个块。这被称为多块消息传递。
每个SECS-I消息块被限制为244个已编码的SECS-II消息字节。消息块的最大数量为32,767,因此SECS-II编码的最大消息大小为 244 x 32,767
字节长。
SECS-II Parameters : 用于在实现消息协议时定义一些边界。下表显示了SECS-II控制系统中的参数:
SECS-II Parameters | 描述 |
---|---|
T3 | Reply Timeout |
T4 | Inter-Block Timeout |
T3: 从发送端发送 Primary Message 到接收到响应端回复的 Secondary Message之间的时间间隔。
T4: 多块传输中,接收到相邻块之间的时间间隔。
这是指一次要处理不止一个事务。事务是发送主消息和可选的接收辅助应答。一个事务在等待回复时被“打开”。交错是指有多个“打开”事务的能力。这允许发送多个主消息,而无需首先等待辅助回复。支持此特性并不是SECS-II的要求。
这里我们列出了更常用的SECS-II消息。
1、第一组消息通常在初始化时使用。
SECS-II | Description |
---|---|
S1F1 | Say hello to the equipment |
S1F13 | Establish communications with the equipment |
S2F15 | Set equipment constants |
S2F43 | Turn off spooling |
S2F33 | Create / Delete reports |
S2F35 | Link reports to events |
S2F37 | Enable / Disable events |
S5F3 | Enable / Disable alarms |
2、这些信息可用于配方选择、远程启动、晶圆片选择等
SECS-II | Description |
---|---|
S2F41 | Remote equipment control |
3、这些消息可用于数据收集。 |
SECS-II | Description |
---|---|
S6F3 | Older version of Event Reports |
S6F9 | Older version of Event Reports |
S6F11 | Event Reports |
4、S5F1用于处理设备报警
5、S9 这一类用于当设备检测到之前的消息错误时,由设备发送。
特别感谢 SECS半导体设备通讯-3 SECS-II通信标准 这边文章,让我对 SECS协议有一个入门的了解。
参考资料:
SECS半导体设备通讯-3 SECS-II通信标准
清晰讲解LSB、MSB和大小端模式及网络字节序