C#之Delta并联机械手的视觉同步分拣

科技   科技   2024-07-03 07:01   广东  

点击上方正运动小助手,随时关注新动态!



本文导读


前面两节课程我们介绍了怎么建立Delta并联机械手的正逆解以及如何通过视觉进行匹配定位。本节课程给大家分享如何通过C#语言开发正运动Delta并联机械手传送带同步的视觉分拣




VPLC711硬件介绍


VPLC711是正运动推出的一款基于x86平台和Windows操作系统的高性能机器视觉EtherCAT运动控制器,具备强大的运算能力和灵活性。它具有出色的实时性能和多路高速硬件输入与多路高速PSO输出,能够精准控制多轴同步运动,并与外部设备实现多协议的高速通信。

VPLC711支持多种硬件接口和通信协议,方便与其他设备的连接和集成。除此之外,VPLC711还具备视觉处理功能,能够实时处理图像数据,实现视觉检测、测量和定位等应用。

VPLC711内置Windows运动控制实时内核MotionRT7,形成一种开放式IPC形态实时软控制器/软PLC,为用户提供灵活集成的运动控制+视觉一体化解决方案。


VPLC711硬件参数

1.采用x86高性能CPU,EtherCAT可支持1ms 64轴同步运行;

2.板载RS232,RS485,EtherNet*5,EtherCAT,USB3.0*4硬件接口;
3.板载20DI,其中4个高速色标锁存,2组高速单端编码器;
4.板载20DO,其中4个高速单端脉冲轴,4组高速PWM;

5.支持DVI-D,HDMI显示,支持双网口不同IP设置。



VPLC711视频介绍
想要了解更多关于VPLC711的详情介绍,可以点击x86平台实时Windows机器视觉EtherCAT运动控制器VPLC711查看。


C#语言进行Delta并联机械手的开发之运动库和视觉库的添加

1.在VS2010菜单“文件”→“新建”→“项目”,启动创建项目向导。

2.选择开发语言为“Visual C#”和.NET Framework 4以及Windows窗体应用程序。

3.找到厂家提供的光盘资料里面的C#函数库,路径如下(32位库为例)。

1)进入厂商提供的光盘资料找到“04PC函数”文件夹,并点击进入。

2)选择“函数库2.1”文件夹。

3)选择“Windows平台”文件夹。

4)根据需要选择对应的函数库,这里选择32位库。

5)解压C#压缩包,里面有C#对应的函数库。

6)函数库具体路径如下。

4.将厂商提供的C#库文件以及相关文件复制到新建的项目中(注意这里面的PC函数库默认提供的是运动库,如果使用视觉功能还需要获取视觉库,视觉库可以找厂商的相关销售或技术人员获取)。
1)将Zmcaux.cs(运动库)和Zvision.cs(视觉库)文件复制到新建的项目里面中。

2)将zauxdll.dll、zmotion.dll和zvision.dll文件放入bin\debug文件夹中。

5.用vs打开新建的项目文件,在右边的解决方案资源管理器中点击显示所有文件,然后鼠标右击Zmcaux.cs与 Zvision.cs文件,点击包括在项目中。

6.双击Form1.cs里面的Form1,出现代码编辑界面,在文件开头写入using cszmcaux,using ZVision并声明控制器句柄g_handle




PC函数介绍

1.链接控制器,获取链接句柄。

指令

ZAux_OpenEth

指令原型

int32  __stdcall  ZAux_OpenEth(char  *ipaddr, ZMC_HANDLE * phandle)

指令说明

以太网连接控制器。

输入参数

参数名

描述

Ipaddr

连接的IP地址

输出参数

参数名

描述

Phandle

返回的连接句柄

返回值

成功返回值为0,非0详见错误码说明。

指令示例

网口连接控制器

详细说明

1.网口采用RJ45标准网线接口,通讯速率为100Mbit/s。

2.控制器出厂的IP地址为192.168.0.11,端口号为502。对端通讯设备需与控制器处于同一网段,才可进行连接。

3.最常用的控制器连接方式。

4.ZMC_HANDLE 类型:Zmotion库中,专门用于控制卡连接数据定义类型;

2.皮带同步指令

指令27

ZAux_Direct_MoveSync

指令原型

int32 __stdcall ZAux_Direct_MoveSync(ZMC_HANDLE handle,float  imode,int synctime, float syncposition, int syncaxis, int imaxaxises, int *piAxislist, float *pfDisancelist)

指令说明

同步运动,皮带上物体跟随,此运动非插补运动,不保证运动轨迹为直线。

