03、SECS-I 協定介紹

2023-05-24 21:01:33

03、SECS-I 協定介紹

上一篇我們學習了 SECS-II 協定,對 SECS-II 協定有了初略的瞭解,現在我們再來一起學習 SECS-I 協定。

文章的內容基本上來自參考資料和自己看的檔案,若有侵權,請聯絡刪除,謝謝。

SECS-I屬於傳輸協定標準,主要定義了電氣規格、傳輸速度、交握碼等物理資訊。

1、SECS-I 基礎介紹

注意,1、SECS-I 基礎介紹 這一段內容主要是參考 SECS半導體裝置通訊-1 SECS的基本概念 文章,但是內容加上了自己的理解以及看到的其他資料,所以與原文對比是有出入的。這段內容對 SECS-I 有一個初略的介紹,後面的內容來源自己查詢的資料,對 SECS-I 有一個更加深入的介紹。因為本小節的內容主要參考 SECS半導體裝置通訊-1 SECS的基本概念 ,特在此說明。

1.1 物理傳輸單位 bit

SECS-I 定義了使用RS-232作為傳輸媒質時點到點的資料通訊。實際的傳輸由8位元Bit連續傳送,有一個開始位和一個停止位。

通訊是 雙向和非同步的,但是同一時間只能有一個方向的資料進行傳輸方向由特殊字元和握手建立,然後傳送資料本身。

注意這裡 1 上面的是 lsb 。

1.2 邏輯傳輸單位 Block

資料被分塊進行傳輸,每個資料塊最大為 254 位元組。一個訊息是一個方向完整的通訊單元,由1到32,767個塊組成。每個塊檔頭都包含用於標識該塊作為特定訊息的一部分的資訊。

1.3 Block的組成

一個Block包括一個Length Byte、N Data Bytes 和 CheckSum

  • LengthByte:表示隨後有多少個位元組的資料(即 N bytes),不包括最後 2個位元組的校驗和
  • CheckSum:計算N Data Bytes的校驗和;
  • N Data Bytes:Block中的資料,長度範圍是 10 至 254 位元組,它由十個位元組的頭和訊息資料組成。

Data Bytes 由 10 byte Header 和 Message Data 組成:

  • MessageData:表示Data Bytes中的資料部分,由編碼後的 SECS-II 訊息構成
  • 10 byte Header:描述Data Bytes中的資料內容。

10 byte Header 由 4個內容組成,其中:

  • Device ID:Header的第一和第二位元組,其第一個位元為 R-bit,其作用是指出訊息傳輸的方向。
  • Message ID:Header的第三和第四位元組,其第一個位元為 Wait-bit,用於指示訊息的傳送者是否需要回復。
  • Block No.:Header的第五和第六位元組,其第一個位元為 End-bit,用於指示這個是否是訊息的最後一個塊。
  • System Bytes:Header的最後四個位元組,第七和第八位元組表示 source ID,用於表示訊息的傳送者,第九和第十位元組表示 transaction ID,用於唯一標示每個傳送的訊息

我們一起看看 Block 的組成:

我們一起看看 Header 的組成:

這裡的 Upper Device ID 是指:

1.4 Block的傳輸

塊的傳輸過程,先傳輸塊的長度,再傳輸塊,最後傳送校驗碼。

標準建議每次可傳輸的Date Bytes位元組最多為254,如果一個訊息的大小<245個位元組,則以一個塊的形式進行傳輸。如果一個訊息的大小> 245個位元組,則以分塊的形式進行傳輸。

2、SECS-I Block Transfer Protocol

從上圖中,我們可以得知,SECS-I 使用的是塊傳輸協定。

塊傳輸協定用於建立通訊的方向,併為傳遞訊息塊提供環境。主訊息或回覆訊息可能需要多個塊傳輸(多塊訊息)。

2.1 Handshake Sequence(握手順序)

看到這個,是不是想起來 TCP 建立連線時的三次握手。這裡的作用是 TCP 的三次握手差不多,用於確認通訊雙方已經準備就緒。那接下來我們一起看看 Block Transfer Protocol 的握手順序是怎麼做的。

Block Transfer Protocol 中的握手順序是主機和裝置之間的位元組交換

