サンプリング周波数が500Hzの場合、2ミリ秒ごとにTChartにデータをplotしたい。
このときに、データの個数から累積秒数を算出して、それをもとにplotする時刻を算出したいのに、EncodeTimeではミリ秒の有効な値は0~999となっているため変換時にエラーになってしまう。
この方法でやると累積ミリ秒数を時、分、秒に計算して分割してからTDateTimeを作成しないといけなくてめんどくさい。
TDateTimeから累積ミリ秒を取り出すのにはMilliSecondOfという便利な関数があるのにその逆は無いのかと探していたところ、IncMilliSecondを使えばできることが分かりました!
例えば、サンプリング周波数が500Hzで測定した場合、1データの間隔は1000/500=2msecなので、
n番目のデータの累積時間は
1000/500*n [msec]
となるので、
測定開始からの経過時間は、
TDateTime logtime = IncMilliSecond(TDateTime(0,0,0,0),1000/500*n);
で算出することができました。
よかったよかった。
こんな感じでChartに追加。
for(int n = 0 ; n < datalen ; n++){
chart->Series[0]->AddXY(IncMilliSecond(TDateTime(0,0,0,0),1000/500*n),data[n]);
}
相対時刻ではなく絶対時刻でChartに表示させたい場合は、TDateTime(0,0,0,0)のところを測定開始時刻に変えるだけでよい。