CODESYSにおけるST言語(構造化テキスト)の基礎文法とデータ型解説

開発環境と変数宣言

CODESYS環境での効率的なコーディングには、ショートカットキーの活用が不可欠です。Shift + F2で自動変数宣言ダイアログを開き、F2で入力アシスタント(機能ブロック等の選択)を呼び出します。

変数の属性には以下の修飾子を使用します:

  • CONSTANT: 読み取り専用の定数。
  • RETAIN: 電源断時に値を保持(バックアップ)。
  • PERSISTENT: 永続的な値保持(初期化リセットが必要な場合のみリセット)。

基本構文と演算子

ST言語における基本的な代入と論理演算の書式です。


(* 代入 *)
nValue := 10;

(* 型変換 *)
rPi := 3.14159;
nIntVal := REAL_TO_INT(rPi);

(* 条件分岐: IF文 *)
IF bCondition1 AND NOT bCondition2 THEN
    bOutput := TRUE;
ELSE
    bOutput := FALSE;
END_IF;

(* 多分岐: CASE文 *)
CASE nStep OF
    0:
        nState := 1;
    1, 5:
        nState := 2;
    10..20:
        nState := 3;
ELSE
    nState := 99;
END_CASE;

ループ処理と繰り返し

反復処理にはFOR, WHILE, REPEAT文を使用します。必要に応じてEXIT(ループ脱出)やCONTINUE(次のループへ移行)を使用します。


(* FORループ: 配列の初期化など *)
FOR nIndex := 0 TO 100 BY 2 DO
    arrData[nIndex] := nIndex;
END_FOR;

(* WHILEループ: 条件が真の間継続 *)
WHILE nCounter < 100 DO
    nCounter := nCounter + 1;
END_WHILE;

IOアドレスとメモリ割付

PLCの物理メモリは以下の記述法で直接アクセスします。

  • I: 入力エリア
  • Q: 出力エリア
  • M: メモリエリア

データ長の指定子:X(1bit), B(8bit/Byte), W(16bit/Word), D(32bit/DWord), L(64bit/LWord)。


(* 例:入力X0.0がONなら出力QX0.0をON *)
IF %IX0.0 THEN
    %QX0.0 := TRUE;
END_IF;

(* 変数へのアドレス割付 *)
bRunLamp AT %QX0.0 : BOOL;
nAnalogVal AT %IW0 : INT;

データ型の一覧

ST言語で扱う主なデータ型とその範囲です。

整数型

  • 符号付き: SINT(8bit), INT(16bit), DINT(32bit), LINT(64bit)
  • 符号なし: USINT(8bit), UINT(16bit), UDINT(32bit), ULINT(64bit)

浮動小数点型

  • REAL: 32bit単精度浮動小数点数。
  • LREAL: 64bit倍精度浮動小数点数。

時間・日付型

  • TIME: ミリ秒単位 (例: T#1h30m5s)。
  • DATE: 日付 (例: D#2023-10-25)。
  • DATE_AND_TIME (DT): 日付と時刻。

文字列型

  • STRING: ASCII文字列 (1文字1バイト)。
  • WSTRING: Unicode文字列 (1文字2バイト、日本語対応)。

特殊データ構造

配列

同一型のデータを連続して管理します。


arrBuffer : ARRAY[0..9] OF INT := [10, 20, 30, 40, 50, 60, 70, 80, 90, 100];

構造体 (STRUCT)

異なるデータ型をまとめて管理するユーザー定義型です。


TYPE ST_MotorParam :
STRUCT
    nID : INT;
    rSpeed : REAL;
    bEnable : BOOL;
END_STRUCT
END_TYPE

列挙型 (ENUM)

変数が取りうる値を名前で定義します。


TYPE E_State :
(
    eStop := 0,
    eRun,
    eError
);
END_TYPE

共用体 (UNION)

同じメモリ領域を異なるデータ型で共有します。型変換やビット操作に便利です。


TYPE U_DataConverter :
UNION
    nWordVal : WORD;
    byByteArr : ARRAY[0..1] OF BYTE;
END_UNION
END_TYPE

ポインタと参照

メモリのアドレスを扱うための機能です。

  • ADR: 変数のアドレスを取得します。
  • ^: ポインタが指すアドレスの中身(値)を参照します。

VAR
    pnPtr : POINTER TO INT;
    nSource : INT := 100;
    nDest : INT;
END_VAR

pnPtr := ADR(nSource); (* アドレス取得 *)
nDest := pnPtr^;        (* 値の参照 *)

タイマーとカウンター

標準機能ブロックを使用します。

  • TON: オン遅延タイマー。
  • TOF: オフ遅延タイマー。
  • TP: パルスタイマー。
  • CTU: アップカウンター。

(* TONの使用例 *)
fbTimer(IN := bStart, PT := T#5s, Q => bTimeOut, ET => tElapsedTime);

(* R_TRIG: 立ち上がりエッジ検出 *)
fbTrig(CLK := bInputSignal);
IF fbTrig.Q THEN
    (* 1スキャンのみ実行される処理 *)
END_IF;

タグ: CODESYS ST言語 PLC 構造化テキスト IEC 61131-3

7月15日 22:51 投稿