前回解説したPMCラダーで各軸座標値を取得する方法基礎編の応用バージョンを解説する記事です。
今回は応用編として、サーボの遅れ量と加減速遅れ量を考慮した全軸分の絶対座標を取得する方法について、実際のPMCラダー回路を交えて解説します。
現在座標の読み出し
制御軸の絶対座標(アブソリュート座標)読み出し(全軸分)
データ構造
WINDR命令で機能コード”27”を選択すると、制御軸の絶対座標(アブソリュート座標)を読み出すことができます。
3軸直行ロボットから全軸分の絶対座標値データを読み出す際の、機能コード27に対応したデータ構造は次のとおりです。
入力データ
まずは入力データについて次のように指定します。
- 機能コード(D0000)=”27”
- データ番号(D0006)=”0”
- データ属性(D0008)=”-1” ← 前回の基本編と異なり全軸分を指定する
PMCラダーでのデータ入力設定回路は次のとおりです。
出力データ
入力データを元にWINDRで読み出しを行った後、出力データを取得します。
今回は3軸分の絶対座標値データは、次のPMCラダー回路で取得することができます。
以上で全軸(X、Y、Z)分の絶対座標値を取得することができました。
サーボ遅れ量と加減速遅れ量の取得
サーボ遅れ量の取得
データ構造
サーボモータの遅れ量をWINDR命令を使用して取得します。
機能命令コードは”30”を指定することで読み出し可能で、データ構造は次の通りです。
入力データ
まずは入力データについて次のように指定します。
- 機能コード(D0030)=”30”
- データ番号(D0036)=”0”
- データ属性(D0038)=”-1”
PMCラダーでのデータ入力回路は次のとおりです。
出力データ
入力データを元にWINDRで読み出しを行った後、出力データを取得します。
3軸分のサーボ遅れ量データは、次のPMCラダー回路で取得することができます。
以上で全軸(X、Y、Z)分のサーボ遅れ量を取得することができました。
加減速遅れ量の取得
データ構造
サーボモータの遅れ量をWINDR命令を使用して取得します。
機能命令コードは”31”を指定することで読み出し可能で、データ構造は次の通りです。
入力データ
まずは入力データについて次のように指定します。
- 機能コード(D0030)=”31”
- データ番号(D0036)=”0”
- データ属性(D0038)=”-1”
PMCラダーでのデータ入力回路は次のとおりです。
出力データ
入力データを元にWINDRで読み出しを行った後、出力データを取得します。
3軸分の加減速遅れ量データは、次のPMCラダー回路で取得することができます。
以上で全軸(X、Y、Z)分のサーボ遅れ量を取得することができました。
遅れ量を加味した現在座標の算出
4バイト長バイナリ加算命令<SUB321>ADDSD
現在座標は絶対座標値+サーボ遅れ量+加減速遅れ量の和で計算することが可能です。
すべて4バイト長のデータなので、4バイト長のバイナリデータが扱える加算命令”<SUB321>ADDSD”を使用します。
本命令は拡張命令機能を有効にしないと使用できないため注意してください。
実際のラダー回路
PMCラダー上で取得した絶対座標に各遅れ量を加味する演算を行う回路は次の通りです。
演算の結果得られた現在位置データは次のアドレスに格納されました。
- D2004:X軸の現在位置
- D2014:Y軸の現在位置
- D2024:Z軸の現在位置
PMC実行周期の変更
PMCの実行周期を短くして座標取得頻度を増やす
PMCラダーの実行周期を短くすることで、同じ時間当たりのWINDRの実行回数が増加します。
その分、座標値の更新頻度が高くなるためより座標の誤差を小さくすることが可能です。
PMC実行周期の変更方法は別の記事で紹介しているのでそちらを参考にしてください。
あとがき
今回の記事は座標値をPMCで取得する際に発生する、現在位置との誤差を少しでも小さくする方法についてまとめました。
ここまでやっても若干の誤差が発生しますが、軸の停止中やあまり精度を求めないようなところで使用する分には申し分ない方法だと思います。
コメント