#ST言語を勉強したかったんだ
私的事情でST言語の勉強をしなければならず、Webや書籍を探していました。
がしかし、全然情報が少ないじゃないか!!!!
てなわけで、少しずつST言語についてまとめていきますの備忘録。
#そもそもST言語って何?
ST言語って調べると全然出てきませんが、IEC61131-3と調べると出てきます。
ICE61131-3とは、
- ラダーダイアグラム(LD)
- ファンクションブロックダイアグラム(FBD)
- ストラクチャードテキスト(ST)
- インストラクションリスト(IL)
- シーケンシャルファンクションチャート(SFC)
が含まれる制御関係の言語の総称(国際電気標準会議IECってところが決めたらしい)
それぞれ似ている者の、別に全部理解しなきゃいけないわけじゃないっぽい。
自分はとりあえず今後多く使用するであろうLD
とST
だけ勉強する予定。
(他も使う時が来たらまとめよう。。。)
ラダーってこんなやつ
#ST言語は高級言語
ST言語はC言語に非常に似ている。
高級言語ってのは人間が使う言葉に近いやつのことをいうらしく、C
とかFORTRAN
もそいつらの仲間。
ベースはPASCAL
を基に設計されているらしい。
ST言語を使う利点は一目瞭然で、言語で書けることだ。
言語で書けると複雑な条件分岐やら多項式の処理やらが簡単にできる。
LDではそううまくはいかず、多項式を書こうと思うと二項に分解したりそれぞれの演算結果を
一時的にメモリに保存したりと色々やっかいなことが生じる。
逆を返せばLDのいいところは視覚的に見れることだ。
#C言語に直せばわかりやすのでは?
ということで、相関表を作ってみた。もっとあると思うが、全部はかけないので一部基礎的な部分をまとめた。
C | ST |
---|---|
= | := |
- | - |
+ | + |
* | * |
/ | / |
% | MOD |
& | AND |
| | OR |
^ | EXOR |
~ | NOT |
++ | |
-- |
あぁ、ほぼ一緒だ。。。
ただ、インクリメント・ディクリメントはSTにはないみたい。
#じゃあ何が違うって言うんだ!
違いはあります。どっちかというとPythonの文法に近そう。
特にインデントでブロックを表すのはPythonと同じ。
###IF文
Cでは
if(条件文){
<実行式>
}
STでは
IF <条件> THEN
<実行式>
END_IF
###CASE文
CではCASE文はなく、Switchとなり
switch(式){
case 定数1:
式が定数1の時に実行する処理;
...
break;
case 定数2:
式が定数2の時に実行する処理;
...
break;
default:
どの定数にも一致しない時に実行する処理;
...
}
STでは
CASE 整数式or整数値 OF
<整数選択値1> : <実行式>
<整数選択値1> : <実行式>
<整数選択値1> : <実行式>
ELSE
<上記以外の時の実行式>
END_CASE;
となる。これはPythonのほうが文法的に近いかも(PythonのCASE文は調べてみて)
###FOR文
Cではfor(条件文){内容}
となり、
STでは
FOR ~ TO ~ BY
<実行式>
END_FOR
になる。これもPythonのほうが近い。
また、Cでいうwhile文に近いものもあり、
REPEAT
<実行式>;
UNTIL
<条件式(BOOL)>
END_REPEAT;
という書き方もできる。
#まとめ
とりあえず大まかな部分をまとめてみたが、どうやらC言語、もしくはPythonを知っている人はSTを簡単に覚えられそうだ。
最も、これを制御に組み込むとなると話は別なのだが。。。
次回はより制御寄りのまとめをしようと思う。