那既然是位元組交換,交換的是哪些位元組的呢?

Handshake Codes(握手碼):

有四種 握手碼。它們用於控制塊傳輸協定中的資料流。下表展示了這四種握手碼

Handshake Codes Hex Value 描述
ENQ 05 Ready to Send
EOT 04 Ready to Receive
ACK 06 Correct Reception
NAK 15 Incorrect Reception

SECS-I Parameters

用於在實現塊傳輸協定時定義一些邊界。下表顯示了SECS-I引數:

SECS-I Parameters 描述
T1 Inter-Character Timeout
T12 Protocol Timeout
RTY Retry Limit (最大重試次數)
Master/Slave Resolve contention (解決爭論)
  • T1: 在接受 BLOCK DATA時,接收到每個字元的時間間隔(從接收到第一個字元后開始計算)

Is the time between receiving each character (after receiving the first character) in the BLOCK DATA

  • T2: 傳送 ENQ 和接收到 EOT 之間的時間間隔

Is the time between sending the ENQ and receiving the EOT

  • RTY: 這裡說說我的理解,這裡就是當使用 ENQ 開始傳送後,接收到了 NAK 或者其他的錯誤(比如超時等),就會重新傳送 ENQ,重新傳送的最大次數是 RTY。

This defines the number of times to initiate the block transfer (start sending with the ENQ.) Upon the receipt of a NAK (or other protocol error), the RTY value is adjusted and the block transfer is again attempted.

  • Master/Slave: 用於解決爭議。主機是 slave ,裝置是 master。爭論是指主機和裝置同時嘗試進行通訊。下面顯示瞭如何解決爭論

Is used to resolve contention. The host is slave and the equipment is the master. Contention is when both the host and the equipment attempt to communicate at the same time. The following shows how contention is resolved

2.2 Block Data

2.2.1、塊資料簡介

塊資料是單塊或多塊訊息的資料部分。它包含一個Length Byte(長度位元組), N Data Bytes(N個資料位元組)和a two byte Checksum(一個兩個位元組校驗和)

下面這張圖很重要,一定要看懂,不然不知道 Block Data 是怎麼組成的,自己寫程式碼的時候,也會一臉懵逼。

接下來,我們對上面的圖進行逐一的講解:

  • Length Byte:是在塊資料中傳送的第一個位元組。它是N個DAta Bytes(10 Byte Header + Data Structure)中的位元組數。兩個位元組校驗和不包括在這個計數中,值範圍為10到254位元組。這裡要注意的是,Length Byte 佔用一個位元組

Is the first byte sent in the Block Data. It is the number of bytes in the N Date Bytes (10 Byte Header + Data Structure). The two byte Checksum is not included in this count The value ranges from 10 to 254 bytes.

  • N Data Bytes: 是訊息塊的資料部分。它包含一個10位元組的報頭和訊息資料。大小範圍從10位元組到254位元組。N個資料位元組的最小為10(只包含10位元組的位元組頭),最大為254。

– Is the data portion of the message block. It contains a 10 Byte Header, and the Message Data. The size ranges from 10 bytes to 254 bytes. The minimum size of N Data Bytes is 10 (contains only the 10 Byte Header), and the maximum is 254.

  • Message Data: 是訊息的資料部分。它包含已編碼的SECS-II的全部或部分(如果是多塊訊息)。這裡需要注意的是,傳送的是多塊訊息時, Message Data 只包含了已編碼的 SECS-II 的部分。

Is the data portion of the message. It contains all or a portion (if a multiblock message) of the encoded SECS-II.

2.2.2、10 位元組的Header

每個訊息都包含一個報頭。檔頭用於描述包含在塊資料中的資料。它包含 Device ID, Message ID, Block Number, and System Bytes(裝置ID、訊息ID、塊號和系統位元組)。其他重要指標也包括在內。

接下來,我們一起來看看 Header 的 4 個組成部分:

  • Device ID: 報頭的第1個和第2個位元組是裝置ID。左位元組是上裝置ID,右位元組是下裝置ID。左位元組中最左邊的位是反向位(R位)。R-位決定了訊息的方向。

