首页 > 编程语言 >C#雷赛运动控制卡学习记录

C#雷赛运动控制卡学习记录

时间:2024-07-18 16:27:04浏览次数:20  
标签:Convert Checked C# 雷赛 控制卡 Dmc1000 d1000 true axis

用C#实现雷赛运动控制卡的基础运动控制
去雷赛官网下载雷赛运动控制卡对应版本的驱动和Motion软件,安装好对应驱动用官方Motion软件测试控制卡能否正常运行。

用visual studio创建一个C#项目

去官网下载雷赛运动控制卡对应版本的函数库和头文件,以及对应的手册。

把dll文件复制到刚刚创建的C#项目bin文件夹下的debug文件夹里,把C#函数库复制进项目中,打开项目右键解决方案,重新生成解决方案

打开窗体设计,给窗体添加控件

导入雷赛函数库的命名空间

using csDmc1000;

给按钮绑定事件

private int res;
private int cardnumber
private void connect_button_Click(object sender, EventArgs e)
{
	cardnumber_comboBox.Items.Clear();  //清空卡号的下拉框
  res = Dmc1000.d1000_board_init();	 //为控制卡分配系统资源,并初始化控制卡。返回值为控制卡卡数。0表示没有卡
  if (res <= 0 || res > 12)   
	{
    Console.WriteLine("连接板卡失败");   
	}
  else
  {
  	connect_button.Enable = false;  //关闭连接按钮
    disconnect_button.Enable = true;  //打开断开按钮
    start_button.Enable = true;		//打开启动按钮
    stop_button.Enable = true;		//打开停止按钮
    for (int i = 0; i < res; i++)
    {
    	cardnumber_comboBox.Items.Add(i);  //为卡号下拉框加入卡号
      Dmc1000.d1000_home_move(i * 3, 100, -500, 0.1);		//初始化成功控制所有轴回原点
			Dmc1000.d1000_home_move(i * 3 + 1, 100, -500, 0.1);
			Dmc1000.d1000_home_move(i * 3 + 2, 100, -500, 0.1);
    }
  }
}


private void start_button_Click(object sender, EventArgs e)
{
	cardnumber = Convert.ToInt32(cardnumber_comboBox.Text);
  if (x_axis_checkBox.Checked == true)//第0轴被选中
	{
    sport_mode_Checked(卡号int * 3);
	}
	if (y_axis_checkBox.Checked == true)//第1轴被选中
	{
    sport_mode_Checked(卡号int * 3 + 1);
	}
	if (z_axis_checkBox.Checked == true)//第2轴被选中
	{
    sport_mode_Checked(卡号int * 3 + 2);
	}
}


private void sport_mode_Checked(int axi)
{
	int initialSpeed;
  int movementSpeed;
  double accelerationTime;
  int endPosition;
  if (axi % 3 == 0)  //获取x轴的运动参数
  {
  	initialSpeed = Convert.ToInt32(x_axis_initial_textBox.Text)
    movementSpeed = Convert.ToInt32(x_axis_move_textBox.Text)
    accelerationTime = Convert.ToInt32(x_axis_acc_textBox.Text)
    endPosition = Convert.ToInt32(x_axis_end_textBox.Text)
  }
  else if (axi % 3 == 1)  //获取y轴的运动参数
  {
  	initialSpeed = Convert.ToInt32(y_axis_initial_textBox.Text)
    movementSpeed = Convert.ToInt32(y_axis_move_textBox.Text)
    accelerationTime = Convert.ToInt32(y_axis_acc_textBox.Text)
    endPosition = Convert.ToInt32(y_axis_end_textBox.Text)
  }
  else if (axi % 3 == 2)  //获取z轴的运动参数
  {
  	initialSpeed = Convert.ToInt32(z_axis_initial_textBox.Text)
    movementSpeed = Convert.ToInt32(z_axis_move_textBox.Text)
    accelerationTime = Convert.ToInt32(z_axis_acc_textBox.Text)
    endPosition = Convert.ToInt32(z_axis_end_textBox.Text)
  }
  
  if (monopulse_rise_radioButton.Checked == true)
	{
    Dmc1000.d1000_set_pls_outmode(axi, 0);    //脉冲输出设置 pulse/dir 模式,脉冲上升沿有效
	}
	else if (monopulse_decline_radioButton.Checked == true)
	{
    Dmc1000.d1000_set_pls_outmode(axi, 1);     //脉冲输出设置 pulse/dir 模式,脉冲下降沿有效
	}
	else if (doublepulse_rise_radioButton.Checked == true)
	{
    Dmc1000.d1000_set_pls_outmode(axi, 2);    //脉冲输出设置 CW/CCW 模式,脉冲上升沿有效
	}
	else if (doublepulse_decline_radioButton.Checked == true)
	{
    Dmc1000.d1000_set_pls_outmode(axi, 3);     //脉冲输出设置 CW/CCW 模式,脉冲下降沿有效
	}
  
  if (homing_radioButton.Checked == true)
	{
    Dmc1000.d1000_home_move(axi, initialSpeed, movementSpeed, accelerationTime);		//回原点运动
	}
	else if (continuous_motion_radioButton.Checked == true)
	{
    Dmc1000.d1000_start_tv_move(axi, initialSpeed, movementSpeed, accelerationTime);//持续运动
	}
	else if (fixed_motion_radioButton.Checked == true)
	{
    if (relative_radioButton.Checked == true)
    {
        Dmc1000.d1000_start_t_move(axi, endPosition, initialSpeed, movementSpeed, accelerationTime);//相对位移定长运动
    }
    else if (absolute_radioButton.Checked == true)
    {
        Dmc1000.d1000_start_ta_move(axi, endPosition, initialSpeed, movementSpeed, accelerationTime);//绝对位移定长运动
    }
	}
	timer1.Enabled = true;
}

