コンテンツにスキップ
サンプルプログラム > MotionCP >

Visual C#

オブジェクト

テキストボックス Name
ID番号 Id

変数

ushort id;

オープン

int result;

id = Convert.ToUInt16(Id.Text);
result = Pmcm.Open( id, "PMC-M2C-U" );
if( result == Pmcm.PMCM_RESULT_SUCCESS )
{
    MessageBox.Show( "オープン成功", "", MessageBoxButtons.OK, MessageBoxIcon.Information );
}
else
{
    MessageBox.Show( "オープン失敗", "", MessageBoxButtons.OK, MessageBoxIcon.Stop );
}

各種設定

int result;
ushort axis;
string outputString;

axis = Pmcm.PMCM_AXIS_X + Pmcm.PMCM_AXIS_Y;

// センサ設定
// オンで検知するセンサを接続している場合や、リミットスイッチを接続していない場合はモーターが動作しません
// その場合は以下の関数を実行してセンサ設定を"オンで検知"に変更してください
//result = Pmcm.SetSensorConfig( id, axis, Pmcm.PMCM_LOGIC, 0x3F );
//if( result != Pmcm.PMCM_RESULT_SUCCESS )
//{
//    outputString = String.Format( "PmcmSetSensorConfig ERROR : 0x{0:X}", result );
//    MessageBox.Show( outputString, "", MessageBoxButtons.OK, MessageBoxIcon.Stop );
//    return;
//}

// パルス出力モード設定
// 使用しているドライバに合致したパルス出力モードを選択してください
result = Pmcm.SetPulseConfig( id, axis, Pmcm.PMCM_PULSE_OUT, 7 );
if( result != Pmcm.PMCM_RESULT_SUCCESS )
{
    outputString = String.Format( "PmcmSetPulseConfig ERROR : 0x{0:X}", result );
    MessageBox.Show( outputString, "", MessageBoxButtons.OK, MessageBoxIcon.Stop );
    return;
}

動作パラメータ設定

int result;
ushort axis;
Pmcm.MOTIONPMCM[] motion = new Pmcm.MOTIONPMCM[3];
ushort[] empty = new ushort[2];
ushort count;
string outputString;

axis = Pmcm.PMCM_AXIS_X;

// CP動作パラメータ数
count = 3;

// 1回目
motion[0].wMoveMode = Pmcm.PMCM_PTP; // 動作モード
motion[0].wStartMode = Pmcm.PMCM_ACC_DEC; // 起動モード
motion[0].fSpeedRate = 1; // 速度倍率
motion[0].wAccDecMode = Pmcm.PMCM_ACC_LINEAR; // 加減速モード
motion[0].fLowSpeed = 100; // 起動時速度
motion[0].fSpeed = 500; // 移動速度
motion[0].wAccTime = 500; // 加速時間
motion[0].wDecTime = 500; // 減速時間
motion[0].fSAccSpeed = 0; // 加速S字区間
motion[0].fSDecSpeed = 0; // 減速S字区間
motion[0].lSlowdown = 0; // スローダウンポイント
motion[0].lStep = 1000; // 移動パルス数,移動方向
motion[0].bAbsolutePtp = 0; // 絶対座標指定
// 2回目
motion[1].wMoveMode = Pmcm.PMCM_PTP; // 動作モード
motion[1].wStartMode = Pmcm.PMCM_ACC_DEC; // 起動モード
motion[1].fSpeedRate = 1; // 速度倍率
motion[1].wAccDecMode = Pmcm.PMCM_ACC_LINEAR; // 加減速モード
motion[1].fLowSpeed = 500; // 起動時速度
motion[1].fSpeed = 1000; // 移動速度
motion[1].wAccTime = 500; // 加速時間
motion[1].wDecTime = 500; // 減速時間
motion[1].fSAccSpeed = 0; // 加速S字区間
motion[1].fSDecSpeed = 0; // 減速S字区間
motion[1].lSlowdown = -1; // スローダウンポイント
motion[1].lStep = 2000; // 移動パルス数,移動方向
motion[1].bAbsolutePtp = 0; // 絶対座標指定
// 3回目
motion[2].wMoveMode = Pmcm.PMCM_PTP; // 動作モード
motion[2].wStartMode = Pmcm.PMCM_CONST_DEC; // 起動モード
motion[2].fSpeedRate = 1; // 速度倍率
motion[2].wAccDecMode = Pmcm.PMCM_ACC_LINEAR; // 加減速モード
motion[2].fLowSpeed = 100; // 起動時速度
motion[2].fSpeed = 500; // 移動速度
motion[2].wAccTime = 0; // 加速時間
motion[2].wDecTime = 500; // 減速時間
motion[2].fSAccSpeed = 0; // 加速S字区間
motion[2].fSDecSpeed = 0; // 減速S字区間
motion[2].lSlowdown = -1; // スローダウンポイント
motion[2].lStep = 1500; // 移動パルス数,移動方向
motion[2].bAbsolutePtp = 0; // 絶対座標指定

// CPの空き取得
result = Pmcm.GetEmptyCp( id, axis, empty );
if( result != Pmcm.PMCM_RESULT_SUCCESS )
{
    outputString = String.Format( "PmcmGetEmptyCp ERROR : 0x{0:X}", result );
    MessageBox.Show( outputString, "", MessageBoxButtons.OK, MessageBoxIcon.Stop );
    return;
}
// CPの空き確認
if( empty[0] < count )
{
    MessageBox.Show( "CP空きなし", "", MessageBoxButtons.OK, MessageBoxIcon.Stop );
    return;
}