Bytes 1 and 2 of the header are the device ID. The left byte is the upper device ID, and the right byte is the lower device ID. The left most bit of the left byte is the reverse bit (R-bit). The R-bit determines the direction of the message.

  • Message ID: 報頭的第3個位元組和第4個位元組是訊息ID。左位元組是上訊息ID,右位元組是下訊息ID。左位元組中最左邊的位是等待位(W位)。w位用於表示主訊息的傳送方是否期望得到回覆。

Bytes 3 and 4 of the header is the message ID. The left byte is the upper message ID, and the right byte is the lower message ID. The left most bit of the left byte is the Wait bit (W-bit). The W-Bit is used to indicate that the sender of the primary message is expecting a reply.

The message ID indicates the SECS-II stream and function. The upper message ID is the stream, and the lower message ID is the function.

如果還記得上一篇文章中,描述 Streams and Functions 取值範圍, Stream 的取值範圍是 0 ~ 127。因為 strem 的MSB 是 W-bit,用於表示是否期望得到回覆。 Function 的範圍是 0 ~ 255。

  • Block Number:
報頭的第5個位元組和第6個位元組表示塊號。左位元組是 upper block number,右位元組是  lower block number。左位元組中最左邊的位是結束位(E位)。E位表示這是否是訊息的最後一個塊。

當傳送的訊息需要多個塊時,將使用多塊訊息。每個塊都是數位並且是有序的(這裡的數位應該指的是塊的序號)。由於訊息的接收者不知道一共傳送了多少個塊,所以使用 e位 指示當前塊是不是最後一個塊,不會最後一個塊的話,後面還會有塊傳送過來。多塊訊息中的最大塊數為32,767個。

Bytes 5 and 6 of the header is the block number. The left byte is the upper block number, and the right byte is the lower block number. The left most bit of the left byte is the end bit (E-bit). The E-bit indicates this is the last block of a message.

A multi-block message is used when the sent message requires more than one block. Each block is number and sent in order. Since the receiver of the message does not know how may blocks to expect, the E-bit indicates which block is the last, or if there are more bocks to follow. The maximum number of blocks in a multi-block message is 32,767.

  • System Bytes: 報頭的最後四個位元組system bytes(系統位元組)。左邊的兩個位元組是 source ID(源ID),右邊的兩個位元組是 transaction ID(事務ID)。源ID標識訊息的傳送方,並用於訊息路由。事務ID標識該訊息,並且對於所傳送的每個訊息都是唯一的。在其關聯應答處的主訊息具有相同的(匹配的)系統位元組。最後一句話如何理解呢?它的意思是,回覆的訊息的 System Bytes 和 傳送的訊息的 System Bytes 是相等的。

The last four bytes of the header are the system bytes. The left two bytes are the source ID, and the right two bytes are the transaction ID. The source ID identifies the sender of the message and is used for message routing. The transaction ID identifies the message and is unique for each message sent. A primary message at its associated reply have the same (matching) system bytes.

上面我們對 SECS-I 使用到的 Block Transfer Protocol 有了初略的瞭解。接下來,一起看看 如何傳送 S1F1 指令,以及對應的回覆指令 S1F2。

3、Example of S1F1 / S1F2

下面顯示了在傳送primary message和接收secondary reply message時傳輸的位元組。這不是一個多塊的訊息。主機傳送S1F1,裝置傳送S1F2應答。

這張圖及其重要,對理解 block transfer protocol 特別重要,理解了這張圖,對 SECS-II 和 SECS-I 算是有一個入門的瞭解了。

4、Typical SECS Protocol Parameters

這一節內容我們將一起看看Typical SECS Protocol Parameters(典型的SECS協定引數)

下面是 SECS-I / SECS-II 協定引數的摘要集,以及一些典型的值。

Parameter Function Typical value
Baud (波特率) Rate Serial line speed 9600
Device ID Identifier assigned to equipment (分配給裝置的識別符號) 0
T1 Inter-Character Timeout 1 (second)
T2 ENT / EOT Timeout 10 (seconds)
T3 Reply Timeout 45 (seconds)
T4 Inter-Block Timeout 45 (seconds)
RTY Retry Limit 3
M / S Master / Slave Host-Slave
Equip - Master

參考資料:

SECS半導體裝置通訊-1 SECS的基本概念