通信プロトコルの基礎。双方向通信。ENQを使う。著者:吉田作太郎

全二重の通信回線ならば、通信制御コードにENQを使うのは良いだろう。
トランスペアレントな通信ならば、ENQを含めた通信制御コードに、データーリンクエスケープ・コード(DLEコード)を使えば良い。

主局と従属局があれば、主局側からの電文送信は、STX,ETXで囲まれた電文を遅れば良い。
従属局から主局への電文送信は、まず、従属局から、ENQコードを送ってみて、主局から、ACKコードのレスポンスが返ってから、STX,ETXで囲まれた電文を送るのである。

エラー・リトライ・シーケンスは、次の通り。

主局から従属局へ、STX,ETXで囲まれた正しい電文が来たら、従属局は、ACKのレスポンスを返す。
従属局からACKのレスポンスが来なく、タイムアウトになっても来なかったら、同じ電文を主局は伝送する。
このタイムアウトが、三回ぐらい来たら、主局は、従属局と接続不能状態となったとみなす。
接続不能状態になったら、接続不能状態であることを示したアラーム点灯と音を鳴らしながら、従属局との再接続のための、通信プロトコルシーケンスを行う事。
再接続のための通信プロトコルシーケンスの作るコツとは、従属局が電源を入れ直して正常受信可能状態にさせる通信プロトコルシーケンスを考案する事。(NTT用語では、この通信プロトコルシーケンスを担当するタスクの処理の事を再開処理と呼ぶ。これは、すなわち、通信のための初期処理の事である。)

従属局から主局への電文がある時は、従属局から主局へENQコードを送信し、ACKのレスポンスを待つのだが、主局側からSTXの電文が来たら、STXの電文を優先して受け入れてその電文が正常電文ならばACKのレスポンスを主局に返す事。
そうでなく、ENQコードを送信した従属局が、主局のACKコードをなかなか受信できなくなっている場合、タイムアウト時間まで待って、まだACKコードを受信できない場合、また、ENQコードを送信する事。このタイムアウトシーケンスが三回以上続くのであれば、従属局は、接続不能状態である事を示すアラーム点灯と音を鳴らしながら、タイムアウトシーケンスを伴いながら主局へ送るENQコードを送り続ける事。

その他にも、色々とトラブルについての解決策が必要となるかもしれないが、正常シーケンス以外のエラー処理は、ほとんどの場合「無視」が一番の解決策である事をここに述べる。

これらの処理を作り、正常に機能するようになったら、主局と従属局間の「接続チェック処理」を入れる事。
これは、ポーリング処理を改良したものが参考となるだろう。
または、ヘルスチェックというのも、参考となるだろう。(ヘルスチェックは、NTTの企業用語である。IT用語、ヘルスチェックをキーワードにンターネットで調べれば分かる。)
接続チェック処理は、プログラム開発の初めから考慮して作ってはならない。
初めから考慮して作って入れておくと、デバッグが大変になってしまう。
通信プロトコル作成の最後に、デバッグまで済んで正常だと判断した時に、接続チェック処理を付加させる事。

以上。

この記事へのコメント

ワン
2018年10月10日 08:23
ENQを使う。

従属局に送信電文が無い時、従属局は、常にSTXの電文待ちとなる。
従属局に送信電文が有る時、従属局は、主局に対して、ENQコードを送り、STXとACK待ちとなる。
STXが来たら、電文解析をする処理を実行し、主局に対してACKコードを送る。この時、まだ、従属局は、送信電文が有るので、また、主局に対して ENQを送る。
主局側からACKコードが帰って来たら、従属局側から、STXとETXのコードに囲われた電文を主局に送り、そのレスポンス(ACK,NAK)を送り、従属局側に送信する電文が無ければ、従属局側は、主局側からのSTXの電文待ちとなる。
従属局側に送信する電文が有る場合、また、従属局側は、主局に対して、ENQを送って、送信待ちとなる。
2018年10月10日 08:35
ENQを使う時、

主局側の受信処理は、ENQ待ちだけ。
他のコードは無視する事。

従属局側の受信処理は、受信処理と送信処理とに別れて、受信処理は、STX待ちのみ、送信処理側は、ENQコードを送ったら、STXとACK待ちのみにして、データー処理をする事。

従属局のデーター送信処理は、従属局の送信データーが無くなるまで、ENQを出す送信データーの一連の処理を実行し続ける事。
2018年10月10日 08:45
主局側の従属局側に対しての処理は、常にSTX待ちである事。

従属局側の処理は、データー送信が有る場合と無い場合の2つに別れて主局に対する処理をする事。
データーが無い場合、STX待ちになり、データーが有る場合、ENQコードを送った後、ACKか、STX待ちの処理となり、その処理を実行した後、また、データーが有る無しの判断チェックに入り、それぞれの処理を実行する事。

この記事へのトラックバック