The value of Zmotion is to bring customers more success!
ZMC408CE - 高性能总线型运动控制器
ZMC408CE是正运动推出的一款多轴高性能EtherCAT总线运动控制器,具有EtherCAT、EtherNET、RS232、CAN和U盘等通讯接口,ZMC系列运动控制器可应用于各种需要脱机或联机运行的场合。
ZMC408CE运动控制器支持PLC、Basic、HMI组态三种编程方式。PC上位机API编程支持C#、C++、LabVIEW、Matlab、Qt、Linux、VB.Net、Python等接口。
1.支持8轴运动控制(脉冲+EtherCAT总线),EtherCAT同步周期可快至125us;
2.24路通用输入、16路通用输出,模拟量AD/DA各两路;
3.8路10MHz高速差分脉冲输出,总线轴、脉冲轴可混合插补;
4.高性能处理器,提升运算速度、响应时间和扫描周期等;
5.一维/二维/三维、多通道视觉飞拍,高速高精;
6.位置同步输出PSO,连续轨迹加工中对精密点胶胶量控制和激光能量控制等;
7.多轴同步控制,多坐标系独立控制等;
8.直线插补、任意空间圆弧插补、螺旋插补、样条插补等;
9.应用灵活,可PC上位机开发,也可脱机独立运行。
PCIE464 - PCIe EtherCAT总线运动控制卡
PCIE464是正运动推出的一款EtherCAT总线+脉冲型、PCIE接口式的运动控制卡,可选6-64轴运动控制,支持多路高速数字输入输出,可轻松实现多轴同步控制和高速数据传输。
PCIE464运动控制卡适合于多轴点位运动、插补运动、轨迹规划、手轮控制、编码器位置检测、IO控制、位置锁存等功能的应用。
PCIE464运动控制卡适用于3C电子加工、检测设备、半导体设备、SMT加工、激光加工、光通讯设备、锂电及光伏设备、以及非标自动化设备等高速高精应用场合。
1.可选6-64轴运动控制,支持EtherCAT总线/脉冲/步进伺服驱动器;
2.联动轴数最高可达16轴,运动周期最小为100μs;
3.标配8进8出,其中4路高速锁存输入和8路高速PWM、PSO输出,更多IO请选配ACC37接线板扩展板;
4.支持PWM输出、精准输出、PSO硬件位置比较输出、视觉飞拍等;
5.支持30+机械手模型正逆解模型算法,比如SCARA、Delta、UVW、4轴/5轴 RTCP...;
6.支持掉电存储和掉电中断,提供程序更安全机制;
7.具有螺距补偿控制,在单轴上通过多个补偿点进行精确调整,从而实现更高的加工精度。
XPCIE1032H - PCIe EtherCAT实时运动控制卡
XPCIE1032H是一款基于PCI Express的EtherCAT总线运动控制卡,可选6-64轴运动控制,支持多路高速数字输入输出,可轻松实现多轴同步控制和高速数据传输。
XPCIE1032H运动控制卡集成了强大的运动控制功能,结合MotionRT7运动控制实时软核,解决了高速高精应用中,PC Windows开发的非实时痛点,指令交互速度比传统的PCI/PCIe快10倍。
1.6-64轴EtherCAT总线+脉冲可选,其中4路单端500KHz脉冲输出;
2.16轴EtherCAT同步周期500us,支持多卡联动;
3.板载16点通用输入,16点通用输出,其中8路高速输入和16路高速输出;
4.通过EtherCAT总线,可扩展到512个隔离输入或输出口;
5.支持PWM输出、精准输出、PSO硬件位置比较输出、视觉飞拍等;
6.支持直线插补、圆弧插补、连续轨迹加工(速度前瞻);
7.支持电子凸轮、电子齿轮、位置锁存、同步跟随、虚拟轴、螺距补偿等功能;
8.支持30+机械手模型正逆解模型算法,比如SCARA、Delta、UVW、4轴/5轴 RTCP...
1.在VS2019菜单“文件”→“新建”→“项目”,启动创建项目向导。
2.选择开发语言为“C#”和Windows窗体应用程序,点击下一步。
3.配置好项目名称和位置,以及相应框架,点击创建。
4.找到厂家提供的光盘资料里面的C#函数库,路径如下(64位库为例)。进入厂商提供的光盘资料,找到zauxdll.dll,zmotion.dll和Zmcaux.cs这三个库文件。
库文件路径:【00光盘资料】→【04PC函数】→【01PC函数库V2.1】→【Windows平台】→【C#】→【64位】→【库文件】。
5.将厂商提供的C#的库文件以及相关文件复制到新建的项目中。
1)将zmcaux.cs文件复制到新建的项目里面中。
2)将zauxdll.dll和zmotion.dll文件放入bin\debug文件夹中。
3)将Zmcaux.cs文件添加进项目中。右键项目名称,选择添加,再选择现有项,选择Zmcaux.cs文件。
6.双击Form1.cs里面的Form1,出现代码编辑界面,在文件开头写入using cszmcaux,并声明控制器句柄g_handle。
7.至此,项目新建完成,可进行C#项目开发。
PC函数手册可在光盘资料获取,具体路径如下:“00光盘资料\03编程手册\03ZMotion PC函数库编程手册”。
1.链接控制器,获取链接句柄。
2.机械手参数矫正指令。
3.硬件比较输出指令使用介绍。
4.圆心螺旋指令使用介绍。
1.上位机软件界面如下,首先选择连接方式。
可以选择网口IP连接,串口COM连接,PCI卡卡号连接以及Local MotionRT连接。选择好连接字符串后,这里以网口IP连接为例,再连接字符串中输入控制器IP地址,再点击连接。若弹出链接成功提示框,则可正常操作。若连接失败,检测连接字符串是否正确,网线是否松动等情况。
2.总线驱动器初始化界面的介绍。
(1)配置好总线起始轴号,总线节点个数,本地脉冲轴起始轴号和本地脉冲轴个数四个参数后,点击总线初始化按钮,进行总线扫描。
(2)等待初始化完成后,表格出现厂商ID和设备ID等相关节点信息,则代表初始化完成。
(3)如需将对应总线节点的IO状态信息映射到控制器上查看,则填写对应节点需要映射IO的起始地址,若无需映射默认-1不需要修改,填写完成后,点击保存,再次点击总线初始化按钮进行总线扫描。
3.相关轴参数配置界面介绍。
选择轴号,配置轴类型,电机一圈脉冲数,加速度,减速度等相关轴参数后点击立即生效按钮,将这些参数配置对应轴上。默认旋转中心(X,Y)坐标为(0,0),接着选择旋转轴实际正向旋转方向,再点击写入参数配置按钮,将机械手参数写入机械手模型结构中。
4.旋转中心标定界面介绍。
(1)首先点击手动运动,选择正解机模式,接着点击寸动按钮选择寸动还是点动模式,最后配置好速度。
(2)参考单旋转台旋转中心标定界面的步骤,通过手动运动示教三组坐标。示教完成后点击标定旋转中心按钮,通过三点确认圆心计算旋转中心的坐标。
注意:α,β,γ三个角度不重合即可,原理是3点确定一个圆心,角度范围覆盖可以尽量大一些。
(3)点击单旋转台关节轴参数按钮,可以看到的计算出的旋转中心坐标,点击写入参数配置,将实际旋转中心写入机械手结构参数中。
函数介绍:当点击标定旋转中心按钮后,首先会判断当前模式是否处于正解模式,标定旋转中心时机械手必须处于正解模式。然后再调用机械手参数矫正指令,开始计算旋转中心将计算的坐标赋值给轴参数配置界面的文本框。
private void Calculate_rotation_center(object sender, EventArgs e) { float[] conter = new float[2]; //存储旋转中心坐标 int cali_table = 1000; //关节坐标存储的table起始编号 int space = 3; //坐标存储间隔 int groups = 3; //坐标个数 int tableaux = 1500; //辅助参数的table编号 int zeroout = 1200; //计算出来理论零点时关节轴的绝对坐标的table编号 int zeroout2 = 1300; //计算出来的机械手参数存储的位置,不填时直接存储原参数的位置 int ret; int[] iAxisMtype = new int[2]; ret=zmcaux.ZAux_Direct_GetMtype(g_handle,Axis[0],ref iAxisMtype[0]); if (iAxisMtype[0] == 33) { Console.WriteLine("当前处于正解模式"); } else { //建立正解 ret = zmcaux.ZAux_Direct_Connreframe(g_handle, reframe_num, VirAxis_List, robot_mode, store_table, frame_num, Axis); } //计算旋转中心坐标 ret = zmcaux.ZAux_Direct_FrameCal(g_handle, VirAxis_List, 2, cali_table, space, groups, tableaux, zeroout, zeroout2); if (ret != 0) { MessageBox.Show("旋转中心计算失败"); return; } ret = zmcaux.ZAux_Direct_GetTable(g_handle, zeroout2, 2, conter); textBox61.Text = conter[0].ToString(); textBox60.Text = conter[1].ToString(); }
5.产品参数配置界面。
配置好产品长度,产品宽度等相关参数以及不同段的速度后,点击手动运动将加工轴通过手动运动移动到A点位置,点击示教坐标按钮,将当前位置保存为A点坐标。完成示教后,即可点击启动按钮,对手机边框进行检测。
函数介绍:点击启动检测后,会根据A点坐标,产品长度,产品宽度和拐角半径,计算出所需坐标点位。结合实际情况在拐角处使用圆心螺距指令实现拐角轨迹,走出实际产品轨迹。根据拍照线宽,使用硬件比较输出模式5周期脉冲模式,每隔线宽距离触发一次比较。
private void move_path(object sender, EventArgs e) { //设置拐角模式,用Speed限制单轴速度 ret = zmcaux.ZAux_Direct_SetCornerMode(g_handle, VirAxis_List[0],corner_mode); //设置运行速度 ret = zmcaux.ZAux_Direct_MovePara(g_handle, (uint)VirAxis_List[0], "Speed", (uint)VirAxis_List[0], product_para[6]); //回到起始点 ret = zmcaux.ZAux_Direct_MoveAbs(g_handle, 3, VirAxis_List, distance_A1); int idle = 0; while (true) { Thread.Sleep(10); //获取轴运行状态 zmcaux.ZAux_Direct_GetIfIdle(g_handle, VirAxis_List[0], ref idle); if (idle == -1){break;} } //清空矢量坐标 ret = zmcaux.ZAux_Direct_SetParam(g_handle, "VECTOR_MOVED", VirAxis_List[0], 0); float line_width = Convert.ToSingle(textBox31.Text); //拍照线宽 float arc_length =Convert.ToSingle(2* Math.PI* product_para[2]); //四个拐角弧长 int out_num = Convert.ToInt32((product_para[0]*2 + 2 * product_para[1] - product_para[2]*8 + arc_length) / line_width);//输出点数 int out_mode = 5; //输出模式 int out_port = 0; //输出端口 int out_state = 1; //输出状态 float start_vector = 0; //起始矢量 float out_vector = 0.5f; //输出脉冲 float delay_vector = 0.5f; //延时矢量 //直线A1-B1 //清空矢量 zmcaux.ZAux_Direct_SetParam(g_handle, "VECTOR_MOVED", VirAxis_List[0], 0); //清空上次未完成的输出 zmcaux.ZAux_Direct_HwPswitch2(g_handle, VirAxis_List[0], 2, 0, 0, 0, 0, 0, 0); //设置周期脉冲模式的硬件比较输出 zmcaux.ZAux_Direct_HwPswitch2(g_handle, VirAxis_List[0], out_mode, out_port, out_state, start_vector+ delay_vector, out_num, line_width, out_vector); //设置直线速度 ret = zmcaux.ZAux_Direct_MovePara(g_handle, (uint)VirAxis_List[0], "Speed", (uint)VirAxis_List[0], product_para[6]); //直线插补运动 ret = zmcaux.ZAux_Direct_MoveAbs(g_handle, 3, VirAxis_List, distance_B1); //拐角B1-B2 //设置拐角速度 ret = zmcaux.ZAux_Direct_MovePara(g_handle, (uint)VirAxis_List[0], "Speed", (uint)VirAxis_List[2], product_para[7]); //圆心螺旋指令实现拐角 ret = zmcaux.ZAux_Direct_MHelicalAbs(g_handle, 3, VirAxis_List, distance_B2[0], distance_B2[1], distance_B1[0], distance_B2[1], 0, distance_B2[2], 1); //直线B2-C1 //设置直线速度 ret = zmcaux.ZAux_Direct_MovePara(g_handle, (uint)VirAxis_List[0], "Speed", (uint)VirAxis_List[0], product_para[6]); //直线插补运动 ret = zmcaux.ZAux_Direct_MoveAbs(g_handle, 3, VirAxis_List, distance_C1);//拐角C1-C2 //设置拐角速度 ret = zmcaux.ZAux_Direct_MovePara(g_handle, (uint)VirAxis_List[0], "Speed", (uint)VirAxis_List[2], product_para[7]); //圆心螺旋指令实现拐角 ret = zmcaux.ZAux_Direct_MHelicalAbs(g_handle, 3, VirAxis_List, distance_C2[0], distance_C2[1], distance_C2[0], distance_C1[1], 0, distance_C2[2], 1); //直线C2-D1 //设置直线速度 ret = zmcaux.ZAux_Direct_MovePara(g_handle, (uint)VirAxis_List[0], "Speed", (uint)VirAxis_List[0], product_para[6]); //直线插补运动 ret = zmcaux.ZAux_Direct_MoveAbs(g_handle, 3, VirAxis_List, distance_D1); //拐角D1-D2 //设置拐角速度 ret = zmcaux.ZAux_Direct_MovePara(g_handle, (uint)VirAxis_List[0], "Speed", (uint)VirAxis_List[2], product_para[7]); //圆心螺旋指令实现拐角 ret = zmcaux.ZAux_Direct_MHelicalAbs(g_handle, 3, VirAxis_List, distance_D2[0], distance_D2[1], distance_D1[0], distance_D2[1], 0, distance_D2[2], 1); //直线D2-A2 //设置直线速度 ret = zmcaux.ZAux_Direct_MovePara(g_handle, (uint)VirAxis_List[0], "Speed", (uint)VirAxis_List[0], product_para[6]); //直线插补运动 ret = zmcaux.ZAux_Direct_MoveAbs(g_handle, 3, VirAxis_List, distance_A2); //拐角A2-A1 //设置拐角速度 ret = zmcaux.ZAux_Direct_MovePara(g_handle, (uint)VirAxis_List[0], "Speed", (uint)VirAxis_List[2], product_para[7]); //圆心螺旋指令实现拐角 ret = zmcaux.ZAux_Direct_MHelicalAbs(g_handle, 3, VirAxis_List, distance_A1[0], distance_A1[1], distance_A1[0], distance_A2[1], 0, 360, 1); }
2.输入控制器IP地址,点击连接。
4.运行C#手机外观检测例程。
(1)配置好轴参数,机械手参数以及产品参数后,点击启动检测。
(2)后勾选轴3,轴4和输出口0,将模式切换为XYZ模式再配置好合适的垂直刻度,可以更直观的看到输出口的输出次数以及的间距。
(3)勾选轴3和轴4的DPOS,将显示模式切换为XY模式,即可直观看到轴实际运行的轨迹。
(4)设置YT模式。抓取主轴轴3的VP_SPEED也就是加工合速度,可以看到在拐角处是减速运行的。
完整代码获取地址
本次,正运动技术单旋转台XYR在精密点胶/外观检测/精密焊接的C#应用,就分享到这里。
更多精彩内容请关注“正运动小助手”公众号,需要相关开发环境与例程代码,请咨询正运动技术销售工程师:400-089-8936。