今回はIEC Timerを使うことになりますので、IEC Timerについて簡単は紹介はこっちらの記事にご覧になってください。↓
みんなさんはTimerとPointerは一緒に使うことあまり想像しないというか、一般的ではないと思いますのね?S7-1500では少しコーティングをすれば簡単にできます。なぜかというと、まずはIEC Timer1個呼び出すには結構MEMORYが使っちゃいますよ〜もし1つのBLOCKの中にIEC Timerが50個があれば50個全部PROGRAMの中に書くと膨大なMemoryが消費されますのでCPUももっと大きなやつをしないと行けないですし、お金の無駄です。だからここでちょっとしたトリックしてMemoryをそんなに使わず、POINTERでIEC Timerを呼び出ししてみます。
おすすめのProgram LanguageはLAD+STLです。
Step#1
まずは新しいFBを作成してください(FCもできますが、別のDBを作らないといけませんのでちょっとめんどくさいです)。
Step#2
Staticの所に改めて以下のVariablesを作ります:
TE[0..10] of TON_TIMEーTimerの配列
TIN[0..10] of BoolーTimer Activeの配列
TPT[0..10] of TimeーTimerの設定時間の配列
TQ[0..10] of BoolーTimer Outputの配列
TET[0..10] of TimeーTimer の残り時間の配列
あと、TempのところにJというINTの変数を追加します。
Constantの所にEND1、INTで10を設定します。
Step#3
下のcodeを貼り付けてください;)
[php]
L 0
T #J //init the index
SN1: NOP 1 //++
CALL #TE[#J] // call the Timer
TIME
IN:=#TIN[#J]
PT:=#TPT[#J]
Q:=#TQ[J]
ET:=#TE[J]
L #J
L END1
<I
JCN EN1 //if >10, break the loop and jump to EN1
TAK
L 1 //else, +1 of index
+I
T #J
JU SN1 //Loop again
EN1: NOP 1
[/php]
それだけです。もちろんLADでも同じなこともできますがSTLのほうがわかりやすいと思いますーみんなもやってみてください。
またねー