以前ポジションスイッチについて解説を行いました。
ポジションスイッチは最大16点の接点を設定可能ですが、それ以上の数を使用することができません。
そこで、CNCの現在位置情報をPMCで取得し、指定した範囲内外にあることを判別することで、擬似的なポジションスイッチを実質無限に作成することができます。
今回はPMCラダーでCNCの位置情報を取得する方法について解説します。
- 機能命令WINDRを使用して絶対座標値を読み出す
- 読みだした絶対座標値は実際の軸の位置と若干乖離がある
- 乖離の原因は”サーボ遅れ量”、”加減速遅れ量”、”PMC実行周期”
[temp id=2]
機能命令WINDRについて
機能命令WINDR(SUB:51)とは
機能命令WINDRはPMCにてNCウインドウデータの読み出しを行う命令です。
NCウィンドウ上の制御軸の絶対座標、工具寿命データ、実行中プログラム番号…etcなどを取得することが可能です。
WINDR命令のラダー図形式
WINDRは次の回路のように指定することでデータを取得することができます。
機能命令SUB51<WINDR>
制御条件(R0.0) WINDR命令を実行するタイミングを指定します
ACT=”0″の場合、WINDR命令を実行しません。
ACT=”1″の場合、WINDR命令を実行します。
制御データアドレス(D0000) 読み出したい機能コードを入力します。定数を入力できないので、機能命令NUMEB(SUB40)で定数を代入したアドレスを指定してください。
読取完了(R0000.1)WINDR命令によりデータが読み出されたら”1″となります。
WINDR命令の制御データ
WINDR命令の制御データに対し、必要な値を入力する必要があります。
制御データ詳細は次のとおりです。
現在座標の読み出し方法
制御軸の絶対座標(アブソリュート座標)読み出し(1軸分)
データ構造
WINDR命令で機能コード”27”を選択すると、制御軸の絶対座標(アブソリュート座標)を読み出すことができます。
機能コード27に対応したデータ構造は次のとおりです。
入力データ
まずは入力データについて次のように指定します。
- 機能コード(D0000)=”27”
- データ番号(D0006)=”0”
- データ属性(D0008)=”1”
PMCラダーでのデータ入力設定回路は次のとおりです。
出力データ
入力データを元にWINDRで読み出しを行った後、出力データを取得します。
PMCラダーでの絶対座標値の取得方法は次のとおりです。
MOVD命令(4バイト分バイナリ転送命令)で、D0010に格納された4バイト分の絶対座標データを別のアドレスに転送して取得します。
D0010~D0013(4バイト) → D0100~D0103(4バイト)
ここでわざわざ4バイト分転送を行う理由は、全軸分の座標データを取得したときに他の軸のデータとの混同を避けるためです。
また、転送先のアドレスにわかりやすいコメントをつけることで視認性を向上させる目的もあります。
以上で対象軸1軸の絶対座標値を取得することができました。
読み出し座標の応用方法
ポジションスイッチのように扱う
読み出した絶対座標値を比較演算を用いてポジションスイッチのように扱うことができます。
たとえば、読み出した制御軸をX軸と仮定し、絶対座標が10.000mm~20.000mmの範囲にあることを出力したい場合、次のように回路を作成することで実現可能です。
前項で取得した絶対座標値格納アドレスD0100の値が10000~20000の間にあることを、比較演算を用いて計算します。
1行目の処理はX軸の絶対座標値が10.000mm以上であるかを判別します。
2行目の処理はX軸の絶対座標値が20.000mm以下であるかを判別します。
3行目の処理で1行目と2行目の条件を両方を満たす時、X軸が10.000mm~20.000mmの間にあることをPMC内で検出することが可能となります。
WINDRによる絶対座標値読み出しの弱点
実際の軸の座標と乖離している
実は、PMCではNC制御されている軸の実座標を正確に読み取るのは不可能です。
完全に停止している軸であれば正確に読み取ることが可能ですが、移動中の軸の読み出しは次の原因により正確に読み出すことが難しくなっています。
PMCの実行周期分の遅れ
PMCの実行周期ごとに座標値が更新されるため、高速移動中はPMCの実行周期分だけ座標値が遅れて表示されます。
これは、PMCの実行周期を短く設定することで軽減することが可能です。
サーボの遅れ量や加減速遅れ量が考慮されていない
サーボ系の遅れ量と加減速遅れ量が考慮されていない値なので、実際の軸の位置と乖離が発生します。
これは別途WINDRにてサーボの遅れ量と加減速遅れ量を取得し、絶対座標値に加算することでサーボ関係の遅れ量を考慮した現在絶対座標値を取得することが可能です。
[temp id=2]
精度が必要な場面ではポジションスイッチの代わりとして利用できない
上記で述べたように、実際の軸座標と取得した座標値に乖離があるため、精度が必要な場面ではポジションスイッチの代用はできません。
精度が問題にならない場面ではWINDRで読みだした座標値を使ってポジション検知を行い、精度が必要な場面では既存機能のポジションスイッチを使用してポジション検知を行うという使い分けが必要と鳴ります。
できるかぎり正確な座標値を得るためには
現スキャン時の実際の軸位置=絶対座標値+サーボ遅れ量+加減速遅れ量
現スキャン時の実際の軸位置は
絶対座標値+サーボ遅れ量+加減速遅れ量
で求められます。
さらに、PMCの実行周期を1msに変更することで軸が移動中でも、実際の軸位置とほぼ同じ座標値が得られます。
軸の送り速度が上がるにつれて座標値の乖離が大きくなりますが、相当早い送り速度でも誤差は1mm以内に収まると思います。
あとがき
今回はNCの絶対座標をPMCで取得する方法について解説しました。
ポジションスイッチの上限を使い切ってしまって困った!という人の助けになれば幸いです。
コメント