SECS HSMS 入門
Factory automation standard CIM system
SECS入門
SECS-Iはハードウエアと通信ハンドシェイクを規定していますハードウエアはRS232-Cで9ピン又は25ピンのDSUBコネクタを用います。(JIS C 6361 EIA RS-232-C に準拠)
*:通信フォーマット
非同期半二重方式
8Bits 1StartBit 1StopBit
1回の伝送データ量(1ブロック長) 254Bytes 以下
*:コネクタ
25Pin 装置側 メスコネクタ
9Pin 装置側 オスコネクタ
*:ピンアサイン
9Pin
1:シールド
2:受信データ
3:送信データ
5:データグランド
25Pin
1:シールド
2:送信データ
3:受信データ
7:シグナルグランド
18:+12〜15V(50mA オプション)
25:−12〜15V(50mA オプション)
*:データレート
9600,4800,2400,1200,300bps
(19200,150bpsはオプション)
SECS-I
通信はハンドシェイクキャラクタを相互に送信しあい同調する方式です。
*:ハンドシェイクキャラクター
ENQ:送信要求 05h、 EOT:受信可能 04h、 ACK:肯定応答 06h、 NAK:否定応答 15h
通信の停滞を監視するためにタイマーを設けています。
*:ハンドリング監視タイマー
T1:キャラクタ間監視タイマー(0.5秒 0.1〜10秒)
1・レングスバイトを受信してからチェックサムまで受信する時間監視
2・キャラクタ間の時間監視
T2:プロトコルタイマー(10秒 0.2〜20秒)
1・ENQ送信からEOT受信までの時間を監視
2・EOT送信からレングスバイト受信の時間を監視
3・チェックサム送信完了からACK又はNAK受信までの時間を監視
T3:返信タイムアウト(45秒 1〜120秒)
返信要求の有るメッセージを送信してから返信までの時間を監視
T4:ブロック間タイムアウト(45秒 1〜120秒)
複数ブロック構成のブロック間時間を監視
*:リトライカウンター
1・NAK受信からのリトライ送信
2・T3タイムアウトからのリトライ送信
*:標準ハンドシェイクフロー
1: 一次メッセージだけで終了する送信側のケース
STEP
1.ENQ送信(T2タイマー起動)...EOTを待つ
2.EOT受信...データ送信(T2タイマー起動)...ACK/NAKを待つ
3.ACK受信...伝送処理完了
2:一次メッセージ送信の次に二次メッセージ(返信)を待つケース
STEP
1.ENQ送信(T2タイマー起動)...EOTを待つ
2.EOT受信...データ送信(T2タイマー起動)...ACK/NAKを待つ
3.ACK受信...伝送処理完了...(T3タイマー起動)...二次メッセージ待機
4.ENQ受信...EOT送信(T2タイマー起動)...メッセージ受信待機
5.メッセージ受信...ACK送信(伝送処理完了)
3:マルチブロックのケース(全データが244Bytes以上で複数のブロック構成に成っている)
STEP
1.ENQ送信(T2タイマー起動)...EOTを待つ
2.EOT受信...データ送信(T2タイマー起動)...ACKを待つ
3.ACK受信...n回目伝送処理完了...全ブロック送信まで1〜3を繰り返す。
最後のブロックはEビットを1にして送る(T4タイムアウト)
*:イレギュラーケース
1: NAKが帰ってきた、T2タイムアウト発生→リトライのケース
STEP
1.Retryカウンタを-1する。
2. ENQ送信(T2タイマー起動)...EOTを待つ
2.EOT受信...データ送信(T2タイマー起動)...ACK/NAKを待つ
3.ACK受信...伝送処理完了 NAKの場合は1〜3を繰り返す(Retryカウンタの数だけ)
2:T1タイムアウト
受信データを破棄して終了
3:T3タイムアウト
返信を得られない又は本来期待している返信と異なるメッセージを受信→トランザクションの異常終了
T3タイマーはトランザクション単位で生成する必要が有ります。
4:ホストに対しENQを送ったがENQ(送信要求)が帰ってきたケース伝送
STEP
1.ENQ送信(T2タイマー起動)...EOTを待っていたが!
2.ENQ受信...EOT送信(T2タイマー再起動) 送信処理を一旦中断して受信モードに入る
3. メッセージ受信...ACK送信(伝送処理完了)
4. ENQ送信(T2タイマー起動)...EOTを待つ 中断したメッセージ送信処理開始
5. EOT受信...データ送信(T2タイマー起動)...ACK/NAKを待つ
6. ACK受信...伝送処理完了
ホストが送ったメッセージが二次メッセージを要求している場合この後二次メッセージ送信処理を行う
SECSでは本来送る予定だったメッセージの扱いに関して規定していません。
この様にトランザクションがオーバーラップすることが有ります。
5:二重ブロック
マルチブロックを受信する際にACK送信がT2タイムアップ以後に成った場合など同じブロック番号の
データを受信した場合の処理でデータの廃棄かオーバーライトが考えられます。
同じトランザクションで同一IDのデータを受信したとしてもNAKを返す事は出来ません。
リトライ回数分同じIDのデータが送られてしまいます。
SECSでは処理に関しての規定は有りませんので仕様として明示する必要が有ります。
*:ヘッダー構造
ヘッダーは10bytesの構造でその中にRビットWビットEビットを組み込んでありますが
最上位の1ビットを使っているだけで関連は有りません。
R,W,Eビットそれぞれの意味は
R:0 ホストから装置へ 1 装置からホストへ 送信されたメッセージの方向性示す。
W:1 返信を待っているメッセージを示す。(2次メッセージは常に0)
E:マルチブロックで最後のメッセージを示す。
(シングルの場合でもブロック番号1 E Bit=1に成ります)
デバイスIDは装置固有の番号で上位を機種別とし下位を装置固有番号の様に使用しますがホスト側で管理する番号なので装置側は任意の番号が設定できるようにします。
メッセージIDはSECS-IIで定義しているストリーム/ファンクション番号です。
ストリーム番号はカテゴリー種類を示しファンクション番号で機能を示します 詳細はSECS-IIで定義され更に装置固有の変数をシステム管理者(ホスト側)と合意で決めていきます。
一回に転送できるデータ量が244Bytesと決まっているため大量のデータを送る場合はマルチブロックと
して複数回に分けて転送します(レシピの受信やプロセスレポート報告等)
ブロック番号はマルチブロックの時ブロックの連番で、最終ブロックの時Eビットを1にして送ります。
システムバイトは処理中の他のトランザクション(メッセージ交換処理の一単位)との区別に使用します。
二次メッセージは一次メッセージのシステムバイト4つをコピーして返します。
*:メッセージ構造
SECS-Iのメッセージ構造は先頭にメッセージ長を示すレングスバイトに続きHeaderがあり さらにデータが続きます、最後に2バイトのチェクサムで終了します。メッセージ長はチェックサムを含みません。