TechCraft – エンジニアのためのスキルアップメモ

エンジニアのスキルアップを少しでも加速する技術ブログ

第一回 ST言語入門

〜PLCプログラミングの基礎を学ぼう〜

1. はじめに:ST言語とは?

ST(Structured Text)言語は、PLC(プログラマブル・ロジック・コントローラ)のプログラミング言語の一つであり、IEC 61131-3規格に準拠しています。C言語Pascalに似た構文を持ち、論理演算や条件分岐、ループ処理を記述しやすいのが特徴です。

PLCを使った工場の自動化システムや生産ライン制御において、ST言語は複雑なアルゴリズムやデータ処理を記述するのに適しています。本記事では、ST言語の基本構文やプログラミングの基礎を解説します。


2. ST言語の基本構造

ST言語の基本的なコードは、以下のような構造になっています。

PROGRAM プログラム名
    変数の宣言
    BEGIN
        メインの処理
    END_PROGRAM

具体的に、簡単なプログラムを見てみましょう。

PROGRAM SimpleExample
    VAR
        A : BOOL; (* 論理変数 *)
        B : BOOL;
        C : BOOL;
    END_VAR

    BEGIN
        C := A AND B; (* AとBのAND演算結果をCに格納 *)
    END_PROGRAM

このプログラムでは、ABの両方がTRUEであれば、CTRUEになります。


3. 変数とデータ型

ST言語には、PLCの制御に適したデータ型が用意されています。

データ型 説明
BOOL 真偽値(TRUE または FALSE)
INT 16ビットの整数
DINT 32ビットの整数
REAL 浮動小数点数
STRING 文字列
TIME 時間(例: T#5s は5秒)

変数の宣言方法

VAR
    Count : INT := 0;   (* 初期値0の整数 *)
    Status : BOOL := FALSE;
    TimeDelay : TIME := T#10s;
END_VAR

4. 基本演算と条件分岐

(1) 算術演算

ST言語では、基本的な算術演算が可能です。

X := A + B;   (* 加算 *)
Y := A - B;   (* 減算 *)
Z := A * B;   (* 乗算 *)
W := A / B;   (* 除算 *)

(2) 条件分岐(IF文)

IF Temperature > 100 THEN
    Alarm := TRUE;
ELSE
    Alarm := FALSE;
END_IF;

(3) CASE文

CASE Mode OF
    0: Motor := FALSE;
    1: Motor := TRUE;
    2: Motor := PWM_Control;
END_CASE;

5. ループ処理(FOR、WHILE、REPEAT)

ST言語では、以下のようなループ処理が可能です。

FORループ

FOR i := 1 TO 10 DO
    Sum := Sum + i;
END_FOR;

WHILEループ

WHILE Temperature < 200 DO
    Temperature := Temperature + 1;
END_WHILE;

REPEATループ

REPEAT
    Pressure := Pressure + 5;
UNTIL Pressure >= 100
END_REPEAT;

6. 関数とファンクションブロック

関数(FUNCTION)

関数は、値を返す処理をまとめるのに使います。

FUNCTION AddNumbers : INT
    VAR_INPUT
        A : INT;
        B : INT;
    END_VAR
    AddNumbers := A + B;
END_FUNCTION

ファンクションブロック(FUNCTION_BLOCK)

ファンクションブロックは、状態を保持する処理を作成するのに適しています。

FUNCTION_BLOCK Counter
    VAR_INPUT
        Increment : BOOL;
    END_VAR
    VAR_OUTPUT
        Count : INT;
    END_VAR
    VAR
        InternalCount : INT := 0;
    END_VAR

    IF Increment THEN
        InternalCount := InternalCount + 1;
    END_IF;

    Count := InternalCount;
END_FUNCTION_BLOCK

このファンクションブロックを使うことで、カウントアップする処理を簡単に再利用できます。


7. 実践課題:PLC用の簡単な制御プログラム

以下は、ST言語を使ってエアコンの制御を行う簡単なプログラムです。

PROGRAM AirConditionerControl
    VAR
        Temperature : REAL; (* 現在の温度 *)
        SetPoint : REAL := 25.0; (* 設定温度 *)
        AC_On : BOOL := FALSE;
    END_VAR

    BEGIN
        IF Temperature > SetPoint THEN
            AC_On := TRUE; (* 設定温度を超えたらエアコンをON *)
        ELSE
            AC_On := FALSE; (* それ以外はOFF *)
        END_IF;
    END_PROGRAM

このプログラムでは、温度が設定値を超えるとエアコンをONにする処理を行っています。


8. まとめ

ST言語は、PLCの制御プログラムを記述するための強力なツールです。本記事では、以下のポイントを解説しました。

  • ST言語の基本構造
  • 変数とデータ型
  • 演算や条件分岐
  • ループ処理
  • 関数とファンクションブロック

次回は、ST言語を使ったより実践的なPLCプログラムの開発方法について解説していきます。

techcraft.hatenablog.com


参考文献