サンプルプログラム > Motion2 > Visual C#
オブジェクト
ラジオボタン | Name |
他軸の停止によるスタート | StartMode0 |
内部同期信号によるスタート | StartMode1 |
変数
オープン
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;
Pmcm.COMPPMCM[] Comp = new Pmcm.COMPPMCM[2];
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;
}
if( StartMode0.Checked )
{
// 他軸の停止によるスタート
// Y軸の停止によりX軸がスタートします
// X軸の起動条件を設定します(他軸の停止によるスタート)
result = Pmcm.SetSynchroConfig( id, Pmcm.PMCM_AXIS_X, Pmcm.PMCM_SYNC_START_MODE, 3 );
if( result != Pmcm.PMCM_RESULT_SUCCESS )
{
outputString = String.Format( "PmcmSetSynchroConfig ERROR : 0x{0:X}", result );
MessageBox.Show( outputString, "", MessageBoxButtons.OK, MessageBoxIcon.Stop );
return;
}
// X軸の他軸の停止によるスタート条件を設定します(Y軸の停止確認);
result = Pmcm.SetSynchroConfig( id, Pmcm.PMCM_AXIS_X, Pmcm.PMCM_SYNC_START, Pmcm.PMCM_AXIS_Y );
if( result != Pmcm.PMCM_RESULT_SUCCESS )
{
outputString = String.Format( "PmcmSetSynchroConfig ERROR : 0x{0:X}", result );
MessageBox.Show( outputString, "", MessageBoxButtons.OK, MessageBoxIcon.Stop );
return;
}
}
else if( StartMode1.Checked )
{
// 内部同期信号によるスタート
// X軸の出力パルスカウンタが500になったらY軸がスタートします
// Y軸の起動条件を設定(内部同期信号によるスタート)
result = Pmcm.SetSynchroConfig( id, Pmcm.PMCM_AXIS_Y, Pmcm.PMCM_SYNC_START_MODE, 2);
if( result != Pmcm.PMCM_RESULT_SUCCESS )
{
outputString = String.Format( "PmcmSetSynchroConfig ERROR : 0x{0:X}", result );
MessageBox.Show( outputString, "", MessageBoxButtons.OK, MessageBoxIcon.Stop );
return;
}
// Y軸の内部同期信号によるスタート条件の設定(X軸の内部同期信号でスタート)
result = Pmcm.SetSynchroConfig( id, Pmcm.PMCM_AXIS_Y, Pmcm.PMCM_SYNC_SIG_START, 0);
if( result != Pmcm.PMCM_RESULT_SUCCESS )
{
outputString = String.Format( "PmcmSetSynchroConfig ERROR : 0x{0:X}", result );
MessageBox.Show( outputString, "", MessageBoxButtons.OK, MessageBoxIcon.Stop );
return;
}
// X軸の内部同期信号出力タイミングの設定(出力パルスコンパレータ条件成立時)
result = Pmcm.SetSynchroOut( id, Pmcm.PMCM_AXIS_X, Pmcm.PMCM_SYNC_OUT_MODE, 1);
if( result != Pmcm.PMCM_RESULT_SUCCESS )
{
outputString = String.Format( "PmcmSetSynchroOut ERROR : 0x{0:X}", result );
MessageBox.Show( outputString, "", MessageBoxButtons.OK, MessageBoxIcon.Stop );
return;
}
// X軸のコンパレータの設定
Comp[0].wConfig = 1;
Comp[0].lCount = 500;
result = Pmcm.SetComparatorConfig( id, Pmcm.PMCM_AXIS_X, Pmcm.PMCM_COMP_COUNTER, Comp );
if( result != Pmcm.PMCM_RESULT_SUCCESS )
{
outputString = String.Format( "PmcmSetComparatorConfig ERROR : 0x{0:X}", result );
MessageBox.Show( outputString, "", MessageBoxButtons.OK, MessageBoxIcon.Stop );
return;
}
}
動作パラメータ設定
int result;
ushort axis;
Pmcm.MOTIONPMCM[] motion = new Pmcm.MOTIONPMCM[2];
string outputString;
axis = Pmcm.PMCM_AXIS_X + Pmcm.PMCM_AXIS_Y;
// X軸
motion[0].wMoveMode = Pmcm.PMCM_PTP; // 動作モード
motion[0].wStartMode = Pmcm.PMCM_CONST; // 起動モード
motion[0].fSpeedRate = 1; // 速度倍率
motion[0].wAccDecMode = Pmcm.PMCM_ACC_LINEAR; // 加減速モード
motion[0].fLowSpeed = 500; // 起動時速度
motion[0].fSpeed = 500; // 移動速度
motion[0].wAccTime = 0; // 加速時間
motion[0].wDecTime = 0; // 減速時間
motion[0].fSAccSpeed = 0; // 加速S字区間
motion[0].fSDecSpeed = 0; // 減速S字区間
motion[0].lSlowdown = -1; // スローダウンポイント
motion[0].lStep = 1000; // 移動パルス数,移動方向
motion[0].bAbsolutePtp = 0; // 絶対座標指定
// Y軸
motion[1].wMoveMode = Pmcm.PMCM_PTP; // 動作モード
motion[1].wStartMode = Pmcm.PMCM_CONST; // 起動モード
motion[1].fSpeedRate = 1; // 速度倍率
motion[1].wAccDecMode = Pmcm.PMCM_ACC_LINEAR; // 加減速モード
motion[1].fLowSpeed = 1000; // 起動時速度
motion[1].fSpeed = 1000; // 移動速度
motion[1].wAccTime = 0; // 加速時間
motion[1].wDecTime = 0; // 減速時間
motion[1].fSAccSpeed = 0; // 加速S字区間
motion[1].fSDecSpeed = 0; // 減速S字区間
motion[1].lSlowdown = -1; // スローダウンポイント
motion[1].lStep = 1000; // 移動パルス数,移動方向
motion[1].bAbsolutePtp = 0; // 絶対座標指定
// 動作パラメータ設定
result = Pmcm.SetMotion( id, axis, motion );
if( result != Pmcm.PMCM_RESULT_SUCCESS )
{
outputString = String.Format( "PmcmSetMotion ERROR : 0x{0:X}", result );
MessageBox.Show( outputString, "", MessageBoxButtons.OK, MessageBoxIcon.Stop );
return;
}
動作開始
int result;
ushort axis;
string outputString;
if( StartMode0.Checked )
{
// 他軸の停止によるスタート
// X軸はY軸の停止を確認して動作しますので、Y軸を先に動作させます
// 同時に動作させてしまうと、その時点でY軸がまだ動作開始前で停止中のため、X軸が動作してしまいます
// 動作開始
result = Pmcm.StartMotion( id, Pmcm.PMCM_AXIS_Y );
if( result != Pmcm.PMCM_RESULT_SUCCESS )
{
outputString = String.Format( "PmcmStartMotion ERROR : 0x{0:X}", result );
MessageBox.Show( outputString, "", MessageBoxButtons.OK, MessageBoxIcon.Stop );
return;
}
// 動作開始
result = Pmcm.StartMotion( id, Pmcm.PMCM_AXIS_X );
if( result != Pmcm.PMCM_RESULT_SUCCESS )
{
outputString = String.Format( "PmcmStartMotion ERROR : 0x{0:X}", result );
MessageBox.Show( outputString, "", MessageBoxButtons.OK, MessageBoxIcon.Stop );
return;
}
}
else if( StartMode1.Checked )
{
// 内部同期信号によるスタート
// 動作開始
axis = Pmcm.PMCM_AXIS_X + Pmcm.PMCM_AXIS_Y;
result = Pmcm.StartMotion( id, axis );
if( result != Pmcm.PMCM_RESULT_SUCCESS )
{
outputString = String.Format( "PmcmStartMotion ERROR : 0x{0:X}", result );
MessageBox.Show( outputString, "", MessageBoxButtons.OK, MessageBoxIcon.Stop );
return;
}
}
動作停止
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 );