テクセル

ST言語のメモ


三菱電機(株) PLC iQ-R におけるST言語のメモです。

□ 変数のデータ型

変数のデータ型です。

データ型 内容 範囲
BOOL ビット true, false
INT ワード(符号付き) 16ビット -32768~32767
WORD ワード(符号なし) 16ビット 0~65535
DINT ダブルワード(符号付き) 32ビット -2147483648~2147483647
DWORD ダブルワード(符号なし) 32ビット 0~4294967295
REAL 単精度実数 32ビット -2128 ~ -2-126,0,2-126 ~ 2128
LREAL 倍精度実数 62ビット -21024 ~ -2-1022,0,2-1022 ~ 21024

□ 演算子

演算子及び優先順位です。

演算子 内容 優先順位
() 丸括弧式 1
ファンクション() ファンクション呼び出し式 2
- 符号の反転 3
NOT ビット型補数 3
** べき乗 4
* 乗算 5
/ 除算 5
MOD 剰余算 5
+ 加算 6
- 減算 6
<, >, <=, >= 比較 7
= 一致 8
<> 不一致 8
&, AND 論理積 9
XOR 排他的論理和 10
OR 論理和 11

代入文

代入文は、 := (コロンイコール) を使用します。

文の終端

文の終端は、 ; (セミコロン)を付けます。

コメント

単一行コメントは、 //、複数行コメントは、 (* *), /* */ となります。


ia1 := 23;      // 符号付きワードに代入
         

以下のプログラム例は、インラインST で確認しています。また、インラインSTボックスのラダーソフトによる実行条件は省略しています。

□ 演算例

以下の演算例で使用するラベル名及びデータ型です。GX Works3 のラベルで登録します。

ラベル名 データ型
bBool1 BOOL
bBool2 BOOL
ia1 INT
ia2 INT
iwa1 WORD
iwa2 WORD
ida1 DINT
ida2 DINT
idwa1 DWORD
idwa2 DWORD

1) bool


bBool1 := TRUE;         // bBool1 on, FALSE で off
bBool2 := bBool1;       // ビットの代入

bBool1 := 1;            // 数字 1 (TRUE) または 0 (FALSE) で代入

bBool2 := NOT bBool1;   //bBool1 の補数(反転)代入

bBool2 := bBool1 = FALSE;  // bBool1 = False の時 on
         

2) INT,WORD


// INT 符号付き
ia1 := -2;
ia2 := ia1 + 10;        // => 8

ia1 := -2;
ia2 := ia1 * (-2);      // => 4

ia1 := 9;
ia2 := ia1 / 2;         // => 4

ia1 := 9;
ia2 := ia1 MOD 2;       // => 1

// WORD 符号なし
iwa1 := 50000;
iwa1 := iwa1 + 10;      // => 50010

// -------
INC(TRUE, ia1);         //INT インクリメント +1
DEC(TRUE, ia2);         //INT デクリメント -1

INC_U(TRUE, iwa1);      //WORD インクリメント +1
DEC_U(TRUE, iwa2);      //WORD デクリメント -1

iwa2 := INT_TO_WORD(ia1);   // INT -> WORD 変換
ia2 := WORD_TO_INT(iwa2);   // WORD -> INT 変換

// 論理演算 AND, OR, XOR  INT, WORD で可
ia1 := H00FF;
WAND(TRUE, ia1, HF, ia2);    // ia2 => 15(HF)

ia1 := HF;
WOR(TRUE, ia1, HF0, ia2);    // ia2 => 255(HF)

ia1 := HF;
WXOR(TRUE, ia1, H5, ia2);    // ia2 => 10(HA)

// 論理演算 AND, OR, XOR  WORDで可 INTでは不可
iwa1 := H00FF;
iwa2 := iwa1 AND H000F; // => 15(HF)

iwa1 := HF;
iwa2 := iwa1 OR HF0;    // => 255(HFF)

iwa1 := HF;
iwa2 := iwa1 XOR H5;    // => 10(HA)
         

3) DINT,DWORD


// DINT 符号付き
ida1 := 3000000;
ida2 := ida1 + 100;     // => 3000100

ida1 := 3000000;
ida2 := ida1 - 3000001; // => -1

ida1 := 3000000;
ida2 := ida1 * 2;       // => 6000000

ida1 := 1000000;
ida2 := ida1 / 3;       // => 333333

ida1 := 1000000;
ida2 := ida1 MOD 3;     // => 1

// DWORD 符号なし
idwa1 := 3000000000;
idwa2 := idwa1 + 2;     // => 3000000002;

// -------
DINC(TRUE, ida1);      // DINT インクリメント +1
DDEC(TRUE, ida1);      // DINT デクリメント -1

DINC_U(TRUE, idwa1);   // DWORD インクリメント +1
DDEC_U(TRUE, idwa1);   // DWORD デクリメント -1

idwa1 := DINT_TO_DWORD(ida1);     // DINT -> DWORD 変換
ida1 := DWORD_TO_DINT(idwa1);     // DWORD -> DINT 変換

ia1 := DINT_TO_INT(ida1);         // DINT -> INT 変換 -32768~32767 の範囲外ではエラー
ida1 := INT_TO_DINT(ia1);         // INT -> DINT 変換

iwa1 := DWORD_TO_WORD(idwa1);     // DWORD -> WORD 変換 上位16ビットは、捨てられます
idwa1 := WORD_TO_DWORD(iwa1);     // WORD -> DWORD 変換
         

4) デバイスを使用

デバイスを使用する場合は、デバイスにデータ型を指定します。


D200 := 256;            // INT 何も指定しないと INT 型
D202:U := 40000;        // WORD 指定
D204:D := H20000;       // DINT 指定 D204,D205
D206:UD := HAAAAFFFF;   // DWORD 指定 D206,D207

// ラベルとデバイスを混在
ida1 := 6; D208:D := 25;
D210:D := 5 * ida1 + D208:D;      // => 55
         
計測制御監視システム