高速化を意識したST(Structured Text)の書き方
1. はじめに
Structured Text(ST)は、PLC(Programmable Logic Controller)で広く使われるプログラミング言語の一つであり、C言語やPascalに似た構文を持つ高級言語です。
PLCの制御プログラムを記述する際、処理速度の最適化は非常に重要です。本記事では、高速化を意識したSTの書き方を紹介します。
2. STプログラムの高速化の基本原則
STの処理速度を向上させるために、以下のポイントを押さえておきましょう。
- 不要なループの回避
- ループを最適化し、可能な限り回数を削減する。
- 条件分岐を最適化
IF
文やCASE
文の評価回数を最小限に抑える。
- データ型の最適化
- 不要な変数型の変換を避け、適切なデータ型を使用する。
- 不要な演算の削減
- 計算回数を減らし、演算の効率化を図る。
- メモリアクセスの最適化
- グローバル変数よりローカル変数を使用し、キャッシュ効率を向上させる。
3. 高速化を意識したSTコードの実例
3.1 ループの最適化
NG例(非効率なループ):
FOR i := 0 TO 1000 DO data[i] := data[i] * 2; END_FOR;
上記のコードは毎回ループを回すため、処理負荷が高い。
OK例(ループ回数を削減):
FOR i := 0 TO 1000 BY 2 DO data[i] := data[i] * 2; data[i+1] := data[i+1] * 2; END_FOR;
改善点:
- BY 2
を使うことでループ回数を半減
- 1回のループで2つのデータを処理
3.2 条件分岐の最適化
NG例(条件判定の回数が多い):
IF sensor1 = TRUE THEN motor := TRUE; ELSE IF sensor2 = TRUE THEN motor := TRUE; ELSE motor := FALSE; END_IF; END_IF;
上記は条件評価が2回発生するため、PLCの処理負荷が増える。
OK例(論理演算を活用):
motor := sensor1 OR sensor2;
改善点:
- IF
文を排除し、1回の演算で処理
- 条件分岐を減らし、評価負荷を軽減
3.3 データ型の最適化
NG例(不適切なデータ型):
VAR counter: REAL; END_VAR counter := counter + 1.0;
上記は REAL
型を使用しているが、整数演算であれば INT
の方が高速。
OK例(適切なデータ型を使用):
VAR counter: INT; END_VAR counter := counter + 1;
改善点:
- INT
型を使用することで、浮動小数点演算を回避
- REAL
の演算はPLCによっては処理負荷が高い
3.4 演算の最適化
NG例(不要な計算の繰り返し):
FOR i := 0 TO 1000 DO value := x * y; data[i] := value + z; END_FOR;
変数 x * y
はループのたびに毎回計算されるため、処理負荷が大きい。
OK例(事前計算して再利用):
VAR precomputed: INT; END_VAR precomputed := x * y; // 事前計算 FOR i := 0 TO 1000 DO data[i] := precomputed + z; END_FOR;
改善点:
- x * y
をループの外で事前計算し、ループ内での計算回数を削減
3.5 メモリアクセスの最適化
NG例(グローバル変数の多用):
FOR i := 0 TO 1000 DO globalData[i] := globalData[i] + 1; END_FOR;
グローバル変数 globalData
へのアクセスはPLCによっては低速になる。
OK例(ローカル変数の活用):
VAR localData: ARRAY[0..1000] OF INT; END_VAR FOR i := 0 TO 1000 DO localData[i] := localData[i] + 1; END_FOR;
改善点: - ローカル変数を使用し、メモリアクセスの速度を向上 - キャッシュ効率が良くなり、処理が高速化
4. まとめ
STを高速化するためのポイントを整理すると、以下のようになります。
最適化項目 | 高速化のポイント |
---|---|
ループ最適化 | ループ回数を削減、まとめて処理 |
条件分岐の最適化 | IF 文の回数を減らす、論理演算を活用 |
データ型の適正化 | REAL より INT を優先 |
演算の最適化 | 事前計算を活用し、無駄な計算を減らす |
メモリアクセスの最適化 | グローバル変数よりローカル変数を使う |
PLCの制御プログラムでは、リアルタイム処理が求められるため、STの記述方法を工夫することで処理速度を大幅に向上できます。
適切な最適化を施し、より効率的なPLCプログラムを実装していきましょう!