// 動作パラメータ設定
result = Pmcm.SetMotionCp( id, axis, motion, count );
if( result != Pmcm.PMCM_RESULT_SUCCESS )
{
    outputString = String.Format( "PmcmSetMotionCp ERROR : 0x{0:X}", result );
    MessageBox.Show( outputString, "", MessageBoxButtons.OK, MessageBoxIcon.Stop );
    return;
}

動作開始

int result;
ushort axis;
string outputString;

// 動作させる軸
axis = Pmcm.PMCM_AXIS_X;

// 動作開始
result = Pmcm.StartMotionCp( id, axis );
if( result != Pmcm.PMCM_RESULT_SUCCESS ) 
{
    outputString = String.Format( "PmcmStartMotionCp ERROR : 0x{0:X}", result );
    MessageBox.Show( outputString, "", MessageBoxButtons.OK, MessageBoxIcon.Stop );
    return;
}

動作追加

// CP動作は96動作までしか設定できません
// それ以上の動作を設定したい場合は、動作中にCPの空きを確認し、空き数分の動作を開始します
int result;
ushort axis;
Pmcm.MOTIONPMCM[] motion = new Pmcm.MOTIONPMCM[100];
Pmcm.MOTIONPMCM[] setMotion;
ushort[] empty = new ushort[2];
ushort count;
ushort remainCount;
ushort setCount = 0;
int i;
string outputString;

axis = Pmcm.PMCM_AXIS_X;

// CP動作パラメータ数
count = 100;

for( i = 0; i < count; i++ )
{
    motion[i].wMoveMode = Pmcm.PMCM_PTP; // 動作モード
    motion[i].wStartMode = Pmcm.PMCM_CONST; // 起動モード
    motion[i].fSpeedRate = 1; // 速度倍率
    motion[i].wAccDecMode = Pmcm.PMCM_ACC_LINEAR; // 加減速モード
    motion[i].fLowSpeed = 1000; // 起動時速度
    motion[i].fSpeed = 1000; // 移動速度
    motion[i].wAccTime = 0; // 加速時間
    motion[i].wDecTime = 0; // 減速時間
    motion[i].fSAccSpeed = 0; // 加速S字区間
    motion[i].fSDecSpeed = 0; // 減速S字区間
    motion[i].lSlowdown = -1; // スローダウンポイント
    motion[i].lStep = 1000; // 移動パルス数,移動方向
    motion[i].bAbsolutePtp = 0; // 絶対座標指定
}

// 残り動作数
remainCount= count;

while( remainCount > 0 ) 
{
    // CPの空き取得
    result = Pmcm.GetEmptyCp( id, axis, empty );
    if( result != Pmcm.PMCM_RESULT_SUCCESS ) 
    {
        outputString = String.Format( "PmcmGetEmptyCp ERROR : 0x{0:X}", result );
        MessageBox.Show( outputString, "", MessageBoxButtons.OK, MessageBoxIcon.Stop );
        return;
    }
    // CPの空きを確認し、設定動作数を決定する
    if( empty[0] == 0 ) 
    { // CP空きなし
        setCount = 0;
    } 
    else if( empty[0] < remainCount ) 
    { // CP空き < 残り動作数
        setCount = empty[0]; // CP空き分だけ設定する
    } 
    else if( empty[0] >= remainCount ) 
    { // CP空き >= 残り動作数
        setCount = remainCount; // 残り動作数を設定する
    }

    if( setCount > 0 ) 
    {
        // 動作パラメータ
        setMotion = new Pmcm.MOTIONPMCM[setCount];
        Array.Copy( motion, count - remainCount, setMotion, 0, setCount );

        // 動作パラメータ設定
        result = Pmcm.SetMotionCp( id, axis, setMotion, setCount );
        if( result != Pmcm.PMCM_RESULT_SUCCESS ) 
        {
            outputString = String.Format( "PmcmSetMotionCp ERROR : 0x{0:X}", result );
            MessageBox.Show( outputString, "", MessageBoxButtons.OK, MessageBoxIcon.Stop );
            return;
        }
        // 動作開始
        result = Pmcm.StartMotionCp( id, axis );
        if( result != Pmcm.PMCM_RESULT_SUCCESS ) 
        {
            outputString = String.Format( "PmcmStartMotionCp ERROR : 0x{0:X}", result );
            MessageBox.Show( outputString, "", MessageBoxButtons.OK, MessageBoxIcon.Stop );
            return;
        }
    }
    // 残り動作数更新
    remainCount -= setCount;
}

動作停止

int result;
ushort axis;
ushort stopMode;
string outputString;

// 停止させる軸
axis = Pmcm.PMCM_AXIS_X + Pmcm.PMCM_AXIS_Y;

// 停止モード
stopMode = Pmcm.PMCM_IMMEDIATE_STOP;

// 動作停止
result = Pmcm.StopMotion( id, axis, stopMode );
if( result != Pmcm.PMCM_RESULT_SUCCESS ) 
{
    outputString = String.Format( "PmcmStopMotion ERROR : 0x{0:X}", result );
    MessageBox.Show( outputString, "", MessageBoxButtons.OK, MessageBoxIcon.Stop );
    return;
}

クローズ

bool result;

result = Pmcm.Close( id );