输入参数

参数名

描述

handle

连接标识。

imode

同步模式:

imode =-1:结束模式,运动到指定的绝对位置, 此模式运动如果后面紧接着其它ZAux_Direct_MoveSync指令,会被覆盖, 此模式下皮带轴无效。

imode =-2:强制结束,调用时强制停止原来的ZAux_Direct_MoveSync,运动到指定结束位置,此模式运动如果后面紧接着其它ZAux_Direct_MoveSync指令,会被覆盖, 此模式下皮带轴无效。

imode =-10: 跟随轴轴列表第一个轴跟随

imode =-20: 跟随轴轴列表第二个轴跟随

imode =-30: 跟随轴轴列表第二个轴跟随

imode =0+angle:

皮带旋转角度。angle:皮带旋转角度,角度 = 皮带与跟随轴轴列表第1/2轴的正向旋转夹角。例如imode = PI/4,皮带在45度的方向;imode =PI/2,皮带在y方向;imode =PI,皮带在x负向;imode =(PI*1.75),皮带在-45度的方向

imode=1000+tableindex,  轴号列表的跟踪比例依次存储table里面, 这样可以实现三维的皮带跟踪, 当皮带有倾斜的时候.( 固件版本20180209增加此功能)( tableindex:table寄存器起始编号)

synctime

同步时间,ms单位.运动在指定时间内完成,完成时轴跟皮带轴上物体保持速度一致。0表示根据运动轴的速度加速度来估计同步时间,可能不准确

syncposition

皮带轴物体被感应到时皮带轴的位置。此指令支持皮带轴坐标循环,但是在指令被调用时确保此参数位置和当前皮带轴位置之间没有发生坐标修改或循环操作,因此此指令调用时不要在坐标循环点附近

syncaxis

皮带轴轴号

imaxaxises

参与同步从轴总数

piAxislist

跟随轴轴号列表

pfDisancelist

皮带轴物体被感应到时从轴的绝对坐标位置

输出参数

/

返回值

成功返回值为0,非0详见错误码说明。

指令示例

皮带轴同步运动跟随

详细说明1

Imode:同步模式





Basic脚本快速验证指令用法

1.编写Basic测试脚本进行MoveSync指令的用法测试。

'**************************************************************************************'背景:假设有一对对射型的光电传感器固定在流水线的两端,来实时检测流水线上的产品到位情况'MOVESYNC指令参数填写说明:'syncposition:物体到感应点时皮带轴的位置,需要通过编码器锁存把产品的对应位置记录下来。'pos1:跟随轴1原点到光电传感器感应点的位置,对于每个产品都是固定的。'**************************************************************************************GLOBAL CONST BeltAxis=4  '皮带轴是轴4GLOBAL CONST FollowAxis1=0  '跟随轴1是轴0GLOBAL CONST InducPos1=30  '跟随轴1原点到光电传感器感应点的位置GLOBAL CONST StandbyPos1=50'跟随轴1的待机位GLOBAL CONST EmptyPos1=400  '跟随轴1的放料位'停止所有轴RAPIDSTOP(2)WAIT IDLE     '初始化相关轴的轴参数BASE(FollowAxis1, BeltAxis)ATYPE = 1,1UNITS = 1000,1000SPEED = 50,100DPOS = 0,0'触发示波器采集波形TRIGGERDELAY(1000)'跟随轴先运动到待机位BASE(FollowAxis1)MOVEABS(StandbyPos1)'皮带轴开始运动VMOVE(1)  AXIS(BeltAxis)'假设皮带运动到200的位置时,有一个产品被检测到BASE(FollowAxis1)Wait UNTIL MPOS(BeltAxis)> 200MOVESYNC(0, 2000, 200, BeltAxis, InducPos1) '跟随轴加速同步段该指令执行完后将同步上产品MOVE_OP(0, ON)                               '同步上后打开真空吸          MOVESYNC(0, 1000, 200, BeltAxis, InducPos1)  '继续同步1sMOVESYNC(-1, 0, 0, -1, EmptyPos1)            '走到放料位置MOVE_OP(0, OFF)                              '到放料位后关闭真空吸  
2.通过RTSys软件的示波器观察波形,分析同步过程。


根据示波器的数据分析

1、产品刚刚被检测到时,皮带的位置是200,跟随轴的位置是50。

2、跟随轴追上产品,并保持速度和皮带轴同步时皮带的位置是400,跟随轴1的位置是230。

