C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.74330 の関連記事表示

<< 0 >>
■74330  VB2010でシリアル送受信したい
□投稿者/ VB -(2014/12/18(Thu) 14:38:58)

    分類:[.NET 全般] 

    ●環境
    VB2010Professional
    Win7
    PCと装置をシリアルで接続しています。
    通信速度は、9600
    パリティ無し
    ストップビット1
    データ長8

    ●質問
    VB2010をはじめたばかりで、知識も少ないので申し訳ありませんが教えてください。

    装置から送信されるデータは、バイナリ3バイトのデータです。
    区切り文字はついていません。
    自発で330ミリSecおきに送られてきます。

    仕様は以下になります。
    @自発データを受信する。
    A自発データの内容を確認する。
    B処理結果をアプリの画面上に表示する。
    C自発データの内容によっては、アプリから装置へコマンド(バイナリ3バイト)を送信する。

    元々、VB6.0で作成していたアプリとなります。
    これを、VB2010に置き換えようとしています。BとCの処理がうまくいきません。

    Bの処理は以下となります。
    問題があればご指摘ください。
    ◆B処理
    ツールボックスにあるSerialPortを画面上に貼り付けて、データ受信はDataReceivedにて行っています。
    3バイト受信したら、DataReceivedからAの処理を実行する関数へ処理を移します。
    その関数内でBの処理とCの処理を行います。
    デリゲートを使っていますが、画面が更新されません。
    画面のクラスに、
    Private Delegate Function DelegateA(ByVal text As String) As Boolean
    と宣言し、テキストボックスの更新用の処理として以下のコードを書きました。
    Private Function ThreadCount(ByVal text As String) As Boolean

    If InvokeRequired Then
    Invoke(New DelegateLabel(AddressOf ThreadCount))
    Return True
    End If

    lblCount.Text = text
    lblCount.Refresh()
    Return True

    End Function

    Private Sub invokeCount(ByVal dlg As DelegateLabel, ByVal text As String)
    lblCount.Invoke(dlg, New Object() {text})
    End Sub


    処理関数内では
    Dim tCount As New DelegateLabel(AddressOf ThreadCount)
    invokeCount(tCount, strData)
    で呼び出しています。

    ◆C処理
    ツールボックスにあるSerialPortを画面上に貼り付けて、データ受信はDataReceivedにて行っています。
    3バイト受信したら、DataReceivedからAの処理を実行する関数へ処理を移します。
    デリゲートを使っていますが、画面が更新されません。
    画面のクラスに、
    Private Delegate Sub DelegateSerial(ByVal text As String)
    と宣言し、コマンド送信処理として以下のコードを書きました。

    Private Function ThreadSendCommand(ByVal text As Object) As Boolean

        call SendCommand(text) '引数をバイナリに変換して送信
       Return True
    End Function


    処理関数内では
    Dim tSnd As New Thread(New ParameterizedThreadStart(AddressOf ThreadSendCommand))
    tSnd.Start("123456")
     としています。コマンドが送信されません。


     ご存知の方がいれば教えてください。
     以上、よろしくお願いいたします。
親記事 /過去ログ125より / 関連記事表示
削除チェック/

■74335  Re[1]: VB2010でシリアル送受信したい
□投稿者/ shu -(2014/12/18(Thu) 16:48:36)
    No74330 (VB さん) に返信

    まずは別スレッドにせず、送受信処理が正しいか確認された方がよいかと思います。
    その上で別スレッド化をしていけば問題点の切り分けがしやすいかと思います。
記事No.74330 のレス /過去ログ125より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -