軸のシングルターンモード

コーディング

この機能を使う理由

一方向に長時間同じ方向に動かし続けたとき、座標が非常に大きくなってしまいます。通常のモードでは定期的に座標を0クリアする必要があります。その処理を便利にしてくれる機能がシングルターンモードです。

シングルターンの試用

座標がマイナスになることはありません。最大値から引いた値が座標になります。

公式ドキュメントによると

速い速度では、指令位置が大きくなることによりdoubleの浮動小数点型で表現できる有効桁数に制限されて指令位置の精度が低下したり、フィードバック位置がAccumulated Encoder Feedbackの制限範囲(2^63-1と-(2^63))に到達して更新しなくなることがあります。

シングルターンモードの設定方法

WMX3 Consoleでどのような挙動になるかを確認していきましょう。アプリの使い方はこちら

“Config”ボタンを押し、軸の設定変更画面を出します。指定軸のシングルターンモードを有効にし、最大のエンコーダカウントを設定します。設定後はApplyボタンで確定になります。

例では、移動量が設定値5000になったときにエンコーダ座標が0に書き換わります。

電子ギヤを入れて、上位側からは少数点ありの角度で制御するのも直感的でいいと思います。360.0の指令で軸の終端が1回転する。部材の供給であれば供給量を上位から指定すれば、それに対応した分モーターが回るなど。

シングルターンモードで相対位置移動

部材の供給軸などは今の位置から指定量送り出したいので、相対位置移動を行います。”Pos Cmd”画面を開きます。モードを”Relative”に変更し、移動を行います。

C#コードで設定を行う方法

関数名はSetSingleTurnになります。

第1引数が軸番号。第2引数がtrueならシングルターンが有効。第3引数はエンコーダの最大カウント値です。

const int _シングルターンモータNo = 0;
private void btnシングルターンモードON_Click(object sender, EventArgs e)
{
    //// 起動のおまじない
    //var API = new WMX3Api();
    //var CMotion = new CoreMotion(API);
    //API.CreateDevice("C:\\Program Files\\SoftServo\\WMX3\\", DeviceType.DeviceTypeNormal, 0xFFFFFFFF);   // WMXに接続

    int err = CMotion.Config.SetSingleTurn(_シングルターンモータNo, true, 5000);
    if (err != ErrorCode.None)
    {
        Console.WriteLine("Failed to set single turn. Error=%d (%s)", err, CoreMotion.ErrorToString(err));
    }
}

private void btnシングルターンモード解除_Click(object sender, EventArgs e)
{
    //シングルターンモードを設定する
    int err = CMotion.Config.SetSingleTurn(_シングルターンモータNo, false, 0);
    if (err != ErrorCode.None)
    {
        Console.WriteLine("Failed to set single turn. Error=%d (%s)", err, CoreMotion.ErrorToString(err));
    }
}

おわりに

終わりを気にせず、どこまででも回せるようになりました。シングルターン機能がない制御コントローラだと、定期的に座標をゼロクリアしていましたが、WMXでは簡単に実現できます。

コメント

タイトルとURLをコピーしました