ファイル書き込みについて

解決


Ken3  2005-01-31 22:18:57  No: 88126

RS232C経由で、データ(10msecにつき1データ)を読み込むプログラムをvbで作っているのですが、取り込んだデータをリアルタイムにファイルに出力しようとしても、なかなかうまくいきません。

VBを使用してファイルへ出力する際に、CPUへの負荷を少なくする方法をどなたか教えてください。


abu  2005-01-31 23:04:19  No: 88127

>RS232C経由で、データ(10msecにつき1データ)を読み込むプログラムをvbで作っているのですが
>取り込んだデータをリアルタイムにファイルに出力しようとしても、なかなかうまくいきません。
>VBを使用してファイルへ出力する際に、CPUへの負荷を少なくする方法をどなたか教えてください

なかなかうまくいきませんといわれても現在どのような処理で
>RS232C経由で、データ(10msecにつき1データ)を読み込むプログラムをvbで作っている
のかを示してくれないと、ここをこうした方が良いのではという提言ができません。
なかなかうまくいかない原因はどこにあるのでしょうか?


Ken3  2005-01-31 23:29:04  No: 88128

説明が足らず、すみませんでした。

MSCommを使用して、受信データをTextBoxに書き出しています。

---
Select Case MSComm1.CommEvent
  Case comEvReceive
    Dim Buffer As Variant
    Buffer = MSComm1.Input
    Print #1, StrConv(Buffer, vbUnicode)  '---①
    ShowData Text1, (StrConv(Buffer, vbUnicode))  
  Case com -----途中略

Private Static Sub ShowData(Term As Control, data As String)
  Const MAXTERMSIZE = 16000
  Dim TermSize As Long, i

  TermSize = Len(Term.text)
  If TermSize > MAXTERMSIZE Then
     Term.Text = Mid$(Term.Text, 4097)
     TermSize = Len(Term.Text)
  End If

  Term.SelStart = TermSize
  Term.SelText = data
  Term.SelStart = Len(Term.Text)

End Sub
--

①の部分でファイルへデータの書き出しをしているのですが、
実際にファイルに書き込まれたデータには改行や空白などが
入っていて、TextBoxに表示されるように(5つの数値が空白で
区切られて時系列に並んでいる)ファイルに出力できません。

データは10msec毎に追加されるので、初めはファイルへの
書き込みが間に合っていないのではと思ったのですが、どうやら
ただデータの間に空白やら改行やらが紛れ込んでいるだけの
ようです。

取り込むデータは、時間データと4つの数値で、デリミタは
Cr+Lfを使用しています。通信速度は38400bpsです。

RS232Cを使用したプログラムは始めてて、いまいち僕の理解
が足りていないのも事実で、ファイルへの書き出しをCase文
の中に入れるべきかどうかもいまいちわかっていない状況です。
何かアドバイスをいただければ幸いです。


abu  2005-02-01 00:06:38  No: 88129

RThresholdプロパティの値は何になっていますか?
1とかに設定されていると1バイト受診する毎にcomEvReceiveイベントが発生しますので
提示の処理では1文字ずつ改行されてしまうのではないでしょうか?
デリミタの文字を検出するまでデータを何かの変数に貯めておいてデリミタ文字を検出した
時点でそれ以前の文字列をファイルに書き出せば1行毎のメッセージになるのではないでしょうか。

今回はデリミタがCR+LFということなのでPrintのところで最後に『;』を付けるだけで良いような
感じですが。
>Print #1, StrConv(Buffer, vbUnicode)  '---①

Print #1, StrConv(Buffer, vbUnicode);
としてみる。


Ken3  2005-02-01 00:16:10  No: 88130

おぉ、素晴らしい!

ありがとうございました。
セミコロンを追加することで解決しました。

僕の勉強不足ですね、これからも頑張ります。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加