回答編集履歴
1
Modbusのプロトコル仕様について追記
answer
CHANGED
@@ -6,4 +6,17 @@
|
|
6
6
|
|
7
7
|
別回答者であるradianさんの回答欄のコメントに「Modbus RTU」をプロトコルとして使っているとありましたが、如何にスタート、エンドが無通信時間をもってそれらを示しているとしても、マスターである質問者さんのプログラムからのリクエストに対してスレーブが有限個の応答データをレスポンスとして返してくるのですから、その応答データ中に応答データ自体の長さを決められる何らかのデータ項目があるのではないでしょうか。受信側では少しずつでも受信データを貯めつつ、サイズを確定できるほどにデータを受信したら、そのサイズ分受信して確定するまでで読み出しを続けます。レスポンスとして完成しなかったら、それは恐らく受信中の回線断であるとか、タイムアウトであるとかのエラーである可能性があるので、それなりに対処します。その為にはタイムアウト監視が必要になります。
|
8
8
|
|
9
|
-
言葉の捉え方ですが、スタートが3文字分、エンドが5文字分の無通信時間でそれぞれを示すとありますが、言い方を変えると「データフレームの受信が始まるまで少なくとも3文字分の無通信時間が設けられる。」「5文字分以上の無通信時間が発生したら、とにかくそればデータフレームの送信が終わったことを示す。」とも取れます。そう考えるとデータフレームの受信にほぼ専念できるような気がしますがどうでしょうか。
|
9
|
+
言葉の捉え方ですが、スタートが3文字分、エンドが5文字分の無通信時間でそれぞれを示すとありますが、言い方を変えると「データフレームの受信が始まるまで少なくとも3文字分の無通信時間が設けられる。」「5文字分以上の無通信時間が発生したら、とにかくそればデータフレームの送信が終わったことを示す。」とも取れます。そう考えるとデータフレームの受信にほぼ専念できるような気がしますがどうでしょうか。
|
10
|
+
|
11
|
+
---
|
12
|
+
**Modbus RTUのプロトコルを考慮して追記しました:**
|
13
|
+
|
14
|
+
こちらは株式会社エム・システム技研(M-System)さんがWEBで公開されているModbusのプロトコルに関する概要の説明書ですが、
|
15
|
+
[Modbus プロトコル概説書 - M-System](https://www.m-system.co.jp/mssjapanese/kaisetsu/nmmodbus.pdf)
|
16
|
+
|
17
|
+
一部引用させていただくと、「2.2.(2) RTUモード時のフレーム」において以下の文章があります。
|
18
|
+
|
19
|
+
> RTU モードの場合、少なくとも 3.5 文字分のサイレントインターバル(無通信時間)で始まり、3.5
|
20
|
+
> 文字分のサイレントインターバルで終ります。これを(表 2)では T1-T2-T3-T4 で表します
|
21
|
+
|
22
|
+
データ項目については少なくともAddressとFunctionがあるのですから、後続のData部が可変長であっても、先行してマスターから送信する際のクエリ内容を考えればどんなAddressとFunctionを受信すべきか、更には期待するデータ部の個数もマスター自身が知っているはずです。0個以上の可変になるならCRCを考慮に含めるか、その後の無通信時間をもって終了と判定できると考えられます。
|