VBのシリアル通信でコマンドを送るには?


やくも  2004-01-19 23:24:22  No: 111424  IP: [192.*.*.*]

RS-232Cシリアルケーブルで外部機器に
コマンドを送りたいのですが、うまくいきません!
コマンドは数字です。
下のようなプログラムではうまくいきませんでした。
Private Sub Form_Load ()
   Dim command As Integer

   MSComm1.CommPort = 1
   MSComm1.Settings = "9600,N,8,1"
   MSComm1.InputLen = 0
   MSComm1.PortOpen = True
   
   command = &H40
   MSComm1.Output = command

   MSComm1.PortOpen = False
End Sub

編集 削除
初心者  2004-01-20 00:30:42  No: 111425  IP: [192.*.*.*]

ターミネータは不要なのでしょうか?
例:command = &H40 & vbCrLf

編集 削除
やくも  2004-01-20 00:49:20  No: 111426  IP: [192.*.*.*]

不要です

編集 削除
初心者  2004-01-20 01:11:43  No: 111427  IP: [192.*.*.*]

コマンドはアスキーコードH40 = @なのですか?
もし、数字の40をアスキーコードで送信するならば、
下記の通りに宣言すればよいかと思います。

Dim command As String
   command = &H40

編集 削除
やくも  2004-01-20 01:28:24  No: 111428  IP: [192.*.*.*]

&H40は16進数の40です

編集 削除
初心者  2004-01-20 01:37:01  No: 111429  IP: [192.*.*.*]

この部分をご覧になってどの部分がうまくいかないかを
質問された方がよろしいかと思います。

http://support.microsoft.com/default.aspx?scid=kb;ja;411403

編集 削除
岡田 之仁  2004-01-20 02:21:16  No: 111430  IP: [192.*.*.*]

やくもさんのプログラムですが・・・

   MSComm1.Output = command
   MSComm1.PortOpen = False

となっていますが、これでは、実際に送信終了するまでに
ポートを閉じてしまい、送信されませんが・・・

送信バッファ中のデータが、ゼロバイトになるのを待ちあ
わせてから、Closeするようにされては?

それと、ハンドシェークは、ハードウェア?ソフトウェア?
指定されていないので、コントロールパネル中の通信設定が
有効になります。

ハードウェアの場合、CD信号やRTS・CTS信号のON/OFFを厳密
にしないと、データの送受信は行われません。

またご使用のRS-232Cケーブルの結線ですが、クロス?スト
レート?クロスの場合、いわゆる垂れ流しでも動作するよう
にハンドシェークラインを折り返しておくのが無難です。

その辺のハード的要素もありますので、ご注意下さい。

以上。

編集 削除
初心者  2004-01-20 10:06:19  No: 111431  IP: [192.*.*.*]

解決されましたか?
16進数の40を送信する場合は、
下記の通り記述しないと送信できませんよー。

   Dim command(0) As Byte
   command(0) = &H40
   MSComm1.Output = command

編集 削除
やくも  2004-01-20 22:36:54  No: 111432  IP: [192.*.*.*]

解決しました!
送信バッファ中のデータが、ゼロバイトになるのを待ちあ
わせてから、Closeするようにしたら、できました!

編集 削除