- ベストアンサー
シリアル通信のデータ欠けについて
- WindowsXP上でシリアル通信「115200bps、8、None(ODD、EVEN)、1」の設定で、1ms毎に12バイトの送受信を行っているのですが、1分ほど受信すると、データ欠けが発生します。
- 受信プログラムはこの問題が発覚してから、受信したデータを変数にバッファリングし、保存ボタンを押してから、ログファイルへ保存するシンプルなプログラムを作成し、確認しています。
- 一般的にWindowsでシリアルの高速受信を行うと、データ欠けが発生するのが当たり前なのでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (3)
- f-tomohiko
- ベストアンサー率50% (11/22)
- f-tomohiko
- ベストアンサー率50% (11/22)
- f-tomohiko
- ベストアンサー率50% (11/22)
関連するQ&A
- シリアル通信 VB 受信したデータ
初めまして。 今現在,RS-232Cのシリアル通信で,重量計で測定したデータ(990kg)をCOM1に取り込めるようにするプログラムを作成中です。 出力データのフォーマットは以下のようになっています。 ST , GS , +0012345 kg CRLR ヘッダ1 ヘッダ2 データ 単位 ターミネータ 18バイトのデータを受信していることになります。 ここで質問なのですが,プログラムでは1バイトずつイベントを発生させて1バイトずつ受信させているのですが,1バイト×18回 のデータをどのようにつなぎ合わせれば18バイトのデータとして扱えるようになるのですか? うまく説明できていないかも知れませんが,お分かりの方がいらっしゃいましたら宜しく御願いします。 VBではOnCommを使用しています。
- ベストアンサー
- Visual Basic
- シリアル通信の原理について
シリアル通信の調歩同期式は、「伝送を開始する際にまずスタートビットを送り、続いて一文字分のデータ(7~8ビット)、パリティビット、最後にストップビットを送る。」と多くのウェブサイトで解説されていると思います。 またビットレートも1200bps/2400bps/4800bps/9600bps・・・など複数あると思います。 上記仕様については理解しているのですが、これらを実現する具体的な仕組みが分かりません。 具体的には、 1.受信側は送信側のビットレートをどのように知るのでしょうか? 2.同様にデータが7ビットと8ビットのどちらであるかをどうやって判断するのでしょうか? 3.受信側は送られてきたデータのビットを1バイト毎にレジスタやメモリに格納すると思うのですが、1つのプログラムにつきどこからどこまでが該当のデータであるかをどうやって判断するのでしょうか?(送られてくる全体のデータサイズをどうやって知るのでしょうか?) ググっても上記の具体的な解説が見つからず、理解できずにおります。 ご回答どうぞよろしくお願いします。
- ベストアンサー
- その他([技術者向] コンピューター)
- VBによるシリアルポート制御
VB6でシリアルポートからデータを取り込むプログラムを作っています。 データは、バイナリモードで、合計26バイトあります。 これが、20ms間隔で送られてくるデータは、うまく取れたのですが、データを送る間隔を5msにしたところ、うまく受信できないようで、データが表示されなくなってしまいました。 ちなみに20ms間隔の時のシリアルポートのスピード設定が19200bpsで、5ms間隔の時には、115200bpsに変更しています。 VBで115200bpsのポート制御は難しいのでしょうか? それとも、小生のプログラムに問題があるのでしょうか?
- ベストアンサー
- Visual Basic
- シリアル通信でのデータ取りこぼし
はじめまして。 現在、計測機器からシリアル通信で測定値を取得しています。 その測定機器は1秒間当たり、1000データ測定できるのですが、 プログラムで収集した際、取りこぼしが多く発生します。 取りこぼしがないよう収集するには どうすれば、いいのか、教えていただけないでしょうか? よろしくお願いします。 動作の流れは (1)測定ボタンを押す (2)1秒間測定する (1000データ) → 保存 ◆教えてほしい箇所 (3)1秒後自動的に終了する 環境 OS:Windows XP プログラム:VB.NET 2008 通信:RS232C 測定データ1個当たり:X.XXXX (6桁)
- ベストアンサー
- Visual Basic
- C#のシリアル通信プログラムで文字化け
Visual C#でRS-232のシリアル通信をするプログラムを作成しましたが、 受信データが文字化けを起こしてしまいます。 下のURLにソースを置いているので、どこが不味いのか教えてください。 http://www1.axfc.net/uploader/Sc/so/205741 よろしくお願いいたします。
- 締切済み
- C・C++・C#
- シリアル通信について
VB6にてシリアル通信プログラムを作成しましたが、データが受信できません。 ハイパーターミナルなら受信できて、一度ハイパーターミナルを使用すると、作成したプログラムでもデータが受信できるようになります。(再起動するとまたハイパーターミナルを使用するまで受信できません) 自作プログラムでなにか処理がたりないのでしょうか?
- ベストアンサー
- Visual Basic
- C#で仮想COMポートのシリアル通信
Windows C#などを用いてマイコンボードとUARTで通信するアプリを作成しています. 従来は20bit程のデータを38400bpsで50回/sec程度受信して、グラフ表示していました. 今回新たに1000回/sec程受信したいと考えています. 高速シリアルで検索すると以下のような商品が見つかり、ハード的には高速で通信できるようでした. https://strawberry-linux.com/catalog/items?code=50028 C#ではserialPort_DataReceivedイベントでバッファーのデータを配列に取り込み、\r\nを受信した時点で処理-->グラフ表示を実行しています. 上記のプログラムでは50回/secでもデータの取りこぼしがあります. 高速でシリアル通信を行う場合はどのように追プログラムを作成することが定石なのでしょうか?ドライバの開発などを行う必要があるのでしょうか?
- ベストアンサー
- C・C++・C#
- シリアル通信でのデータ分け
プログラミングをしていて詰まったところがあるので教えていただけると幸いです。 開発環境はWindows XPでVisual C++ 2005 です。 シリアル通信において次々と送られてくるデータを1データずつ間違いがないように受信することを考えます。 例えば1つのデータが10バイトからなっていて、そのはじめが 0x10というものだったとすれば、 0x10を検出し、その10個分先の0x10の1つ前までが1データ分となると思います。 これを繰り返して全てのデータを正しく取得したいのですが、プログラムの方法が思い浮かびません。 こんなプログラムの方法はどうか、こんな関数を使ってみてはどうか、などありましたらご教授下さい。 よろしくお願いいたします。
- ベストアンサー
- C・C++・C#
- シリアル通信
プログラム初心者なんですけど、C++Builder4でシリアル通信(送信・受信)をおこないたいのですが、方法を教えて下さい。内容が複雑なようなら良い参考例や方法がのっている本やホームページを知っていたら教えて下さい。宜しくお願いします。
- 締切済み
- その他(プログラミング・開発)
- シリアル通信について教えてください
VC6.0のRS-232Cでシリアル通信をするプログラミングについて説明してあるサイトやサンプルソースがあるサイトがあったら教えてください。
- 締切済み
- C・C++・C#
お礼
何度もご回答ありがとうございます。 また、サンプルまで紹介頂き、ありがとうございます。 > 後、115200bps,1ms間隔,12バイトだと1msを超えるので、 >10ms間隔ぐらいでないとうまくいかないと思います。 上記の件ですが、 12バイト = 8bit * 12 = 96bit 1秒間送信データ数 = 96bit * 1000ms = 96000bps で、間に合うのでは無いのでしょうか? 送受信フロー制御については、検討してみます。 アドバイスありがとうございます。