tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 連続したシリアル通信処理
投稿日: 2014/02/28(Fri) 22:13
投稿者レフティー
毎々お世話になっております。シリアル通信について教えて下さい。
以前より、カスタム基板との通信プログラムを作成しており、
流れは、
1.PC(アプリ)から基板へ、値の設定コマンド送信
2.基板からのレスポンスを受信(応答時間:およそ500msec)
といった単純なものです。

困っているのは、基板へ連続して値を設定したいのですが、(以下の流れ)
1.PC(アプリ)から基板のチャンネルAへ、値の設定コマンド送信
2.基板からのレスポンスを受信
3.PC(アプリ)から基板のチャンネルBへ、値の設定コマンド送信
4.基板からのレスポンスを受信
現状上手くいきません。

送信側プログラムは、
Public Sub SetTemp(ByVal Setval As Double)
        'チャンネルAへの設定
    Try
            F1.SerialPort1.Write("チャンネルAへのコマンドおよび設定値" & vbLf)
            manualEvent.Reset()
            bret = manualEvent.WaitOne(500, False)
            If bret = False Then
                MessageBox.Show("Timeout Error", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try

    'チャンネルBへの設定
    Try
            F1.SerialPort1.Write("チャンネルBへのコマンドおよび設定値" & vbLf)
            manualEvent.Reset()
            bret = manualEvent.WaitOne(500, False)
            If bret = False Then
                MessageBox.Show("Timeout Error", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub

といった具合で、受信側は、
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
        Dim strDataReceived As String = ""
        Dim add As New AddDataDelegate(AddressOf AddData)

        Try
            strDataReceived = SerialPort3.ReadLine          'NewLine値まで読み込み
            comFlg = 3
            SerialPort3.DiscardInBuffer()                   '受信バッファクリアのつもり
            manualEvent.Set()
        Catch ex As Exception
            strDataReceived = ex.Message
        End Try
        TextBox1.Invoke(add, strDataReceived)
    End Sub

1.チャンネルAへのコマンド送信。スレッドをブロック
2.基板からの応答を受信。シグナル状態へセット
3.スレッドブロック解除、チャンネルBへのコマンド送信。再度スレッドをブロック
4.基板からの応答を受信。シグナル状態へセット
5.スレッドブロック解除
というシーケンスをイメージで作成したのですが、
2つ目のコマンド送信時にbretがFalseとなってしまい、タイムアウトエラーとなってしまいます。
アドバイスいただけますと助かります。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。