RS232Cの バッファについて知りたい。

通信バッファは、どうも、複数存在して、
改行コードがくると、次のバッファに順番に値が格納されているようなんですが、(つまり、番号のついたバッファが複数存在して、改行コードがくると、情報が次のバッファに格納されるというイメージ?)
こういう認識でいいのでしょうか?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2008/04/22 17:45:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:pahoo No.1

回答回数5960ベストアンサー獲得回数633

ポイント23pt

RS-232Cはシリアル通信プロトコルの一種で、データビット長は7ビットまたは8ビットです。その意味では、データの順番はビット順で、7ビットまたは8ビットを1つの固まりにしていると言えます。

また、RS-232Cは調歩同期通信ですから、改行などのデータの種類ではなくクロックにしたがってデータを送受信しています。


ご質問の意図は、おそらくRS-232Cに対応するCOMポートの仕様だと思うのですが、少なくともデバイスドライバ・レベルでは、ひとつのCOMポートに対してはバッファは1本ですし、改行などのコードによって切り替わるということもありません。


参考サイト

id:youkan_ni_ocha

labviewで30行くらいのメッセージを受信しているのですが、1行に10文字くらいしか書いていなくても、4096バイトごとに読み込んではきださせると1行分しかでてきません。んで、また4096読み込むと、次の2行目が出てくる、、、という風な動作をしたので、もしかして、これって1個のメモリーじゃなくて、メモリーの配列になっているのか?と思ったんですが、、、、

2008/04/15 22:08:16
id:ken33jp No.2

回答回数928ベストアンサー獲得回数13

ポイント23pt

http://ja.wikipedia.org/wiki/RS-232

RS232Cはシリアル通信です。

バッファーが存在してるとしたら、ドライバーか何かが入っていて

バッファリングしてるだけです。

どのレベルで、RS232Cと通信しようとしてるのか不明ですが・・。

PCのRS232Cなら、Windows標準でついているハイパーターミナルで

受信データとか見れるはずです。

id:pahoo No.3

回答回数5960ベストアンサー獲得回数633

ポイント22pt

LabVIEWのことでしょうか。

言語仕様を知らないのですが、ご質問の状況だと、C言語におけるgets関数のようなメソッドを使っているのではないでしょうか。

getcのようなバイト単位で取得するメソッドを使うか、自力でハンドシェイク・プログラムを書く必要があると思います。

RS-232Cハンドシェイク・プログラムについては、「自動計測 システムのための Visual Basic6入門」(2000年2月8日発売/金藤仁 著)に書いてあるのですが、現在は絶版のようです。

id:Beirii No.4

回答回数173ベストアンサー獲得回数18

ポイント22pt

LabVIEWのシリアル読み取りに関して回答します。


VISAシリアルポート構成関数に「終端文字を有効にする」(デフォルト:True)というパラメータがあります。

このパラメータがTrueのときは、シリアルポートから終端文字が読み込まれると読み取りを終了させます。

Falseのときは終端文字に関わらず、VISA読み取り関数のバイトカウントパラメータで指定されたバイト数のデータを読み取ります。

終端文字についてもVISAシリアルポート構成関数で指定することができます。(デフォルト:0x0A)


シリアルのバッファにつきましては、VISA I/Oバッファサイズ設定関数にて、受信バッファと送信バッファのそれぞれに任意のバッファサイズを割り当てることが可能です。(デフォルト:4096バイト)

LabVIEW的にも1つのポートにおける受信バッファの数は1つです。


現象は、LabVIEWのVISAシリアルポート構成の終端文字を有効にするパラメータがTrueに設定されているが故の動作であると思われます。


NI-VISAソフトウェア マニュアル

http://sine.ni.com/nips/nisearchservlet?nistype=psrelcon&nid=121...

id:youkan_ni_ocha

貴重な情報ありがとうございます。

2008/04/19 18:45:52

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません