SSレコーダの作り方 (3/4)
手順3:ファイル出力
-
3-1. プログラム追加
-
プログラムを追加してファイルを作成するプログラムを書いていきます
出力するファイルはこのようになります
TraceTypeからStartRawTimeまでがヘッダ部分で、次の行が各カラムのタイトル行です
カラムのIndex,Date,ClockTime,RowTimeの4項目は必ず必要でその次からがトレースする変数になります
-
0行目:
運転開始時にSysClockStartDTには基準時刻、byteCommaにはASCIIコードの「,」カンマをセット1行目:
メモリカードを挿入したとき、または運転開始時にファイルを格納する'Rec'フォルダを作成します
フォルダがあればErrorフラグがONしますが無視しても問題ありません2行目:
レコード書き込みフラグ(RecWrite)の立上りでファイル切り替えフラグ(FileChange)をセットしておいて、次の処理以降でファイル名を変更します
3行目:
レコード書き込みフラグ(RecWrite)の立下りレコード終了(RecEnd)をセットして書き込み処理を終了する指示をします
4行目:
ファイル書き込み(WriteRecFile)の記憶回路です
レコード書き込みフラグ(RecWrite)の立上り、またはファイル変更フラグ(FileChange)の立上りでファイルへの書き込みを開始します
5行目:
データトレースのファイルフォーマットに合わせてヘッダ部分のデータを書込みバッファ(WriteBuf[])にセットします
この部分は変更せずに使います
-
6行目:
ここはトレースする変数名にあわせて記述してください 記述フォーマットは「変数名:データ型」で、各変数名はカンマで区切ります
トレースデータの変数名をカラム名として書込みバッファ(WriteBuf[])にセットします
-
8~11行目:
ファイルを開いてレコードデータの書き込み要求(WriteRequest)をONにしてリングバッファにデータがあれば書込み(Write)を実行します
書き込み中にもリングバッファにデータが入るので書き込み終わって(FWrite.Done)10000レコード未満(FileEnd=OFF)なら再度書込みを実行します
-
12行目:
ST1-9:リングバッファのデータ数を見て100レコード以下のデータを書き込むようにします
ST10:リングバッファから1レコード読み出します
ST12-13:RowCntをIndex項目へ
ST15-16:リングバッファのRecTimeの日付部分をDate項目へ
ST17-18:リングバッファのRecTimeの時刻部分をClock項目へ
ST21-24:基準時刻(1970/1/1 0:0:0)からリングバッファのRecTimeまでの経過時間をナノ秒単位の数値をRawTime項目へ
ST26-49:リングバッファで記録したデータを各項目へ書込み(ここをトレースデータに合わせて変更)
ST51-56:書込みレコード件数が10000レコードになったらファイルを切り替えます
ST59:書込みバッファ(WriteBuf)の配列(byte数)が65535なので60000を超えたら一旦FileWriteを実行する
例えば:
Pos := StringToAry(INT_TO_STRING(Data.INT16), WriteBuf[Pos]) + Pos;
INT_TO_STRING(Data.INT16)をデータ型に合わせて型変換と変数名を変更します
手順4:タスク設定
-
4-1. タスク設定
-
大きなファイルを書き込む時には時間がかかるので定周期タスクでファイル書き込みするように20ms程度の定周期タスクを追加します
トレースするデータの量で周期は20ms~50ms程度調整します
次のページは
次のページでは、テストデータを作ってファイルを作成してSysmacStudioのデータトレースへインポートします