今天,正运动小助手给大家分享一下EtherCAT运动控制卡之ECI2828如何使用C#进行电子凸轮追剪飞剪等应用。
一、ECI2828硬件介绍
ECI2828系列运动控制卡支持多达16 轴直线插补、任意圆弧插补、空间圆弧、螺旋插补、电子凸轮、电子齿轮、同步跟随、虚拟轴和机械手指令等;采用优化的网络通讯协议可以实现实时的运动控制。
ECI2828系列运动运动控制卡支持以太网,232 通讯接口和电脑相连,接收电脑的指令运行,可以通过EtherCAT总线和CAN总线去连接各个扩展模块,从而扩展输入输出点数或运动轴。
ECI2828系列运动控制卡的应用程序可以使用 VC、VB、VS、C++以及C#等软件来开发,程序运行时需要动态库 zmotion.dll。调试时可以把ZDevelop软件同时连接到,从而方便调试,方便观察。
ECI2828系列典型连接配置图
二、C#语言进行运动控制开发
Ⅰ查看PC函数手册新建WinForm
1.在VS2015菜单“文件”→“新建”→ “项目”,启动创建项目向导。
2.选择开发语言为“Visual C#”和.NET Framework 4以及Windows 窗体应用程序。
3.找到厂家提供的光盘资料里面的C#函数库,路径如下(64位库为例):
A.进入厂商提供的光盘资料找到“8.PC函数”文件夹,并点击进入。
B.选择“函数库2.1”文件夹。
C.选择“Windows平台”文件夹。
D.根据需要选择对应的函数库这里选择64位库。
E.解压C#的压缩包,里面有C#对应的函数库。
F.函数库具体路径如下。
4.将厂商提供的C#的库文件以及相关文件复制到新建的项目中。
A.将zmcaux.cs文件复制到新建的项目里面中。
B.将zaux.dll和zmotion.dll文件放入bin\debug文件夹中。
5.用VS打开新建的项目文件,在右边的解决方案资源管理器中点击显示所有,然后鼠标右键点击zmcaux.cs文件,点击包括在项目中。
6.双击Form1.cs里面的Form1,出现代码编辑界面,在文件开头写入 using cszmcaux,并声明句柄g_handle。
至此项目新建完成,可进行C#项目开发。
Ⅱ查看PC函数手册
1.PC函数手册也在光盘资料里面,具体路径如下:“光盘资料\8.PC函数\函数库2.1\ZMotion函数库编程手册 V2.1.pdf”。
2.PC编程,一般如果网口对和工控机进行链接。网口链接函数接口是ZAux_OpenEth();如果链接成功,该接口会返回一个链接句柄。通过操作这个链接句柄可以实现对的控制。
ZAux_OpenEth()接口说明:
指令 7ZAux_OpenEth
项目应用截图:
3.使用凸轮的指令操作链接句柄“g_handle”,对进行电子凸轮运动控制,连续插补运动相关的指令如下。
ZAux_Direct_Cambox电子凸轮指令:
指令 6ZAux_Direct_Cam
ⅢC#的电子凸轮追剪等运动开发
1.电子凸轮追剪飞剪运动控制人机交互界面如下。
2.电子凸能说明。
凸轮的作用是将旋转运动转换为线性运动,包括直线运动、摆动、匀速运动和非匀速运动。
电子凸轮是利用构造的凸轮曲线来械凸轮,以达到与机械凸轮系统相同的凸轮轴与主轴之间相对运动的软件系统,通过控制伺服电机来械凸轮的功能,不需要另外安装机械结构。
●工作原理:
电子凸轮属于多轴同步运动,这种运动是基于主轴外加一个或多个从轴系统,是在机械凸轮的基础上发展而来,电子凸轮多用于周期性的曲线运动场合。
电子凸轮用软件来控制信号,改变程序的相关运动参数就能改变运动曲线,应用灵活性高,工作可靠,操作简单,不需要额外安装机械构件,因而不存在磨损的情况。
3.例程简易流程图。
4.在Form1的构造函数中调用接口ZAux_OpenEth(),使在系统初始化的时候自动链接。
private void button1_Click(object sender, EventArgs e){ zmcaux.ZAux_OpenEth(IP_List.Text, out g_handle); if (g_handle != (IntPtr)0) { timer1.Enabled = true; //设置链接状态按钮 status.BackColor = System.Drawing.Color.Green; status.Text = 已链接; } else { MessageBox.Show(链接失败,请检测IP地址!, 警告); //设置链接状态按钮 status.BackColor = System.Drawing.Color.Red; status.Text = 已断开; }}
5.通过定时器更新参数信息。
//定时器private void timer1_Tick(object sender, EventArgs e){ if(g_handle != null) { float dpos = 0, speed = 0; zmcaux.ZAux_Direct_GetDpos(g_handle, Convert.ToInt32(textBox_axis.Text),ref dpos); label_dpos.Text = Convert.ToString(dpos); zmcaux.ZAux_Direct_GetSpeed(g_handle, Convert.ToInt32(textBox_axis.Text), ref speed); label_speed.Text = Convert.ToString(speed); } else { status.BackColor = System.Drawing.Color.Red; status.Text = 已断开; }}
6.利用提前加载好的凸轮表数据,利用cam指令进行凸轮运动。
//凸轮表运动启动private void button3_Click(object sender, EventArgs e){ if (g_handle == null) return; zmcaux.ZAux_Direct_SetUnits(g_handle, Convert.ToInt32(textBox_axis.Text),Convert.ToSingle(textBox_unit.Text)); zmcaux.ZAux_Direct_SetSpeed(g_handle, Convert.ToInt32(textBox_axis.Text), Convert.ToSingle(textBox_speed.Text)); zmcaux.ZAux_Direct_SetAccel(g_handle, Convert.ToInt32(textBox_axis.Text), Convert.ToSingle(textBox_accel.Text)); zmcaux.ZAux_Direct_SetDecel(g_handle, Convert.ToInt32(textBox_axis.Text), Convert.ToSingle(textBox_decel.Text)); zmcaux.ZAux_Direct_SetAtype(g_handle, Convert.ToInt32(textBox_axis.Text), 1);
//进行电子凸轮运动 //设置运动总时间为5s zmcaux.ZAux_Direct_Cam(g_handle, Convert.ToInt32(textBox_axis.Text),0, CamNum, Convert.ToSingle(textBox_unit.Text), Convert.ToSingle(textBox_speed.Text)*5);}
7.外部导入凸轮表数据加载。
private void button_data_Click(object sender, EventArgs e) { dataGridView_data.Columns.Clear(); DataGridViewTextBoxColumn ActPos = new DataGridViewTextBoxColumn(); ActPos.Name = ActPos; ActPos.DataPropertyName = ActPos; ActPos.HeaderText = 位置; dataGridView_data.Columns.Add(ActPos); OpenFileDialog ZaoLangFile = new OpenFileDialog(); ZaoLangFile.Filter = 文本文件(*.txt;) *.txt; 所有文件 *.*; ; ZaoLangFile.ValidateNames = true; ZaoLangFile.CheckPathExists = true; ZaoLangFile.CheckFileExists = true; if (ZaoLangFile.ShowDialog() == DialogResult.OK) { string strFileName = ZaoLangFile.FileName; //其他代码 //FileStream FileRead = new FileStream(strFileName, FileMode.OpenOrCreate, FileAccess.Read); string DataTest = File.ReadAllText(strFileName); string[] strArray = DataTest.Split(new string[] { \r\n }, StringSplitOptions.None); for (int i = 0; i < strArray.Length - 1; i++) { int index = dataGridView_data.Rows.Add(); dataGridView_data.Rows[index].Cells[0].Value = strArray[i]; } float[] Tablelist = new float[strArray.Length]; for (int i = 0; i < strArray.Length - 1; i++) { Tablelist[i] = Convert.ToSingle(strArray[i]); } zmcaux.ZAux_Direct_SetTable(g_handle,0,strArray.Length,Tablelist); //记录当前写入凸轮表数据有多少 CamNum = strArray.Length - 2; } }
8.自定义凸轮表数据加载。
private void button6_Click(object sender, EventArgs e){ dataGridView_data.Columns.Clear(); DataGridViewTextBoxColumn ActPos = new DataGridViewTextBoxColumn(); ActPos.Name = ActPos; ActPos.DataPropertyName = ActPos; ActPos.HeaderText = 位置; dataGridView_data.Columns.Add(ActPos); float[] CustomTable = new float[100]; for (int i = 0; i < 100; i++) { CustomTable[i] = (float )((Math.Sin(Math.PI*2*i/100) / (Math.PI*2)) + i / 100) * 500; int index = dataGridView_data.Rows.Add(); dataGridView_data.Rows[index].Cells[0].Value = CustomTable[i]; } zmcaux.ZAux_Direct_SetTable(g_handle, 0, 100, CustomTable); CamNum = 100;}
Ⅳ调试与监控
1.编译运行例程,同时连接ZDevelop软件进行调试,对运动控制的轴参数和运动情况进行监控。
使用电子凸轮指令进行运动,设置轴运动动作按照凸轮表中的数据进行对应运动,所有运动数据相对于第一个数据点的位置进行绝对位置偏移。
(1)如上图,是运动为造浪设备运动的某段轨迹数据加载到的table凸轮表中,运动出来的实际轨迹,并在设置的指定时间内运动完成。
(2)如上图,运行数据为内部自定义sin波形的运动数据,波形可以从图中看出,运动小线段数据指定时间内轨迹运行完成。
2.视频演示。
本次,正运动技术EtherCAT运动控制卡的电子凸轮等应用,就分享到这里。