ある位置を経由するモーション動作を行う場合は、ブレンド補間機能を使用します。
コーディングの注意点は、中継させる移動命令もStartLinearIntplPos関数で移動させる必要があります。 Motion.StartPos関数の移動中にブレンドすることはできません。
Blending補間によるオーバーライドの検証
経由位置に移動するかを確認するために、行って帰ってくるモーションで動作確認を行いました。
C#コード
TriggerValue = 50;にしているので、経由位置の手前50で引き換えす動作になります。※WMX3.6で検証したコード
void MoveBlending補間オーバーライド()
{
var CMotion = new CoreMotion(API); // おまじない
// 最初の目的位置を減速せず経由し、次の位置へ移動する機能です
const int AxisNo = 0;
// 【最初の目的位置へ移動】
var lic = new Motion.LinearIntplCommand();
lic.AxisCount = 1;
lic.Axis[0] = AxisNo; // 対象軸
lic.Target[0] = 2000; // 目的座標
lic.Profile.Velocity = 3600;
lic.Profile.Acc = 3000;
lic.Profile.Dec = 1000;
var IsErr = CMotion.Motion.StartLinearIntplPos(lic);
if (IsErr != ErrorCode.None)
{
Console.WriteLine("エラー" + IsErr);
}
// この時点で軸が移動しています
// 【新しい目的座標の変更】
lic.Target[0] = -1000; // 目的座標
lic.Profile.Velocity = 50000;
lic.Profile.Acc = 2000;
lic.Profile.Dec = 2000;
// ブレンドタイミング
var tri = new Trigger();
tri.TriggerAxis = AxisNo;
tri.TriggerType = TriggerType.RemainingDistance; // 別のモーションの残り距離が特定の値に達すると
tri.TriggerValue = 50; // 目的位置までの距離
// 現在の目的位置を経由とし、新しい目的位置を設定します
IsErr = CMotion.Motion.StartLinearIntplPos(lic, tri);
if (IsErr != ErrorCode.None)
{
Console.WriteLine("エラー" + IsErr);
}
CMotion.Motion.Wait(0); // 軸の停止待ち
}
コメント