日記；回すだけ④TwinCATのMotionでモータを回す

　[前回](https://qiita.com/jamjam/items/e2a49c5b3c98c5943b3f)のEPOS Studioでモータが回り、いろいろなパラメータが、調整されたはずです。USBケーブルでつながったEPOS4ですが、動作時はEtherCATがEnable状態になっていたので、制御はイーサネット経由だったのではないかと想像しています。
　USBケーブルを抜いて、TwinCATを立ち上げます。
###TwinCATの設定資料
　[EPOS3 EtherCAT Application Notes Collection](https://maxonjapan.com/wp-content/uploads/manual/epos/EPOS3_EtherCAT_Application_Notes_EtherCAT_Integration_En.pdf)
　[EPOS4 Application Notes](https://maxonjapan.com/wp-content/uploads/manual/epos4/EPOS4-Application-Notes-Collection-En.pdf)
　[EtherCAT マスター接続ガイド](https://maxonjapan.com/wp-content/uploads/manual/maxpos/MAXPOS-Application%20Note-Jp.pdf)
**youtube**
　[TwinCAT 3 PLC Tutorial Motion NC-PTP](https://www.youtube.com/watch?v=ek6JXjjKhC4)
###エラー
　初期のころよく出ていたのが次のエラーです。
<img width="400" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/0d285412-9805-6433-fdb0-ee0fcaa49433.png">
　PCが立ち上がった後、常駐部が起動します。そのあと、次のバッチ・ファイルを管理者権限のコマンドプロンプトで動かします。

``cd C:\TwinCAT\3.1\System
win8settick.bat``

　このタイミングが良いのかどうかは、不明ですが、一度でエラーが消えないければ、三回以上実行してみます。
　すごくアナログ的ですが、今、このエラー・メッセージは出ていません。

###設定を始める
　[第2回](https://qiita.com/jamjam/items/38144c64011d5039b661)のTwinCATをインストールした時点で、カプラ類の入出力ができるかどうかの確認を行いました。
![t110.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/9baa2059-98bd-c862-ffa8-8e4f70e7a780.png)
　ここからモータの設定を始めます。
　ソリューションエクスプローラのI/Oから、ドライブ4（EPOS4）をダブルクリックし、中央画面のプロパティを表示し、スロットのタブを見ます。CSP Modeが選択されています。
![t401.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/c0404176-74ea-1cb7-be6f-2f8224de18be.png)

　スロットは、運転モードの選択になります。通常、
• サイクル同期位置制御 Cyclic Synchronous Position (CSP)
• サイクル同期回転数制御 Cyclic Synchronous Velocity (CSV)
• サイクル同期トルク制御 Cyclic Synchronous Torque (CST)
に加えて、
• Profile Position Mode (PPM)
• Profile Velocity Mode (PVM)
も選べます。しかし、筆者は、意味がわかっていませんので、デフォルトのサイクル同期位置制御CSP Modeのままで設定を進めます。

　同じプロパティ画面のDCタブを選択します。「詳細設定」を押して出てきたパネルで、「有効」にチェックが入っていたら、OKです。EtherCATの**時間管理**をこのドライブ4（EPOS4）が行い、そのサイクルは2000usだという設定です。

![t402.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/abc66f59-531a-e456-b628-24aad1855f32.png)

　ソリューションエクスプローラののMOTIONーNC-Task 1 SAFをダブルクリックし、中央のプロパティのタスクを見ます。
　サイクルティック（サイクル周期）が2msなのを確認します。資料のうち二つが2msで、一つは1msです。カプラのときは、みな1msをセットしたように記憶しています。
![t403.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/48853a60-fd0d-1c13-6b74-058c0c6bce68.png)

###軸の設定
　ソリューションエクスプローラのMOTIONの軸ー軸1をダブルクリックし、「設定」のタブを開き、「I/Oにリンク...」が「ドライブ4（EPOS4）」に割り当てられていることを確認します。
![t404.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/6c54b4f8-55da-7505-a67d-ae834f1186fb.png)
　パラメータ・タブで、電源電圧やモータ許容値を考慮しモータ速度を設定します。適当ではいけないのですが、わからないので、適当な値を入れています。入力するのはOffline値の項目です。
　「その他の設定」をクリックし、デッドタイム補正を入れます。いろいろなところ参考にすると、6msぐらいのようです。解説では、NC-Task SAFサイクル周期の約 3 ～ 4 倍の値だそうです。
![t405.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/1773c0d6-c431-1242-2d0f-762967f79461.png)
　次に、エンコーダの項目Encをクリックします。「エンコードカウント方向の反転」はFALSEからTRUEに変えました。
　「スケーリング係数計算値」と「その下のスケーリング係数の分母」は互いに関係しあいます。スケーリング係数計算値は、解説では、500 パルス／回転のエンコーダの場合、4逓倍x500=2000 → 1/2000=0.0005とあります。ここで使用しているエンコーダは1024パルスなので、0.001にしました。母数は、回転を直線に変化するジグを使うときなどに、何回転すれば1mm移動するかを定義するものだと思われます。これらのパラメータの桁が大きくずれていると、モータは振動しているのに、ほとんど回転しないという事態になります。

![t406.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/b86d7253-739e-d2b5-454c-38ce5a18f934.png)

　位置制御ループCtrlをクリックします。「位置コントローラP」が選択されていました。Pは何の頭文字なんでしょうか?わかりません。PIDも選べますが、このままにしておきます。
![t407.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/40ae2767-528f-a90f-a66d-113154125af2.png)
　同じところの「パラメータ」のタブを選択します。解説に従い、「位置制御：比例定数Kv」は1（もとは0だが、1に訂正。図は古い）、「フィードフォワード速度...」は1.0を入れました。
![t408.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/da9118e5-8775-faba-9c00-5c1c58f8a7e2.png)

　Driveをダブルクリックします。「パラメータ」のタブを見ます。
　「モータ極性の逆転」はTRUEに変更します。
　「基準速度」は600がフィルされていました。
　「位置および速度のスケーリング：」の「出力スケーリング係数」は、解説によれば、
　　– Scaling = 7500 / ( エンコーダ･パルス数 * 4)
　　– 例 500 パルス / 回転のエンコーダの場合： Scaling = 7500 / (500 * 4) = 3.75
なので、ほぼ倍の7を入れました。

![t409.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/86cb4bd6-78e7-e83d-702c-c566b896ad9f.png)

　上部メニューにあるフロッピ2個のアイコンを押して、保存します。
###試運転
　上部メニューにある「構成の有効化」アイコンをクリックします。いくつかのパネルが出ます。OKを押して進めます。「軸１」をクリックします。
　オンラインのタブを見ます。「有効化の設定」ボタンを押し、「すべて」を押してOKで閉じます。
　F2やF3を押すと、モータが回ります。

![t410.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/b7465ea7-b186-6437-11f7-f2dcf3366304.png)

　「機能」のタブを選択します。
　「動作モード」を、繰り返しの「Reversing Sequence」に変更します。「ターゲット位置」は「1」mm、「ターゲット速度」は「20」、「Idle Time」は「1」秒にし、「開始」をクリックします。終わらすときは「停止」です。
　「ターゲット位置」によって、回転する角度は異なります。画面では1.0002mmと行き過ぎているので、この後すぐに1.0000まで戻ります。1秒その位置を維持し、0の位置まで回転（CCW）します。
　位置コントローラPのPは、PID制御のP（比例制御）動作なのかもしれません。目標位置に近づくと減速し、行き過ぎるの戻るという動作をしているように見えます。Kvはゲインかもしれません。エンコーダの値などが適切でないと、振動（いったりきたり）して目標値に止まらないという動作をしたことがあります。

![t411.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/42851ebe-ac0a-9b3b-950b-31cf0077e376.png)