RS232C経由で、データ(10msecにつき1データ)を読み込むプログラムをvbで作っているのですが、取り込んだデータをリアルタイムにファイルに出力しようとしても、なかなかうまくいきません。
VBを使用してファイルへ出力する際に、CPUへの負荷を少なくする方法をどなたか教えてください。
>RS232C経由で、データ(10msecにつき1データ)を読み込むプログラムをvbで作っているのですが
>取り込んだデータをリアルタイムにファイルに出力しようとしても、なかなかうまくいきません。
>VBを使用してファイルへ出力する際に、CPUへの負荷を少なくする方法をどなたか教えてください
なかなかうまくいきませんといわれても現在どのような処理で
>RS232C経由で、データ(10msecにつき1データ)を読み込むプログラムをvbで作っている
のかを示してくれないと、ここをこうした方が良いのではという提言ができません。
なかなかうまくいかない原因はどこにあるのでしょうか?
説明が足らず、すみませんでした。
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文
の中に入れるべきかどうかもいまいちわかっていない状況です。
何かアドバイスをいただければ幸いです。
RThresholdプロパティの値は何になっていますか?
1とかに設定されていると1バイト受診する毎にcomEvReceiveイベントが発生しますので
提示の処理では1文字ずつ改行されてしまうのではないでしょうか?
デリミタの文字を検出するまでデータを何かの変数に貯めておいてデリミタ文字を検出した
時点でそれ以前の文字列をファイルに書き出せば1行毎のメッセージになるのではないでしょうか。
今回はデリミタがCR+LFということなのでPrintのところで最後に『;』を付けるだけで良いような
感じですが。
>Print #1, StrConv(Buffer, vbUnicode) '---①
を
Print #1, StrConv(Buffer, vbUnicode);
としてみる。
おぉ、素晴らしい!
ありがとうございました。
セミコロンを追加することで解決しました。
僕の勉強不足ですね、これからも頑張ります。
ツイート | ![]() |