• 締切済み

MScommで上手く送信できない

VB5.0、MScommでのバイナリデータの送受信です。 ~.Outputへデータをセットしても 2byteずつしか送信してくれなくて困っています。 どうすれば溜め込まずに送信するようになるのでしょうか あるいはバッファをフレッシュする方法は無いのでしょうか これはもうAPIを使用するしか方法が無いのでしょうか 1フレーム6~13byteの長さで1フレーム単位の送信です。 1byteずつ1フレーム分~.Outputへセットすると 頭の2byteが送信され、次の1フレームをセットすると その次の2byteが送信されます。 更に1フレームセットすると続きの2byte(最初のフレームの5byte目と6byte目)が送信されます。 1フレームを~.Outputへセットした後、 SThreshold=1とすることによるcomEvSendの発生と ~.OutBufferCountが0となることは確認しおり、 その状態で2byteしか送信していません。 1フレームまとめて~.Outputへセットしても同じで、 6byte長のフレームをセットした後、 12byte長のダミーデータを~.Outputへセットすると、 だけ2byte送信されるのではなく、 丁度フレーム全てが送信されたところで止まります。 この時、~.OutBufferCountは0になっています。 更にフレームを~.Outputへセットしていくと、 ダミーデータ→次のフレームの順で送信されます。 試しに1フレーム送信後に~.PortOpen = Falseで ポートを一旦閉じて見ましたが、3byte目以降を 吐き出してくれません。 再度~.PortOpen = Trueでポートを開き、 1フレームセットすると、先のフレームの続き (3byte目、4byte目)から送信されます。 通信の設定 .CommPort = 1 .Settings = "9600,N,8,1" .InputLen = 1 .RThreshold = 1 .InputMode = comInputModeBinary .comNone 他PCとはRD,SD,GNDのみ接続 送信されたかどうかは相手のPCで確認しています。

みんなの回答

回答No.1

フレームの変数は何を使ってますか? また、MSComm.Outputにフレームを設定するときは、どのようにしてますか?

spen
質問者

お礼

結論から言うと~.outputへセットしたデータはちゃんと送られていました。 2byte毎に送られているように見えたのは、 受信側ソフトのデータの取り込み方に原因があったようです。 バイナリの送受信なので1byte受信毎にHEX関数で16進数へ変換し、TEXTで順次表示させるテストプログラムを作って相手側で動かしていました。 先程試しにテストプログラムの変わりに ハイパーターミナルで受信させてカーソルの動きを見てみたら、 カーソルが~.outputへセットした分ちゃんと動いていたので、 このテストプログラムに原因があると分かりました。 テストプログラムの問題を修正して 受信したデータをちゃんと表示するようになりました。 お騒がせしました そしてありがとうございました

spen
質問者

補足

1byteずつ送信の時: com1.Output = Chr(&HFF) com1.Output = Chr(fd.rw) com1.Output = Chr(fd.num) com1.Output = Chr(fd.size) com1.Output = Chr(fd.bd1) com1.Output = Chr(&HFF) (fd.rw、fd.num、fd.size、fd.bd1はbyte型の変数です) 1フレームまとめて送信の時(その1):   Dim buf() As Byte buf(0) = &HFF buf(1) = fd.rw buf(2) = fd.num buf(3) = fd.size buf(4) = fd.bd1 buf(5) = &HFF com1.Output = buf 1フレームまとめて送信の時(その2): Dim buf As String buf = Chr(&HFF) & Chr(fd.rw) & Chr(fd.num) & Chr(fd.size) buf = buf & Chr(fd.bd1) buf = buf & Chr(&HFF) com1.Output = buf です。

関連するQ&A