一、点位运动
什么是点位运动?
点位运动是指:运动控制器控制运动平台从
当前位置开始以设定的速度运动到指定位置后
准确地停止。
点位运动
只关注终点坐标
,对运动轨迹的精度没有要求。点位运动的运动距离由脉冲数决
定,运动速度由脉冲频率决定。

点位运动的实现
单轴运动速度曲线设置
1、指定轴点位运动
ushort _cardNo = 0;
ushort _axisNo = 0;
int _dist = 10; // 目标位置 是脉冲 pulse
ushort _posi_mode=1; // 运动模式 0 相对坐标模式 1 绝对坐标模式
// 指定轴点位运动
LTDMC.dmc_pmove(_cardNo, _axisNo, _dist,_posi_mode);
// * 注意 ; 当运动模式为相对坐标模式的时候,_dist》0 表示正向运动 _dist《0 反向运动
2、设置单轴运动速度曲线
// 设置单轴运动速度曲线
double _startSpeed = 100;// 起始速度 单位是 脉冲 pulse/s
double _maxSpeed = 200;// 最大速度 单位是 脉冲 pulse/s
double _tacc = 0.001; // 加速时间0.001s
double _tdec = 0.001; // 减速时间 0.001s
double _stopSpeed = 10;// 停止速度 单位是 脉冲 pulse/ s
LTDMC.dmc_set_acc_profile(_cardNo, _axisNo, _startSpeed, _maxSpeed, _tacc, _tdec, _stopSpeed);
改变速度、改变终点位置
1、在线改变指定轴的当前运动速度
// 在线改变指定轴的当前运动速度
ushort _currVel = 2000; //Curr_Vel 改变后的运动速度,单位:pulse/s
ushort _taccdec = 200; // 保留参数,固定值为 0
LTDMC.dmc_change_speed(_cardNo, _axisNo, _currVel, _taccdec);
2、在线改变指定轴的当前目标位置
//在线改变指定轴的当前目标位置
int _targetPosition = 1000; // 目标位置,单位:pulse
ushort _positionMode = 0;
LTDMC.dmc_reset_target_position(_cardNo, _axisNo, _targetPosition, _positionMode);
3、 强行改变指定轴的当前目标位置(在线/非在线)
//强行改变指定轴的当前目标位置(在线/非在线)
LTDMC.dmc_update_target_position(_cardNo, _axisNo, _targetPosition, _positionMode);
4、指定轴按固定曲线做分段定长位移运动(可实现软着陆功能)、
ushort _midPos = 2000; // _midPos 第一段运动终点位置,单位:pulse
ushort _targetPos = 4000; //_targetPos 第二段运动终点位置,单位:pulse
ushort _startSpeed1 = 204; //_startSpeed1 起始速度,单位:pulse / s
ushort _maxSpeed1 = 300; //_maxSpeed1 最大速度,单位:pulse / s
ushort _stopSpeed1 = 300; //_stopSpeed1 停止速度(第二段运动的运行速度),单位:pulse / s
ushort _acc = 300; //_acc 加速时间,单位:S
ushort _dec = 300; //_dec 减速时间,单位:S
ushort _posiMode = 1; //posi_mode 0 相对模式,1 绝对模式
LTDMC.dmc_t_pmove_extern(_cardNo, _axisNo, _midPos, _targetPos, _startSpeed1, _maxSpeed1,
_stopSpeed1, _acc,_dec,_posi_mode);
S 形速度曲线运动模式
设置 S 段曲线参数值 
//设置单轴速度曲线 S 段参数值
ushort _sMode = 0;
double _sParamers = 0.1f; // S 段时间,单位:s;范围:0~0.5 s
LTDMC.dmc_set_s_profile(_cardNo, _axisNo, _sMode, _sParamers);
多轴联动
多轴同时做点位运动,称之为多轴联动。
卡可以控制多个电机同时执行 dmc_pmove 这类单轴运动函数。所谓同时执行, 是在程序中顺序调用 dmc_pmove 等函数,因为程序执行速度很快,在几微秒内电机都开始运动, 感觉是同时开始运动
CODE
public int Jog()
{
ushort _cardNo = 0;
ushort _axisNo = 0;
int _dist = 10; // 目标位置 是脉冲 pulse
ushort _posi_mode=1; // 运动模式 0 相对坐标模式 1 绝对坐标模式
// 指定轴点位运动
LTDMC.dmc_pmove(_cardNo, _axisNo, _dist,_posi_mode);
// * 注意 ; 当运动模式为相对坐标模式的时候,_dist》0 表示正向运动 _dist《0 反向运动
// 设置单轴运动速度曲线
double _startSpeed = 100;// 起始速度 单位是 脉冲 pulse/s
double _maxSpeed = 200;// 最大速度 单位是 脉冲 pulse/s
double _tacc = 0.001; // 加速时间0.001s
double _tdec = 0.001; // 减速时间 0.001s
double _stopSpeed = 10;// 停止速度 单位是 脉冲 pulse/ s
LTDMC.dmc_set_acc_profile(_cardNo, _axisNo, _startSpeed, _maxSpeed, _tacc, _tdec, _stopSpeed);
ushort direct = 1; // 运动方向 0 负方向 1 正方向
LTDMC.dmc_vmove(_cardNo, _axisNo, direct);
// 在线改变指定轴的当前运动速度
ushort _currVel = 2000; //Curr_Vel 改变后的运动速度,单位:pulse/s
ushort _taccdec = 200; // 保留参数,固定值为 0
LTDMC.dmc_change_speed(_cardNo, _axisNo, _currVel, _taccdec);
//在线改变指定轴的当前目标位置
int _targetPosition = 1000; // 目标位置,单位:pulse
ushort _positionMode = 0;
LTDMC.dmc_reset_target_position(_cardNo, _axisNo, _targetPosition, _positionMode);
//强行改变指定轴的当前目标位置(在线/非在线)
LTDMC.dmc_update_target_position(_cardNo, _axisNo, _targetPosition, _positionMode);
ushort _midPos = 2000; // _midPos 第一段运动终点位置,单位:pulse
ushort _targetPos = 4000; //_targetPos 第二段运动终点位置,单位:pulse
ushort _startSpeed1 = 204; //_startSpeed1 起始速度,单位:pulse / s
ushort _maxSpeed1 = 300; //_maxSpeed1 最大速度,单位:pulse / s
ushort _stopSpeed1 = 300; //_stopSpeed1 停止速度(第二段运动的运行速度),单位:pulse / s
ushort _acc = 300; //_acc 加速时间,单位:S
ushort _dec = 300; //_dec 减速时间,单位:S
ushort _posiMode = 1; //posi_mode 0 相对模式,1 绝对模式
LTDMC.dmc_t_pmove_extern(_cardNo, _axisNo, _midPos, _targetPos, _startSpeed1, _maxSpeed1,
_stopSpeed1, _acc,_dec,_posi_mode);
//设置单轴速度曲线 S 段参数值
ushort _sMode = 0;
double _sParamers = 0.1f; // S 段时间,单位:s;范围:0~0.5 s
LTDMC.dmc_set_s_profile(_cardNo, _axisNo, _sMode, _sParamers);
return 0;
}
二、连续运动
什么是连续运动?
连续运动是指:电机从起始速度开始运行,加速至最大速度后连续运动;只有当接收到停
止指令或外部停止信号后,才减速停止。
连续运动指令其实就是速度控制指令,国外运动控制器将此指令称为 JOG 指令。

