サイトのタイトル

OSD

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[])にセットします

    ここはトレースする変数名にあわせて記述してください 記述フォーマットは「変数名:データ型」で、各変数名はカンマで区切ります

  • 7行目:
    ファイル名は'Rec+'0~199’の連番を付けたファイル名を付けてます
    連続でレコードすることも可能なので連番を付けるようにしています
  • 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)をデータ型に合わせて型変換と変数名を変更します
  • 13行目:
    書込みバッファ(WriteBuf)のデータをファイルに書き込みます
    14行目:
    書込み完了(FileWrite.Done)でファイル終了(FileEnd)がONならファイルを閉じてます
    レコード終了(RecEnd)であれば正常終了(OK)をONにして、ファイル終了(FileEnd)であればファイル切り替え(FileChange)をONにします
    15行目:
    各エラーが発生したら異常終了(NG)をONにして終了します

手順4:タスク設定

  • 4-1. タスク設定

  • 大きなファイルを書き込む時には時間がかかるので定周期タスクでファイル書き込みするように20ms程度の定周期タスクを追加します
    トレースするデータの量で周期は20ms~50ms程度調整します

  • 4-2. プログラムの割付設定

  • 追加した定周期タスクにファイル書き込みプログラムを割り当てます

次のページは

以上でデータトレースのファイルがメモリカードのRecフォルダに作成できました
次のページでは、テストデータを作ってファイルを作成してSysmacStudioのデータトレースへインポートします