CJメモリを有効活用

概略

CJユニット用メモリを保持メモリとして使えますが
DMはCJユニットで使用するエリアがあるためEMエリアのみを保持メモリとして使うことにします
※ CJユニット用メモリがあるのは、NJシリーズのみです (NXシリーズでは保持メモリをCJユニット用メモリに割り付ける機種もあります)

CJユニット用メモリ(保持)
DM D0~D32767 D20000~D29599は使用不可(CJ 高機能IOユニット用)
D30000~D31599は使用不可(CJ CPU高機能ユニット用)
EM E0_0~E3_32767
EM E3_0~E18_32767 NJ501のみ使用可能 (20バンク 03HEX~18HEX)

EMは1バンクあたり32767WORDなので65536Byte=64KByteあります
NJ501では64KByte×24バンク=1.5MByteを保持メモリとして使用可能です
NJ101,301では同様に256KByteを保持メモリとして使用可能です
NX701
4MB
NX102
1.5MB
NJ501
2MB1.5MB
NJ301
0.5MB 256KB
NJ101
0.5MB 256KB
 
保持メモリCJメモリ

設定方法

割付先
グローバル変数またはPOUの変数設定の割付先にAT指定で%E0_0など先頭アドレスを設定することでCJユニット用メモリを使用することができます

E0 WORD型配列32868個をE0_0~E0_32767に割付けました
ByteArray BYTE型配列65536個をE1_0~E1_32767に割付けました
DINTArray DINT型配列16384個をE2_0~E2_32767に割付けました
TestStruct sTestStruct型配列4095個をE3_0~E3_32767に割付けました(sTestStructは16byteの構造体)
WordArray1 WORD型配列1000個をE0_0~E0_999に割付けました
WordArray2 WORD型配列1000個をE0_1000~E0_1999に割付けました

メモリ使用状況
メモリ使用状況で確認すると保持変数メモリは消費されていません

注意事項

バンクを超えた領域は設定できません
例えば、割付先に%E0_0を設定して変数のサイズが32768WORD(65536byte)を超える変数を設定することはできません

割付けが被らないように注意が必要です
例えば、割付先をE0_0とした1000byteの変数と、割付先をE0_500とした1000byteの変数を設定する事ができてしまいます
この場合E0_500~E0_999が2つの変数で被ってしまうため値が不定となってしまいます