该功能的主要用途是:速度控制,如:传送带的速度、包装机连续送料速度等
指定轴连续运动
CODE
ushort direct = 1; // 运动方向 0 负方向 1 正方向
LTDMC.dmc_vmove(_cardNo, _axisNo, direct);
三、插补运动
什么是插补运动?
为了实现轨迹控制,运动控制卡按照一定的控制策略控制多轴联动,使运动平台用微小直线段精确地逼近轨迹的理论曲线,保证运动平台从起点到终点上的所有轨迹点都控制在允许误
差范围内。这种控制策略称为插补算法,因此轨迹运动通常称为插补运动。插补运动有许多种 类,如:直线插补、圆弧插补、螺旋线插补、抛物线插补等。

直线插补运动
两轴直线插补
进行2-11轴同时作用的时候就需要插补,如图
XY两个轴同时运动,并且同时到达终点,X、Y 轴的运动速度之比为 ΔX:ΔY,二轴合成的
矢量速度为:
插补速度曲线设置函数
三轴直线插补
在 X、Y、Z 轴内直线插补,从 P0 点运动至 P1 点。插补过程中 3 轴的速 度比为 ΔX:ΔY:ΔZ,三轴合成的矢量速度为:

四轴直线插补
4 轴插补可以理解为在 4 维空间里的直 线插补。一般情况是 3 个轴进行直线插补, 另一个旋转轴也按照一定的比例关系和这条 空间直线一起运动。其合成矢量速度为:

