半导体行业通信标准SECS/GEM协议一看就懂的
阅读原文时间:2023年08月19日阅读:1

半导体行业通信标准SECS/GEM透析

  HSMS通信的设备端通常为客户端(Equipment)(也可称为Active 在通信中主动连接对方的),工厂会部署服务端(Host)(也可称为Passive 被动等待对方连接)。

一、HSMS报文格式

HSMS 报文详情如下

二、消息长度:

①消息长度:用一个 4 字节无符号整数表示,它表示消息头部和消息文本的总字节数,在传输过程中,高字节在前,低字节在后。消息长度的最小值是 10。和 SECS-I 中块的信息头部类似,HSMS 消息头部的字节数也是 10(注意:这个长度不包含自己的4个字节)。

如:如果要发送的如图1所示的报文,那消息长度就是 “报文头”+“数据内容的长度”。即22个字节。对应的16进制就是16.所以消息长度为:00 00 00 16。

                  图一

三、消息头部:

HSMS 消息头部各个字节的含义见表 1.1。

            表1.1 HSMS 消息头部字节含义

SxFy表示所有的功能。通常SxFy中y是奇数则是发送消息,y是偶数表示响应消息.

① 会话标识:设备的ID标记设备的唯一标识,低位在后,高位在前。

如:00 00

②头部字节2:在数据消息中,它表示等待位(W-Bit)和消息的 SECS 流(SECS Stream)。【如果这个指令需要回复,则8位里面,最高位是1。如果这个指令不需要回复则8位里面最高位是0】一般都是1000+Stream(S1F1就是“0001”)

如:S1F1,头部字节2:“1000 +0001”,前面的1000(0x80)是一般都是这个,后面+的就是S后面跟着的数值,即1000 0001,16进制就是 81。

③头部字节3:用法和头部字节 2 相似,不同之处在于在数据消息中,它表示 SECS 功能 (SECS Function);表示类型是一个 8 位无符号整数。

如:S1F1,在F后面跟着的“1”就是上述要填入头部字节3的值。即 01

④表示类型Ptype:消息的编码格式(SECS-II 编码格式 取值为0 ,所以该位就是0),一般都是00。

⑤会话类型SType:消息的类型(等于0表示为数据信息,不等于0表示控制信息),具体消息类型如下表2.2所示。

                表2.2 SType不同取值表示的消息类型

⑥系统字节:标记这次指令的ID,通常用于超时判断(响应时依据发送者指令的最后4字节作为回复,发送时生成不重复的4个字节)。

如:

四、消息文本(构成:长度字节数&数据项格式代码 + 长度字节+实际数据)

  SECS-II 协议定义了设备和主机之间传送消息的格式和含义,在 SECS-II 协议中,传输的消息使用两种数据结构进行格式化:数据项(Item)和列表(List)。SECS-II 协 议使用数据项和列表对消息进行逻辑划分(Logical Division)。

                      +

①长度字节数:定义了数据项的格式和表示数据项长度的字节数,第 1、2 位表示长度字节的个数,其取值范围是 1-3(因为只有两个字节,所以一共只有0,1,2,3这4种取值情况)。

如:发送的是“hellosecs”,总共就是9位,一个字节16位。所以一个字节就可以放下。所以长度字节数位1,即01。

②数据项格式代码:第 3-8 位定义了数据项的格式,即数据项的数据类型,目前 SECS-II 协议一共定义了 16 种数据项类型代码,它们的取值和含义如表 3.3 所示。

            表3.3 SType不同取值表示的消息类型

如:当发送是ASCLL码,数据项格式代码为010000

③长度字节:表示数据项内容(Item Body/IB)的长度。

如:发送“ABC123”,长度是6,那长度字节组就是0000 0110。

④实际数据:

如:如果发送字符串“ 12A”,对应的ASCLL码就是00110001、00110010、 01000001。

SECS-II 的 例子1:
例如需要发送一个字符串是ABC,
则类型字节就是前六位01000,因为ABC数量为3,1个字节就可以表示,所以最后2位为01,即长度字节组的长度为1。
长度字节组就是00000011表示3,
而ABC去查对应的ASCII码,也就是01000001(十进制就是65),01000010(66),01000011。
所以最终需要发送的数据用字节表示就是
01000001            格式字节(01000+01)
00000011            长度字节
01000001   “A”    实际数据
01000010   “B” 实际数据
01000011   “C” 实际数据

注释:1字=2字节,1字节=8位,1字=16位。