LoginSignup
6
3

More than 3 years have passed since last update.

ST言語はなんでこんなに資料がないんだ

Last updated at Posted at 2021-03-04

ST言語を勉強したかったんだ

私的事情でST言語の勉強をしなければならず、Webや書籍を探していました。
がしかし、全然情報が少ないじゃないか!!!!

てなわけで、少しずつST言語についてまとめていきますの備忘録。

そもそもST言語って何?

ST言語って調べると全然出てきませんが、IEC61131-3と調べると出てきます。
ICE61131-3とは、

  • ラダーダイアグラム(LD)
  • ファンクションブロックダイアグラム(FBD)
  • ストラクチャードテキスト(ST)
  • インストラクションリスト(IL)
  • シーケンシャルファンクションチャート(SFC)

が含まれる制御関係の言語の総称(国際電気標準会議IECってところが決めたらしい)

それぞれ似ている者の、別に全部理解しなきゃいけないわけじゃないっぽい。
自分はとりあえず今後多く使用するであろうLDSTだけ勉強する予定。
(他も使う時が来たらまとめよう。。。)

image.png

ラダーってこんなやつ

image.png
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.c
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を簡単に覚えられそうだ。
最も、これを制御に組み込むとなると話は別なのだが。。。

次回はより制御寄りのまとめをしようと思う。

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3