雷塞运动控制(DMC3800)C#基础应用案例分享

1、引入类库

引入雷塞的类文件库和dll,LTDMC.cs和LTDMC.dll

2、获取板卡基本信息

复制代码
     /// <summary>
     /// 初始化卡
     /// </summary>
     /// <param name="sender"></param>
     /// <param name="e"></param>
     private void Btn_Init_Click(object sender, EventArgs e)
     {
         short res;
         // 初始化按钮
         Btn_Init.Enabled = false;
         Btn_Close.Enabled = true;
         // 初始化卡
         res = LTDMC.dmc_board_init();
         if (res <=0 || res > 8)
         {
             Console.WriteLine("初始化轴卡失败");
             return;
         }
         ushort cardNum = 0;
         uint[] cardTypes = new uint[8];
         ushort[] cardIds = new ushort[8];
         // 获取卡号
         res = LTDMC.dmc_get_CardInfList(ref cardNum, cardTypes, cardIds);
         if (res == 0)
         {
             _CardNO = cardIds[0];
         }
         uint totalAxis = 0;
         // 初始化卡轴号列表
         res = LTDMC.dmc_get_total_axes(_CardNO, ref totalAxis);
         if (res == 0)
         {
             comboBox_axis.Items.Clear();

             for (ushort i = 0; i < totalAxis; i++)
             {
                 axises[i] = i;
                 // 填充列表框的项
                 comboBox_axis.Items.Add($"{i}-Axis");
             }
         }
         comboBox_axis.SelectedIndex= 0;
         mb_init = true;
     }

1.初始化轴卡

2.获取轴硬件id和固件版本

3.获取当前卡的轴数

(以上是一张卡的情况,所以CardTypeList[0]索引0位,如果存在多卡,则需要再做遍历)

3.关闭轴卡

复制代码
        /// <summary>
        /// 关闭轴卡
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_close_Click(object sender, EventArgs e)
        {
            LTDMC.dmc_board_close();
        }

4.运动参数设置

复制代码
        /// <summary>
        /// 设置运动参数
        /// </summary>
        private void SetMoveParameters()
        {
            // 起始速度
            double start = decimal.ToDouble(numericUpDown_startVel.Value);
            // 运行速度
            double speed = decimal.ToDouble(numericUpDown_vel.Value);
            // 停止速度
            double stop = decimal.ToDouble(numericUpDown_stopVel.Value);
            // 获取加速时间
            double acc = decimal.ToDouble(numericUpDown_acc.Value);
            // 获取减速时间
            double dec = decimal.ToDouble(numericUpDown_dec.Value);
            // 获取S段时间
            double s = decimal.ToDouble(numericUpDown_spara.Value);

            // 获取当前选择的轴卡号
            ushort axis = axises[comboBox_axis.SelectedIndex];

            if (mb_init)
            {
                // 设置s段时间
                short res = LTDMC.dmc_set_s_profile(_CardNO, axis, 0, s);
                if (res != 0)
                {
                    Console.WriteLine($"dmc_set_s_profile=={res}");
                    return;
                }

                // 设置单轴运动速度曲线
                res = LTDMC.dmc_set_profile(_CardNO, axis, start, speed, acc, dec, stop);
                if (res != 0)
                {
                    Console.WriteLine($"dmc_set_profile=={res}");
                    return;
                }
                // 设置停止时间
                res = LTDMC.dmc_set_dec_stop_time(_CardNO, axis, dec);
                if (res != 0)
                {
                    Console.WriteLine($"dmc_set_dec_stop_time=={res}");
                    return;
                }
            }
        }

需要设置参数起始速度、运行速度、停止速度、加速时间、减速时间、S段时间(加减速时间)、停止时间,以上设置都必须继续当前轴的卡号_CardNO和轴号axis。

5.执行运动控制

复制代码
/// <summary>
/// 执行运动功能实现
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button_start_Click(object sender, EventArgs e)
{
    // 设置运动参数
    SetMoveParameters();
    // 获取运行的距离
    double dist = decimal.ToDouble(numericUpDown_movePos.Value);
    // 获取运行模式
    ushort mode = (ushort)(radioButton_rel.Checked ? 0 : 1);
    if (mb_init)
    {
        // 执行运动(运行位置大于0 正向运动,小于0 负向运动)
        short res = LTDMC.dmc_pmove(_CardNO, axises[comboBox_axis.SelectedIndex], (int)dist, mode);
        if (res != 0)
        {
            Console.WriteLine($"dmc_pmove=={res}");
        }
    }
}

基于以上代码,运动需要设置相对运动或者绝对运行的模式选择mode,需要基于卡号_CardNO和轴号axises[comboBox_axis.SelectedIndex],最后结合运动的距离,直线运动执行。

相关推荐
小陈工33 分钟前
Python Web开发入门(十七):Vue.js与Python后端集成——让前后端真正“握手言和“
开发语言·前端·javascript·数据库·vue.js·人工智能·python
H Journey37 分钟前
C++之 CMake、CMakeLists.txt、Makefile
开发语言·c++·makefile·cmake
rockey6274 小时前
AScript如何实现中文脚本引擎
c#·.net·script·eval·expression·function·动态脚本
lly2024065 小时前
C 标准库 - `<stdio.h>`
开发语言
沫璃染墨5 小时前
C++ string 从入门到精通:构造、迭代器、容量接口全解析
c语言·开发语言·c++
jwn9995 小时前
Laravel6.x核心特性全解析
开发语言·php·laravel
迷藏4945 小时前
**发散创新:基于Rust实现的开源合规权限管理框架设计与实践**在现代软件架构中,**权限控制(RBAC)** 已成为保障
java·开发语言·python·rust·开源
功德+n6 小时前
Linux下安装与配置Docker完整详细步骤
linux·运维·服务器·开发语言·docker·centos
明日清晨6 小时前
python扫码登录dy
开发语言·python
我是唐青枫6 小时前
C#.NET gRPC 深入解析:Proto 定义、流式调用与服务间通信取舍
开发语言·c#·.net