interface:can:canopen

CAN

CANOpen

CANを元に,医療,産業分野のネットワーク制御に使用されている.
CanOpenにおいて、ネットワーク上において少なくとも1つのデバイスはHeartbeat producer(s)として存在する必要があり、ほかのすべてのデバイスはHeartbeat consumersとなる必要がある。
EPOS4: Motor stop at communication lost?
CAN通信はOSI参照モデルの1,2層を定義,CANOpenは7層を定義,3,4,5,6層はなし.これはEtherCATも同様であり,CoEは1,2層をEtherCATにで実装したものとなる.

インデックス 割当
0x0000~0x0FFF データ型式領域
0x1000~0x1FFF CoE通信領域 3つの例外を除き,CANベース以外の通信では自由に使える?0x1000,0x1001,0x1018はCiAによって指定される.0x1018はデバイスのベンダID
0x2000~0x5FFF メーカ固有領域
0x6000~0x9FFF CANopenプロファイルに使用
0xA000~0xAFFF ネットワーク変数
0xB000~0xBFFF CiA302-7で指定されるシステム用変数
0xC000~0xFFFF CiA用に予約

CANOpenは主に3つの通信の振る舞いで動作する.1つの動作を続けるということはなく,場合によって3つの状態をそれぞれ遷移していく.

この関係で通信するのはNMTのみ,ネットワーク上の1台のノードがマスタ,それ以外がスレーブとなる.
通信の起動はマスタからのみ行うことができ,スレーブはそれに応じて応答するのみ.スレーブが自ら通信を開始したり,スレーブ同士で通信することはできない.

1対1で通信をする時,送信開始側がクライアントとなる.この関係で通信するオブジェクトはSDOのみ.
サーバがデータを受け取る場合,クライアントがデータを受け取る場合がある.
マスタ/スレーブにおいても,クライアント/サーバの関係は成立する
例;マスタが1つのノードにリモートフレームなど何かしらの要求を行い,スレーブがこれに応答する時,マスタはクライアント,スレーブはサーバとして振る舞っている.

あるノードが,ネットワーク上の不特定のノードにオブジェクトを送信する場合この関係となる.
プロデューサがオブジェクトを送信し,コンシューマは必要なデータのみを受信する.
コンシューマからリモートフレームが送信され,それに応じてプロデューサがオブジェクトを送信することもある.
PDO,SYNC,TIME,NMTの一部はこの関係で送受信を行う.

CANOpenは基本的に標準フォーマットデータフレームを用いて通信する.
標準フォーマットのデータフレームとリモートフレームには,11bitのIDが割り当てられている.CANOpenではこのIDの中身が2つに分割される. 上位4bitはfunction codeと呼ばれ,下位7bitにはNodeIDが割り当てられている.ここからもわかるように,CanOpenでは最大で127台のノードを接続できる.

function code(4bit)でCANOpenのプロトコルを,NodeID(7bit)で送信するノードのIDを指定する.
function codeによって,最大8byteのデータをどのように扱うか決定する.

CanOpenプロトコル function code(4bit, hex) Node IDs(7bit, hex) COB-ID(hex)
NMT 0x00 0x00 0x0
SYNC 0x01 0x00 0x80
EMCY 0x01 0x01~0x7F 0x81~0xFF
TIME 0x02 0x00 0x100
TxPDO1 0x03 0x01~0x7F 0x181~0x1FF
RxPDO1 0x04 0x01~0x7F 0x201~0x27F
TxPDO2 0x05 0x01~0x7F 0x281~0x2FF
RxPDO2 0x06 0x01~0x7F 0x301~0x37F
TxPDO3 0x07 0x01~0x7F 0x381~0x3FF
RxPDO3 0x08 0x01~0x7F 0x401~0x47F
TxPDO4 0x09 0x01~0x7F 0x481~0x4FF
RxPDO4 0x0A 0x01~0x7F 0x501~0x57F
TxSDO 0x0B 0x01~0x7F 0x581~0x5FF
RxSDO 0x0C 0x01~0x7F 0x601~0x67F
NMT error control 0x0E 0x01~0x7F 0x701~0x77F

