MSCommコンポーネントでデータを受信するには?


nabe  2009-07-02 23:30:51  No: 142136

OS:WindowsXP Professional SP3
言語:MS-Access2003 SP3 VBA

あるメーカー製のラベルプリンタとRS-232Cのシリアル通信をしてラベルを印刷するんですが、そのコンポーネントとしてMSCommコンポーネントを使っています。
ラベルプリンタに対してステータス要求コマンドを発行しているんですが、MSCommコンポーネントでは全く受信出来ず、OS付属のハイパーターミナルだと受信が可能です。
よって、、

・プリンタに異常はない
・接続ケーブルにも問題はない

ことになります。実際、MSCommコンポーネントのOutputでデータをプリンタに送信して、ラベル印刷が出来るんですが、どうやってもステータスの受信が出来ません。
ステータス要求と受信部分のソースは次の通りです。

    Do
                                        ' ステータス要求
        objCom.Output = "EST(1)"
                                        ' ステータス取得
        objCom.InputMode = comInputModeText
        objCom.InputLen = 0
        objCom.RThreshold = 1
        Do
            DoEvents
        Loop Until objCom.InBufferCount >= 8
        strStatus = objCom.Input

        (以下、略)

ステータスは8バイト+CR+LFで返ってくるハズなので、8バイト以上の受信バッファをループで待ってからステータスを取得しようとしていますが、InBufferCountが常に0の状態なので永久ループになってしまいます。
ちなみに、、

        Loop Until Len(objCom.Input) >= 8

ともしてみましたが、やはり受信できないので永久ループです。
MS-Access2003でMSCommコンポーネント(上記のソースではobjComです)を使うのは、無理があるのでしょうか?
しかし、送信が出来て受信が出来ないのはおかしな話ですし、ステータス要求コマンドを送信後に永久ループを止めて、プログラムの実行を終了させてからハイパーターミナルで接続すると、ハイパーターミナル上では(先ほど発行したステータス要求の)ステータスが返ってきます。

どうかお知恵をお借りしたく、投稿させていただきました。
どんなささいな情報でも良いので、レスをいただければ非常に嬉しいです。
宜しくお願いします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加