エラー処理
MELSEC Communication プラグインを使用するときは、基本的に PLC メモリの 2 つのフィールドが、エラーの存在を示すために使用されます。「gMV_ErrorCode」と「gMV_ErrorCause」です。デフォルトでは 0 に設定されており、エラーが発生しなかったことを示します。
プラグインが起動すると、「gMV_ErrorCode」フィールドはエラーがないことを示す値 1 に設定されます。エラーが発生すると、「gMV_ErrorCode」と「gMV_ErrorCause」の両方のフィールドが、エラー状態を反映するように更新されます。PLC は、「AcknowledgeError」コマンドを要求することによって、つまり、それぞれのコマンドコードに「gMV_ReqCommandCode」を設定することによって、エラーを確認する必要があります。使用可能なコマンドコードの詳細については、プラグインと PLC の間の通信を参照してください。
これに応えて、プラグインも同じコマンドコードに「gMV_AckCommandCode」を設定します。PLC が「gMV_ReqCommandCode」、「gMV_ErrorCode」、「gMV_ErrorCause」をリセットした後、プラグインも「gMV_AckCommandCode」を 0 にリセットします。このハンドシェイクメカニズムにより、PLC はエラーフィールドが更新されたことを認識します。
新しいエラーが「gMV_ErrorCode」と「gMV_ErrorCause」に表示されている間に別のエラーが発生しても、フィールドが新しいエラー情報で上書きされることはありません。代わりに、前のエラーが最初に処理されます。「gMV_AckCommandCode」が 0 にリセットされるとすぐに、2 番目のエラーがエラーフィールドに書き込まれます。「gMV_AckCommandCode」をリセットしても「gMV_ErrorCode」の値が変わらない場合は、同じエラーがもう一度発生していることを示します。その後、2 回目の「AcknowledgeError」コマンドを実行し、2 回目のエラーも確認する必要があります。その間にそれ以上のエラーが発生しなかった場合、「gMV_ErrorCode」フィールドの値は 1 にリセットされます。これは、すべてのエラーが確認されたことを示します。
MELSEC Communication プラグインはハートビートモードもサポートしており、PLC が MERLIC への接続を監視し、予期せず接続が失われても対処できるようになります。詳細については、「gMV_Heartbeat」セクションを参照してください。
gMV_ErrorCode
エラーが発生した場合、このフィールドには、エラーコードを表す数値の符号なし 32 ビット整数が入ります。エラーコードは、プラグイン開発 API が定めるエラー定義に従って、重大度、影響を受けるコンポーネント、およびエラーの性質に関する情報を提供します。
エラーの重大度は、エラーコードの最上位 4 ビットで表されます。以下の重要度を区別しています。
|
値 |
重大度 |
|---|---|
|
1 |
重大 |
|
2 |
エラー |
|
4 |
警告 |
エラーが発生した、影響を受けるコンポーネントは、下位の重要度を持つ次の 4 ビットで表されます。以下の表は、利用可能なコンポーネントを示しています。
|
値 |
影響を受けるコンポーネント |
|---|---|
|
1 |
ビジョンシステム (MERLIC) |
|
2 |
MVApp / レシピ |
|
4 |
プラグインホスト |
|
8 |
MELSEC Communication プラグイン |
最下位 8 ビットは、プラグイン開発 API の MV_CODE_* 定義に従って、エラーの性質を示します。定義は、通信プラグイン開発マニュアルの API ヘッダー mv_error_def.h の説明に記載されています。
たとえば、「gMV_ErrorCode」フィールドに 16 進数のエラーコード0x2139 が含まれる場合、それぞれのビットは、画像取得のエラー (0x39) が原因で、ビジョンシステム (0x0100) に、エラー (0x2000) が発生したことを示します。
gMV_ErrorCause
このフィールドは、どのコマンドがエラーの原因になったかを示します。したがって、「gMV_ReqCommandCode」および「gMV_AckCommandCode」フィールドで指定されたのと同じ数値を想定しています。使用可能なコマンドとそのコードの詳細については、プラグインと PLC の間の通信を参照してください。
また、たとえばカメラとの接続が切れた場合など、コマンドが原因ではない自然発生的なエラーが起きることもあります。その場合、「gMV_ErrorCause」は「NoCommand」を表す値 0 を取ります。同じ MELSEC Communication プラグインインスタンスでトリガーされたコマンドが原因のエラーと、自然発生的なエラーのみ処理されます。したがって、他のプラグインインスタンスから発行されたコマンドが原因のエラーは無視されます。
gMV_Heartbeat
このフィールドには、ハートビートモードに使用される変数が含まれます。MERLIC と PLC 間の接続が引き続き有効であるかどうかを示します。PLC によってフィールドを監視して接続を常にチェックすることができ、予期せず接続が失われても反応するように PLC を構成することもできます。
この変数は、符号なし 16 ビット整数の形式でカウンタを表します。このカウンタは、MERLIC が接続されている間、プラグインによって更新されます。これは、MERLIC RTE およびプラグインが実行されている場合に当てはまります。最初にカウンタは値 0 から始まります。これは、たとえばプラグインがまだ起動していないか停止しているために、MERLIC が接続されていないことを意味します。MERLIC を接続すると、指定したハートビート間隔で値がカウントアップされます。カウンタが WORD 値の制限に達すると、カウントが再開される前に 1 にリセットされます。
ネットワークの問題などにより MERLIC への接続が失われた場合、カウンタは更新されなくなります。PLC が予期せず接続が失われても検出して対処できるようにするには、「gMV_Heartbeat」フィールドを監視する必要があります。