Visial Basic 2005 にて SerialPort コンポーネントを使ったアプリを作っています。
当初、Microsoft のサンプルを参考に
SerialPort1.ReadLine
でデータを受信していたのですが、この方法だとバッファ内から再度同じデータを受信してしまうらしく、新しいバッファからデータを受信しないとイベントが発生する毎に古いデータを読み取ってしまいます。
そこで調べていたところ、Microsoft のフォーラムで以下のような Visual C# のソースを見つけました。
(以下引用)
> if (serialPort1.BytesToRead > 0)
> {
> // 受信バッファからデータを取得
> byte[] b = new byte[serialPort1.BytesToRead];
> Read(b, 0, b.Length);
> }
まだ Visial Basic 初心者なもので Byte 型の扱い方や上記ソースは Visial Basic でどのように書けばよいのかわかりません。
どなたかご教授ください。
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
こんにちは、もう解決しているかもしれませんが。
ReadLineのヘルプには、
入力バッファ内の NewLine 値まで読み取ります
と記載してあります。Framework2.0からの機能なんですね。
私の場合、データ受信後その内容により返事を返すまでの間
次のデータを受信することは無い場合が多いので
DataReceivedイベントでSerialPort.Readを利用しています。
ReadLineは使用したことが無いのでわかりませんが
Readの場合、読み込んだデータがバッファに残っているということはありません。
この回答への補足
アドバイスありがとうございます。
今のところまだ未解決なのですが、私も miyuyu さんと同じようにデータ受信の内容に応じて返事をするというものを作っています。
問題となっている現象は、二度目のデータ受信時の DataReceived イベント発生の際に一度目に送った返事を即送り出してしまうという感じです。
Write の方のバッファもあやしい気がするのですが、差し支えなければ Read の使い方を教えていただけますと幸いです。
よろしくお願いします。
SerialPort.ReadLine を使っても、SerialPort.DiscardInBuffer でバッファを削除したら問題なく動作しました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- その他(データベース) c言語の問題です。これを踏まえてコーディングしたいのでおしえていただきたいです。 3 2023/08/03 09:27
- その他(Microsoft Office) *Office 2021への乗り換えについて 2 2022/09/02 18:06
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- ドライブ・ストレージ 古い外付けHDDから新品外付けHDDへのデータ移行方法 (Mac) 2 2022/12/11 02:01
- その他(クラウドサービス・オンラインストレージ) 社外の方とデータをやり取りするには、どんな方法が良いでしょうか? 3 2023/03/28 16:21
- docomo(ドコモ) +メッセージの送受信。 au(uq mobile)のデータ回線でdocomoの電話番号の+メッセージ 2 2022/09/14 16:09
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
C# シリアル通信でデータ受信時の欠損について
C言語・C++・C#
-
VB.netで、シリアル通信のタイムアウト処理について
Visual Basic(VBA)
-
CloseとDisposeの違い
Visual Basic(VBA)
-
-
4
SerialPort処理でInvokeメソッドを使用するとエラーが発生。
Visual Basic(VBA)
-
5
CSVファイルの中で、「 , 」カンマを使いたい
その他(コンピューター・テクノロジー)
-
6
シリアル通信の受信待ちについて
C言語・C++・C#
-
7
COMポートの同時オープン同時読み込み
C言語・C++・C#
-
8
シリアル通信時のデータ受信方法
Visual Basic(VBA)
-
9
VB.NETでフォーム上にExcelのような表を表示する方法
Visual Basic(VBA)
-
10
VB.net Double と Decimal の違い?
Visual Basic(VBA)
-
11
Designer.vbは直接コードをいじってはだめ?
Visual Basic(VBA)
-
12
VB2010で、シリアル通信をするには
Visual Basic(VBA)
-
13
【C#】textBoxの指定行のデータを削除
C言語・C++・C#
-
14
バッファとは何ですか
C言語・C++・C#
-
15
VB.NET(2005)のSerialPort" RTSラインを制御"
Visual Basic(VBA)
-
16
DoEventsがやはり分からない
Visual Basic(VBA)
-
17
なぜ通信には16進数文字列が使われるのでしょうか シリアル通信や、xbeeなど、通信には16進数文字
ネットワーク
-
18
VBコンソールアプリ(.NET Framework)でRS-232C通信したい。
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C# シリアル通信でデータ受信...
-
シリアル通信 大きいサイズの...
-
socket: recvはいつ,どれだけ...
-
バイナリデータ受信時のデータ順
-
VB2005でWin32APIを用いてRS-23...
-
WinsockAPIのrecvfromの受信デ...
-
SocketのSend関数でのCLOSEの検...
-
MSCommでoutputできない
-
setsockoptのタイムアウト確認...
-
WriteFile()でのデータ送信がで...
-
ClearCommError呼び出し時のCE_...
-
Macターミナルで実行中のプログ...
-
緯度、経度の 10進法と 60進法...
-
指定したフォルダーを最前面表...
-
エクセル VBA でのCOMポート...
-
ショッピング
-
ACCESS側からEXCELの書式を設定...
-
バックグラウンドのプロセスの...
-
タスクマネージャーのプロセス...
-
VBSの処理中一旦処理を止めて再...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C# シリアル通信でデータ受信...
-
WriteFile()でのデータ送信がで...
-
winsockでソケット通信の開発を...
-
「スイッチングハブのバッファ...
-
socket: recvはいつ,どれだけ...
-
シリアル通信の出力バッファと...
-
Connection reset by peer
-
RS232C通信(PC⇔PLC)
-
RS-232Cでバイナリデータを受信...
-
WaitForMultipleObjects関数の...
-
Linuxでのシリアル通信について...
-
rs232cでの受信データ(mscomm)...
-
ソケット通信内 read関数について
-
UDP処理のエラーについて
-
SocketのSend関数でのCLOSEの検...
-
recv関数の受信結果について
-
シリアルポート通信
-
SerialPortのDataReceivedイベ...
-
MSCommでoutputできない
-
mscommの受信バッファ異常について
おすすめ情報