ファイルをメモリとして使う

概略

大量のデータを保持したいときに、SDカードのファイルを保持メモリの代わりとして使う方法です
ファイルをメモリとして使う方法と特徴について調べます

処理内容

ファイルをメモリとして使う
SDに任意のサイズのファイルを作り、そのファイルの物理的なアドレスに値を直接書き込みます
物理的なアドレスとは、ファイルの先頭からのバイト数がアドレスになります

注意が必要なのは、書込み用のバッファを使って変数をファイルに書き込むため時間がかかります
読み出しをするときには書込みが終わるのを待ってから読み出すことになります
このことから、値が頻繁に変化する変数はこの処理には不向きです

書込み用リングバッファ
書込み変数の最大サイズ : 4096byte
バッファ数 : 100

書込みファンクション
書込みデータとアドレスを指定して書込みバッファに追加します

書込み用ファンクション一覧
MemWriteSINT
MemWriteUSINT
MemWriteBYTE
MemWriteINT
MemWriteUINT
MemWriteWORD
MemWriteDINT
MemWriteUDINT
MemWriteDWORD
MemWriteLINT
MemWriteULINT
MemWriteLWORD
MemWriteREAL
MemWriteLREAL
MemWriteTIME
MemWriteDATE
MemWriteTOD
MemWriteDT
MemWriteSTRING

例)


入力/出力 変数 データ型 説明
入出力 Ringbuf sRingBuff 書込み用リングバッファ
入出力 Data ARRAY[*] OF ?? 書込みデータ
入力 Address DINT 書込みバイト位置

ファイル書込みFB
書込み用バッファからファイルに書込みします

入力/出力 変数 データ型 説明
入出力 Ringbuf sRingBuff 書込み用リングバッファ
入力 Enable BOOL 有効
入力 FileName STRING[66] ファイル名
出力 Enabled BOOL 有効中
出力 WriteBusy BOOL 書込み中

ファイル読出しFB
TriggerをONで指定したアドレスから値を読出し

入力/出力 変数 データ型 説明
入力 Execute BOOL 起動
入力 FileName STRING[66] ファイル名
入力 Address DINT 読出し開始バイト位置
出力 ReadData ARRAY[*] OF BYTE 有効中


使い方

書込みファンクション(MemWrite???)で書き込みたい値を書込み用リングバッファに追加します


蓄えられたリングバッファのデータはファイル書込みFB(MemControl)でファイルに書き込みます
このファイル書込みFB(MemControl)はプログラムの最後で常時1つだけ実行しておくことでリングバッファのデータを順番にファイルに書き込みます

ダウンロード

ソース MemoryFile.csm2

ライブラリ MemoryFile.slr