CANopen診断
この章では、 CANopenプロトコルが提供する診断オプションについて説明します。
CANopenの状態
CANopenネットワークは、 NMTマスター(ネットワーク管理)とNMTスレーブで構成されます。この場合、NMTマスターはすべてのデバイスを制御し、それらの通信状態を変更できます。CANopenデバイスは、以下の4つの状態のいずれかになります。

初期化:電源投入後、ノードはこの状態に移行します。このとき、デバイスアプリケーションとデバイス通信(ビットレートとノードアドレス)が初期化されます。その後、ノードは独立して「Pre-Operational(事前運用)」状態に切り替わります。
動作前: SDO経由でノードとの通信は可能です。ただし、ノードはPDO通信を実行できません。
Operational: CANopenノードは完全に動作可能です。プロセスデータを独立して送受信できます。
停止:ノードはネットワークから完全に分離されています。SDOまたはPDO通信は不可能です。ノードを別のネットワーク状態に遷移させるには、対応するネットワークコマンド(例:ノードの起動)が必要です。
エラーレジスタ
CiA 301 によれば、各CANopenデバイスにはエラーレジスタ(オブジェクト 16#1001)が存在します。このレジスタは SDO 経由で読み出すことができ、エラーが発生した場合にはエラーに関する追加情報を提供します。
エラーレジスタではビット0(一般エラー)のみが必須です。その他のビットはオプションであり、すべてのスレーブによってセットされるわけではありません。デバイスが何らかのエラーを検出すると、このオブジェクトの少なくともビット0がセットされます。
少し | 説明 |
|---|---|
0 | 一般的なエラー |
1 | 現在 |
2 | 電圧 |
3 | 温度 |
4 | 通信エラー(オーバーランエラー状態) |
5 | デバイス プロファイル固有 |
6 | 予約済み(常に 0) |
7 | メーカー固有 |
緊急および定義済みエラーフィールド (EMCY)
CANopenは、エラーを通知するためのオプションの緊急(EMCY)プロトコルを定義しています。緊急とは、CAN-ID 16#80 + NODE-IDで設定された定義済み接続に従って送信されるCANメッセージです。
電報の構造は次のとおりです。

緊急メッセージの長さは常に8バイトです。最初の2バイトで、対応する緊急エラーコード(EEC)が送信されます。その後に、エラーレジスタ0x1011(ER:エラーレジスタ)の現在の値と、メーカー固有の5バイト(MEF:メーカー固有のエラーフィールド)が続きます。
エラーコードの解釈については、製造元のマニュアルを参照してください。緊急プロトコルはすべてのスレーブでサポートされているわけではないため、 CANopen Managerで適切に設定する必要があります。
発生した緊急事態の履歴(エラー履歴)は、オブジェクト16#1003からSDO経由で読み取ることができます。ここで、サブインデックス0には保存されたエラーの数が格納され、それに続くサブオブジェクトには送信された緊急事態のデータ内容が含まれます。
詳細については、以下を参照してください。定義済みエラーフィールドとエラーレジスタ
監視メカニズム: ハートビートとノードガーディング
CANノードが継続的にメッセージを送信しない場合(サイクリックPDO)、監視が必要です。この目的のために、「ハートビート」と「ノードガーディング」というメカニズムが用意されており、これらを代替的に使用できます。
ノードガーディング:このプロトコルでは、NMTマスターから既存のCANopenスレーブにメッセージ(CANリモートフレーム)が送信されます。スレーブは指定された時間内にこれらのメッセージに応答する必要があります。応答がない場合、NMTマスターによってその旨が記録されます。CANリモートフレームは一般的に回避されるべきであるため、ハートビートによる監視が推奨されます。
ハートビート:ハートビートプロトコルはCANopenバージョン4.0でリリースされ、推奨される監視方法です。このプロトコルでは、各ノードが周期的にメッセージを送信します。このメッセージは、ネットワーク内の他の任意の加入者によって監視できます。