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

科技   科技   2024-06-20 07:01   广东  
点击上方正运动小助手,随时关注新动态!

ZMC406R-V2硬件介绍


ZMC406R-V2是正运动推出的一款多轴高性能EtherCAT总线运动控制器,具有EtherCAT、EtherNET、RS232、CAN和U盘等通讯接口,ZMC系列运动控制器可应用于各种需要脱机或联机运行的场合。

ZMC406R-V2支持6轴运动控制,最多可扩展至32轴,支持直线插补、任意圆弧插补、空间圆弧、螺旋插补、电子凸轮、电子齿轮、同步跟随等功能。

ZMC406R-V2可以采用脱机的方式将编辑好的程序下载到控制器上,可利用触摸屏示教的方式编辑想要运动的轨迹。也可以用PC API函数调用方式或者实时发送指令操作,在PC上位机C#,C++,Labview,Python等语言来开发Delta并联机械手的应用。

ZMC406R-V2支持6轴运动控制,可采用脉冲轴(带编码器反馈)或EtherCAT总线轴,通用IO包含24路输入口和12路输出口,模拟量AD/DA各两路,EtherCAT最快125us的刷新周期。






 硬件接线参考

1.通用输入口接线参考图

2.通用输出口接线参考图





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#的库文件以及相关文件复制到新建的项目中。

1)将zmcaux.cs文件复制到新建的项目里面中。

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

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

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





 PC函数介绍

1.PC函数手册可在光盘资料查看,具体路径如下。

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

指令3

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库中,专门用于控制卡连接数据定义类型;

3.机械手模型正解的建立。

指令25

ZAux_Direct_Connreframe

指令原型

int32 __stdcall ZAux_Direct_Connreframe(ZMC_HANDLE handle, int  Virmaxaxises, int *VirAxislist, int frame, int tablenum, int Jogmaxaxises, int  *JogAxislist)

指令说明

机械手正解指令

输入参数

参数名

描述

handle

连接标识。

Virmaxaxises

虚拟轴数量。

VirAxislist

虚拟轴列表。

frame

机械手类型1-scara  3-码垛

tablenum

机械手相关参数TABLE存放起点。

Jogmaxaxises

关联的关节轴个数。

JogAxislist

关联的关节轴列表。

输出参数

/

返回值

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

指令示例

机械手的建立

详细说明

此指令为逆解运动的反运动指令。

当虚拟轴CONNREFRAME运动LOAD时,关节轴的CONNFRAME运动会自动被CANCEL。

当关节轴的CONNFRAME运动LOAD时,虚拟轴CONNREFRAME运动会自动被CANCEL。

FRAME机械结构一览表

详细说明请查看《正运动机械手指令说明》文档。

其他特殊的机械结构如需支持请联系厂家。

frame

结构类型

1

标准SCARA机械手

101

SCARA+摆动,虚拟轴定义4个

105

SCARA+摆动,虚拟轴定义5个

106

特殊SCARA

107

特殊SCARA

108

特殊5轴SCARA

11

旋转台

17

双旋转台

18

偏移旋转台

19

偏移双旋转台

3

码垛机械手

103

码垛变形,喷涂机械手

5

旋转伸缩机械手

15

XY滑台

102

2轴delta

2

3轴delta,R类型控制器支持

12

4轴delta,R类型控制器支持

13

3轴垂直蜘蛛手,R类型控制器支持

25

5关节机械手

6

6自由度机械手,R类型控制器支持

26

特殊6自由度

36

特殊6自由度

100

XYZ+2轴手腕,虚拟轴定义3个

104

XYZ+2轴手腕,虚拟轴定义5个

4.机械手模型逆解的建立。

指令24

ZAux_Direct_Connframe

指令原型

int32 __stdcall ZAux_Direct_Connframe(ZMC_HANDLE handle, int  Jogmaxaxises, int  *JogAxislist, int  frame, int  tablenum , int  Virmaxaxises , int  *VirAxislist)

指令说明

机械手逆解指令

输入参数

参数名

描述

handle

连接标识。

Jogmaxaxises

关节轴数。