3、由1和2可知,产品在同步过程中前进了200(400-200)。

4、因为跟随轴1原点到光电传感器感应点的位置InducPos1我们给的数据是30,所以在跟随轴1和皮带平行的情况下,皮带带着产品往前跑了200后,此时此刻跟随轴1原点到光产品的实际距离是230(200+30)。

5、那么第4点计算的结果和第2的同步完成后跟随轴1的实际位置是一致的,所以流水线同步指令测试正常。






C#例程建设之视觉流水线同步分拣

1.皮带同步指令关键参数详细介绍。

ZAux_Direct_MoveSync(ZMC_HANDLE handle,float imode,int synctime,float syncposition,int syncaxis,int imaxaxises,int *piAxislist,float *pfDisancelist).
(1)参数imode:
imode = 0+angle,表示同步模式,如果皮带和X轴平行,填0即可。

imode = -1,表示结束同步模式,可运动到指定的绝对位置,一般同步上抓取完物料后运动到放料位使用。

(2)参数synctime: 同步时间,ms单位.运动在指定时间内完成,完成时轴跟皮带轴上物体保持速度一致。0表示根据运动轴的速度加速度来估计同步时间。

(3)参数syncposition: 视觉或传感器识别到皮带是的产品时,皮带此时此刻的位置信息MPOS。

(4)参数pfDisancelist:如果是视觉定位产品时,这个参数直接填视觉识别到产品时产品的世界坐标。

如果用光电传感器检测产品时,这个参数是固定的,在传感器刚刚好感应到产品时,产品当前位置的绝对坐标。可以在此时此刻手动运动从轴来定位到产品处来获取位置信息。

2.视觉流水线同步分拣流程图。

