HTP Junction BOX PLCとTaskscriptのTutorial第3話です。今回はDelay Timer・ローカル変数などの基本部品を使用し1秒ごとに出力をチカで変換させる簡単プログラムを作成します。
さ、はじめよう!
Reference Link
Flow
こちらは今回のTutorialで実装するFlowです。各Stepの間に1秒のDelayがあり、該当するStepによって出力をOn/OFFを制御します。
Implementation
こちらのLinkで前回のTutorialのプロジェクトをDownloadできます。今回の記事ではこのプロジェクトから作成していきます。
https://github.com/soup01Threes/Taskscript/blob/main/char02.hgr
先程描いたFlowと同様、制御はSubSeq Task Modelから実装します。
Subseqを選択し>右クリック>Open task Editorします。
iStep0
最初はiStep0(初期化Step)を構築していきます。
Edit Step Name
InitStep名を修正します。
Flowのように、iStep0という名前に変更します。
iStep0で実行する制御コードを作成するため、iStep0を選択し>右クリック>Open Step Editorします。
iStep0内部コードの編集画面に変わります。
Action
iStep0ではPLCすべての出力をリセットするようにします。
先程のStep EditorからBit Value部品を選び、iStep0に追加します。
Bit Value部品が追加されました。
Bit Value部品をダブルクリックすると、ValueからFalseやTrueを選択できます。Trueに選択されると、そのBit Value部品が定数Trueになっています。
今回はValueをFalseに設定します。
Done!本来Bit Value部品が”True”から”False”に変わりました。
次はFalse定数のBit Value部品をo_ch1に繋がることによって、o_ch1をFalseにリセットすることができます。
下図のような操作です。
Done!
先程の操作でo_ch1,IO_O2からIO_O10をFalseのBit Value部品と接続しましょう。
つまり、iStep0はすべての出力をリセットすることになります。
Bit Value?
Bit Valueは実は他の変数などに新しい値を渡すためにある部品です。Taskscriptは3種類のValue部品が提供されています。
- Boolean
- TrueやFalse
- Numeric
- 設定できる範囲は-32768 to +32767で
- Little-Endian Format
- Hex Formatにも設定可能で、例えば0x1234を設定したいなら0xから設定値を入力すればOkです。(0x1234=4660Dec)
- String
- 文字列
Add Bit Local Keep
今度はSubSeq内にローカル変数を定義します。Taskscriptには2種類のローカル変数を定義でき、それは次の周期まで演算結果を保持するBit Local Keep部品と演算結果をクリアするBit Local Temp部品です。
Bit Local Keep部品が追加されました。
Bit Local Keep部品を追加するだけではまだプログラム内で使用できませんので、部品をダブルクリックして、Variable Nameを設定し、もしArrayに設定したいのであれば、Array SizeのFieldからも変更してください。
Bit Local Keep部品Local_k0が定義されました。
最初にも伝えましたが、この部品はローカル変数なので、他のTask Modelでは使用できません。確認するためTask mainを開いてみます。
Main Taskでは先程定義したLocal_k0のローカル変数が表示されていないのです。なので、ローカル変数のScopeは自分のTaskのみです。
先程の同じ操作で合計10つのローカル変数を追加します。
iStep1
次はiStep1を作成します。
右にあるToolbarからStep部品を追加します。
Done!ST_1というStep部品が追加されました。
ST_1をiStep1という名前に変更します。
Create Step Flow
今度はiStep0からiStep1に移行する制御を定義します。
iStep0をMouse右クリックし>iStep1の上方向にDropすれば、iStep0は条件を揃えてiStep1に移行するようになります。
下図のような操作です。
Done!
Flow Condition
iStep0からiStep1に移行するために1秒のDelayがあります。つまりiStep0>1秒待ち>1秒の待ちの監視FlagがTrueになり>iStep1に移行するような流れです。
これからまず監視Flagを作成します。
いまiStep0からiStep1の移行条件がTrueで、つまりiStep0が無条件でiStep1に移行することになります。
True文字をダブルクリックするとTransition ConditionのFieldを変更すれば、条件監視のStep移行Flowを作成できるようになります。
今回の記事ではLocal_k0を使用します。
なので、Transition ConditionのFieldにLocal_k0を直接入力し、Okで設定を保存します。
Done!
Add Delay
次はiStep0からiStep1に移行するときの1秒Delayを作成します。
右のToolbarからBit Valueを追加します。
Bit Value部品が追加されました。
次は右のToolbarからDelay部品を追加します。
Done!Delay部品が追加されました。Delay部品の1という数字はいま1msのDelayを設定したことを示しています。
Delay部品をダブルクリックすると部品の詳細設定を行います。
Delay Value(ms)を1000に設定することによって1sのDelayに設定できます。
Delay TypeはOn(Delay On)のままでOkです。
Done!
次はTrueのBit Value部品をDelayの左(入力)に接続します。
Done!
次はDelayの右側(出力)をLocal_k0と繋がります。
Done!
What is Delay?
Delay OperatorsはいわゆるPLCでよく使われてるTimerに近い機能をもっています。Delay Operatorが設定された時間が経過すると、TimerはDoneに遷移してカウントを停止し、Done出力はtrueになります。 逆に、Enableがfalseになった場合、タイマーの状態はリセットされ、Done出力はfalseになります。
今回使用する定数Delay Opeatorは定数のミリ秒単位で、設定の最大値は1.6*107ミリ秒であり、つまり180日を超えるDelayを指定することができる。
TaskScriptのTimerでは2種類のDelay Opeatorを設定できます。
- On
- Delay OpeatorがTrueを出力するには、入力変数が指定された設定値を超え、そして常にTrueに出力し続けます。
- 入力変数がFalseになるとすぐに出力もFalseになります。
- Off
- Delay Opeatoの出力は、入力変数が True になるとすぐに True になり、入力変数が False になるか、または入力変数が指定された設定時間を超えてもまだ True のままであれば 、出力はFalse になります。
Arrange the Line
Delay Opeatorの出力はLocal_k0と接続しましたが、Lineの繋がり方は少し雑で、制御が複雑になると見づらくなります。Taskscriptは制御Flowを整理整頓する機能が揃えております。まずLineを選択し>右クリック>Add Pointします。
Line起点と終点の間にもう1つのPointが追加されました。
このPointをMouseからClick and Dropすれば、Lineの配置を自由に設定できます。
ManualでLineの配置を整理できますが、Taskscriptには自動配置という方法もあります。
Lineを右クリック>Edit Path>HVHVHVH Pathをクリックします。
下図のようにLineが自動的に配置されます!
Path?Point?
TaskScript StudioのLineでは以下のように自由設定できます。
- HV(最初に水平、次に垂直)
- VH(最初に垂直、次に水平)
- HVH(最初に水平、次に垂直、次に再び水平)
- VHV(最初に垂直、次に水平、次に再び垂直)
などの自由配置Optionsが用意されています。
iStep1’s Action
iStep1にはo_ch1出力をTrueにする制御があります。
iStep1を右クリック>Open Step Editorします。
Step Flow
まずiStep1’からiStep2に移行する条件とTimerを設定します。
下記のようにDelay OpeatorをLocal_k1と繋がりましょう。
Done!
Action
iStep1が有効の間にo_ch1を出力するようにします。
TrueのBit Value部品を追加しo_ch1と繋がりましょう。
Done!
iStep2
他のStepに似ている動作なので、ここで詳しく説明しません。
iStep2はo_ch1・IO_O2をTrueにします。
iStep3
他のStepに似ている動作なので、ここで詳しく説明しません。
iStep3はo_ch1・IO_O2・IO_O3をTrueにします。
iStep4
他のStepに似ている動作なので、ここで詳しく説明しません。
iStep4はo_ch1・IO_O2・IO_O3・IO_O4をTrueにします。
iStep5
他のStepに似ている動作なので、ここで詳しく説明しません。
iStep5はo_ch1・IO_O2・IO_O3・IO_O4・IO_O5をTrueにします。
iStep6
他のStepに似ている動作なので、ここで詳しく説明しません。
iStep6はo_ch1・IO_O2・IO_O3・IO_O4・IO_O5・IO_O6をTrueにします。
iStep7
他のStepに似ている動作なので、ここで詳しく説明しません。
iStep7はo_ch1・IO_O2・IO_O3・IO_O4・IO_O5をTrueにします。
iStep8
他のStepに似ている動作なので、ここで詳しく説明しません。
iStep8はo_ch1・o_ch1・IO_O2・IO_O3をTrueにします。
iStep9
他のStepに似ている動作なので、ここで詳しく説明しません。
iStep9はo_ch1・IO_O2・IO_O3・IO_O4・IO_O5・IO_O6・IO_O7をTrueにします。
Finally Flow
こちらは最後に作成されたFlowです。
Group
変数を管理しやすくするためにGroup機能を使用します。
右ToolbarからGroupを追加しましょう。
Done!
Textual Annotation
Textual Annotatio部品を使用しプログラムにCommentを追加しましょう。
Text Fieldにプログラムの説明を入力しましょう。
Done!
End
これは今回記事で作成したFlowです。
Result
こちらのLinkから実際の動作を確認しましょう。
Download
今回のプロジェクトを下記のGithub LinkからDownloadできます。
https://github.com/soup01Threes/Taskscript/blob/main/char03.hgr