函数
设置插补速度
直线插补运动
// 直线插补
ushort _cardNo = 0;
ushort _axisNo = 0;
ushort _minSpeed = 0; //_minSpeed ,单位:pulse / s
ushort _maxSpeed1 = 300; //_maxSpeed1 合成最大速度,单位:pulse / s
ushort _acc = 300; //_acc 加速时间,单位:S
ushort _dec = 300; //_dec 减速时间,单位:S
ushort _stopVel = 1; //
LTDMC.dmc_set_vector_profile_multicoor(_cardNo, _axisNo, _minSpeed, _maxSpeed1, _acc, _dec,_stopVel);
ushort _axisNum = 1; // 插补轴数,取值范围:DMC3C00:0~11,DMC3800:0~7,DMC3600:0~5 DMC3400A:0~3
ushort[] axisList=new ushort[9]; //插补轴列表
int[] _distList = new int[9]; //_distList 插补轴目标位置列表,单位:pulse
ushort _posiMode = 1; //posi_mode 0 相对模式,1 绝对模式
LTDMC.dmc_line_multicoor(_cardNo, _axisNo, _axisNum, axisList, _distList, _posiMode);
圆弧插补运动
设置插补速度
两轴圆弧插补运动
// 圆弧插补
int[] _targetPos = new int[10]; //Target_Pos 终点坐标,单位:pulse
int [] _centerPos = new int[10]; //Cen_Pos 圆心坐标,单位:pulse
ushort _arcDirect = 1; //Arc_Dir 圆弧方向,0:顺时针,1:逆时针
LTDMC.dmc_arc_move_multicoor(_cardNo, _axisNo, axisList, _targetPos, _centerPos, _arcDirect, _posiMode);
CODE
public int SetInterpolation()
{
// 直线插补
ushort _cardNo = 0;
ushort _axisNo = 0;
ushort _minSpeed = 0; //_minSpeed ,单位:pulse / s
ushort _maxSpeed1 = 300; //_maxSpeed1 合成最大速度,单位:pulse / s
ushort _acc = 300; //_acc 加速时间,单位:S
ushort _dec = 300; //_dec 减速时间,单位:S
ushort _stopVel = 1; //
LTDMC.dmc_set_vector_profile_multicoor(_cardNo, _axisNo, _minSpeed, _maxSpeed1, _acc, _dec,_stopVel);
ushort _axisNum = 1; // 插补轴数,取值范围:DMC3C00:0~11,DMC3800:0~7,DMC3600:0~5 DMC3400A:0~3
ushort[] axisList=new ushort[9]; //插补轴列表
int[] _distList = new int[9]; //_distList 插补轴目标位置列表,单位:pulse
ushort _posiMode = 1; //posi_mode 0 相对模式,1 绝对模式
LTDMC.dmc_line_multicoor(_cardNo, _axisNo, _axisNum, axisList, _distList, _posiMode);
// 圆弧插补
int[] _targetPos = new int[10]; //Target_Pos 终点坐标,单位:pulse
int [] _centerPos = new int[10]; //Cen_Pos 圆心坐标,单位:pulse
ushort _arcDirect = 1; //Arc_Dir 圆弧方向,0:顺时针,1:逆时针
LTDMC.dmc_arc_move_multicoor(_cardNo, _axisNo, axisList, _targetPos, _centerPos, _arcDirect, _posiMode);
return 0;
}