|
分類:[.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") としています。コマンドが送信されません。
ご存知の方がいれば教えてください。 以上、よろしくお願いいたします。
|