Siemens#STLで数値を比較してみよう

Siemensでは一応STL、SCL、LADとFBD4つの言語でプログラムを作ることができますが、LADにはあまりにも功能が弱くて私の場合は大体複雑なロジック他にはあまり使わないんですね。演算はSCLを組んで、POINTERはSTLでINDEXをアクセスするって感じですね。(ですがSiemensのLADは可愛い処がありまして命令とか自分の好きなように、見やすいように並ぶことができる、これは結構気になるところ)話に戻りますが、今回はSTLを使って数値を比較するの簡単なプログラムをメモしたいと思います。

まずは”TAK”という命令を紹介したいと思います。TAKはACCU1の数値とACCU2の数値を交換するの機能です。

110

これはTAKを使ってた簡単なサンプル例です。
STANDARDはACCU1のことで、最初からみてみましょう。


L DB2.DBW380    //ACCU1はいまDB2.DBW380の値(50)が入ってます。
T #TEMP1[0]   //TEMP1[0]へ転送します。
L DBW384      //ACCU1はいまDBW384の値(100)が入ってます、ACCU2は(50)になります。
T #TEMP1[1]   //TEMP1[1]へ転送します。
L DBW382        //ACCU1がいまDBW382の値(70)が入っています、ACCU2は(100)になります
T #TEMP1[2]     //TEMP1[2]へ転送します。

L 2             //ACCU1がいま2が入っています。ACCU2は(70)になります。
T #TEMP0        //TEMP0へ転送します。
L 12        //ACCU1がいま12が入ってます。ACCU2は(2)になります。
TAK             //ACCU1とACCU2を交換します。
//つまり、ACC1はいま2になり、ACCU2はいま12になりました。

上のcodeとコメントみて大体わかりましたか?毎回新しい数値が入ってくると元のACCU1の値がACCU2へ転送し、その新しい数値がACCU1に転送することです。(CPUによって4つのACCUの場合もありますが、ここでは説明しません)。もし同じの値が頻繁に使うなら、TAKを使うことによって毎回も数字をACCU1へ転送しなくても済むことになります。デメリットはプログラムちょっとわかりにくいこともあり、コーティングすることも頭はっきりしないと間違うことも多いですけどね。まぁまぁ、慣れです、慣れです。

//IF INPUT=50
L 50
L #INPUT
==I
JC SEQ1

//IF INPUT=51
TAK
L 51
==I
JC SEQ2

//IF INPUT=52
TAK
L 52
==I
JC SEQ3

//IF INPUT=53
TAK
L 53
==I
JC SEQ4
JU PEND
SEQ1:S M10.0
JU PEND
SEQ2:S M10.1
JU PEND
SEQ3:S M10.3
JU PEND
SEQ4: S M10.4
JU PEND
PEND:NOP 1

これはSTLを使って数値を比較するサンプルですね。TAKを使って何回もACCU1とACCU2を交換し新しい比較したい値をLして比較するだけで済むのです。
もしINPUT=50、M10.0=オン。
もしINPUT=51、M10.1=オン。
もしINPUT=52、M10.2=オン。
もしINPUT=53、M10.3=オン。

最後は一言いいたいですがプログラムって絶対正しいなんでありません、賢い方法とかあまり賢くない方法とか色々も言われるかもしれないけど、結果出ればなんでも大丈夫です(笑)。

それじゃ、またねー

シェアする

  • このエントリーをはてなブックマークに追加

フォローする