tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルMSComm通信
記事No14304
投稿日: 2009/12/01(Tue) 16:16
投稿者まな
お世話になります。
MSComm通信を用いたシリアル通信での質問です。
HEXで下のようなデータをマイコンへ送信し、受信したデータをHEXで表示
しようとしています。
下記ですと、当然の如くERRORとなります。
この辺りの情報は色々とあるのですが、よく理解出来ておりません。
御教授お願いいたします。

Private Sub Command1_Click()
    Dim BytArrayRequestDat(6) As Byte

    If MSComm1.PortOpen = False Then
            MSComm1.PortOpen = True
    End If

    BytArrayRequestDat(0) = &H10    'HEXデータをセット
    BytArrayRequestDat(1) = &H2
    BytArrayRequestDat(2) = &H30
    BytArrayRequestDat(3) = &H77
    BytArrayRequestDat(4) = &H32
    BytArrayRequestDat(5) = &H31
    BytArrayRequestDat(6) = &HE4
    
    Debug.Print Hex(BytArrayRequestDat) & ":送信"
    
    MSComm1.Output = Chr(BytArrayRequestDat)    'マイコンへ送信
    Do
        DoEvents
    Loop Until MSComm1.OutBufferCount = 0
End Sub


Private Sub MSComm1_OnComm()
    Dim Buffer1 As Variant
    Dim Buffer2 As Variant
    
    Buffer1 = ""

    Select Case MSComm1.CommEvent
        Case comEvReceive
            Buffer1 = MSComm1.Input
        Case Else
    End Select

    Debug.Print Hex(Buffer1) & ":受信"
End Sub

[ツリー表示へ]
タイトルRe: MSComm通信
記事No14305
投稿日: 2009/12/02(Wed) 08:56
投稿者オショウ
> HEXで下のようなデータをマイコンへ送信し、受信したデータをHEXで表示
> しようとしています。

  バイナリ通信をしようとされているのか
  テキスト(アスキー)通信をしようとされているのか
  あいまいです・・・

> 下記ですと、当然の如くERRORとなります。

>     MSComm1.Output = Chr(BytArrayRequestDat)    'マイコンへ送信

  ここで、エラー発生ですか?

※ ちゃんと、その箇所も明示しましょう!

  そのエラーは、通信のエラーではないですよネ?〜
  エラーコードとその内容が解れば、修正をどうするか
  自ずと解るはずなんですが・・・

以上。

[ツリー表示へ]
タイトルRe: MSComm通信
記事No14306
投稿日: 2009/12/02(Wed) 11:13
投稿者GOD
>     Debug.Print Hex(BytArrayRequestDat) & ":送信"
>
Hex 関数に配列は渡せません。
なので、
    Dim Cnt As Long
    For Cnt = LBound(BytArrayRequestDat) To UBound(BytArrayRequestDat)
        Debug.Print Right("00" & Hex(BytArrayRequestDat(Cnt)), 2);
    Next
    Debug.Print ":送信"
みたいにして値をひとつずつ渡す必要があります。

>     MSComm1.Output = Chr(BytArrayRequestDat)    'マイコンへ送信
>
Chr 関数に配列は渡せません。あと、今回はChr関数は必要ないですよ。
MSComm1.Outputには配列を設定することができるので
    MSComm1.Output = BytArrayRequestDat
で大丈夫です。

>     Do
>         DoEvents
>     Loop Until MSComm1.OutBufferCount = 0
>
送信終了タイミングでなにか処理がしたいのでしょうか?
でなければ↑の部分はいらないと思いますよ。


ところで通信パラメータ(速度、パリティ、フロー制御など)の設定は正しいですか?
「Settings プロパティ」、「Handshaking プロパティ」、「InputMode プロパティ」参照

[ツリー表示へ]
タイトルRe^2: MSComm通信
記事No14307
投稿日: 2009/12/03(Thu) 18:52
投稿者まな
すいません。ありがとうございます。
試してみます。

> ところで通信パラメータ(速度、パリティ、フロー制御など)の設定は正しいですか?
> 「Settings プロパティ」、「Handshaking プロパティ」、「InputMode プロパティ」参照

Settingsプロパティは 9600,n,8,1
Handshakingプロパティは 0-comNone
InputModeプロパティは 0-comInputModeText

にしています。
SettingsとHandshakingは問題ないです。
InputModeですが、HEXデータのやりとりはこのままでOKなんでしょうか?

[ツリー表示へ]
タイトルRe^3: MSComm通信
記事No14308
投稿日: 2009/12/03(Thu) 19:57
投稿者オショウ
> InputModeですが、HEXデータのやりとりはこのままでOKなんでしょうか?

  HEXと言う表現はこの場合、逆にあいまい・・・
  HEX文字列でアスキー通信なのか、バイナリ通信を意味するのか。

  そのマイコン側の通信仕様はどう表現されているんでしょうか?

以上。

[ツリー表示へ]