雷赛板卡 控制常用方法 工具类

雷赛板卡 控制常用方法 工具类

#region DMC3000系列重写

///

/// 雷赛板卡 AxisDMC3000

///

public class DMC3000 : AxisModel

{

public DMC3000() { }

///

/// 回零

///

///

public override bool Home()

{

var a = LTDMC.dmc_set_home_profile_unit(CardNum, AxisNum, Param.HomevelL, Param.HomevelH, Param.T_acc, Param.T_dec);

//设置回原点模式

//home_dir 回零方向,0:负向,1:正向

//vel_mode 回零速度模式:0:低速回零,1:高速回零

//mode 回零模式:0:一次回零,1:一次回零加回找,2:二次回零,3:原点加同向 EZ,4:单独记一个 EZ,5:原点加反向 EZ,6:原点锁存,7:原点锁存加同向 EZ,8:单独记一个 EZ 锁存,9:原点锁存加反向 EZ

//EZ_count 锁存源,0:锁存指令位置;1:锁存编码器位置

var b = LTDMC.dmc_set_homemode(CardNum, AxisNum, Param.HomeDir, Param.HomeSpeedMode, Param.HomeMode, 0);

//回原点运动

var c = LTDMC.dmc_home_move(CardNum, AxisNum);

WaitMoveDone();

Thread.Sleep(250);

ClearMotorPos();

return true;

}

///

/// 设置指令脉冲位置为零点

///

public void ClearMotorPos()

{

//设置指令脉冲位置为零点

//current_position 指令脉冲位置,单位:pulse

LTDMC.dmc_set_position(CardNum, AxisNum, 0);

//设置指定轴编码器脉冲计数值

//encoder_value 编码器计数值,单位:pulse

LTDMC.dmc_set_encoder(CardNum, AxisNum, 0);

IsHomed = true;

}

///

/// 设置运行速度

///

private void SetAxisParam()

{

//单轴运动速度曲线设置函数

//参 数:CardNo 控制卡卡号

// axis 指定轴号,取值范围:DMC5C00:0~11,DMC5800:0~7,DMC5600:0~5

// DMC5400A:0~3

// Min_Vel 起始速度,单位:pulse / s(最大值为 2M)

// Max_Vel 最大速度,单位:pulse / s(最大值为 2M)

// Tacc 加速时间,单位:s(最小值为 0.001s)

// Tdec 减速时间,单位:s(最小值为 0.001s)

// Stop_Vel 停止速度,单位:pulse / s(最大值为 2M)

LTDMC.dmc_set_profile(CardNum, AxisNum, Param.Vel_Start, Param.Vel_Run, Param.T_acc, Param.T_dec, Param.Vel_Stop);

//设置单轴速度曲线 S 段参数值

LTDMC.dmc_set_s_profile(CardNum, AxisNum, 0, Param.T_Spara);

//设置减速停止时间

LTDMC.dmc_set_dec_stop_time(CardNum, AxisNum, Param.T_Stop);

}

///

/// 获取使能(使用)状态

///

/// 是否

public override bool GetAxisServoSts()

{

return LTDMC.dmc_get_sevon_enable(CardNum, AxisNum) == 0;

}

///

/// 使能(使用)

///

///

///

public override bool AxisServo(bool servo)

{

ushort svo = (ushort)(servo ? 1 : 0);

//控制指定轴的伺服使能端口的输出

//on_off 设置伺服使能端口电平,0:低电平,1:高电平

return LTDMC.dmc_write_sevon_pin(CardNum, AxisNum, svo) == 0;

}

///

/// 根据位置名称 获取位置 点位值

///

/// 位置名称

/// 点位值

public override double GetAxisPosList(string axisPosName)

{

//foreach (var item in PosList)

//{

// if (item.Name == axisPosType)

// return item.Position;

//}

double position = 0;

if (PosList != null && PosList.Count > 0)

{

var posObj = PosList.FirstOrDefault(t=>t.Name.Equals(axisPosName));

if (posObj != null)

{

position = posObj.Position;

}

}

return position;

}

///

/// 绝对运动

///

/// 运动位置

///

public override bool MoveAbs(double pos)

{

try

{

int dis = (int)(pos * Param.PulseRatio);

SetAxisParam();

//单轴运动函数

//Dist 目标位置,单位:pulse,范围:-134217728~+134217728

//posi_mode 运动模式,0:相对坐标模式,1:绝对坐标模式

LTDMC.dmc_pmove(CardNum, AxisNum, dis, 1);

return true;

}

catch (Exception)

{

return false;

}

}

///

/// 移动到指定位置

///

/// 位置名称

///

public override bool MoveAbs(string posname)

{

try

{

int dis = (int)(GetAxisPosList(posname) * Param.PulseRatio);

SetAxisParam();

//单轴运动函数

//Dist 目标位置,单位:pulse,范围:-134217728~+134217728

//posi_mode 运动模式,0:相对坐标模式,1:绝对坐标模式

LTDMC.dmc_pmove(CardNum, AxisNum, dis, 1);

return true;

}

catch (Exception)

{

return false;

}

}

///

/// 步进运动

///

/// 步进距离

///

public override bool MoveInc(double pos)

{

try

{

int incdis = (int)(pos * Param.PulseRatio);

SetAxisParam();

//单轴运动函数

//Dist 目标位置,单位:pulse,范围:-134217728~+134217728

//posi_mode 运动模式,0:相对坐标模式,1:绝对坐标模式

LTDMC.dmc_pmove(CardNum, AxisNum, incdis, 0);

return true;

}

catch (Exception)

{

return false;

}

}

public override bool MoveInc(double pos , double speed)

{

try

{

int incdis = (int)(pos * Param.PulseRatio);

//单轴运动速度曲线设置函数

//参 数:CardNo 控制卡卡号

// axis 指定轴号,取值范围:DMC5C00:0~11,DMC5800:0~7,DMC5600:0~5

// DMC5400A:0~3

// Min_Vel 起始速度,单位:pulse / s(最大值为 2M)

// Max_Vel 最大速度,单位:pulse / s(最大值为 2M)

// Tacc 加速时间,单位:s(最小值为 0.001s)

// Tdec 减速时间,单位:s(最小值为 0.001s)

// Stop_Vel 停止速度,单位:pulse / s(最大值为 2M)

LTDMC.dmc_set_profile(CardNum, AxisNum, Param.Vel_Start, speed, Param.T_acc, Param.T_dec, Param.Vel_Stop);

//设置单轴速度曲线 S 段参数值

LTDMC.dmc_set_s_profile(CardNum, AxisNum, 0, Param.T_Spara);

//设置减速停止时间

LTDMC.dmc_set_dec_stop_time(CardNum, AxisNum, Param.T_Stop);

//单轴运动函数

//Dist 目标位置,单位:pulse,范围:-134217728~+134217728

//posi_mode 运动模式,0:相对坐标模式,1:绝对坐标模式

LTDMC.dmc_pmove(CardNum, AxisNum, incdis, 0);

return true;

}

catch (Exception)

{

return false;

}

}

///

/// 运动

///

///

///

public override bool Jog(bool dir)

{

try

{

int direction = dir ? 1 : 0;

SetAxisParam();

//单轴运动函数

//Dist 目标位置,单位:pulse,范围:-134217728~+134217728

//posi_mode 运动模式,0:相对坐标模式,1:绝对坐标模式

LTDMC.dmc_vmove(CardNum, AxisNum, (ushort)direction);

return true;

}

catch (Exception)

{

return false;

}

}

///

/// 运动

///

///

///

///

public override bool Jog(double speed, bool dir)

{

try

{

int direction = dir ? 1 : 0;

//单轴运动速度曲线设置函数

//参 数:CardNo 控制卡卡号

// axis 指定轴号,取值范围:DMC5C00:0~11,DMC5800:0~7,DMC5600:0~5

// DMC5400A:0~3

// Min_Vel 起始速度,单位:pulse / s(最大值为 2M)

// Max_Vel 最大速度,单位:pulse / s(最大值为 2M)

// Tacc 加速时间,单位:s(最小值为 0.001s)

// Tdec 减速时间,单位:s(最小值为 0.001s)

// Stop_Vel 停止速度,单位:pulse / s(最大值为 2M)

LTDMC.dmc_set_profile(CardNum, AxisNum, Param.Vel_Start, speed, Param.T_acc, Param.T_dec, Param.Vel_Stop);

//设置单轴速度曲线 S 段参数值

LTDMC.dmc_set_s_profile(CardNum, AxisNum, 0, Param.T_Spara);

//设置减速停止时间

LTDMC.dmc_set_dec_stop_time(CardNum, AxisNum, Param.T_Stop);

//单轴运动函数

//Dist 目标位置,单位:pulse,范围:-134217728~+134217728

//posi_mode 运动模式,0:相对坐标模式,1:绝对坐标模式

LTDMC.dmc_vmove(CardNum, AxisNum, (ushort)direction);

return true;

}

catch (Exception)

{

return false;

}

}

///

/// 运动

///

///

///

public override bool Jog(double speed)

{

try

{

speed *= 1000;

int direction = (speed >= 0) ? 1 : 0;

//单轴运动速度曲线设置函数

//参 数:CardNo 控制卡卡号

// axis 指定轴号,取值范围:DMC5C00:0~11,DMC5800:0~7,DMC5600:0~5

// DMC5400A:0~3

// Min_Vel 起始速度,单位:pulse / s(最大值为 2M)

// Max_Vel 最大速度,单位:pulse / s(最大值为 2M)

// Tacc 加速时间,单位:s(最小值为 0.001s)

// Tdec 减速时间,单位:s(最小值为 0.001s)

// Stop_Vel 停止速度,单位:pulse / s(最大值为 2M)

LTDMC.dmc_set_profile(CardNum, AxisNum, Param.Vel_Start, speed, Param.T_acc, Param.T_dec, Param.Vel_Stop);

//设置单轴速度曲线 S 段参数值

LTDMC.dmc_set_s_profile(CardNum, AxisNum, 0, Param.T_Spara);

//设置减速停止时间

LTDMC.dmc_set_dec_stop_time(CardNum, AxisNum, Param.T_Stop);

//单轴运动函数

//Dist 目标位置,单位:pulse,范围:-134217728~+134217728

//posi_mode 运动模式,0:相对坐标模式,1:绝对坐标模式

LTDMC.dmc_vmove(CardNum, AxisNum, (ushort)direction);

return true;

}

catch (Exception)

{

return false;

}

}

///

/// 停 止

///

///

public override bool Stop()

{

//停止坐标系内所有轴的运动

//参 数:CardNo 控制卡卡号

// axis 指定轴号,取值范围:DMC5C00:0~11,DMC5800:0~7,DMC5600:0~5DMC5400A:0~3

// stop_mode 制动方式,0:减速停止,1:立即停止

return LTDMC.dmc_stop(CardNum, AxisNum, 0) == 0;

}

///

/// 获取当前轴位置值

///

///

public override double GetCurPos()

{

double dunitPos = 0;

//读取指定轴编码器反馈位置脉冲计数值

dunitPos = LTDMC.dmc_get_encoder(CardNum, AxisNum);

//LTDMC.dmc_get_position_unit(CardNum, AxisNum, ref dunitPos); //读取指定轴指令位置值

return dunitPos / Param.PulseRatio;

}

///

/// 获取移动是否完成

///

///

public bool GetMoveDone()

{

//检测坐标系的运动状态

//返回值:坐标系状态,0:正在使用中,1:正常停止

return LTDMC.dmc_check_done(CardNum, AxisNum) == 1;

}

///

/// 等待移动是否完成

///

///

public override bool WaitMoveDone()

{

int totalCount = 10000;

int index = 1;

while (!GetMoveDone())

{

if (index > totalCount)

{

throw new Exception("等待移动是否完成 进入死循环");

}

Thread.Sleep(10);

}

int stopReason = -1;

//读取指定轴的停止原因

//StopReason 停止原因:

//0:正常停止

LTDMC.dmc_get_stop_reason(CardNum, AxisNum, ref stopReason);

if (stopReason == 0 || stopReason == 5)

return true;

else

return false;

}

///

/// 获取轴状态

///

/// 卡号

///

/// 是否报警

///

public override string GetAxisStatus(ushort _cardNo, ushort axis, out bool isAxisAlarm)

{

string AxisState = string.Empty;

ushort Axis_State_machine = 0;

isAxisAlarm = true;

LTDMC.nmc_get_axis_state_machine(_cardNo, axis, ref Axis_State_machine);

switch (Axis_State_machine)// 读取指定轴状态机

{

case 0:

AxisState = "轴处于未启动状态";

isAxisAlarm = false;

break;

case 1:

AxisState = "轴处于启动禁止状态";

isAxisAlarm = true;

break;

case 2:

AxisState = "轴处于准备启动状态";

isAxisAlarm = false;

break;

case 3:

AxisState = "轴处于启动状态";

isAxisAlarm = false;

break;

case 4:

AxisState = "轴处于操作使能状态";

isAxisAlarm = false;

break;

case 5:

AxisState = "轴处于停止状态";

isAxisAlarm = false;

break;

case 6:

AxisState = "轴处于错误触发状态";

isAxisAlarm = true;

break;

case 7:

AxisState = "轴处于错误状态";

isAxisAlarm = true;

break;

default:

AxisState = "轴处于错误状态";

isAxisAlarm = true;

break;

};

return AxisState;

}

}

#endregion

posted @

2023-09-10 18:09

baivfhpwxf

阅读(1635)

评论(0)

收藏

举报