はじめまして。
Excel VBA から、MsComm32を使って
ある既存のプロトコルで
RS-232Cで通信をしたいのです。
プロトコルによると、
最初に"ENQ"のアスキーコードを入れる、
ということなので、
以下のようにバイト型の配列の最初に格納
しましたが、うまく行きません。
ここに何か問題があるでしょうか?
どなたか詳しい方、
チェックだけでもして頂けないでしょうか。
宜しくお願いします。
Dim bytArray(10) As Byte
'ENQをASCIIコードで アスキーコード 05
bytArray(0)= &H5
・
・
'メッセージ送信
MSComm1.Output = bytArray()
はじめまして、
たぶんそのままHEXで値を入れているのが、いけないのではと思います。
多分こうするとうまくいくかもしれません。
Dim bytArray(10) As Byte
Dim lngAscii As Long
'一度Long型に格納する
lngAscii = CLng("&H5")
bytArray(0)= CByte(lngAscii)
・
・
'メッセージ送信
MSComm1.Output = bytArray()
もしかしたら、もっと簡単な方法があるかもしれません。
ちなみに、上記の方法はVB6.0のSP5でこの方法を使いました。
参考にしてみてください。
とりあえずMSDNさんを信じるなら、
> Output プロパティを使ってバイナリ データを送信する場合は、バイト配列が格納されているバリアント型データを設定します。
となっていますので、
MSComm1.Output=CVar(bytArray())
などと…やっても意味が無いかも。
また、yutaさんの
> たぶんそのままHEXで値を入れているのが、いけないのではと思います。
> '一度Long型に格納する
> lngAscii = CLng("&H5")
> bytArray(0)= CByte(lngAscii)
という方法で、lngAsciiがByte型の範囲に収まっている場合は、
bytArray(0)= lngAscii
と全く同値です。
よって、およそ関係なく、違う部分が原因でうまくいったのだと思われます。(弱
ところでμさん、「うまく行きません」ってどういうこと?
yutaさん、ガッさん、ありがとうございます。
yutaさんのやり方でやってみましたが、
結果は特に変わりませんでした。
「うまく行きません」というのは、
全体としてうまく動いてくれない、といった曖昧な意味です。
もし、このENQが問題ないなら、
他の可能性を当たろうかと考えていました。
詳しい方にお尋ねしてみて、
このやり方が特におかしくない、ということなら、
他が原因と切り分けられるな、と考えたのです。
方針としては間違っていないでしょうか?
>全体としてうまく動いてくれない、といった曖昧な意味です。
だからどううまく動いてくれないのか?
それを書かないといつまでたっても問題が解決しないような。
まあ、ひとの書いたプログラムのデバッグは書かれても答える気がしませんが。
>3-tさん
"曖昧な意味"という表現で止めておいたのは、
切り分けが目的だったからです。
この部分以外の原因が疑われるので
そちらの方を自分で追ってみようと思います。
yutaさん、ガッさん、3-tさん、
みなさん、ありがとうございました。
結局、具体的な不具合が分かっていないと解決にならないということですね。
曖昧な意味でうまくいかないと書いているのは具体的な不具合の現象すら
理解できていないということでしょうか。
切り分け以前に何がうまくいかないのかを理解してくださいね。
提示されている部分のコードは間違っているようには見えないので、
他の部分に問題があるような印象です。
バイナリモードになっていないって事はありませんか?
また、通信速度、ビット数、パリティ設定が違っていることはありませんか?
受信側は本当に正しく動作していますか?