RS232Cport(MsComm)の使い方についてHELP願います。

解決


anchor  2002-04-19 04:10:09  No: 104170  IP: [192.*.*.*]

はじめまして。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

編集    削除
anchor  2002-04-19 04:17:20  No: 104171  IP: [192.*.*.*]

下から4行目の"False"が消えてしまいました。
訂正いたします。

補足:私、VBA(Excel)経験有ですので、その辺を加味して
御返答いただければ幸いです。
宜しくお願いします。

編集    削除
wisky_cat  2002-04-21 23:20:42  No: 104172  IP: [192.*.*.*]

私も過去同じような経験をよくしましたので、何かの参考になればと思います。
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)にしないと通信できません。
    以上私の勘違いもあるかもしれませんが、ご検討下さい。お役に立てれば    幸いです。

編集    削除
TEA  2002-04-22 12:07:53  No: 104173  IP: [192.*.*.*]

Windowsには標準でハイパーターミナルという通信ソフトがついているので、
「通信環境が正常に動いているかを確認する」時に使ってみてください。
環境の問題か、プログラムの問題なのかの切り分けはできると思います。

その他の問題として
1.通信ポート番号の設定が間違っている
2.通信ポートが他のアプリで使用していてオープンできない
3.受信データが表示できないコードになっている(バイナリ)
4.MsCommでは、バイナリの'\0'コードが正常に受信できないことが有るらしい(コントロールのバグ)
5.ソースの「With〜」から「End With」までのコードを囲むLoopって要らないの?

編集    削除
anchor  2002-04-23 06:55:36  No: 104174  IP: [192.*.*.*]

TEAさん、ありがとうございます。
問題自体は、本日(4/22)自力解決いたしました。
問題の内容が、的確にカキコされてなかったので補足しておきます。

相手側の機械は、いわゆるデータロガーでPC側のポートを
オープンにした状態のところへ機械側の送信スイッチで一気に
データを送信するという究極に簡単なものです。
したがって、通常の通信に使われるRS等の信号は使われていません。
で、ここが今回の落とし穴でした。つまり、On_Commイベントが
comEvReceive位しか発生しないのです。
で、イベントのトラップをあきらめ、処理をタイマーと手動を
併用することで解決しました。

それから、ご指摘の個所で2箇所参考にさせてもらいました
ひとつはInputModeで、ご指摘の通りTEXTに変更させてもらい
ました。もうひとつは、機械の仕様によるものなのですが、
1ファイルあたりのメモリ容量が固定されており、
ヘッダー−chr(0)−データ降順(最終アドレス側から先頭の
データ)で保存されているようです。このため、途中の0データ
でエラーが発生していたようでした。

>ハイパーターミナル
実は、今までハイパーターミナルを使っていたのですが、同期処理が
全くできない(データ垂れ流し状態の)機械なのでHDDへのキャッシュ
時にデータの受信ミスが多発し、今回、その切り替え、回避のためVBを
導入した次第なのです。(テキストをキャプチャしてました。)

以上です。

編集    削除
anchor  2002-04-23 06:56:57  No: 104175  IP: [192.*.*.*]

すみません。
解決マークしておきます。

編集    削除