private void disconnect_button_Click(object sender, EventArgs e)
{
    cardnumber_comboBox.Items.Clear();
    Dmc1000.d1000_board_close();    //关闭控制卡,释放系统资源
    disconnect_button.Enabled = false;
    start_button.Enabled = false;
    stop_button.Enabled = false;
    connect_button.Enabled = true;
}


private void timer1_Tick(object sender, EventArgs e)
{
    x_axis_position_textBox.Text = Convert.ToString(Dmc1000.d1000_get_command_pos(卡号int * 3));     //获取x轴的位置
    y_axis_position_textBox.Text = Convert.ToString(Dmc1000.d1000_get_command_pos(卡号int * 3 + 1));     //获取y轴的位置
    z_axis_position_textBox.Text = Convert.ToString(Dmc1000.d1000_get_command_pos(卡号int * 3 + 2));     //获取z轴的位置
}


 private void stop_button_Click(object sender, EventArgs e)
 {
     for (int i = 0; i < res * 3; i++)     //减速停止所有轴脉冲输出。
     {
         Dmc1000.d1000_decel_stop(i);
     }
     timer1.Enabled = false;     //关闭定时器
 }

大学毕业跨专业就业,记录一下学习日记。写的不好别骂,等以后回过头来再看

标签:Convert,Checked,C#,雷赛,控制卡,Dmc1000,d1000,true,axis
From: https://blog.csdn.net/bianbiandidi/article/details/140519159

相关文章

  • MySQL物理备份-XtraBackup远程备份恢复
    总括:模拟从库故障,从主库备份数据恢复从库,把主库数据远程备份到从库。1.主从库安装xtrabackup工具#安装依赖sudoyuminstallperl-DBIperl-DBD-MySQLperl-IO-Socket-SSLperl-Digest-MD5perl-TermReadKeyqpress#依赖包下载地址https://repo.percona.com/yum/releas......
  • Misc基础题目-BugKu-CTF
    第一部分misc1签到题目关注公众号即可获得flag{BugKu-Sec-pwn!}misc2这是一张单纯的照片看看属性中有没有CRC或者其他信息,并没有,然后用notepad++打开,看一下头部和尾部,发现unicode编码,解码得到key{youareright}misc3隐写binwalk,zsteg并没发现flag,stegsolve查看通......
  • spring 服务端如何设置 Last-Modified If-Modified-Since
    在Spring框架中,设置HTTP响应头Last-Modified和处理请求头If-Modified-Since是优化缓存和减少不必要数据传输的常用策略。SpringMVC提供了灵活的机制来实现这一点。设置Last-Modified响应头要在SpringMVC中设置Last-Modified响应头,你可以在你的Controller方法中返回一个Respons......
  • C++中的vector对应Java中的什么类型?
    C++中的vector对应Java中的ArrayList类型。‌C++中的vector和Java中的ArrayList都是可变长的数组或数组列表,‌它们具有以下相似特性:‌两者都是动态数组,‌可以根据需要自动增长。‌它们都支持通过索引访问元素,‌并且元素是有序的。‌它们都提供了添加、‌删除和查询元素的方法......
  • CAN通信
    CAN通信什么是CAN通信基本概念CAN是ControllerAreaNetwork的缩写(以下称为CAN),是ISO国际标准化的串行通信协议主要包含三个部分:Host、控制器和收发器示意图:分类高速CANSO11898-2规定要求在高速CAN总线的两端安装端接电阻(RL)以消除反射电路拓扑图物理信号电平逻辑1......
  • 通过 ACM 论文模版学习 LaTeX 语法 【二、ACM 论文模版】
    文章目录一、LaTeX简介二、ACM论文模版2.1模板内容2.2下载地址2.3模板格式2.3.1本地ACMLaTeX模版2.3.2OverLeafACMLaTeX模版2.4使用说明2.5`sample-sigconf.tex`模板介绍2.5.1文档类型和导言区2.5.2文档内容结构3.引用和参考文献4.其他注意事项示例......
  • 代码随想录算法训练营第42期 第二天 | LeetCode977. 有序数组的平方、209. 长度最小的
    一、977.有序数组的平方学习链接:有序数组的平方状态:暴力解法与双指针都做出来了时间复杂度:暴力解法O()    双指针解法 O()细节之处:暴力解法1       双指针解法1  暴力解法classSolution{publicint[]sortedSquares(int[]nums){......
  • SpiderFlow RCE漏洞(CVE-2024-0195)
    0x01前言SpiderFlow是新一代开源爬虫平台,以图形化方式定义爬虫流程,不写代码即可完成爬虫。基于springboot+layui开发的前后端不分离,也可以进行二次开发。该系统/function/save接口存在RCE漏洞,攻击者可以构造恶意命令远控服务器。影响范围:Upto(including)<=0.5.0漏......
  • OpenStack安装指南
    目录前置条件方法一:1.准备环境1.1更新系统包1.2安装依赖包1.3创建一个非root用户并切换到该用户2.下载DevStack2.1下载DevStack代码2.2创建local.conf文件3.确保必要的目录存在4.安装OpenStack4.1执行安装脚本5.验证安装5.1访问OpenStackDashboard......
  • CS50P: 6. File I/O
    FileI/Olist相关函数python:listappend()向列表末尾添加元素list.append(element)sorted(*,key=None,reverse=False)Python:sortedsortsthelistinplace,usingonly<comparisonsbetweenitemskey:eg.key=str.lower()说明用小写来排序,但是列表还是......