tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルMSCommを使ってバイナリデータを受信したい
記事No13005
投稿日: 2008/09/04(Thu) 18:39
投稿者おしえてください
VB6.0である装置とPC間をシリアル通信をするツールを作成しています。装置からPCに制御コマンドが送られてくるのですが、現状送られてきているはずのデータが正しく受信できません。PCに正しく送られていることは、Acknowrichというシリアルデバイス通信ツールで確認しました。

装置が送っているデータ:0x12 0x65 0x31 0x1B 0x33 0x04 0x1B 0x55 0x30 0x1B 0x74 0x03
ツールが受信したデータ:1 104 36 101 0 43 9

多分VB6.0なので、受信データが10進で見えているとしても、送られているデータとは全く違うデータになっています。あまり関係ないかもしれませんが、装置側はデータをJISコードで送信しています。(バイナリレベルのデータだとJISとかUNICODEとかは関係ないかなと思いますが。)

なお、
InputMode=1
InputLen=0
としており、Settingは装置側にあわせて設定しています。

また、ツールのソースは下記のとおりです。
Private Sub MSComm1_OnComm()  
    Dim bytInputData()      As Byte
    Dim bytRecvData()       As Byte
     If MSComm1.InBufferCount = 0 Then
        Exit Sub
    End If
    bytRecvData = ""
    Do
        DoEvents
        bytInputData = MSComm1.Input
        bytRecvData = CStr(bytRecvData) & CStr(bytInputData)
    Loop Until MSComm1.InBufferCount = 0
End Sub

申し訳ありませんが教えてください。よろしくお願いします。

[ツリー表示へ]
タイトルRe: MSCommを使ってバイナリデータを受信したい
記事No13007
投稿日: 2008/09/04(Thu) 22:17
投稿者Starfish
 見えているところでは、コードが化けるような問題はなさそうですが。

 ループを抜けたところで、bytRecvDataに正しくデータが入っているか
以下のコードで確認してみてください。

    For i = 0 To UBound(bytRecvData)
        Debug.Print Hex(bytRecvData(i)) & " ";
        If i Mod 16 = 15 Then Debug.Print
    Next

[ツリー表示へ]
タイトルRe^2: MSCommを使ってバイナリデータを受信したい
記事No13010
投稿日: 2008/09/05(Fri) 09:44
投稿者おしえてください
回答ありがとうございました。

>  ループを抜けたところで、bytRecvDataに正しくデータが入っているか
> 以下のコードで確認してみてください。
>
>     For i = 0 To UBound(bytRecvData)
>         Debug.Print Hex(bytRecvData(i)) & " ";
>         If i Mod 16 = 15 Then Debug.Print
>     Next

確認しましたところ、やはり異なったデータが入ってきています。
とりこぼしているのでしょうか?
それとも0x1Aというデータを受信できないのでしょうか??
(そんなはずはないと思いますが。。)

少し気になっているのは、ANCIIの範囲外のデータをCStr()を使って
文字として認識して問題ないのでしょうか。

同じような問題を解決したことがある方がいらっしゃったら
ご教授願います。よろしくお願いします。

[ツリー表示へ]
タイトルRe^3: MSCommを使ってバイナリデータを受信したい
記事No13011
投稿日: 2008/09/05(Fri) 11:23
投稿者花ちゃん
投稿の度にハンドルネームを変えたり、捨てハン的なハンドルネームのご使用は
控えて下さい。
他人にものを尋ねるのですから、それなりの名前(ハンドルネーム)を名乗りましょう。

http://www.hanatyan.sakura.ne.jp/hazimeni.htm#keijiban

[ツリー表示へ]
タイトルRe^4: MSCommを使ってバイナリデータを受信したい
記事No13012
投稿日: 2008/09/05(Fri) 12:55
投稿者おしえてください
すみませんでした。
気をつけます。

[ツリー表示へ]
タイトルRe^5: MSCommを使ってバイナリデータを受信したい
記事No13013
投稿日: 2008/09/05(Fri) 13:04
投稿者花ちゃん

MSComm1.InputMode = comInputModeBinary をキーにログを検索して見て下さい。

[ツリー表示へ]
タイトルRe^3: MSCommを使ってバイナリデータを受信したい
記事No13021
投稿日: 2008/09/06(Sat) 02:27
投稿者Starfish

> 確認しましたところ、やはり異なったデータが入ってきています。
> とりこぼしているのでしょうか?
> それとも0x1Aというデータを受信できないのでしょうか??
> (そんなはずはないと思いますが。。)

 どういう風に化けているのかわからないので、なんとも言えませんが、
Settingプロパティは正しいのでしょうか?


> 少し気になっているのは、ANCIIの範囲外のデータをCStr()を使って
> 文字として認識して問題ないのでしょうか。

 バイナリデータの結合に、文字列としてこのように使っていますが
問題が発生したことはありません。

 気になるようでしたら、Input直後のbytInputData の中身を
調べれば結合で問題がないことは確認できると思いますが。

[ツリー表示へ]
タイトルRe^4: MSCommを使ってバイナリデータを受信したい
記事No13026
投稿日: 2008/09/08(Mon) 20:07
投稿者おしえてください
> Settingプロパティは正しいのでしょうか?

確認しましたところ、初期化時にSettingプロパティを設定していたのですが
処理の途中でSettingプロパティが書き換わっていることがわかりました。
正しいプロパティを設定しなおすと取得することができました。
ありがとうございました。

[ツリー表示へ]