シリアル通信時のデータ受信方法

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
goro

シリアル通信時のデータ受信方法

#1 投稿記事 by goro »

シリアル通信を実現しようとしていて、現在データ送信は完成しました。
しかし、データ受信方法が分かりません。
データはいつやってくるのかが分からないので、
「データ受信したら割り込み(イベント?)ルーチンに入る」という方法がいいかなあ、と考えています。
そこで、ActiveBasicにおいて、
「データ受信したら割り込み(イベント?)ルーチンに入る」方法を教えてください。
もし他に方法があれば教えてください。

すみませんがよろしくご教授お願いいたします。
ゲスト

Re: シリアル通信時のデータ受信方法

#2 投稿記事 by ゲスト »

もう見てないかも知れませんが、、、、、

受信用のタイマー、もしくはスレッドを作って、
その中で常時読み出しを行えばいいと思います。

コード: 全て選択


    Dim rChr As Byte
    Dim rLen As Long
    Dim dummy As Long

    While 1
        '1文字受信
        dummy = ReadFile(hComm, rChr, 1, VarPtr(rLen), ByVal 0)	
        If rLen > 0 Then  'なんか受信してれば 
         以下、文字読み出しの処理
                  ・
                  ・
                  ・
                  ・

      End If
        Wend
1文字づつ受信してますが、私が以前作ったソフトの都合ですので、
その辺は適当に。。。。

わたしもAB初心者なので、偉そうな事書けませんが、
参考までに私のソフトの流れを書くと、
特定の文字(ETX)を受信したら1ワードとして、
受信用の文字列バッファに格納していきます。
受信バッファはリングバッファにしておいて、メインスレッドは任意の
タイミングで、新しいワードを受信していれば、順次読み出して処理しています。
受信バッファは、クリティカルセッションとかセマフォとか使わないといけない気もしつつ、不勉強なため放置してますが、、、、、

参考になれば幸いです。
返信する