Pilz PSS4000 紹介の第7話になりました。前回はPSS4000 CPUとBeckhoff TwinCAT・三菱RJ71EIP91とEIP通信の設定方法を説明しました。今回はFS_TwoHandControlのFunction blockを紹介したいと思います。FS_TwoHandControlは工作機械で両手同時にButtonを押さないと機械が起動できないような、安全対策でよく使われています。
PilzのCPUはその操作にFS_TwoHandControlというFunction blockを提供しています。
よろしくお願いします。
Thanks!
この記事が出来上がるのはPilz Japanさまから機材を貸してくださったおかけです。誠にありがとうございます。
PILZ
PILZは安全およびオートメーション技術のソリューションでトータルソリューションサプライヤとしてのFA現場を支え、人の安全だけではなく、機械、および環境の安全を保証し、機械や設備をいかに安全に稼働させます。ピルツは全世界に42の現地法人や支社を設置し、包装、自動車産業、ロボットアプリケーション、さらに風力発電、鉄道技術など様々な分野で活躍しています。
Office:
ピルツジャパン株式会社
〒222-0033
横浜市港北区新横浜3-17-5
いちご新横浜ビル 4階
HP
Reference Link
Function Block
このFunction blockを使用することにより、Two-Hand Operationを実装することができます。FS_TwoHandControlは2つの入力が0.5s内同時に信号がTrueになったか、Check行います。EN 574からはその2つのPush Buttonは 2つNO接点と2つのNC接点を同時に監視し、チャタリングなどの対策を取る必要があります。
VAR_INPUT
Variable | Data Type | Description |
SwitchType | SAFESINT | 6: 2 N/O・2 N/C接点7: N/O接点のみ |
EnableDeactivation | SAFEBOOL | Two-Hand Operationは無効するOptionを使用するか、Default=False |
InputNC1 | SAFEBOOL | スイッチInput信号1、True=NC接点Close |
InputNO1 | SAFEBOOL | スイッチInput信号1、True=NO接点Close |
InputNC2 | SAFEBOOL | スイッチInput信号2、True=NC接点Close |
InputNO2 | SAFEBOOL | スイッチInput信号2、True=NO接点Close |
Deactivate | SAFEBOOL | True=Two-Hand Operationを無効化し、Enable出力は常にFalseになります。Default=False |
VAR_OUTPUT
Variable | Data Type | Description |
Enable | SAFEBOOL | False=Enableされてない ・Two Hand ボタンが操作されてない・操作が無効されたTrue=有効中 |
DiagButtonsReleased | SAFEBOOL | Two Hand Buttonの診断情報False=Two Hand Button操作にエラーあるTrue=Two Hand Button操作してない |
DiagButtonTooLate | SAFEBOOL | 同時操作の診断情報情報です。True=2つのPush Button信号は0.5s以上かかるか、片方しか入っていないか |
DiagButtonMissing | SAFEBOOL | Button操作の診断情報です。False=2つのPush Buttonリリースされたあとに同時にTrue・FalseしてるTrue=2つのPush Buttonの中に1つだけがリリースされた 、同時にTrue・Falseしていない |
DiagDeactivated | SAFEBOOL | 無効の診断情報です。False=Two-Hand Operationは無効してないTrue=Two-Hand Operationは無効してる |
DiagInputNotValid | SAFEBOOL | Input信号の診断情報です。False=InputNO1/InputNO2・InputNC1/InputNC2は正常 |
Flow Chart
Task?
TaskというのはRuntimeにあるプログラムの実行優先順位・Cycle Timeを定義する大事なプロパティです。複数のプログラムを同じTaskに割り付けることができます。
PilzのCPUでは最大Resourceの中に9つのTasksを構築でき、実行の順番などは設定から変更可能です。
Properties
Name
つまりTaskの名前ですね。
Cycle Time[ms]
Periodic Task専用のパラメータで、そのCycle Timeは該当するTaskの実行周期を指定します。たとえPeriodic Taskでも優先順位の設定により、実行順番が変わります。
- ST_Sourceの設定範囲は:2 ms … 2 000 000 ms
- FS_Sourceの設定範囲は:6 ms … 10 000 ms
以下の例ですが、Task_1Cycle Timeを20msに設定したとしましょう。Task_1その20ms内で実行完了するイメージになります。
Type
Periodic TaskのCheckboxを入れると該当するTaskは”Cycle time[ms]”に設定した時間で固定Cycle Timeに実行します。
注意するのは、そのTaskがCycle Time内で実行完了できなかった場合、CPUのOperation State(状態)は”Resource in Run Condition with task error”に変わります。
Priority
Taskでは優先順位から実行の順番を設定できます。PriorityがHighのFS Sourceは高い順位であることを覚えておきましょう。もしFS・ST Resourceにも同じのCPUで実行してる場合は、実行Orderは:
- FS Task、High Priority
- ST Task、High Priority
- FS Task、Meduim Priority
- ST Task、Meduim Priority
- FS Task、Low Priority
- ST Task、Low Priority
例えば下記のExampleではTask_1とTask_2があります。
Task_1は40ms、High Priorityです。
Task_2は20ms、Low Priorityです。
Task_1が高い優先順位を持つのでTask_2を実行できるのはTask_1が完了してからです。ですがTask_2のCycle TimeがTask_1より短いですね。Task_2が3回目を実行しようとおもったらTask_1が先に実行され(3)、結果的にTask_2(4)が実行できませんでした。
Periodic Taskを使用するには実際に細かい設定が必要なので、例えば:
- Task_2をTask_1より高い優先順位を設定する
- Task_2のCycle TimeをTask_1と同じくか、それより大きか
Execution Order
もし複数のプログラムが同じTaskで実行すると設定した場合、実行Orderはプログラムの名前から変わります。
Taskが実行されたとき、Process Image(I-PIとO-PI)とResource Global variablesから該当するプログラムに必要なデータをCopyします。
Taskが実行完了されたとき、プログラムの実行結果をO-PIとResource Global Variablesに上書きします。
その順番だからこそ、Taskが実行中にデータを上書きすることがありません。すべではTaskが実行完了してからやります。
Task interruption
高い優先順位のTaskの実行が中断されることもあります。(例えばシステム関数が実行するとき)
Wiring
こちらはボタンの配線になります。EnableがTrueになると2つのButtonのLampも同時にOnになります。
Implementation
POU_1
こちらは実行するプログラムです。
VAR
変数エリアで必要な変数を定義します。
Program
次はMainプログラムです。
Network0
PaletteにはFS_TwoHandControlのFunction blockがあります。
そのままNetwork0にひっばりましょう。
それだけでFS_TwoHandControl Function blockが追加されました。
次はVARエリアで定義したFunction block Instance FS_TwoHandControlを入力します。
今回自分持っているPush ButtonがNO接点のみで、SwitchTypeはUSINT#7にします。
そして無効化のOptionを不使用のため、EnableDeactivationInputをFalseします。
Network1-3
FS_TwoHandControlの出力をVARエリアの内部変数に出力します。
Network4-6
FS_TwoHandControlの出力をVARエリアの内部変数に出力します。
Network7
FS_TwoHandControlのEnableをPush ButtonのLampと連動したいのでAT %Q*のqEnableに出力します。
Mapping
Mappingを行います。Project>I/O Mappingをクリックしてください。
POU_1を展開するとFS_TwoHandControlに実IOとつながる変数がありましたね。
InputNO1/InputNO2をI0/I1、qEnableはO2を繋がりましょう。
Resource Assignment
次はPOU_1を実行するよう、Resource Assignment設定を行います。
POU_1をTask_1にひっばります。
Task_1の設定もアプリケーションに合わせて設定してください。
Result
こちらから確認できます。