ネットワーク管理を行う.CANOpenノードの運転状態を制御する.NMTはデータ長が2bytesの単一のCANフレーム

SDOアクセスに起因しないエラーが発生するたびに,エマージェンシメッセージが送信される.

  • 0,1byte: 2byteのエラーコード
  • 2byte: エラーレジスタ(0x1001,0x00)のコピー
  • 3~7byte : メーカ固有のエラーコード

ノード間で更新頻度の高いデータ,情報をブロードキャストする.CANのデータフレームである最大8bytesを全部データとして扱える.
各ノードは好きなタイミングでデータを送信できる(これはCANの機能として保証される),1つのフレームに複数のデータを詰め込むことが可能.
CANOpenにおいてこの事項を満たすためにPDO(プロセスデータオブジェクト)が存在している.
PDOは送信受信が分かれている.PDOがどのノードから送信されているか,受信されているかの判別が必要である.よって,PDOを送信するノード(プロデューサ)は1つ,プロデューサにとってPDOはTPDOとなり,その他のノード(1つまたは複数のコンシューマ)にとってはRPDOとなる.

送信タイミング

PDOは4つの送信タイミングが存在する.

イベント・ドリブン(チェンジオブステート)

PDOに設定したデータに変更が入ったときに送信する.しかし,PDOが非常に短時間似変化した時,このノードのTPDOがバスを占有するリスクが有る.このため,インヒビットタイマを用いることでこれに対応する.TPDOの送信後PDOの値がどれだけ変化してもインヒビットタイマが終了するまでは次のTPDOを送信しないという実装になる.このため,インヒビットタイマで指定した時間がそのままTPDOの送信が発生する最小周期と設計することができる.
デメリットとして,インヒビットタイマの終了前に生じた値の変化を他のノードに反映できないという点がある.

タイムドリブン

ノード内に設定したイベントタイマによって定期的に送信する.このため,各ノード間でタイマの同期はされていないことに注意する,各ノードの送信においてTPDOの送信タイミングにはズレが生じる.バスの帯域使用率,レイテンシの計算は簡単であるが,オーバーヘッドが大きいことに注意.

ポーリング

PDOにおいては非推奨.
個別ポーリングはCANのリモートリクエストを用いて実装するが,リモートリクエストはCANコントローラやチップベンダによって実装が異なる. シンクロナイズドポーリングを用いるのが良い.

シンクロナイズドポーリング(グループポーリング)

全ノードに対して同じタイミングで処理を反映したいときに用いる.CANOpenではSYNCシグナルを用いて実現する.
これにより,全ノードに対して時刻同期を行うことができる. SYNCシグナルはグローバルなタイマタイミングとして機能する.
センサの場合
各ノードは値をずっと読み取りデータを更新する,SYNCを受信すると,このタイミングでのデータを送信する.SYNCを送信したノードはこれらセンサの値を受信するが,各データはSYNCを送信したタイミングでデータとなる.
アクチュエータ場合
各アクチュエータのノードに新しいデータを送信する.データを受信した各ノードは,そのデータをすぐには出力には反映せずに保持する.その後,SYNCを送信する.SYNCを受信したタイミングで,ノードは受信したデータを出力を反映する.

Service Data Object,CANOpenのすべてのオブジェクトディクショナリにアクセス可能.ノードの初期パラメータの設定に使ったりする.

CANOpenで定義されている各変数を全部まとめておく変数テーブルという認識
16bitのindexとその中に8bitのsubindexが存在する.

