tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルエクセルグラフ
記事No15358
投稿日: 2011/10/26(Wed) 17:00
投稿者よっち
みなさまお世話になっております。

A/D変換された数値データa、b2つあるとします。
これらをリアルタイムにエクセルワークシート(2列・i行;OLE表示)及びグラフ(散布図;OLE表示)させたいのですが、どのようにプログラムしたらよいでしょうか?
よろしければ御教授願います。

[ツリー表示へ]
タイトルRe: エクセルグラフ
記事No15359
投稿日: 2011/10/27(Thu) 11:51
投稿者オショウ
> A/D変換された数値データa、b2つあるとします。
> これらをリアルタイムにエクセルワークシート(2列・i行;OLE表示)及びグラフ(散布図;OLE表示)させたいのですが、どのようにプログラムしたらよいでしょうか?
> よろしければ御教授願います。

  『A/D変換された』と言う表現と、『リアルタイムに』と言う言葉のつながり
  が、仕様をあいまいにしています。

  されたのであれば、リアルタイムでは無い。
  A/D変換で計測しつつ、計測したデータを・・・と言うのであればリアル
  タイムと言う表現と合致します。

  VB6ですか?
  1個のプログラムで、計測しつつグラフ表示するのであればエクセルを使わ
  ないで、MS-Chartでグラフ表示した方が楽・・・
  あとでCSVとかにファイル出力すれば、エクセルでそのデータをインポー
  トしてグラフ表示させるのは、そう大したことではない・・・

  少々大きなプログラムになってしまいますが・・・
  A/D変換で計測するプログラムと、計測したデータをグラフ表示するプロ
  グラム、もしくは、エクセルでグラフ表示するという2個に分離し、その間
  をSQL Server Expressで繋ぐ・・・とか。

  要は、計測したデータをSQL Server のテーブルにどんどんストアし、グラフ
  表示するプログラムの方で取得させて表示・・・

  これなら分離してデバッグもできるし、楽・・・

  如何?

以上。参考まで

[ツリー表示へ]
タイトルRe^2: エクセルグラフ
記事No15360
投稿日: 2011/10/27(Thu) 18:43
投稿者よっち
オショウ様 大変早い解答ありがとうございました。
御指摘の通り、グラフはPictureでリアルタイム表示させることにしました。
実際に寄せ集めてプログラムしてみましたが、どうもAD変換のサンプリング間隔の調整がわからずまた恐縮ですが、質問させていただきます。果たしてサンプリング間隔1msなのか?
以下にプログラムを表示します。Command2クリックでAD変換及びグラフ表示が始まります。

Private Sub Command2_Click()
Dim c As Integer
Dim value As Integer
Dim volts As Integer
ReDim times(100) As Long
ReDim values(100) As Integer

Timer1.enabled = True
Timer1.Interval = 1

Picture1.Left = Form1.ScaleWidth / 5
Picture1.Top = Form1.ScaleHeight / 55
Picture1.Width = Form1.ScaleWidth / 1.5
Picture1.Height = Form1.ScaleHeight / 1.03
Picture1.ScaleWidth = 7755
Picture1.ScaleHeight = 6675
Picture1.ScaleLeft = 0
Picture1.ScaleTop = 0
Picture1.Line (0, 4050)-(7755, 4050)

For c = 1 To 500
Picture1.PSet (x, y), RGB(255, 0, 0)

x = x + 1
  y = (volts) + 4000
   DoEvents
OLE1.object.Sheets("Sheet1").Cells(2 + c, "A").value = c
OLE1.object.Sheets("Sheet1").Cells(2 + c, "B").value = volts
Next c

End Sub

Private Sub Timer1_Timer()
   Dim value As Integer
   Dim volts As Integer
   Dim us As Long

   If opened And Command2_collect Then

  value = adc10_get_value()
  volts = adc_to_mv(value)
  
   End If
End Sub

[ツリー表示へ]
タイトルRe^3: エクセルグラフ
記事No15361
投稿日: 2011/10/27(Thu) 21:15
投稿者オショウ
> 実際に寄せ集めてプログラムしてみましたが、どうもAD変換のサンプリング間隔の調整がわからずまた恐縮ですが、質問させていただきます。果たしてサンプリング間隔1msなのか?

  Timer1.Interval = 1

  としても、1msでタイマー動作するわけではありません。
  結構、バラツキがありますし10ms平均程度で動作している
  のでは・・・と思われます。

  本当に1msでサンプリングしたいのであれば、ボード上に
  タイマーがあり、そのタイマー設定で1ms毎にサンプリング
  したデータを、バスマスタ方式でプログラム側の指定した
  メモリ空間や数値配列に保存させるようなこをしないと、
  1ms間隔のデータは取得できません。

  VB6のようですので、数値配列では領域的に巨大な容量を設
  定しにくいので・・・私ならその部分はC言語で書いてDLL
  にでもしてVB6側から呼び出す・・・ようなことにしますが。

※ PCのスペック(性能)にもかなり依存します。

以上。参考まで

[ツリー表示へ]
タイトルRe^4: エクセルグラフ
記事No15363
投稿日: 2011/10/28(Fri) 11:41
投稿者よっち
大変参考になりました。

ありがとうございました!

[ツリー表示へ]