目次
概要
VSD for GPS (以下 VSD) は,ログファイルのリードを JavaScript で行なっており,この JavaScript を作成することで,様々なログファイル形式に対応することができます.また,データとして読み込む項目を自由に定義することができます.これにより例えばアクセル開度やブースト圧等も読み込むことができます (ただしスキン側でそれらの項目表示に対応している必要があります).以下,この JavaScript のことを ログファイルリーダプラグイン または単に プラグイン と呼称します.
このページでは,プラグインを作成する上でのルールについて説明します.
ログファイルリーダ プラグインの基本
プラグインの配置場所
プラグインは (vsd_filter_gps.auf が存在するディレクトリ)\vsd_plugins\_log_reader\ ディレクトリ下に,hoge.js のように拡張子 .js で作成します.拡張子が .js であればファイル名はなんでも良いですが例外として,ファイル名がアンダースコア '_' で始まるプラグインは VSD では無視され使用されません.また,上記ディレクトリ以下に存在するすべてのプラグインは,同時に VSD システムに読み込まれます.したがって,異なるプラグインに同じグローバル function 名またはグローバル変数名が存在する場合,どちらかが上書きされるため予期しない動作になります.後で説明する ReaderFunc 名は他のプラグインと被らないように注意してください.またグローバル変数は極力使用しないようにしてください.
ログファイルリーダ プラグインの記述
プラグイン情報の登録
プラグイン先頭 (の function 外) で,まずはプラグイン情報の登録を行います.JavaScript 配列の LogReaderInfo に 4つの情報を push します.NMEA リーダの例を以下に示します.
LogReaderInfo.push({
Caption: "NMEA-0183 (*.nme*)",
Filter: "*.nmea;*.nme;*.nmea.gz;*.nme.gz",
ReaderFunc: "Read_nmea",
Priority: 0x10000000
});
Caption は,ログファイルオープン時のファイル選択ダイアログボックスの,選択肢リストに表示される文字列です.人間が見るためのものであり,内容はなんでも良いですがわかりやすい名前をつけてください.
Filter は,対象とするログファイルの拡張子を列挙します.複数の拡張子がある場合は,';' でつなげて記述します.ログファイルオープン時にログ形式を自動認識にした場合,ここの拡張子リストと照合が行われ,マッチした場合はそのプラグインが使用されます.
ReaderFunc は,このプラグインで定義するログファイルリード function の名前を指定します.
Priority は,このログファイルリーダの優先度を指定します.このパラメータは省略可能です.数値が少ないほど高優先度になります.
ログファイルオープン時にログ形式を自動認識にした場合で,複数のリーダの Filter にマッチする場合,優先度が高いリーダが優先的に使用されます.
ログリード function の記述
NMEA リーダのログリード function の記述例を以下に示します.function Read_nmea( Files ){
... function 本体 ...
return Cnt;
}
Files は,ログファイル名が収められた Array 型の変数です.ログファイルオープンダイアログにて,複数のファイルが選択されると 2個以上のファイル名が格納されているので,そのすべてを処理する必要があります.
ログリード function では,まず最初に,ログファイルフォーマットがそのログリーダで想定しているものと一致しているかどうかをチェックしなければなりません.一致していない場合,(より優先度の低い) 他のログリーダに処理を移すために,INVALID_FORMAT を返す必要があります.
また,ログリード function は,読み込めたレコード数を return する必要があります.VSD は,ログリード function から 0 が返された時,何らかの理由でログが読めなかったものとしてエラー処理を行います.
ログデータの VSD への渡し方
読み込んだログデータを VSD に渡すには,Array 型の変数「Log.プロパティ」にデータを格納します.「プロパティ」は実際には Time や Speed などです.プロパティの一覧は次章「プロパティ一覧」を参照してください.Log.Time[0], Log.Speed[0], Log.Longitude[0], Log.Latitude[0] が 1つのレコード,
Log.Time[1], Log.Speed[1], Log.Longitude[1], Log.Latitude[1] が 1つのレコード, という風に,配列のインデックス値が同じ物が 1つのレコードになります.
// Log の全プロパティに対し,無効データのチェックと有効値のセットを行います.
SmoothLowFreqLog();
または
// Log の指定されたプロパティに対し,無効データのチェックと有効値のセットを行います.
// 第 1パラメータ: Log のプロパティ
// 第 2パラメータ: Log.Time の要素数
SmoothLowFreqLog( Log.Longitude, Log.Time.length );
プロパティ一覧
- Log.Time
そのレコードの時刻を格納します.1970年1月1日0時0分0秒(UTC)からの経過時間(ミリ秒単位)です.JavaScript の Date.UTC() を使って取得するのが簡単です.
このプロパティは必須です.また,あるレコードの時刻はそれより前のレコードの時刻よりも必ず後である必要があります (ログの時刻を遡ることは許されません). - Log.Speed
時速 [km/h] を格納します.
このプロパティを定義しなくても,Log.Longitude/Log.Latitude を定義した場合,自動的に生成されます. - Log.Tacho
エンジン回転数 [rpm] を格納します. - Log.Distance
走行距離 [m] を格納します.
このプロパティを定義しなくても,Log.Longitude/Log.Latitude を定義した場合,自動的に生成されます. - Log.Longitude
経度 [度] を格納します.西経の時はマイナスになります. - Log.Latitude
緯度 [度] を格納します.南緯の時はマイナスになります. - Log.Direction
方位 [度] を格納します.真北が 0 で,時計回りに角度が増加します.
このプロパティを定義しなくても,Log.Longitude/Log.Latitude を定義した場合,自動的に生成されます. - Log.Altitude
高度 [m] を格納します. - Log.Accel
アクセル開度 [%] を格納します. - Log.Brake
ブレーキ強度 [%] を格納します. - Log.Gx
左右方向の加速度 [G] を格納します.右旋回時にプラスになります.
このプロパティを定義しなくても,Log.Longitude/Log.Latitude を定義した場合,自動的に生成されます. - Log.Gy
前後方向の加速度 [G] を格納します.加速時にプラスになります.
このプロパティを定義しなくても,Log.Longitude/Log.Latitude を定義した場合,自動的に生成されます. - Log.LapTime
ラップタイム [ミリ秒単位] を格納します.コントロールラインを通過した瞬間のレコードの Log.LapTime にそのラップタイムをセットします.このプロパティに限り,全要素に有効な値が格納されていなくても構いません.最初にコントロールラインを通過した瞬間のレコード (すなわち計測開始時点) の Log.LapTime には 0 を設定します.
Log.LapTime を定義すると,ラップタイム表示はその設定が使用され,簡易ラップタイム計測機能は使用できません.
スキンスクリプト内でのログデータの参照方法
スキンスクリプト内でログデータを参照するには,「Log.プロパティ」「Log.Max.プロパティ」「Log.Min.プロパティ」で参照できます.例えば,Log.Speed は現在の時速,Log.Max.Speed / Log.Min.Speed は最大 / 最小の時速が参照できます.
ただし,Time についてはスキンスクリプト内では参照できません.
また,Longigude, Latitude を定義した場合,Speed, Distance, Direction, Gx, Gy は自動生成され参照できます.
all_property.js を使用すると,そのときのログで参照できるプロパティをすべて表示できます.
また,ユーザが独自に追加したプロパティも同様の方法で参照でき,例えば,Log.Hoge というプロパティを追加した場合,スキンスクリプト内では Log.Hoge Log.Max.Hoge Log.Min.Hoge という 3つの変数でアクセスできます.
プラグインで使用出来る JavaScript オブジェクト
プラグインで使用出来る JavaScript オブジェクトは,JavaScript 標準オブジェクトと,File オブジェクトのみです.詳しくは基本オブジェクトと組込みオブジェクトを参照してください.