Index Sub-Index Object
0x0000 未使(予約済み)
0x001-0x025F 0x0001-0x001F Static data types
0x0020-0x003F Complex data types
0x0040-0x005F Manufacturer-specific complex data types
0x0060-0x025F Device profile specific data types
0x0260-0x0FFF 未使(予約済み)
0x1000-0x1FFF 通信プロファイル領域 CiA301
0x1000 Device Type
0x1001 Error register
0x1002 Manufacturer status register
0x1003 Pre-defined error field/ERRHistoryADOM
0x1005 COB-ID SYNC
0x1006 Communication cycle period/NMTCycleLenU32
0x1007 Synchronous window length
0x1008 Manufacturer Device Name
0x1009 Manufacturer Hardware Version
0x100A Manufacturer Software Version
0x100C Guard time
0x100D Life time factor
0x1010 Store parameters/ NMTStoreParamREC
0x1011 Restore default parameters/ NMTRestoreDefParamREC
0x1012 COB-ID TIME
0x1013 High resolution time stamp
0x1014 COB-ID EMCY
0x1015 Inhibit Time EMCY
0x1016 Consumer heartbeat time
0x1017 Producer heartbeat time
0x1018 Identity Object
0x10F1 Error Settings
0x10F3 Diagnosis History
0x10F4 External Synchronization Status
0x10F5 External Synchronization Settings
0x1200-0x127F CANopen: SDO Server Parameter
0x1280-0x12FF CANopen: SDO Client Container Parameter
0x1400-0x14FF CANopen: Receive PDO Communication Parameters
0x1600-0x17FF CANopen, EtherCAT: Receive PDO Mapping
0x1600 Receive PDO mapping 1
0x00 Number of entries
0x01 1st receive PDO mapped
0x02 2nd receive PDO mapped
0x20 32nd receive PDO mapped
0x1601 Receive PDO mapping 2
0x1602 Receive PDO mapping 3
0x1800-0x19FF CANopen: Transmit PDO Communication Parameters
0x1A00-0x1AFF CANopen, EtherCAT: Transmit PDO Mapping
0x1A00 Transmit PDO mapping 1
0x00 Number of entries
0x01 1st transmit PDO mapped
0x02 2nd transmit PDO mapped
0x20 32nd transmit PDO mapped
0x1A01 Receive PDO mapping 2
0x1A02 Receive PDO mapping 3
0x1C00 Sync Manager Communication Type
0x00 Number of used sync manager channels
0x01 Communication type sync manager 0
0x02 Communication type sync manager 1
0x03 Communication type sync manager 2
0x04 Communication type sync manager 3
0x1C12 Sync Manager channel 2
0x00 Number of assigned PDOs
0x01 PDO mapping object index of assigned TxPDO 1
0x02 PDO mapping object index of assigned TxPDO 2
0x03 PDO mapping object index of assigned TxPDO 3
0x04 PDO mapping object index of assigned TxPDO 4
0x1C13 Sync Manager channel 3
0x1C32 Sync Manager 2 synchronization
0x00 Number of sub-objects
0x01 Sync mode
0x02 Cycle time
0x03 Shift time
0x04 Sync modes supported
0x05 Minimum cycle time
0x06 Calc and copy time
0x08 Command
0x09 Delay time
0x0A Sync0 cycle time
0x0B cycle time too small
0x0C SM-event missed
0x0D Shift time too short
0x0E RxPDO toggle failed
0x20 Sync error
0x1C33 Sync Manager 3 synchronization
0x2000-0x5FFF 製造メーカ固有プロファイル領域
0x6000-0x9FFF 標準化されたデバイスプロファイル領域
0xA000-0xAFFF 標準化されたインターフェースプロファイル領域
0xC000-0xCFFF 未使(予約済み)

Object Dictionaryの0x6000~から定義されている標準化されたデバイス(インターフェース)プロファイル領域という部分にCiA4xxで定められた割当がされるということのようだ.
RxPDO, 0x1600 - 0x17FF
TxPDO, 0x1A00 - 0x1BFF

モーションコントロールに関する仕様を定めているアプリケーションプロファイル.
EtherCATでモーションコントロールを行う際,このCiA402の仕様に準拠して各送受信データを設計しているものが多い.
このCiAで指定されているオブジェクト(データ,変数のこと?)のうち,インデックスを持つものがある.
これはCANOpenで定義されているObject Dictionaryというマップにてそれぞれ定義されている領域に割り当てられる.

