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

わんくま同盟

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

C# と VB.NET の入門サイト


(過去ログ 125 を表示中)
■74330 / )  VB2010でシリアル送受信したい
□投稿者/ VB (1回)-(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")
 としています。コマンドが送信されません。


 ご存知の方がいれば教えてください。
 以上、よろしくお願いいたします。
返信 編集キー/


管理者用

- Child Tree -