(1)视觉匹配定位代码详情。
/************************************************************************************'任务编号:     无'函数功能:     视觉定位产品'Input:        无'Output:       无 '返回值:       子线程---进行视觉定位             **************************************************************************************/public void RunSubTaskVisua(){    int TempArrid = 0;    float TempVar = 0;    WriteLog("视觉功能正常启动");    while (SysRunFlag > 0)    {        //暂停按钮没有按下时        while (SysRunFlag == 1)         {            //采集图像            VisuaOper.CameAcquisition();            //进行模板匹配            RTDisplay.Image = VisuaOper.ShapeFind();            if (MainWindows.BeltMpos != 0)//如果采集照片的时候皮带编码器位置获取正常            {                //操作MoveSyncBuff数据先加锁                while (true)                {                    if (MainWindows.SetMoveSyncFlag == 0)                    {                        MainWindows.SetMoveSyncFlag = 1;                        break;                    }                }                //找到可以存储数据的数组起始下标                int ArrId = 0;                for (int i = 0; i < 50; i++)                {                    if (MainWindows.MoveSyncBuff[i, 0] == 0)                    {                        ArrId = i;                        break;                    }                }                //开始存储数据  一次匹配最多10个结果                TempArrid = ArrId;                for (int i = 0; i < 10; i++)                {                    //如果分数满足要求                    if (MainWindows.VisionRst[i, 0] >= MainWindows.VisionScore)                    {                        int j;                        //如果有重复的目标需要剔除                        for (j = 0; j < TempArrid; j++)                        {                            TempVar = MainWindows.VisionRst[i, 1] - MainWindows.BeltMpos - MainWindows.MoveSyncBuff[j, 1] + MainWindows.MoveSyncBuff[j, 4];                            if (((TempVar) <= 10) && (TempVar >= -10))                            {                                j = -10;                                break;                            }                        }                        if (j >= 0)                        {                            MainWindows.MoveSyncBuff[ArrId, 0] = 1;                            MainWindows.MoveSyncBuff[ArrId, 1] = MainWindows.VisionRst[i, 1];   //存储匹配结果的X坐标                            MainWindows.MoveSyncBuff[ArrId, 2] = MainWindows.VisionRst[i, 2];   //存储匹配结果的Y坐标                            MainWindows.MoveSyncBuff[ArrId, 3] = MainWindows.VisionRst[i, 3];   //存储匹配结果的角度偏移                            MainWindows.MoveSyncBuff[ArrId, 4] = MainWindows.BeltMpos;          //存储匹配到产品时,传送带的位置信息                            ArrId = ArrId + 1;                            IdentiNum.Text = (Convert.ToInt32(IdentiNum.Text) + 1).ToString();                            WriteLog("视觉目标:" + "(" + MainWindows.VisionRst[i, 1].ToString("0,0") + "," + MainWindows.VisionRst[i, 2].ToString("0,0") + ")");                        }                    }                    //分数清空                    MainWindows.VisionRst[i, 0] = 0;                }                //解锁                MainWindows.SetMoveSyncFlag = 0;            }        }        Thread.Sleep(100);    }}
(2)流水线同步分拣代码详情。
/************************************************************************************'任务编号:     无'函数功能:     流水线同步分拣'Input:        无'Output:       无 '返回值:       无             **************************************************************************************/public void RunSubTaskMotion(){    float[] MoveSyncTemp = new float[5];    float TempMpos = 0;    while (SysRunFlag > 0)    {        while (SysRunFlag == 1)        {            if (MainWindows.MoveSyncBuff[0, 0] == 1)            {                MainWindows.ZauxErr = zmcaux.ZAux_Direct_GetMpos(MainWindows.g_Handle, MainWindows.ConveyorAxisId, ref TempMpos);                //如果编码器位置抓取正确                if (0 == MainWindows.ZauxErr)                 {                    //编码器往前运动了多少                    TempMpos = TempMpos - MainWindows.MoveSyncBuff[0, 4];

//判断是否处于同步起始区 if (((MainWindows.MoveSyncBuff[0, 1] + TempMpos) >= MainWindows.SyncReX[0]) && ((MainWindows.MoveSyncBuff[0, 1] + TempMpos) <= MainWindows.SyncReX[1])) { WriteLog("开始同步抓取"); //取一组数据 MoveSyncTemp[0] = MainWindows.MoveSyncBuff[0, 1] ; //X MoveSyncTemp[1] = MainWindows.MoveSyncBuff[0, 2] ; //Y MoveSyncTemp[2] = MainWindows.GetBinHigt; //取料高度 MoveSyncTemp[3] = MainWindows.MoveSyncBuff[0, 3]; //Aanle MoveSyncTemp[4] = MainWindows.MoveSyncBuff[0, 4]; //Mpos //下发同步运动的指令 //0、复位输出口                        zmcaux.ZAux_Direct_MoveOp(MainWindows.g_Handle, MainWindows.gVAxisList[0], MainWindows.VacSucIo, 0); //1、先同步上传送带 zmcaux.ZAux_Direct_MoveSync(MainWindows.g_Handle, 0, 0, MainWindows.MoveSyncBuff[0, 4], MainWindows.ConveyorAxisId, 4, MainWindows.gVAxisList, MoveSyncTemp); //2、同步一段时间(关节轴有滞后) 50ms zmcaux.ZAux_Direct_MoveSync(MainWindows.g_Handle, 0, 50, MainWindows.MoveSyncBuff[0, 4], MainWindows.ConveyorAxisId, 4, MainWindows.gVAxisList, MoveSyncTemp); //3、打开真空吸嘴 zmcaux.ZAux_Direct_MoveOp(MainWindows.g_Handle, MainWindows.gVAxisList[0], MainWindows.VacSucIo, 1); //4、同步一段时间 1500ms zmcaux.ZAux_Direct_MoveSync(MainWindows.g_Handle, 0, 700, MainWindows.MoveSyncBuff[0, 4], MainWindows.ConveyorAxisId, 4, MainWindows.gVAxisList, MoveSyncTemp); //5、同步段把Z轴提升到安全高度,选择轴到放料角度 MoveSyncTemp[2] = MainWindows.StandPos[2]; //取料高度 zmcaux.ZAux_Direct_MoveSync(MainWindows.g_Handle, 0, 100, MainWindows.MoveSyncBuff[0, 4], MainWindows.ConveyorAxisId, 4, MainWindows.gVAxisList, MoveSyncTemp); //4、解除同步去放料点 MoveSyncTemp[0] = MainWindows.EmptPos[0]; //X MoveSyncTemp[1] = MainWindows.EmptPos[1]; //Y MoveSyncTemp[2] = MainWindows.EmptPos[2]; //放料高度 MoveSyncTemp[3] = MainWindows.EmptPos[3]; //Aanle zmcaux.ZAux_Direct_MoveSync(MainWindows.g_Handle, -1, 0, 0, -1, 4, MainWindows.gVAxisList, MoveSyncTemp); //5、关闭真空吸嘴放料,Delay100ms zmcaux.ZAux_Direct_MoveOp(MainWindows.g_Handle, MainWindows.gVAxisList[0], MainWindows.VacSucIo, 0); zmcaux.ZAux_Direct_MoveDelay(MainWindows.g_Handle, MainWindows.gVAxisList[0], 100); //6、去安全高度 MoveSyncTemp[0] = MainWindows.EmptPos[0]; //X MoveSyncTemp[1] = MainWindows.EmptPos[1]; //Y MoveSyncTemp[2] = MainWindows.StandPos[2]; //放料高度 MoveSyncTemp[3] = MainWindows.EmptPos[3]; //Aanle zmcaux.ZAux_Direct_MoveAbs(MainWindows.g_Handle, 4, MainWindows.gVAxisList, MoveSyncTemp);

//操作MoveSyncBuff数据先加锁 while (true) { if (MainWindows.SetMoveSyncFlag == 0) { MainWindows.SetMoveSyncFlag = 1; break; } } //视觉匹配缓冲区数据往前覆盖 for (int k = 0; k < 49; k++) { MainWindows.MoveSyncBuff[k, 0] = MainWindows.MoveSyncBuff[k + 1, 0]; MainWindows.MoveSyncBuff[k, 1] = MainWindows.MoveSyncBuff[k + 1, 1]; MainWindows.MoveSyncBuff[k, 2] = MainWindows.MoveSyncBuff[k + 1, 2]; MainWindows.MoveSyncBuff[k, 3] = MainWindows.MoveSyncBuff[k + 1, 3]; MainWindows.MoveSyncBuff[k, 4] = MainWindows.MoveSyncBuff[k + 1, 4]; } //解锁 MainWindows.SetMoveSyncFlag = 0; //等待输出口打开 int TimeOut = 10000; TimeOut = 100000; //等待轴停止 int AxisIdle = 0; //轴停止状态 while (TimeOut > 0) { zmcaux.ZAux_Direct_GetIfIdle(MainWindows.g_Handle, MainWindows.gVAxisList[0], ref AxisIdle); if (AxisIdle == (-1)) { break; } Thread.Sleep(10); TimeOut = TimeOut - 10; } if (TimeOut <= 0) { //超时要报错,程序要停止 WriteLog("等待轴停止超时"); //Thread.Sleep(100); SysRunFlag = 0; break; } SortNum.Text = (Convert.ToInt32(SortNum.Text) + 1).ToString(); WriteLog("放料成功"); //退出while 单次循环 continue; } else if ((MainWindows.MoveSyncBuff[0, 1] + TempMpos) > MainWindows.SyncReX[1]) { //操作MoveSyncBuff数据先加锁 while (true) { if (MainWindows.SetMoveSyncFlag == 0) { MainWindows.SetMoveSyncFlag = 1; break; } } //视觉匹配缓冲区数据往前覆盖 for (int k = 0; k < 49; k++) { MainWindows.MoveSyncBuff[k, 0] = MainWindows.MoveSyncBuff[k + 1, 0]; MainWindows.MoveSyncBuff[k, 1] = MainWindows.MoveSyncBuff[k + 1, 1]; MainWindows.MoveSyncBuff[k, 2] = MainWindows.MoveSyncBuff[k + 1, 2]; MainWindows.MoveSyncBuff[k, 3] = MainWindows.MoveSyncBuff[k + 1, 3]; MainWindows.MoveSyncBuff[k, 4] = MainWindows.MoveSyncBuff[k + 1, 4]; } //解锁 MainWindows.SetMoveSyncFlag = 0; //如果视觉匹配缓冲区没有数据了 if (MainWindows.MoveSyncBuff[0, 0] == 0) { //Delta去待机位 zmcaux.ZAux_Direct_MoveAbs(MainWindows.g_Handle, 4, MainWindows.gVAxisList, MainWindows.StandPos); WriteLog("去待机位"); } } } } else { //Delta去待机位 zmcaux.ZAux_Direct_MoveAbs(MainWindows.g_Handle, 4, MainWindows.gVAxisList, MainWindows.StandPos); } Thread.Sleep(50); } //停止传送带 zmcaux.ZAux_Direct_Single_Cancel(MainWindows.g_Handle, MainWindows.ConveyorAxisId, 2);    }}

演示视频

本次,正运动技术C#之Delta并联机械手的视觉同步分拣,就分享到这里。

更多精彩内容请关注“正运动小助手”公众号,需要相关开发环境与例程代码,请咨询正运动技术销售工程师:400-089-8936。

本文由正运动技术原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。

回顾往期内容

开奖啦!参与《运动控制系统应用与实践》赠书活动的粉丝们看这里

送书福利!全自主IDE的《运动控制系统应用与实践》

C#之Delta并联机械手的视觉相机标定与形状匹配

C#之Delta并联机械手正逆解的建立和手动运动


PCIe EtherCAT实时运动控制卡PCIE464的安装与调试

PCIe EtherCAT实时运动控制卡的DXF图形的CAD导图与多条运动指令的快速加工


EtherCAT运动控制器在UVW对位平台中的应用

EtherCAT运动控制器Delta机械手应用

EtherCAT运动控制器的MATLAB开发


运动控制器/运动控制卡配套ZCAN总线ZIO模块的使用

运动控制卡/运动控制器的ZCAN总线ZMIO310扩展模块使用

EtherCAT运动控制器在ROS上的应用(下)

EtherCAT运动控制器在ROS上的应用(上)


皮带同步跟随:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(十四)

自定义电子凸轮曲线的运动:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(十三)

连续轨迹加工和速度前瞻:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(十二)

PT/PVT运动模式介绍:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(十一)

项目工程下载与XML配置文件下载:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(十)

EtherCAT驱动器回零与控制器回零:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(九)

二维/三维的多轴PSO视觉飞拍与精准输出:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(八)

单轴PSO视觉飞拍与精准输出:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(七)

硬件位置比较输出和编码器锁存:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(六)

EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(五):通过RTSys进行调试与诊断

EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(四):板载IO与总线扩展IO的编码器与脉冲配置的应用

EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(三):EtherCAT总线CSP,CSV,CST模式切换

EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(二):EtherCAT总线初始化

EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(一):驱动安装与建立连接

全国产EtherCAT运动控制边缘控制器(六):RtBasic文件下载与连续轨迹加工的Python+Qt开发

全国产EtherCAT运动控制边缘控制器(五):IO配置与回零运动的Python+Qt开发

全国产EtherCAT运动控制边缘控制器(四):轴参数配置与单轴运动PC上位机C++控制

全国产EtherCAT运动控制边缘控制器(三):外设读写与RTSys开发诊断

全国产EtherCAT运动控制边缘控制器(二):统一的上位机API接口

全国产EtherCAT运动控制边缘控制器(一):ZMC432H硬件接口

简单易用的以太网数据采集卡应用开发之C#

高柔SS加减速曲线在锂电池焊接中的应用

EtherCAT和Ethernet的不同点有哪些, 通信周期又是什么意思?

工业以太网时代,该如何选择总线运动控制器?

正运动技术运动控制器如何快速实现单轴/多轴同步跟随功能?


EtherCAT运动控制器Delta机械手应用

EtherCAT运动控制器的MATLAB开发

EtherCAT运动控制器在数控加工手轮随动中的应用

EtherCAT运动控制器在数控加工手轮随动中的应用之C++

EtherCAT运动控制器在LabVIEW中的运动控制与实时数据采集

运动控制器PSO视觉飞拍与精准输出的C++开发(三):二维/三维/多轴PSO输出

运动控制器PSO视觉飞拍与精准输出的C++开发(二):多轴PSO等距/周期输出

运动控制器PSO视觉飞拍与精准输出的C++开发(一):单轴PSO

运动控制器八通道PSO的视觉飞拍与精准输出

Windows实时运动控制软核(七):LOCAL高速接口测试之Labview

Windows实时运动控制软核(六):LOCAL高速接口测试之Matlab

Windows实时运动控制软核(五):LOCAL高速接口测试之VC6.0

Windows实时运动控制软核(四):LOCAL高速接口测试之VB.NET

Windows实时运动控制软核(三):LOCAL高速接口测试之C++

Windows实时运动控制软核(二):LOCAL高速接口测试之Qt

Windows实时运动控制软核(一):LOCAL高速接口测试之C#

开放式激光振镜运动控制器:C++ 快速调用图形库应用

开放式激光振镜运动控制器:C++振镜矫正方法与实现

开放式激光振镜运动控制器:C++快速开发


开放式激光振镜运动控制器(五):ZMC408SCAN 光纤激光器的能量控制

开放式激光振镜运动控制器(四):ZMC408SCAN振镜控制光纤激光器加工

开放式激光振镜运动控制器(三):ZMC408SCAN轴控光纤激光器加工

开放式激光振镜运动控制器(二):ZMC408SCAN激光接口与控制

开放式激光振镜运动控制器(一):ZMC408SCAN接口与功能


运动控制器PSO位置同步输出(三):高精度等间距二维三维PSO输出

运动控制器PSO位置同步输出(二):PSO模式详解

运动控制器PSO位置同步输出(一):硬件平台与PSO指令简介


经济型EtherCAT运动控制器(十):EtherCAT总线快速入门

经济型EtherCAT运动控制器(九):示波器使

经济型EtherCAT运动控制器(八):轴参数与运动指令

经济型EtherCAT运动控制器(七):运动缓冲

经济型EtherCAT运动控制器(六):数据储存

经济型EtherCAT运动控制器(五):多任务运行

经济型EtherCAT运动控制器(四):ModbusRTU或ModbusTcp与触摸屏通讯

经济型EtherCAT运动控制器(三):PLC实现多轴直线插补与电子凸轮

经济型EtherCAT运动控制器(二):ZBasic实现多轴直线插补运动

经济型EtherCAT运动控制器(一):功能简介与应用场景


运动控制+机器视觉Demo软件框架(三):视觉纠偏+连续插补的配方编辑

运动控制+机器视觉Demo软件框架(二):移动标定和形状匹配

运动控制+机器视觉Demo软件框架(一):机械参数和配方文件的管理

运动控制+机器视觉Demo软件框架系统概述


开放式激光振镜+运动控制器(六):双振镜运动

开放式激光振镜+运动控制器(五):ZMC408SCAN控制器硬件介绍

开放式激光振镜+运动控制器(四):PSO位置同步输出在激光振镜加工中的应用

开放式激光振镜+运动控制器(三):振镜矫正

开放式激光振镜+运动控制器(二):振镜填充

开放式激光振镜+运动控制器(一):硬件接口


EtherCAT轴扩展模块EIO16084在运动控制系统中的应用
EtherCAT运动控制器中脉冲接口的快速调试与诊断
EtherCAT运动控制器之ZMIO300模块的使用
EtherCAT运动控制器的PLC编程(四) 电子凸轮
EtherCAT运动控制器的PLC编程(三) 电子齿轮
EtherCAT运动控制器的PLC编程(二) 圆弧插补
EtherCAT运动控制器的PLC编程(一) 直线插补


快速入门 | 篇二十一:运动控制器ZHMI组态编程简介一

快速入门 | 篇二十一:正运动技术运动控制器自定义通讯

快速入门 | 篇二十:正运动技术运动控制器MODBUS通讯

快速入门 | 篇十九:正运动技术运动控制器多轴同步与电子凸轮指令简介


快速入门 | 篇十八:正运动技术脉冲型运动控制器的使用

快速入门 | 篇十七:运动控制器多轴插补运动指令的使用

快速入门 | 篇十六:正运动控制器EtherCAT总线快速入门

快速入门 | 篇十五:运动控制器运动缓冲简介

快速入门 | 篇十四:运动控制器基础轴参数与基础运动控制指令

快速入门 | 篇十三:正运动技术运动控制器ZDevelop 编程软件的使用


快速入门 | 篇十二:正运动技术运动控制器U盘接口的使用

快速入门 | 篇十一:正运动技术运动控制器中断的应用

快速入门 | 篇十:运动控制器多任务运行特点

快速入门 | 篇九:如何进行运动控制器示波器的应用?

快速入门 | 篇八:如何进行运动控制器EtherCAT总线的基础使用?

快速入门 | 篇七:如何进行运动控制器ZCAN总线扩展模块的使用?


快速入门 | 篇六:如何进行运动控制器数据与存储的应用?

快速入门 | 篇五:如何进行运动控制器输入/输出IO的应用?

快速入门 | 篇四:如何进行运动控制器与触摸屏通讯?

快速入门 | 篇三:如何进行运动控制器ZPLC程序开发?

快速入门 | 篇二:如何进行运动控制器ZBasic程序开发?

快速入门 | 篇一:如何进行运动控制器固件升级?


EtherCAT与RTEX驱动器轴回零的配置与实现

G代码在运动控制器上的应用

运动控制器的自定义G代码编程应用

离线仿真调试,加快项目进度!

8轴EtherCAT轴扩展模块EIO24088的使用

运动控制器之追剪应用Demo

运动控制器激光振镜控制
运动控制器轴回零的配置与实现

运动控制器位置锁存功能的应用

ZMC运动控制器SCARA机械手应用快速入门

运动控制器RTEX总线使用入门

正运动技术CAD导图软件配合控制器的使用方法

EtherCAT总线运动控制器应用进阶一


EtherCAT运动控制卡开发教程之Qt(下):SCARA机械手正反解的建立

EtherCAT运动控制卡开发教程之Qt(中):小线段连续轨迹加工、暂停与继续

EtherCAT运动控制卡开发教程之Qt(上):开发环境配置与简单运动控制应用


EtherCAT运动控制卡开发教程之python

EtherCAT运动控制卡的SCARA等机器人指令的应用

EtherCAT运动控制卡的PWM与模拟量输出和运动速度同步

EtherCAT运动控制卡硬件比较输出以及编码器锁存

EtherCAT运动控制卡IO动作与运动控制的同步

EtherCAT运动控制卡实时程序的运行和读写控制


EtherCAT运动控制卡的运动暂停、恢复与系统安全设置

EtherCAT运动控制卡小线段前瞻的连续插补运动

EtherCAT运动控制卡的多轴插补运动和手轮运动

EtherCAT运动控制卡的辅助调试工具与方法介绍

EtherCAT运动控制卡的总线轴参数设置和轴运动

EtherCAT运动控制卡的硬件接线与C#的硬件外设读写与回零运动

EtherCAT运动控制卡的硬件接线与C#的单轴运动控制


简单易用的运动控制卡(十六):螺距补偿和反向间隙补偿

简单易用的运动控制卡(十五):PC启停控制器的实时程序

简单易用的运动控制卡(十四):PWM、模拟量输出与运动控制的同步

简单易用的运动控制卡(十三):IO动作与运动控制的同步

简单易用的运动控制卡(十二):运动控制系统的安全设置

简单易用的运动控制卡(十一):运动的暂停恢复和速度倍率设置


简单易用的运动控制卡(十):连续插补和小线段前瞻

简单易用的运动控制卡(九):圆弧插补和螺旋插补

简单易用的运动控制卡(八):直线插补和手轮运动

简单易用的运动控制卡(七):一次性加载多条连续小线段数据

简单易用的运动控制卡(六):Basic文件下载和连续轨迹加工


简单易用的运动控制卡(五):IO配置与回零运动

简单易用的运动控制卡(四):函数库的封装

简单易用的运动控制卡(三):轴参数配置和单轴运动控制

简单易用的运动控制卡(二):外设读写与ZDevelop诊断

简单易用的运动控制卡(一):硬件接线和上位机开发


运动控制卡在ROS上的应用(下)

运动控制卡在ROS上的应用(上)


EtherCAT运动控制卡和LabVIEW构建智能装备(五)

EtherCAT运动控制卡和LabVIEW构建智能装备(四)

EtherCAT运动控制卡和LabVIEW构建智能装备(三)

EtherCAT运动控制卡和LabVIEW构建智能装备(二)

EtherCAT运动控制卡和LabVIEW构建智能装备(一)

EtherCAT运动控制卡在LabVIEW中的运动控制与数据采集


运动控制卡应用开发教程之MATLAB

运动控制卡应用开发教程之C++

运动控制卡应用开发教程之Python

运动控制卡应用开发教程之C#

运动控制卡应用开发教程之Linux

运动控制卡应用开发教程之VB.NET


运动控制卡应用开发教程之VB6.0

运动控制卡应用开发教程之VC6.0

运动控制卡应用开发教程之使用Qt

运动控制卡应用开发教程之LabVIEW

运动控制卡应用开发教程之激光振镜控制

运动控制卡应用开发教程之硬件比较输出


关于正运动技术



深圳市正运动技术有限公司成立于2013年,专注于纯国产运动控制技术研究和通用运动控制软硬件平台和产品的研发,是国家级高新技术和专精特新“小巨人”企业。

正运动技术汇集了来自华为、中兴等公司的优秀人才。力求创新,目前公司拥有专利、著作权等知识产权五十余项。在坚持自主创新的同时,积极联合各大高校和科研院所协同运动控制基础技术的研究,是国内工控领域发展最快的企业之一,也是国内少有、完整掌握运动控制核心技术和实时工控软件平台技术的企业。

正运动技术除本部研发中心外,设有中山、武汉、上海三个研发分部。为更好地服务客户,本部之外设有苏州、东莞两个区域性服务中心,设有佛山、厦门、青岛、西安、武汉、成都、天津、郑州等销售和技术服务机构。

经过众多合作伙伴多年的开发应用,正运动技术的产品广泛地应用于3C电子、半导体、新能源、机器人、包装印刷、纺织服装、激光加工、医疗制药、数控机床、传统加工等领域。

正运动小助手
正运动小助手是正运动技术旗下技术资料平台,可第一时间发布最新产品技术文档,为您奉上最全面的运动控制产品基础知识介绍、使用注意事项及操作步骤指引等资料。
 最新文章