Index Sub-Index 名称 内容
0x6007 Abort connection option code
0x603F Error code
0x6040 Controlword
0x6041 Statusword
0x6042 Target Velocity
0x605A Quick Stop option Code
0x605B Shutdown option Code
0x605C Disabled operation option Code
0x605D Halt option Code
0x605E Fault reaction option Code
0x6060 Mode of operation
0x6061 Mode of operation display
0x6062 Position demand value
0x6063 Position actual value*
0x6064 Position actual value
0x6065 Following error window
0x6066 Following error time out
0x6067 Position window
0x6068 Position window time
0x606A Control Effort
0x606B Velocity demand value
0x606C Velocity actual value
0x606D Velocity window
0x606E Velocity window Time
0x606F Velocity threshold
0x6070 Velocity threshold Time
0x6071 Target torque
0x6072 Max torque
0x6073 Max current
0x6074 Torque demand
0x6075 Motor rated current
0x6076 Motor rated torque
0x6077 Torque actual value
0x6078 Current actual value
0x6079 DC link circuit voltage
0x607A Target Position
0x607B Position range limit
0x00 highest sub-index supported (2)
0x01 Min position range limit
0x02 Max position range limit
0x607C Home offset
0x607D Software position limit
0x00 Number of entries (2)
0x01 Min position limit
0x02 Max position limit
0x607E Polarity
0x607F Max profile velocity
0x6080 Max motor speed
0x6081 Profile velocity
0x6082 End velocity
0x6083 Profile acceleration
0x6084 Profile deceleration
0x6085 Quick stop deceleration
0x6086 Motion profile type
0x6087 Torque slope
0x608F Position encoder resolution
0x00 highest sub-index supported (2)
0x01 Encoder increments
0x02 Motor revolutions
0x6091 Gear ratio
0x00 highest sub-index supported (2)
0x01 Motor revolutions
0x02 Shaft revolutions
0x6092 Feed constant
0x00 highest sub-index supported (2)
0x01 Feed
0x02 Shaft revolutions
0x6093 Position Factor
0x6094 Velocity Factor
0x6097 Acceleration Factor
0x60A3 Profile jerk use
0x60A4 Profile jerk
0x00 highest sub-index supported (2)
0x01 Profile jerk 1
0x02 Profile jerk 2
0x60B0 Position Offset
0x60B1 Velocity Offset
0x60B2 Torque Offset
0x60B8 Touch probe function
0x60C5 Max acceleration
0x60C6 Max deceleration
0x60F2 Position option code
0x60F4 Following error actual value
0x60FA Control Offset
0x60FC Position demand internal value
0x60FE Digital outputs
0x00 highest sub-index supported (2)
0x01 Physical outputs
0x02 Bit mask
0x60FF Target Velocity

CiA402もCiAメンバーにならないと全部は読めないが,CiA402を参考にメモリマップ割当してる製品の資料はあるのでメモしておく.
CiA 402 Drive Based Operation manual

<html> <iframe src=“https://docs.google.com/spreadsheets/d/e/2PACX-1vSvYzDA4ToeWDtRhghN_PcSJZX5LK1XDFZLIexTTk6rMUZS9xcN4orA6dhd9jN7BVMPSAa_p1u3Ji_D/pubhtml?widget=true&amp;headers=false“style=“width:640px; height:300px”

></iframe></html>

### EDSファイル

CANopenで通信するための,デバイスの対応している昨日や送受信オブジェクトを記載したフィアル.
このEDSファイルをマスターに登録する.

動作モード,0x6060で設定

オープンソースのCANOpenフレームワーク
https://canfestival.org/

https://canopennode.github.io/CANopenSocket/
pac5527のサンプルコードに入っているCanOpenはこれを使っている模様

参考文献

  • interface/can/canopen.txt
  • 最終更新: 2022/06/13
  • by yuqlid