JogAxislist

关节轴列表。

frame

机械手类型1-scara  3-码垛

tablenum

机械手相关参数TABLE存放起点。

Virmaxaxises

关联的虚拟轴个数。

VirAxislist

关联的虚拟轴列表。

输出参数

/

返回值

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

指令示例

机械手的建立

详细说明

连接速度=0时关节坐标系的运动速度和加速度受SPEED等参数的限制。

当关节轴告警等出错时,此运动会被CANCEL。

不要在虚拟轴高速运动中CANCEL此运动,会引起轴高速运动中停止。

此命令LOAD时会自动修改虚拟轴的坐标,使得与关节轴一致,因此调用后需要WAIT LOADED后才开始运动。

连接过程中不要修改虚拟轴的坐标,或是调用DATUM等可能改坐标的运动,这样会导致关节轴快速运动到新的虚拟位置。

CONNFRAME生效后,关节轴的MTYPE为33,此时无法直接运动关节轴,必须通过运行虚拟轴来间接运动关节轴,当要直接移动关节轴时,先调用CANCEL取消CONNFRAME,再运动关节轴。

当虚拟轴和实际轴都是旋转轴时,例如末端旋转轴,虚拟轴和实际轴的脉冲当量注意要一致。

FRAME机械结构一览表

详细说明请查看《正运动机械手指令说明》文档。

其他特殊的机械结构如需支持请联系厂家。

frame

结构类型

1

标准SCARA机械手

101

SCARA+摆动,虚拟轴定义4个

105

SCARA+摆动,虚拟轴定义5个

106

特殊SCARA

107

特殊SCARA

108

特殊5轴SCARA

11

旋转台

17

双旋转台

18

偏移旋转台

19

偏移双旋转台

3

码垛机械手

103

码垛变形,喷涂机械手

5

旋转伸缩机械手

15

XY滑台

102

2轴delta

2

3轴delta,R类型控制器支持

12

4轴delta,R类型控制器支持

13

3轴垂直蜘蛛手,R类型控制器支持

25

5关节机械手

6

6自由度机械手,R类型控制器支持

26

特殊6自由度

36

特殊6自由度

100

XYZ+2轴手腕,虚拟轴定义3个

104

XYZ+2轴手腕,虚拟轴定义5个

5.机械手坐标系旋转,用于得到用户坐标系。

指令26

ZAux_Direct_FrameRotate

指令原型

int32 __stdcall ZAux_Direct_FrameRotate(ZMC_HANDLE handle,int iaxis, float *pfRotatePara)

指令说明

机械手坐标系旋转,用于对工件坐标系的平移和旋转。

输入参数

参数名

描述

handle

连接标识。

iaxis

轴号 关节轴/虚拟轴

pfRotateParat

平移旋转参数

输出参数

/

返回值

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

指令示例

/

详细说明

目前只对FRAME6同时旋转姿态,其他具有XYZ虚拟轴的可以支持XYZ三个轴旋转,姿态轴不能旋转。

旋转后,虚拟轴WORLD_DPOS表示世界坐标不会改变,虚拟轴DPOS表示工件坐标会改变。使用时需控制器当前存在机械连接。

BASE轴可以是虚拟轴与关节轴任意一个;BASE轴无机械手连接时会报1025的错误。

多种机械手叠加的情况,根据BASE轴来识别是哪个机械手模式;如果BASE(axis_1,axis_2)中的axis_1是模式1的机械手轴,axis_2是模式2的机械手轴,那么结果是模式1的机械手进行坐标计算,即以BASE轴的顺序来计算。





 C#例程建设之Delta正逆解的建立

1.轴方向要求

使用正运动Delta并联机械手模型,需要保证3个关节轴向下旋转时为正向,末端旋转轴逆时针旋转为正(俯视)。

2.结构参数(结构参数由机械手本体厂家提供)

机械手的结构参数需要先写进控制器的TABLE寄存器后,才可以调接口建立机械手的正逆解。

3.原点定义

A、各关节轴的连杆L1都处于水平位置时,认为是关节零点位置。(一般本体会提供定位销,没有提供的可以通过水平仪确保零点时L1处于水平位置)

