
VB6.0でMSCommを用いてシリアル(レーダとつながってる)にデータを送りたいんですがどうもうまく送れません.outputしてすぐoutbuffercountをチェックしてもcnt=0(cntは下記プログラム参照)のままでバッファにちゃんとデータが送れていないのでは?と悩んでいます.
なにが原因なんでしょうか?もしくは,他に送信バッファにデータが届いてるかどうかをチェックする方法などご存知でないでしょうか?よろしくおねがいします.
MSComm1.CommPort = 2
MSComm1.InputMode = 1
MSComm1.InputLen = 0
MSComm1.Settings = "9600,N,8,1"
MSComm1.RThreshold = 1
MSComm1.PortOpen = True
MSComm1.InBufferCount = 0
MSComm1.OutBufferCount = 0
Dim s(16) As Byte ’←以下のデータを送りたいんですが・・
s(0) = &H2
s(1) = &H0
s(3) = &HA
s(4) = &H0
s(5) = &H20
s(6) = &H0
s(7) = &H53
s(8) = &H49
s(9) = &H43
s(10) = &H4B
s(11) = &H5F
s(12) = &H4C
s(13) = &H4D
s(14) = &H53
s(15) = &HBE
s(16) = &HC5
For j = 0 To 16
MSComm1.Output = s(j)
cnt = MSComm1.OutBufferCount
Next j
End Sub
あと,レーザーの説明書に
・レーザーに送信する2バイト間の時間間隔は6msを超えないように
・レーザーに送信する2バイト間の最小時間は55μs以上としてください
という記述があるんですが,これを満たしてないという可能性も疑ってます.
どうやれば,この時間のタイミングで送れるんでしょうか?
長くなってすいません,なにかヒントなどおねがいします.
No.1ベストアンサー
- 回答日時:
DTR が、下がってたりしてませんか?
ケーブルの結線図もありそうです。確認して下さい。
>・レーザーに送信する2バイト間の時間間隔は6msを超えないように
だって、キャラクタ間まで注意書きつきですから・・
>どうやれば,この時間のタイミングで送れるんでしょうか?
このボーレートで、このプログラムなら時間関係はOKと思います。
>チェックする方法などご存知でないでしょうか?
PCを2台使ったり、クロスケーブルでCOM1とCOM2を接続する手や、モデムとATコマンド/レスポンスをやりとりする方法があります。
私もはじめ、MSComm の自分勝手な動作には、参ったことがあります。
MSCommのプロパティページの内容、RTS/CTSの設定など、補足があれば、詳細に回答できるかも知れません。
とりあえず、OnCommイベントの中で、送信(した後)のイベント種類を確認してみて下さい。
また、
MSComm1.Output = chr$(s(j))
と文字列で送信した場合の結果もわかるとなおよいです。
>Output プロパティ
>送信バッファに文字列を書き込みます。
なので・・
どうもありがとうございます。2日ほど留守にするので、その後、ご指摘いただいた点について調べてみたいと思います。また、よろしくおねがいします。
No.2
- 回答日時:
回答ではないですが参考までに
COMが2個あるのならCOM1とCOM2を
クロスケーブルで繋いで片方でフリーのターミナル
ソフトを動かせばデータが来てるかどうか判ります。
遅くなって申し訳ありません.アドバイスありがとうございました.
原因が判明しましたので締め切らせていただきます.
どうやら原因は使用していたPCカードが特注で,ボーレート設定を2150にしなければいけないということでした.
しかし,VBでどうやって2150bpsを設定するのかわからず困っています.
別の質問として「ボーレートを2150にしたい!」を投稿させてもらいました.
また,よろしくおねがいします.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#で通信処理。応答がない場合...
-
バイナリデータ受信時のデータ順
-
WriteFile()でのデータ送信がで...
-
逆コンパイルと逆アセンブルの...
-
Macターミナルで実行中のプログ...
-
powershell を使いカレントディ...
-
アプリケーションが終了するま...
-
COBOLのS9タイプからXタイプへ...
-
.NetのBackgroundWorkerクラス...
-
メモリが不足しています(VBA)
-
スレッドにて同一メモリの書き...
-
プロセスIDからウィンドウハ...
-
openGLで物体を半透明にして表...
-
フレームワーク「4.8.1」で、[S...
-
OSPFでプロセスを分ける意義に...
-
if ( a & b == b )
-
CWnd::OnTimerのスレッドの取得
-
Winsockで接続待ちタイムアウト...
-
C言語からC#への変換ツール
-
VC++2005 CStringをshortに変換
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C# シリアル通信でデータ受信...
-
winsockでソケット通信の開発を...
-
socket: recvはいつ,どれだけ...
-
「スイッチングハブのバッファ...
-
VB2005でWin32APIを用いてRS-23...
-
シリアル通信エラー
-
シリアル通信の出力バッファと...
-
バイナリデータ受信時のデータ順
-
WinsockAPIのrecvfromの受信デ...
-
SerialPortのDataReceivedイベ...
-
再現性の無いバグ
-
rs232cでの受信データ(mscomm)...
-
C#で通信処理。応答がない場合...
-
Linuxでのシリアル通信について...
-
WriteFile()でのデータ送信がで...
-
【CAsyncSocket::OnReceive()呼...
-
UDP処理のエラーについて
-
recv関数の受信結果について
-
ReadFile(GPSとの通信)Win7で...
-
VC++ HttpOpenRequest() 正し...
おすすめ情報