Trap (システム状態トリガー)
割込み、および割込み発生時の処理の定義を行います。
Trap命令を使用すると、イベント発生により、ラベルにジャンプする、または、ファンクションを呼び出すことができます。Trap命令には2つのタイプがあります。
- ユーザーの定義する入力状態をトリガーにする4つのTrap
- システム状態をトリガーにする7つのTrap
本項目ではシステム状態トリガーのTrapを説明します。
書式
Trap {Emergency | Error | Pause | SGOpen | SGClose | Abort | Finish } Xqt ファンクション名
Trap {Emergency | Error | Pause | SGOpen | SGClose | Abort | Finish }
パラメーター
- Emergency
- 非常停止が発生したとき、指定のファンクションが実行されます。
- Error
- エラーが発生したとき、指定のファンクションが実行されます。
- Pause
- 一時停止状態に入ったとき、指定のファンクションが実行されます。
- SGOpen
- 安全扉回路が開いたとき、指定のファンクションが実行されます。
- SGClose
- 安全扉回路が閉じたとき、指定のファンクションが実行されます。
- Abort
- ユーザー、またはシステムによってすべてのタスク (バックグラウンドタスクをのぞく)が停止したとき (Abort Allに相当する命令が実行されたときや、中断ボタンが押されたとき)、指定のファンクションが実行されます。
- Finish
- すべてのタスク (バックグラウンドタスクをのぞく)が終了したとき、指定のファンクションが実行されます。Trap Abortが実行される条件では実行されません。
- ファンクション名
- システム状態が成立したときXqtされる割込み処理タスクのファンクションです。引数のあるファンクションを指定することはできません。ただし、パラメーターに"Error"が指定されている場合は、3つの引数を指定できます。
注意
EPSON RC+ 4.x までの Trap *** Callの機能は、Epson RC+ 8.0ではTrap *** Xqtに置き換えられています。
解説
システム状態が成立したとき指定された割込み処理タスクを実行します。
割込み処理タスクを実行しても、そのTrap 設定はクリアされません。
Trap設定をクリアするためには、ファンクション名を省略してTrap 命令を実行します。
[例] "Trap Emergency" は、 "Trap Emergency"をクリアします。
通常タスクがすべて終了してコントローラーがReady状態になるとすべてのTrap設定はクリアされます。
割込み処理タスクからXqtでさらにタスクを実行することはできません。
注意
Forcedフラグ
On, OffなどのI/O出力命令に、Forcedフラグを指定することで、非常停止中, 安全扉開時, ティーチモード中, エラー発生時にもI/O出力のオンオフが可能になります。
Forcedフラグを指定するI/O出力には、アクチュエーターのような機械的動作を伴う外部機器を絶対に接続しないでください。非常停止中, 安全扉開時, ティーチモード中, エラー発生時に外部機器が動作することになり大変危険です。
Forcedフラグを指定するI/O出力は、状態表示LEDのような機械的動作をともなわない外部機器が接続されることを想定しています。
Emergency を指定したとき
非常停止が発生したとき、指定のファンクションがNoEmgAbortタスク属性で実行されます。
割り込み処理タスクから実行可能なコマンドはNoEmgAbortタスクが実行可能なコマンドです。
非常停止の割り込み処理が完了したら速やかにタスクは終了するようにしてください。タスクが終了しないとコントローラーは、Ready状態になりません。割り込み処理タスクからResetコマンドを実行し、自動的に非常停止を解除することはできません。
割り込み処理タスクからI/Oのオンオフをタスクが行う場合は、[コントローラー設定]-[環境設定]-[非常停止で出力ポートをOFF]ボックスのチェックをはずしてください。この設定がチェックされたままの場合、コントローラーによるI/OのOffとタスクによるI/OのOnのどちらが先に実行されるか保障されません。
Error を指定したとき
エラーが発生したとき、指定のファンクションがNoEmgAbortタスク属性で実行されます。
割り込み処理タスクから実行可能なコマンドはNoEmgAbortタスクが実行可能なコマンドです。
エラーの割り込み処理が完了したら速やかにタスクは終了するようにしてください。タスクが終了しないとコントローラーは、Ready状態になりません。
ユーザファンクションに3つの省略可能なパラメーター (エラー番号, ロボット番号, 関節番号)を指定できます。これらのパラメーターを使いたいときはトラップファンクションに、3つのbyval整数パラメーターをつけてください。
モーション系のエラーが発生した場合、エラー番号, ロボット番号, 関節番号が設定されます。
モーション系以外のエラーが発生した場合は、ロボット番号, 関節番号には"0"が設定されます。
Pause を指定したとき
一時停止状態に入ったとき、指定のファンクションがNoPauseタスク属性で実行されます。
SGOpen を指定したとき
安全扉回路が開いたとき、指定のファンクションがNoPauseタスク属性で実行されます。
SGClose を指定したとき
安全扉回路が閉じてラッチされたとき、指定のファンクションがNoPauseタスク属性で実行されます。
割り込み処理タスクからCont命令を実行した場合はエラーとなります。
Abortを指定したとき
ユーザー、またはシステムによってすべてのタスク (バックグラウンドタスクをのぞく)が停止したとき (Abort Allに相当する命令が実行されたときや中断ボタンが押されたとき)、指定のファンクションがNoPauseタスク属性で実行されます。
中断の割り込み処理が完了したら速やかにタスクは終了するようにしてください。タスクが終了しないとコントローラーは、Ready状態になりません。
Trap Abort で実行されるタスクにおいてエラーが発生してもTrap Errorの処理タスクは実行されません。
Shutdown命令やRestart 命令でタスクが中断された場合は、Trap Abortの処理タスクもTrap Finishの処理タスクも実行されません。
Finishを指定したとき
すべてのタスク (バックグラウンドタスクをのぞく)が終了したとき、指定のファンクションがNoPauseタスク属性で実行されます。Trap Abortの処理タスクが実行される条件では実行されません。
終了の割り込み処理が完了したら速やかにタスクは終了するようにしてください。タスクが終了しないとコントローラーは、Ready状態になりません。
参照
Era, Erl, Err, Ert, ErrMsg$, OnErr, Reset, Restart, SysErr, Xqt
Trap使用例
Function main
:
Trap Error Xqt suberr
:
Fend
Function suberr
Print "Error =", Err
On ErrorSwitch
Fend
Function main
Trap Error Xqt trapError
FEnd
Function trapError(errNum As Integer, robotNum As Integer, jointNum As Integer)
Print "error number = ", errNum
Print "robot number = ", robotNum
Print "joint number = ", jointNum
If Ert = 0 Then
Print "system error"
Else
Print "task error"
Print "function = ", Erf$(Ert)
Print "line number = ", Erl(Ert)
EndIf
FEnd