用C#实现雷赛运动控制卡的基础运动控制

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

用visual studio创建一个C#项目

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

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

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

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

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

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

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

using csDmc1000;
  • 1.

给按钮绑定事件

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;     //关闭定时器
 }
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.
  • 117.
  • 118.
  • 119.
  • 120.
  • 121.
  • 122.
  • 123.
  • 124.
  • 125.
  • 126.
  • 127.
  • 128.
  • 129.
  • 130.
  • 131.
  • 132.
  • 133.
  • 134.
  • 135.
  • 136.
  • 137.
  • 138.
  • 139.

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