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}");
        });

五 运动参数说明

在设置单轴运动速度曲线的功能中,各参数的时间和速度含义如下:

速度参数

  1. Min_Vel(起始速度)

    • 含义:运动开始时轴的初始速度,单位是脉冲每秒(pulse/s)。它表示轴从静止状态开始加速前所具有的速度,在很多情况下初始速度为0,但也可以设置一个非零值,例如在一些需要平滑启动避免冲击的场景中。
  2. Max_Vel(最大速度)

    • 含义:轴在运动过程中能够达到的最高速度,单位是脉冲每秒(pulse/s)。这是轴在匀速运动阶段的速度值决定了轴运动的快慢
    • 范围:最大值为4M(即4,000,000 pulse/s ),实际使用时需根据电机的额定转速、传动系统的性能等因素合理设置,不能超过电机和机械结构所能承受的极限。
  3. Stop_Vel(停止速度)

    • 含义:轴在停止运动前的速度,单位是脉冲每秒(pulse/s)。当轴需要停止时,会从当前速度减速到这个停止速度然后再完全停止。在一些对停止位置精度要求较高的应用中,合理设置停止速度可以减少因惯性导致的定位误差。

时间参数

  1. Tacc(加速时间)

    • 含义:轴从起始速度(Min_Vel)加速到最大速度(Max_Vel)所需要的时间,单位是秒(s)。它反映了轴加速的快慢程度,加速时间越短,轴加速越快,但同时对电机的扭矩输出和机械结构的承受能力要求也越高。
  2. Tdec(减速时间)

    • 含义:轴从当前速度减速到停止速度(Stop_Vel)所需要的时间,单位是秒(s)。与加速时间类似,减速时间反映了轴减速的快慢程度。合理的减速时间设置可以保证轴平稳停止,避免因急停产生的冲击和振动,保护电机和机械结构。

dmc_set_s_profile 函数中,S段时间(s_para) 是指运动控制中 S曲线速度规划 的一个关键参数,用于控制轴运动时 加减速阶段的平滑过渡。以下是详细解释:


S段时间(s_para)的含义

S曲线速度规划中控制平滑过渡时间的参数,通过调整它可以优化运动过程中的加速度变化,减少机械冲击。合理设置此参数需结合负载特性、速度要求和设备限制。


设置方法:从小值(如 0.05s)开始测试,逐步增大并观察振动和定位精度,找到最佳平衡点


  1. S曲线速度规划的背景

    • 在传统的梯形速度规划(T形曲线)中,轴的运动分为 加速→匀速→减速 三个阶段,加速度在加速和减速阶段是恒定的,但可能在阶段切换时产生冲击(如加速度突变)。
    • S曲线规划 通过在加速和减速阶段引入 平滑过渡(即加速度本身也随时间变化),减少机械冲击和振动,延长设备寿命。
  2. S段时间的作用

    • s_para 表示 S曲线中平滑过渡段的持续时间(单位:秒),范围是 0~0.5s
    • 它定义了 从匀加速阶段过渡到匀速阶段(或从匀速阶段过渡到减速阶段)时,加速度变化的缓急程度:
      • s_para = 0:退化为梯形速度规划(无平滑过渡,类似传统T形曲线)。
      • s_para > 0:启用S曲线,值越大,过渡越平滑(但可能影响总运动时间)。
  3. 对运动的影响

    • 较小的 s_para(如 0.01s):平滑过渡较弱,接近梯形曲线,适合对时间敏感但冲击容忍度较高的场景。
    • 较大的 s_para(如 0.5s):平滑过渡强,适合高精度、低振动需求(如半导体设备、CNC加工),但可能增加运动周期时间。

参数 s_mode 的说明

  • 函数中 s_mode 被标记为 保留参数(固定值为 0),可能是为未来扩展预留的接口(例如选择不同的S曲线算法)。当前版本只需按要求传入 0 即可。

典型应用场景

  1. 高精度定位
    • 在需要减少残余振动的场景(如光学平台、电子装配),设置 s_para=0.1~0.3s 可显著降低末端抖动。
  2. 高速点胶/贴装
    • 短S段时间(如 0.02s)可平衡速度与平滑性,避免胶水拉丝或元件位移。
  3. 重载启停
    • 对于大惯量负载(如直线电机),较大的 s_para(如 0.4s)可保护机械结构。

注意事项

  1. 与 Tacc/Tdec 的关系
    • S段时间是附加在 Tacc(加速时间)和 Tdec(减速时间)之内的,因此总运动时间会因 s_para 的增加而延长。
  2. 硬件限制
    • 不同型号控制卡(如 DMC3C00、DMC3800)对 S段时间的支持可能不同,需参考具体手册。
  3. 调试建议
    • 从小值(如 0.05s)开始测试,逐步增大并观察振动和定位精度,找到最佳平衡点。

六 补充:官方API介绍

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