C#之雷赛控制板卡-单轴相对点位运动
·
C#之雷赛控制板卡-单轴相对点位运动

UI名称
tbxStartSpeed
tbxRunSpeed
tbxStopSpeed
tbxAccTime
tbxDecTime
tbxSTime
tbxMoveLocation
C#之雷赛控制板卡-点位运动代码操作流程-原理
一 初始化轴卡
/// <summary>
/// 板卡是否初始化成功标志位
/// </summary>
public bool IsInitFlag = false;
// 卡号
ushort CardNum;
// 轴组
ushort[] Axises = new ushort[8];
/// <summary>
/// 初始化轴卡
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
// 1.初始化轴卡,获取返回轴数
short num = LTDMC.dmc_board_init();
// 2.判断是否初始化成功
if (num <= 0 || num > 8)
{
MessageBox.Show("初始化失败!!!");
IsInitFlag = false;
}
// 3.获取卡号
CardNum = 0;
ushort[] CardIdList = new ushort[8];
uint[] CardTypeList = new uint[8];
// 卡号
int num2 = LTDMC.dmc_get_CardInfList(ref CardNum, CardTypeList, CardIdList);
// 4.获取卡的轴数
uint totalAx = 0;
int res = LTDMC.dmc_get_total_axes(CardIdList[0], ref totalAx);
if(res == 0)
{
// 清空内容
comboBox1.Items.Clear();
// 遍历赋值轴组
for (ushort i = 1; i < totalAx; i++)
{
// 赋值轴组
Axises[i] = i;
// 赋值显示下拉框
comboBox1.Items.Add(i);
}
}
// 5.设置初始化是否成功标志位
IsInitFlag= true;
}
二 关闭轴卡
/// <summary>
/// 关闭轴卡
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
if (IsInitFlag) {
// 关闭轴卡
LTDMC.dmc_board_close();
}
}
三 设置运动参数
/// <summary>
/// 设置运动参数
/// </summary>
public void SetParas()
{
// 1.获取参数
// 起始速度
double startSpeed = Convert.ToDouble(tbxStartSpeed.Text.ToString().Trim());
// 运行速度
double runSpeed = Convert.ToDouble(tbxRunSpeed.Text.ToString().Trim());
// 停止速度
double StopSpeed = Convert.ToDouble(tbxStopSpeed.Text.ToString().Trim());
// 加速时间
double AccTime = Convert.ToDouble(tbxAccTime.Text.ToString().Trim());
// 减速时间
double DecTime = Convert.ToDouble(tbxDecTime.Text.ToString().Trim());
// S段时间
double STime = Convert.ToDouble(tbxSTime.Text.ToString().Trim());
// 选择的轴
ushort axis = Axises[comboBox1.SelectedIndex];
// 2.设置参数
if(IsInitFlag)
{
// 2.1 设置S段时间
short res = LTDMC.dmc_set_s_profile(CardNum,axis,0,STime);
if (res != 0) {
MessageBox.Show("设置S段时间失败!");
return;
}
// 2.2.设置轴的运动速度曲线
res = LTDMC.dmc_set_profile(CardNum,axis,startSpeed,runSpeed,AccTime, DecTime, StopSpeed);
if (res != 0)
{
MessageBox.Show("设置运动参数失败!");
return;
}
// 2.3 设置停止时间
res = LTDMC.dmc_set_dec_stop_time(CardNum,axis,DecTime);
if (res != 0)
{
MessageBox.Show("设置停止时间失败!");
return;
}
}
}
四 执行运动
正负值改变方向
/// <summary>
/// 运行
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button3_Click(object sender, EventArgs e)
{
// 1.获取参数
// 1.1 选择的轴
ushort axis = Axises[comboBox1.SelectedIndex];
// 1.2 移动的距离
int distance = Convert.ToInt32(tbxMoveLocation.Text.Trim());
// 1.3 设置为相对运动,0为相对运动,1为绝对运动
ushort mode = 0;
// 2.设置运动参数
SetParas();
// 3.运动
if (IsInitFlag) {
short res = LTDMC.dmc_pmove(CardNum,axis, distance,mode);
if (res != 0)
{
MessageBox.Show("运动失败!");
return;
}
}
}
五 多线程查看运动状态
// 多线程查看运动状态
Task.Run(() =>
{
while (LTDMC.dmc_check_done(CardNum, axis) == 0)
{
Debug.WriteLine("运行中....");
}
var pos = LTDMC.dmc_get_position(CardNum, axis);
Debug.WriteLine($"运行到指定位置:{pos}");
});
五 运动参数说明
在设置单轴运动速度曲线的功能中,各参数的时间和速度含义如下:
速度参数
-
Min_Vel(起始速度)
- 含义:运动开始时轴的初始速度,单位是脉冲每秒(pulse/s)。它表示轴从静止状态开始加速前所具有的速度,在
很多情况下初始速度为0,但也可以设置一个非零值,例如在一些需要平滑启动避免冲击的场景中。
- 含义:运动开始时轴的初始速度,单位是脉冲每秒(pulse/s)。它表示轴从静止状态开始加速前所具有的速度,在
-
Max_Vel(最大速度)
- 含义:轴在运动过程中能够达到的最高速度,单位是脉冲每秒(pulse/s)。这是轴在
匀速运动阶段的速度值,决定了轴运动的快慢。 - 范围:最大值为4M(即4,000,000 pulse/s ),实际使用时需根据电机的额定转速、传动系统的性能等因素合理设置,不能超过电机和机械结构所能承受的极限。
- 含义:轴在运动过程中能够达到的最高速度,单位是脉冲每秒(pulse/s)。这是轴在
-
Stop_Vel(停止速度)
- 含义:轴在停止运动前的速度,单位是脉冲每秒(pulse/s)。当轴需要停止时,会从
当前速度减速到这个停止速度,然后再完全停止。在一些对停止位置精度要求较高的应用中,合理设置停止速度可以减少因惯性导致的定位误差。
- 含义:轴在停止运动前的速度,单位是脉冲每秒(pulse/s)。当轴需要停止时,会从
时间参数
-
Tacc(加速时间)
- 含义:轴从
起始速度(Min_Vel)加速到最大速度(Max_Vel)所需要的时间,单位是秒(s)。它反映了轴加速的快慢程度,加速时间越短,轴加速越快,但同时对电机的扭矩输出和机械结构的承受能力要求也越高。
- 含义:轴从
-
Tdec(减速时间)
- 含义:轴从
当前速度减速到停止速度(Stop_Vel)所需要的时间,单位是秒(s)。与加速时间类似,减速时间反映了轴减速的快慢程度。合理的减速时间设置可以保证轴平稳停止,避免因急停产生的冲击和振动,保护电机和机械结构。
- 含义:轴从
在 dmc_set_s_profile 函数中,S段时间(s_para) 是指运动控制中 S曲线速度规划 的一个关键参数,用于控制轴运动时 加减速阶段的平滑过渡。以下是详细解释:
S段时间(s_para)的含义
S曲线速度规划中控制平滑过渡时间的参数,通过调整它可以优化运动过程中的加速度变化,减少机械冲击。合理设置此参数需结合负载特性、速度要求和设备限制。
设置方法:从小值(如 0.05s)开始测试,逐步增大并观察振动和定位精度,找到最佳平衡点
-
S曲线速度规划的背景
- 在传统的梯形速度规划(T形曲线)中,轴的运动分为 加速→匀速→减速 三个阶段,加速度在加速和减速阶段是恒定的,但可能在阶段切换时产生冲击(如加速度突变)。
- S曲线规划 通过在加速和减速阶段引入 平滑过渡(即加速度本身也随时间变化),减少机械冲击和振动,延长设备寿命。
-
S段时间的作用
- s_para 表示 S曲线中平滑过渡段的持续时间(单位:秒),范围是
0~0.5s。 - 它定义了 从匀加速阶段过渡到匀速阶段(或从匀速阶段过渡到减速阶段)时,加速度变化的缓急程度:
- s_para = 0:退化为梯形速度规划(无平滑过渡,类似传统T形曲线)。
- s_para > 0:启用S曲线,值越大,过渡越平滑(但可能影响总运动时间)。
- s_para 表示 S曲线中平滑过渡段的持续时间(单位:秒),范围是
-
对运动的影响
- 较小的 s_para(如 0.01s):平滑过渡较弱,接近梯形曲线,适合对时间敏感但冲击容忍度较高的场景。
- 较大的 s_para(如 0.5s):平滑过渡强,适合高精度、低振动需求(如半导体设备、CNC加工),但可能增加运动周期时间。
参数 s_mode 的说明
- 函数中
s_mode被标记为 保留参数(固定值为 0),可能是为未来扩展预留的接口(例如选择不同的S曲线算法)。当前版本只需按要求传入0即可。
典型应用场景
- 高精度定位
- 在需要减少残余振动的场景(如光学平台、电子装配),设置
s_para=0.1~0.3s可显著降低末端抖动。
- 在需要减少残余振动的场景(如光学平台、电子装配),设置
- 高速点胶/贴装
- 短S段时间(如 0.02s)可平衡速度与平滑性,避免胶水拉丝或元件位移。
- 重载启停
- 对于大惯量负载(如直线电机),较大的
s_para(如 0.4s)可保护机械结构。
- 对于大惯量负载(如直线电机),较大的
注意事项
- 与 Tacc/Tdec 的关系
- S段时间是附加在
Tacc(加速时间)和Tdec(减速时间)之内的,因此总运动时间会因s_para的增加而延长。
- S段时间是附加在
- 硬件限制
- 不同型号控制卡(如 DMC3C00、DMC3800)对 S段时间的支持可能不同,需参考具体手册。
- 调试建议
- 从小值(如 0.05s)开始测试,逐步增大并观察振动和定位精度,找到最佳平衡点。
六 补充:官方API介绍



更多推荐

所有评论(0)