日記；回すだけIII ④発行されるコマンドを見る

　ツールTMCM-CANopenでは、実際にCANバスで流れるコマンドなどを表示できます。図は前回のを流用しているので、余計な矢印が入っています。
### コマンドの表示
　前回のツールを使って、オリエンタルモーターを利用できるようにします。

　　[日記；回すだけIII ③TMCM-CANopenで回す](https://qiita.com/jamjam/items/0c607fd1cfc0148bcf40)

　画面下に、16進で、コマンドの実行が表示されています。
![bl101.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/3b0f7295-1042-8433-ace9-68c4fe65695e.png)

### NMT
　モータBLVD-KRDのGeneralからNMTのStartボタンを押します。NMTは電源が入るとInitialization状態になり、指示することで、Pre-operationalに移行します。この条件では、SDOによってオブジェクト・ディクショナリの読み書きができます。実働状態はOperationalで、PDOでリアルタイムにデータが読み書きされます。
　Startをクリックします。
![bl102.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/79c1e712-156d-4a6f-9e16-af604f2f760c.png)



```
Tx: 0x000: 01 0a
Rx: 0x18a: 60 12       # NMT Start
Rx: 0x28a: 60 12 03    # NMT Pre-Op？
```

　TxはマスタのPC、Rxはモータ・コントローラのスレーブと思われます。たぶん、Pre-operational状態になりました。ID=10なので、送信時Tx 0x0aは10です。01は、NMT service start remote nodeの指定です。レスポンスで帰ってきている03はマニュアルにはない数値なので、何かわかりません。InitializationはPre-operationalに遷移するので、そうなっていると推定します。

　 Controlword (6040h)
- Shutdown　06
- Switch ON　07
- Switch ON + Enable Operation　0f
- Quick Stop　02
- Enable Operation　07
- Fault Reset　1x

### CiA-402 State Machine
　もう一つの状態遷移CiA-402 State Machineを有効にします。
　左のCiA-402 State Machineをクリックします。表示が進んでいくので、Cyclic pollingにはチェックしません。
![bl103.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/7fcc8757-fac4-2103-0b78-f62624e063c6.png)

　Read status wordボタンをクリックすると、0x6041のBits in Statuswordが読み出されます。

```
Tx: 0x000: 80 0a
Tx: 0x60a: 40 41 60 00 00 00 00 00    # Read to switch 
Rx: 0x58a: 4b 41 60 00 60 12 00 00    # 0x1260（16進） 0b0001 0010 0110 0000（2進）  4704（10進）
```

　ビットの役割です。見るべきは、下位の8ビットです。Quick Stop状態で、Switch ON Disabledになっています。

```
 0 Ready to Switch ON
 1 Switched ON
 2 Operation Enabled
 3 Fault
 4 Voltage Enabled
@5 Quick Stop
@6 Switch ON Disabled
 7 Warning
 8 Drive profile operation ready (manufacturer-specific (MS))
@9 Remote
 10 Target Reached
 11 Internal Limit Active
@12,13 Operation Mode Specific (OMS)
 14 Reserved (manufacturer-specific (MS))
 15 TLC (manufacturer-specific (MS))
```

　CiA-402 State MachineのSwitch ON Disabledボタンをクリックします。

```
Tx: 0x60a: 2b 40 60 00 06 00 00 00   # shutdown
Rx: 0x58a: 60 40 60 00 00 00 00 00
Tx: 0x60a: 40 41 60 00 00 00 00 00   # Bits in Statusword
Rx: 0x58a: 4b 41 60 00 21 12 00 00
```

 Ready to Switch ONボタンをクリックします。

```
Tx: 0x60a: 2b 40 60 00 07 00 00 00   # Switch ON
Rx: 0x58a: 60 40 60 00 00 00 00 00 
Tx: 0x60a: 40 41 60 00 00 00 00 00   # Bits in Statusword
Rx: 0x58a: 4b 41 60 00 23 12 00 00
```

 Operation enabledボタンをクリックします。

```
Tx: 0x60a: 2b 40 60 00 0f 00 00 00   # Operation enabled
Rx: 0x58a: 60 40 60 00 00 00 00 00
Tx: 0x60a: 40 41 60 00 00 00 00 00   # Bits in Statusword
Rx: 0x58a: 4b 41 60 00 27 12 00 00
```
　上記のボタンと遷移がずれているかもしれません。
　稼働状態になりました。NMTがOperationalで、CiA-402 State MachineのStatusword（0x6041）が0x1227（1001000100111）であれば、モータが鳴り始めます。
### CiA-402 Profile Psition Mode
　PPモードで動かします。
　左のCiA-402 Profile Psition Modeをクリックします。表示が進んでいくので、Cyclic pollingにはチェックしません。
![bl104.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/2a9f0aaa-d146-0430-76db-2dcb92e5c682.png)

```
Tx: 0x60a: 40 83 60 00 00 00 00 00
Rx: 0x58a: 43 83 60 00 e8 03 00 00    # "1000"  加速度6083
Tx: 0x60a: 40 84 60 00 00 00 00 00           
Rx: 0x58a: 43 84 60 00 e8 03 00 00    # "1000"  減速時加速度6084
Tx: 0x60a: 40 81 60 00 00 00 00 00
Rx: 0x58a: 43 81 60 00 01 00 00 00
```

　既に設定されている値を読み出しています。
- 回転方向の加速度6083 Profile acceleration  1000
- 逆回転方向の加速度6084 Profile deceleration  1000

　値を入れています。
- 速度6081 Profile velocity  1000
- どこまで回転させるか607A Target position  5000

　押すボタンです。
- 　Move absoluteで5000まで回転

```
Tx: 0x60a: 40 60 60 00 00 00 00 00   # Mode of operation  
Rx: 0x58a: 4f 60 60 00 03 00 00 00   # 0x0003 <-Profile Velocity Mode
Tx: 0x60a: 2f 60 60 00 01 00 00 00   # 0x0001 <-1:Profile Position Mode
Rx: 0x58a: 60 60 60 00 00 00 00 00   # 0 <-??  no mode change?
Tx: 0x60a: 23 7a 60 00 88 13 00 00   # "5000"  Target position 607A
Rx: 0x58a: 60 7a 60 00 00 00 00 00
Tx: 0x60a: 40 40 60 00 00 00 00 00   # Controlword
Rx: 0x58a: 4b 40 60 00 0f 00 00 00   # 0x000f 0b0000 0000 0000 1111 <- Switch on,Enable voltage, Quick stop,Enable operation
Tx: 0x60a: 2b 40 60 00 1f 00 00 00   # 0x001f ： Absolute Positioning
Rx: 0x58a: 60 40 60 00 00 00 00 00  
Tx: 0x60a: 2b 40 60 00 0f 00 00 00   # 0x000f
Rx: 0x08a: 4a ff 81 00 00 00 00 00
Rx: 0x58a: 60 40 60 00 00 00 00 00  
```

　押すボタンです。
- Move relativeでは10000単位で回転

　このように、設定値や押すボタンによって、コマンドやレスポンスを調べることができます。

```
Tx: 0x60a: 40 60 60 00 00 00 00 00  Controlword
Rx: 0x58a: 4f 60 60 00 01 00 00 00  0x0001 Profile Position Mode
Tx: 0x60a: 23 7a 60 00 88 13 00 00  "5000"  Target position 607A
Rx: 0x58a: 60 7a 60 00 00 00 00 00
Tx: 0x60a: 40 40 60 00 00 00 00 00  Controlword
Rx: 0x58a: 4b 40 60 00 0f 00 00 00  Controlword
Tx: 0x60a: 2b 40 60 00 5f 00 00 00  Controlword
Rx: 0x58a: 60 40 60 00 00 00 00 00  Controlword
Tx: 0x60a: 2b 40 60 00 4f 00 00 00  Controlword
Rx: 0x58a: 60 40 60 00 00 00 00 00  Controlword
```

### PDOとSDO

　オブジェクト・ディクショナリの読み書きは、PDOとSDOの2種類があります。

###### PDO通信（CoEプロトコル）=プロセス・データ通信
　マスタが、論理プロセス・データ空間をノード？スレーブにマッピングすることで、定周期通信を実現します。
　PDOマッピング＝I/Oデータ割り付け、したら、PDO通信＝リモートI/O通信を行います。I/Oデータの割り付けは、EDSファイルを使います。
　マスタからのデータをスレーブが受信するのがRxPDO、スレーブからマスタへデータを送信するのがTxPDOです。
　サブインデックス0にマッピングされているオブジェクト数が記述されています。
　　0x1600～0x17ffがRxPDO用、0x1a00～0x1bffがTxPDO用
　NMTのPre-Ope時に設定値の変更ができます。

PDO2      1st application object 1614807056 60400010h        
          2nd application object 1616904200 60600008h     

###### PDO Mappingアドレス
　四つ設定できます。デフォルトでマッピングは設定されていますが、変更もできます。
Receive-PDO (RPDO) (Master -> Driver)
- 1400h: 1st RPDO communication parameter
- 1401h: 2nd RPDO communication parameter
- 1402h: 3rd RPDO communication parameter
- 1403h: 4th RPDO communication parameter
- 1600h: 1st RPDO mapping parameter
- 1601h: 2nd RPDO mapping parameter
- 1602h: 3rd RPDO mapping parameter
- 1603h: 4th RPDO mapping parameter

Transmit-PDO (TPDO) (Driver -> Master)
- 1800h: 1st TPDO communication parameter
- 1801h: 2nd TPDO communication parameter
- 1802h: 3rd TPDO communication parameter
- 1803h: 4th TPDO communication parameter
- 1A00h: 1st TPDO mapping parameter
- 1A01h: 2nd TPDO mapping parameter
- 1A02h: 3rd TPDO mapping parameter
- 1A03h: 4th TPDO mapping parameter

　デフォルトの値がマッピングされている。EDSファイル内
cob-id RPDO1 0000020A RPDO2 0000030A RPDO3 0000040A RPDO4 0000050A
       TPDO1 4000018A TPDO2 4000028A TPDO3 4000038A TPDO4 4000048A

　このモータのマッピングです。
1600h: 1st RPDO mapping parameter　１，6040 0010h、０，０，０　　　　　 Controlword
1601h: 2nd RPDO mapping parameter　２，6040 0010h、6060 0008h，０，０　Controlword、Modes of operation
1602h: 3rd RPDO mapping parameter　２，6040 0010h、607A 0020h，０，０　Controlword、Target position
1603h: 4th RPDO mapping parameter　２，6040 0010h、60FF 0020h，０，０　Controlword、Target velocity

1A00h: 1st TPDO mapping parameter　１，6041 0010h、０，０，０　　　　　Statusword
1A01h: 2nd TPDO mapping parameter　２，6041 0010h、6061 0008h，０，０　Statusword、Modes of operation display
1A02h: 3rd TPDO mapping parameter　２，6041 0010h、6064 0020h，０，０　Statusword、Position actual value
1A03h: 4th TPDO mapping parameter　２，6041 0010h、606C 0020h，０，０　Statusword、Velocity actual value

###### SDO通信＝メールボックス通信＝メッセージ通信
　任意のタイミングでマスタがコマンドを送信し、スレーブがレスポンスを返します。
　SDOのやり取りはPre-Ope以上で使えます。
　オブジェクト・ディクショナリの読み書きはSDOでできます。
　しかし、NMTがOperational状態で、CiA-402 State MachineがSwitch ON + Enable Operation状態、つまり、正常稼働状態では、マッピングされたオブジェクト・ディクショナリの読み書きはPDOで行います。