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
ターミネータは不要なのでしょうか?
例:command = &H40 & vbCrLf
不要です
編集 削除コマンドはアスキーコードH40 = @なのですか?
もし、数字の40をアスキーコードで送信するならば、
下記の通りに宣言すればよいかと思います。
Dim command As String
command = &H40
&H40は16進数の40です
編集 削除この部分をご覧になってどの部分がうまくいかないかを
質問された方がよろしいかと思います。
http://support.microsoft.com/default.aspx?scid=kb;ja;411403
やくもさんのプログラムですが・・・
MSComm1.Output = command
MSComm1.PortOpen = False
となっていますが、これでは、実際に送信終了するまでに
ポートを閉じてしまい、送信されませんが・・・
送信バッファ中のデータが、ゼロバイトになるのを待ちあ
わせてから、Closeするようにされては?
それと、ハンドシェークは、ハードウェア?ソフトウェア?
指定されていないので、コントロールパネル中の通信設定が
有効になります。
ハードウェアの場合、CD信号やRTS・CTS信号のON/OFFを厳密
にしないと、データの送受信は行われません。
またご使用のRS-232Cケーブルの結線ですが、クロス?スト
レート?クロスの場合、いわゆる垂れ流しでも動作するよう
にハンドシェークラインを折り返しておくのが無難です。
その辺のハード的要素もありますので、ご注意下さい。
以上。
解決されましたか?
16進数の40を送信する場合は、
下記の通り記述しないと送信できませんよー。
Dim command(0) As Byte
command(0) = &H40
MSComm1.Output = command
解決しました!
送信バッファ中のデータが、ゼロバイトになるのを待ちあ
わせてから、Closeするようにしたら、できました!