はじめに
前回の続きです。
MELSEC-Q GX Works2のコンパイラの動作を調べる(その1)
配列を使ったST文はどのようにコンパイルされるか
前提条件
自動割り付けデバイスは次のようになっている場合です。
サンプルプログラム
Sample1: ビット配列(16要素)
配列の要素数16個のビット配列を作りL1の内容を転送するロジックです。
(*Sample1*)
index:=1;
array_bit[index]:=L1;
Sample2: ビット配列(128要素)
配列の要素数128個のビット配列を作ります。ここでは意地悪をして先頭をD0.0のワードデバイスにします。
配列の構成:
- 128/16=8なので配列の大きさは8Wordです
- g_array_bit_D0にはD0-D7が割り当てられます(BITとして)
- indexの場所にL2の内容を転送するロジックです
重要なポイント: BSET/BRSTを使いちゃんと動くようになっていますね。
(*Sample2*)
index:=2;
g_array_bit_D0[index]:=L2;
Sample3: ワード配列(16要素)
配列の要素数16個のワードデータの配列を作りW3の内容を転送するロジックです。
(*Sample3*)
index:=3;
array_word[index]:=W3;
Sample4: ワード配列(128要素)
配列の要素数128個のワードデータの配列を作ります。ここでは意地悪をして先頭をK4M0のビットの桁指定にします。
配列の構成:
- 44128=2048 なので配列の大きさは2048BITです
- g_array_word_M0にはM0-M2047が割り当てられます(WORDとして)
- indexの場所にW4の内容を転送するロジックです
(*Sample4*)
index:=4;
g_array_word_M0[index]:=W4;
まとめ
配列を使ったST文のコンパイル結果を確認しました。各サンプルで異なる配列サイズとデバイス割り当てを使用することで、コンパイラがどのように配列アクセスを処理するかを観察できます。
特に、大きな配列や複雑なデバイス割り当ての場合、BSET/BRST命令を使用して適切にビット操作を行うことがわかります。これにより、ST言語で書かれた配列操作が最終的にどのようなラダーに変換されるかを理解できます。