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です)を使うのは、無理があるのでしょうか?
しかし、送信が出来て受信が出来ないのはおかしな話ですし、ステータス要求コマンドを送信後に永久ループを止めて、プログラムの実行を終了させてからハイパーターミナルで接続すると、ハイパーターミナル上では(先ほど発行したステータス要求の)ステータスが返ってきます。
どうかお知恵をお借りしたく、投稿させていただきました。
どんなささいな情報でも良いので、レスをいただければ非常に嬉しいです。
宜しくお願いします。