B、此时轴0和轴1连线方向为直角坐标系X方向,直角坐标系零点位于连杆L1水平面的中心。

4.关节轴与虚拟轴

关节轴是实际存在的电机轴,Delta有关节轴0电机、关节轴1电机、关节轴2电机和末端旋转轴电机,这些关机轴脉冲当量的设置都需要设置成对应关节轴转1度需要的脉冲数,如:(Units = 电机一圈脉冲数 * 减速比 / 360)。

虚拟轴是虚拟出来的直角坐标系的X轴、Y轴、Z轴和一个旋转轴RZ,其中X、Y、Z轴的脉冲当量推荐设置成1000,旋转轴RZ的脉冲当量设置成旋转轴转1度需要的脉冲数。





 相关例程演示

1.链接控制器获取句柄,上位机操作通过获取到的句柄来操作控制器。

//连接控制器,控制器默认IP是192.168.0.11ZauxErr = zmcaux.ZAux_OpenEth("192.168.0.11", out g_Handle);if (0 != ZauxErr){AlmInifFile.Write(DateTime.Now.ToString("F"), "ZAux_OpenEth执行错误,错误码:" + ZauxErr.ToString(), "错误码信息");}

2.Delta并联机械手参数设置。

3.机械手正逆解的建立。

/************************************************************************************'任务编号:无'函数功能:机械手的正逆解的建立 'Input:Mode=0断开机械手;1建立机械手的逆解;2建立机械手的正解'Output:无 '返回值:0:表示机械手建立成功; -1:表示机械手建立失败'备注:1、控制器型号带R后缀的才支持该机械手模型'              2、正解状态时,虚拟轴的MTYPE=34'              3、逆解状态时,关节轴的MTYPE=33'              4、机械手处于逆解状态时不要断使能,不然操作不当容易飞车。**************************************************************************************/public int ScaraEstab(int Mode){    //更新Ui界面的Delta参数    ScaraParaWindows.DeltaParaSave();    //设置机械参数到控制器    SetControPara();    //保存Delta参数到Ini文件    WriteIniFile();    //清除控制器报警    ZauxErr = zmcaux.ZAux_Direct_Single_Datum(g_Handle, 0, 0);    //更新轴列表 建立正逆解的轴顺序是 J1、J2、Ju、Jz(关节轴)  Vx、Vy、Vr、Vz(虚拟轴)    int[] mJScaraAxisList = new int[4]; //关节轴列表    int[] mVScaraAxisList = new int[4]; //虚拟轴列表    for (int i = 0; i < 4; i++)    {        mJScaraAxisList[i] = gDeltaAxisList[i];        mVScaraAxisList[i] = gVAxisList[i];    }    //判读机械手参数是否设置正确    if ((DeltaR <= 0) || (Deltar <= 0) || (DeltaL1 <= 0) || (DeltaL2 <= 0))    {        MessageBox.Show("Delta机械手参数有问题请确认!");        return -1;    }    //机械手的结构参数要先写进控制器的TABLE寄存器后,才可以调接口建立机械手的正逆解    //更新机械手参数到控制器的TABLE寄存器    float[] ScaraParaList = new float[11] { DeltaR, Deltar, DeltaL1, DeltaL2, gMotorPulNum[0] * gReducRatio[0], gMotorPulNum[1] * gReducRatio[1], gMotorPulNum[2] * gReducRatio[2], 0, 0, 0, gMotorPulNum[3] * gReducRatio[3] };    ZauxErr = zmcaux.ZAux_Direct_SetTable(g_Handle, TableStaraId, 11, ScaraParaList);    if (0 != ZauxErr)    {        return -1;    }    if ((1 == Mode) && (0 == ZauxErr)) //建立机械手的逆解(机械手参数更新成功的情况下)    {        //建立Scara逆解        ZauxErr = zmcaux.ZAux_Direct_Connframe(g_Handle, 4, mJScaraAxisList, 14, TableStaraId, 4, mVScaraAxisList);        if (0 != ZauxErr)        {            ProceWindows.WriteLog("切换为逆解模式失败");            return -1;        }        ProceWindows.WriteLog("切换为逆解模式");    }    else if ((2 == Mode) && (0 == ZauxErr)) //建立机械手的正解(机械手参数更新成功的情况下)    {        //建立Scara正解        ZauxErr = zmcaux.ZAux_Direct_Connreframe(g_Handle, 4, mVScaraAxisList, 14, TableStaraId, 4, mJScaraAxisList);        if (0 != ZauxErr)        {            ProceWindows.WriteLog("切换为正解模式失败");            return -1;        }        ProceWindows.WriteLog("切换为正解模式");        }    }    return 0;}

4.手动运动界面
下图是例程手动运动的界面。

“关节坐标系手动控制”的手动按钮是进行关节轴的手动运动的按下时会自动建立机械手的正解。
“直角坐标系手动控制”的手动按钮是进行虚拟轴XYZ的手动运动的按下时会自动建立机械手的逆解。
当手动速度降低到一定值时会自动切换到寸动模式。

5.关节轴手动运动

/************************************************************************************'任务编号:     无'函数功能:     关节轴负向手动运动,负向点动按钮按下时调用'Input:        无'Output:       无 '返回值:       无'备注:         无       **************************************************************************************/private void JHandDirRev0_MouseDown(object sender, MouseEventArgs e){    //判断是否上锁,上锁才可以运动    int EnableState = 0;    cszmcaux.zmcaux.ZAux_Direct_GetAxisEnable(MainWindows.g_Handle, MainWindows.gDeltaAxisList[0], ref EnableState);    //如果使能上了    if ((1 == EnableState) || (MainWindows.IsDebug))     {        int Vmtype = 0;//虚拟轴MTYPE        cszmcaux.zmcaux.ZAux_Direct_GetMtype(MainWindows.g_Handle, MainWindows.gVAxisList[0], ref Vmtype);         //如果不是正解状态        if (Vmtype != 34)        {            //建立机械手的正解            if (0 != MainWindows.ScaraEstab(2))            {                //机械手没有成功建立                return;            }        }        //哪个按钮按下        int Id = 0;        for (int i = 0; i < 4; i++)        {            if (((Button)sender).Name == ("JHandDirRev" + i))            {                Id = i;            }        }        int TempAxis = 0;        TempAxis = MainWindows.gDeltaAxisList[Id];        //手动速度小于5是寸动模式        if (5 <= MainWindows.HnadSpeedPerc)        {            //设置点动速度            cszmcaux.zmcaux.ZAux_Direct_SetSpeed(MainWindows.g_Handle, TempAxis, MainWindows.HnadSpeedPerc * MainWindows.gAxisHandSpeed[Id] / 100);            //发送负向运动指令            cszmcaux.zmcaux.ZAux_Direct_Single_Vmove(MainWindows.g_Handle, TempAxis, -1);        }        else        {            //设置寸动速度            cszmcaux.zmcaux.ZAux_Direct_SetSpeed(MainWindows.g_Handle, TempAxis, MainWindows.gAxisHandSpeed[Id] / 10);            //发送寸动运动指令            cszmcaux.zmcaux.ZAux_Direct_Single_Move(MainWindows.g_Handle, TempAxis, -1 * MainWindows.HnadSpeedPerc);        }    }}/************************************************************************************'任务编号:     无'函数功能:     关节轴正向手动运动,正向点动按钮按下时调用'Input:        无'Output:       无 '返回值:       无'备注:         无       **************************************************************************************/private void JHandDirFwd0_MouseDown(object sender, MouseEventArgs e){    //判断是否上锁,上锁才可以运动    int EnableState = 0;    cszmcaux.zmcaux.ZAux_Direct_GetAxisEnable(MainWindows.g_Handle, MainWindows.gDeltaAxisList[0], ref EnableState);    //如果使能上了    if ((1 == EnableState) || (MainWindows.IsDebug))     {        int Vmtype = 0;//虚拟轴MTYPE        cszmcaux.zmcaux.ZAux_Direct_GetMtype(MainWindows.g_Handle, MainWindows.gVAxisList[0], ref Vmtype);         //如果不是正解状态        if (Vmtype != 34)        {            //建立机械手的正解            if (0 != MainWindows.ScaraEstab(2))            {                //机械手没有成功建立                return;            }        }        //哪个按钮按下        int Id = 0;        for (int i = 0; i < 4; i++)        {            if (((Button)sender).Name == ("JHandDirFwd" + i))            {                Id = i;            }        }        int TempAxis = 0;        TempAxis = MainWindows.gDeltaAxisList[Id];        //手动速度小于5是寸动模式        if (5 <= MainWindows.HnadSpeedPerc)        {            //设置点动速度            cszmcaux.zmcaux.ZAux_Direct_SetSpeed(MainWindows.g_Handle, TempAxis, MainWindows.HnadSpeedPerc * MainWindows.gAxisHandSpeed[Id] / 100);            //发送正向运动指令            cszmcaux.zmcaux.ZAux_Direct_Single_Vmove(MainWindows.g_Handle, TempAxis, 1);        }        else        {            //设置寸动速度            cszmcaux.zmcaux.ZAux_Direct_SetSpeed(MainWindows.g_Handle, TempAxis, MainWindows.gAxisHandSpeed[Id] / 10);            //发送寸动运动指令            cszmcaux.zmcaux.ZAux_Direct_Single_Move(MainWindows.g_Handle, TempAxis, 1 * MainWindows.HnadSpeedPerc);        }    }}/************************************************************************************'任务编号:     无'函数功能:     关节轴停止手动运动,点动按钮松开时调用。'Input:        无'Output:       无 '返回值:       无'备注:         无       **************************************************************************************/private void JHandDirRev0_MouseUp(object sender, MouseEventArgs e){    //哪个按钮按下    int Id = 0;    for (int i = 0; i < 4; i++)    {        if (((Button)sender).Name == ("JHandDirRev" + i))        {            Id = i;        }    }    int TempAxis = 0;    TempAxis = MainWindows.gDeltaAxisList[Id];    //手动速度小于5是寸动模式    if (5 <= MainWindows.HnadSpeedPerc)    {        MainWindows.ZauxErr = cszmcaux.zmcaux.ZAux_Direct_Single_Cancel(MainWindows.g_Handle, TempAxis, 2);    }}

关节轴手动运动演示

6.虚拟轴手动运动

/************************************************************************************'任务编号:无'函数功能:虚拟轴负向手动运动,负向点动按钮按下时调用'Input:无'Output:无 '返回值:无'备注:无       **************************************************************************************/private void VHandDirRev0_MouseDown(object sender, MouseEventArgs e){    //判断是否上锁,上锁才可以运动    int EnableState = 0;    cszmcaux.zmcaux.ZAux_Direct_GetAxisEnable(MainWindows.g_Handle, MainWindows.gDeltaAxisList[0], ref EnableState);    //如果使能上了    if ((1 == EnableState) || (MainWindows.IsDebug))     {        int Jmtype = 0;//关节轴Mtype        cszmcaux.zmcaux.ZAux_Direct_GetMtype(MainWindows.g_Handle, gDeltaAxisList[0], ref Jmtype);        //如果不是逆解状态        if (Jmtype != 33)        {            //建立机械手的逆解            if (0 != MainWindows.ScaraEstab(1))            {                //机械手没有成功建立                return;            }        }        //哪个按钮按下        int Id = 0;        for (int i = 0; i < 5; i++)        {            if (((Button)sender).Name == ("VHandDirRev" + i))            {                Id = i;            }        }        int TempAxis = 0;        //更新当前机械手状态        TempAxis = MainWindows.gVAxisList[Id];        //手动速度小于5是寸动模式        if (5 <= MainWindows.HnadSpeedPerc)        {            //设置点动速度            cszmcaux.zmcaux.ZAux_Direct_SetSpeed(MainWindows.g_Handle, TempAxis, MainWindows.HnadSpeedPerc * MainWindows.gAxisHandSpeed[Id] / 100);           //发送负向运动指令           cszmcaux.zmcaux.ZAux_Direct_Single_Vmove(MainWindows.g_Handle, TempAxis, -1);         }        else        {            //设置寸动速度            cszmcaux.zmcaux.ZAux_Direct_SetSpeed(MainWindows.g_Handle, TempAxis, MainWindows.gAxisHandSpeed[Id] / 10);            //发送寸动运动指令           cszmcaux.zmcaux.ZAux_Direct_Single_Move(MainWindows.g_Handle, TempAxis, -1 * MainWindows.HnadSpeedPerc);        }    }}/************************************************************************************'任务编号:无'函数功能:虚拟轴负向手动运动,负向点动按钮按下时调用'Input:无'Output:无 '返回值:无'备注:无       **************************************************************************************/private void VHandDirFwd0_MouseDown(object sender, MouseEventArgs e){    //判断是否上锁,上锁才可以运动    int EnableState = 0;    cszmcaux.zmcaux.ZAux_Direct_GetAxisEnable(MainWindows.g_Handle, MainWindows.gDeltaAxisList[0], ref EnableState);    //如果使能上了    if ((1 == EnableState) || (MainWindows.IsDebug))     {        int Jmtype = 0;//关节轴Mtype        cszmcaux.zmcaux.ZAux_Direct_GetMtype(MainWindows.g_Handle, gDeltaAxisList[0], ref Jmtype);        //如果不是逆解状态        if (Jmtype != 33)        {            //建立机械手的逆解            if (0 != MainWindows.ScaraEstab(1))            {                //机械手没有成功建立                return;            }        }        //哪个按钮按下        int Id = 0;        for (int i = 0; i < 5; i++)        {            if (((Button)sender).Name == ("VHandDirFwd" + i))            {                Id = i;            }        }        int TempAxis = 0;        //更新当前机械手状态        TempAxis = MainWindows.gVAxisList[Id];        //手动速度小于5是寸动模式        if (5 <= MainWindows.HnadSpeedPerc)        {            //设置点动速度            cszmcaux.zmcaux.ZAux_Direct_SetSpeed(MainWindows.g_Handle, TempAxis, MainWindows.HnadSpeedPerc * MainWindows.gAxisHandSpeed[Id] / 100);           //发送正向运动指令           cszmcaux.zmcaux.ZAux_Direct_Single_Vmove(MainWindows.g_Handle, TempAxis, 1);         }        else        {            //设置寸动速度            cszmcaux.zmcaux.ZAux_Direct_SetSpeed(MainWindows.g_Handle, TempAxis, MainWindows.gAxisHandSpeed[Id] / 10);            //发送寸动运动指令           cszmcaux.zmcaux.ZAux_Direct_Single_Move(MainWindows.g_Handle, TempAxis, 1 * MainWindows.HnadSpeedPerc);        }    }}/************************************************************************************'任务编号:无'函数功能:虚拟轴停止轴运动,点动按钮松开时调用'Input:无'Output:无 '返回值:无'备注:无       **************************************************************************************///停止运动private void VHandDirRev0_MouseUp(object sender, MouseEventArgs e){    //哪个按钮按下    int Id = 0;    for (int i = 0; i < 5; i++)    {        if (((Button)sender).Name == ("VHandDirRev" + i))        {            Id = i;        }    }    int TempAxis = 0;    TempAxis = MainWindows.gVAxisList[Id];    //手动速度小于5是寸动模式    if (5 <= MainWindows.HnadSpeedPerc)    {        cszmcaux.zmcaux.ZAux_Direct_Single_Cancel(MainWindows.g_Handle, TempAxis, 2);    }}

虚拟轴手动运动演示

7.机械手仿真工具的使用

打开【ZRobotView】软件,点击【连接】输入控制器的IP(默认IP:192.168.0.11),点击连接,待连接成功后点击切换即可3D仿真机械手的运动情况。

本次,正运动技术C#之Delta并联机械手正逆解的建立和手动运动,就分享到这里。

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

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

回顾往期内容

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

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

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电子、半导体、新能源、机器人、包装印刷、纺织服装、激光加工、医疗制药、数控机床、传统加工等领域。

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