tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトル値が表示されません
記事No9162
投稿日: 2009/07/10(Fri) 01:30
投稿者Qdac
VB.netを使ってシリアル通信(VB6.0のMSCommを使っています)を行い、受信した4桁の数値(文字データ)を数値データに変換してTextBoxに表示しようとしています。
このとき表示される数値が4桁の数値のうち下3桁のみとなってしまい、千の位が表示されません。
しかしブレークポイントをふってデバッグ実行し、受信時、変数代入時、表示時の値の変化を見てみるとしっかり4桁の数値がそれぞれの変数に入っています。
千の位の値のみ表示されない原因は何が考えられるでしょうか。

環境はOS:WindowsXP、VisualStudio2008です。
VB歴は入門書を一冊読んだ程度の者です。

[ツリー表示へ]
タイトルRe: 値が表示されません
記事No9165
投稿日: 2009/07/10(Fri) 07:11
投稿者オショウ
> VB.netを使ってシリアル通信(VB6.0のMSCommを使っています)を行い、受信した4桁の数値(文字データ)を数値データに変換してTextBoxに表示しようとしています。

  回答ではありません。
  SerialPortクラスを使いましょう!

  次に、それだけの情報では、コメントのしようもありません。
  受信ルーチンのソースコードを掲載するとか・・・

以上。

[ツリー表示へ]
タイトルRe^2: 値が表示されません
記事No9169
投稿日: 2009/07/10(Fri) 09:56
投稿者Qdac
オショウさん、ご指摘ありがとうございます。

> それだけの情報では、コメントのしようもありません。

  申し訳ありません。受信部分のプログラムは以下のようになっています。
  ちなみにBufferはObject型、iはInteger型です。

  Case MSCommLib.OnCommConstants.comEvReceive 'データ受信

                Buf1.Text = AxMSComm1.InBufferCount '受信データ数表示
                Buffer = AxMSComm1.Input.Substring(0, 4) 'Bufferに4文字格納
        i = CType(Buffer, Integer) '値をIntegerに変換
        InputData.Text = Format(i, "0000") '4桁の値を表示

シリアル通信に関してはご指摘のとおりSerialPortクラスを勉強して使ってみます。
しかし、上のプログラムで1桁目の値のみが表示されない理由がわからないのですが・・・

[ツリー表示へ]
タイトルRe^3: 値が表示されません
記事No9171
投稿日: 2009/07/10(Fri) 10:14
投稿者オショウ
>                 Buf1.Text = AxMSComm1.InBufferCount '受信データ数表示
>                 Buffer = AxMSComm1.Input.Substring(0, 4) 'Bufferに4文字格納
>         i = CType(Buffer, Integer) '値をIntegerに変換
>         InputData.Text = Format(i, "0000") '4桁の値を表示

  結果は別として・・・

    Buf1.Text = AxMSComm1.InBufferCount.ToString()
    if AxMSComm1.InBufferCount >= 4 Then
        Buffer = AxMSComm1.Input.Substring(0, 4)
        i = Integer.Parse(Buffer)
        InputData.Text = String.Format("{0,4:0000}", i)
    End If

  せめて、この程度は書かないと・・・

※ 宙で書いたので、スペルミスは勘弁・・・
  MSComm32を使用することを暗黙に認めているのではありません

※ あと、受信バッファにデリミタ文字とか(CR/LF等)が残っている
  可能性で文字ズレ起こしている可能性もあるので、受信後バッファ
  のクリアが必要かと。

以上。

[ツリー表示へ]
タイトルRe^4: 値が表示されません
記事No9176
投稿日: 2009/07/10(Fri) 12:35
投稿者Qdac
オショウさん、何度もありがとうございます。
ご指摘のとおり、Buffer格納前に文字数のチェックを入れて、最後にBufferのクリアをすると表示されました。
ただ少しちらつきが生じたため、Sleepを宣言して最後に10ms待つと安定して表示されました。

VB.netではシリアル通信自体がサポートされていないと勘違いしていたため、MSCommを使用していました。
今後はSerialPortクラスの勉強をしていこうと思います。

お時間を割いていただきありがとうございました。

[ツリー表示へ]