サンプルプログラム > MotionCP > Visual C#
オブジェクト
変数
オープン
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 );