はじめまして。VB初挑戦者です。
自分でもえらく難しい事をやっている気がしますが、御助力をお願いします。
データ記録装置からRS232Cポートを通して送ってきたデータを受信、ファイル
に取り出すつもりなんですが・・・
途中にDebug.Printを入れましたが何も吐き出しません。(T T)
コードは、form上に記述しています。
Portopen=True
With MSComm1
.RThreshold = 1024
.InputMode = comInputModeBinary
Select Case .CommEvent
Case comEvReceive
Debug.Print .Input 'テスト用
Buff = .Input
TMP = TMP & Buff
Buff = ""
Case comEvEOF
.PortOpen = False
'FN=Freefile Mfile=保存先のフルパス
Open MFile For Output As #FN
Print #FN, TMP
MsgBox "データの受信が終了しました。"
Case comEventBreak
Debug.Print TMP
.OprtOpen=
End Select
End With
End Sub
下から4行目の"False"が消えてしまいました。
訂正いたします。
補足:私、VBA(Excel)経験有ですので、その辺を加味して
御返答いただければ幸いです。
宜しくお願いします。
私も過去同じような経験をよくしましたので、何かの参考になればと思います。
1,まず前提として、通信ケーブルが間違っていないか?
2,相手の機器の通信設定とPC側の設定があっているか?
ボーレート、パリティーチェック、データビット、ストップビット等
3,相手機器の通信手順がどうなっているのか?例えば、コードを拝見した限 りでは、PC側からは何のコマンドも相手機器に対して発行されていませ んが?データ送信開始のコマンドなり、ハード的なトリガなどがあるはず ですが?機器によっては、RS(RTS)信号をONしないと送信を開始
しないといった条件もありますよ。
4,以上すべてOKだったとした場合、コードを拝見してまず、気づいたのは MSCOMMのINPUTMODEがBINARYになっていることです
相手機器はバイナリーコードで送信するのですか?一概に言えませんが、 232C機器ではASCIIコードで通信するものが多いと思うのですが
その場合は、INPUTMODEはTEXTになります。
5,最後に、PC側の問題ですが、NEC製PC98の場合は、DOS/Vと 232Cドライバの構成が違っていて、必ず、RS(RTS)信号をON
(ENABLE)にしないと通信できません。
以上私の勘違いもあるかもしれませんが、ご検討下さい。お役に立てれば 幸いです。
Windowsには標準でハイパーターミナルという通信ソフトがついているので、
「通信環境が正常に動いているかを確認する」時に使ってみてください。
環境の問題か、プログラムの問題なのかの切り分けはできると思います。
その他の問題として
1.通信ポート番号の設定が間違っている
2.通信ポートが他のアプリで使用していてオープンできない
3.受信データが表示できないコードになっている(バイナリ)
4.MsCommでは、バイナリの'\0'コードが正常に受信できないことが有るらしい(コントロールのバグ)
5.ソースの「With〜」から「End With」までのコードを囲むLoopって要らないの?
TEAさん、ありがとうございます。
問題自体は、本日(4/22)自力解決いたしました。
問題の内容が、的確にカキコされてなかったので補足しておきます。
相手側の機械は、いわゆるデータロガーでPC側のポートを
オープンにした状態のところへ機械側の送信スイッチで一気に
データを送信するという究極に簡単なものです。
したがって、通常の通信に使われるRS等の信号は使われていません。
で、ここが今回の落とし穴でした。つまり、On_Commイベントが
comEvReceive位しか発生しないのです。
で、イベントのトラップをあきらめ、処理をタイマーと手動を
併用することで解決しました。
それから、ご指摘の個所で2箇所参考にさせてもらいました
ひとつはInputModeで、ご指摘の通りTEXTに変更させてもらい
ました。もうひとつは、機械の仕様によるものなのですが、
1ファイルあたりのメモリ容量が固定されており、
ヘッダー−chr(0)−データ降順(最終アドレス側から先頭の
データ)で保存されているようです。このため、途中の0データ
でエラーが発生していたようでした。
>ハイパーターミナル
実は、今までハイパーターミナルを使っていたのですが、同期処理が
全くできない(データ垂れ流し状態の)機械なのでHDDへのキャッシュ
時にデータの受信ミスが多発し、今回、その切り替え、回避のためVBを
導入した次第なのです。(テキストをキャプチャしてました。)
以上です。
すみません。
解決マークしておきます。