Pilz#Part07_FS_TwoHandControl

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

https://www.pilz.com/ja-JP

Reference Link

Pilz#Part06_Build A Ethernet/IP Adapter and connect with TwinCAT/Mitsubishi
Pilz#Part05_Resource Global Variables
Pilz#Part01_Let’s start with PSS4000 PSSu PLC!
Pilz#Part02_Your First PSS4000 PLC Program
Pilz#Part03_Your First PSS4000 Safety PLC Program
Pilz#Part04_ESTOP Application With FS_EmergencyStop

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

VariableData TypeDescription
SwitchTypeSAFESINT6: 2 N/O・2 N/C接点7: N/O接点のみ
EnableDeactivationSAFEBOOLTwo-Hand Operationは無効するOptionを使用するか、Default=False
InputNC1SAFEBOOLスイッチInput信号1、True=NC接点Close
InputNO1SAFEBOOLスイッチInput信号1、True=NO接点Close
InputNC2SAFEBOOLスイッチInput信号2、True=NC接点Close
InputNO2SAFEBOOLスイッチInput信号2、True=NO接点Close
DeactivateSAFEBOOLTrue=Two-Hand Operationを無効化し、Enable出力は常にFalseになります。Default=False

VAR_OUTPUT

VariableData TypeDescription
EnableSAFEBOOLFalse=Enableされてない ・Two Hand ボタンが操作されてない・操作が無効されたTrue=有効中
DiagButtonsReleasedSAFEBOOLTwo Hand Buttonの診断情報False=Two Hand Button操作にエラーあるTrue=Two Hand Button操作してない
DiagButtonTooLateSAFEBOOL同時操作の診断情報情報です。True=2つのPush Button信号は0.5s以上かかるか、片方しか入っていないか
DiagButtonMissingSAFEBOOLButton操作の診断情報です。False=2つのPush Buttonリリースされたあとに同時にTrue・FalseしてるTrue=2つのPush Buttonの中に1つだけがリリースされた 、同時にTrue・Falseしていない
DiagDeactivatedSAFEBOOL無効の診断情報です。False=Two-Hand Operationは無効してないTrue=Two-Hand Operationは無効してる
DiagInputNotValidSAFEBOOLInput信号の診断情報です。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は:

  1. FS Task、High Priority
  2. ST Task、High Priority
  3. FS Task、Meduim Priority
  4. ST Task、Meduim Priority
  5. FS Task、Low Priority
  6. 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

こちらから確認できます。

Footer_Basic

Please Support some devices for my blog

Amazon Gift List

Find ME

Twitter:@3threes2
Email:soup01threes*gmail.com (* to @)
YoutubeChannel:https://www.youtube.com/channel/UCQ3CHGAIXZAbeOC_9mjQiWQ

シェアする

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

フォローする