用C#实现雷赛运动控制卡的基础运动控制
去雷赛官网下载雷赛运动控制卡对应版本的驱动和Motion软件,安装好对应驱动用官方Motion软件测试控制卡能否正常运行。
用visual studio创建一个C#项目
去官网下载雷赛运动控制卡对应版本的函数库和头文件,以及对应的手册。
把dll文件复制到刚刚创建的C#项目bin文件夹下的debug文件夹里,把C#函数库复制进项目中,打开项目右键解决方案,重新生成解决方案
打开窗体设计,给窗体添加控件
导入雷赛函数库的命名空间
给按钮绑定事件
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.
大学毕业跨专业就业,记录一下学习日记。写的不好别骂,等以后回过头来再看