1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MELSEC-Q GX Works2のコンパイラの動作を調べる(その2)

Last updated at Posted at 2021-10-17

はじめに

前回の続きです。

MELSEC-Q GX Works2のコンパイラの動作を調べる(その1)

配列を使ったST文はどのようにコンパイルされるか

前提条件

自動割り付けデバイスは次のようになっている場合です。

image.png

サンプルプログラム

Sample1: ビット配列(16要素)

配列の要素数16個のビット配列を作りL1の内容を転送するロジックです。

(*Sample1*)
index:=1;
array_bit[index]:=L1;

image.png
image.png

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;

image.png
image.png
image.png

Sample3: ワード配列(16要素)

配列の要素数16個のワードデータの配列を作りW3の内容を転送するロジックです。

(*Sample3*)
index:=3;
array_word[index]:=W3;

image.png
image.png

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;

image.png
image.png
image.png

まとめ

配列を使ったST文のコンパイル結果を確認しました。各サンプルで異なる配列サイズとデバイス割り当てを使用することで、コンパイラがどのように配列アクセスを処理するかを観察できます。

特に、大きな配列や複雑なデバイス割り当ての場合、BSET/BRST命令を使用して適切にビット操作を行うことがわかります。これにより、ST言語で書かれた配列操作が最終的にどのようなラダーに変換されるかを理解できます。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?