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并联机械手的开发
3.找到厂家提供的光盘资料里面的C#函数库,路径如下(32位库为例)。
PC函数介绍
指令3 | ZAux_OpenEth | ||||
指令原型 | int32 __stdcall ZAux_OpenEth(char *ipaddr, ZMC_HANDLE * phandle) | ||||
指令说明 | 以太网连接控制器。 | ||||
输入参数 |
| ||||
输出参数 |
| ||||
返回值 | 成功返回值为0,非0详见错误码说明。 | ||||
指令示例 | 网口连接控制器 | ||||
详细说明 | 1.网口采用RJ45标准网线接口,通讯速率为100Mbit/s。 2.控制器出厂的IP地址为192.168.0.11,端口号为502。对端通讯设备需与控制器处于同一网段,才可进行连接。 3.最常用的控制器连接方式。 4.ZMC_HANDLE 类型:Zmotion库中,专门用于控制卡连接数据定义类型; |
指令25 | ZAux_Direct_Connreframe | ||||||||||||||||||||||||||||||||||||||||||||||||||
指令原型 | int32 __stdcall ZAux_Direct_Connreframe(ZMC_HANDLE handle, int Virmaxaxises, int *VirAxislist, int frame, int tablenum, int Jogmaxaxises, int *JogAxislist) | ||||||||||||||||||||||||||||||||||||||||||||||||||
指令说明 | 机械手正解指令 | ||||||||||||||||||||||||||||||||||||||||||||||||||
输入参数 |
| ||||||||||||||||||||||||||||||||||||||||||||||||||
输出参数 | / | ||||||||||||||||||||||||||||||||||||||||||||||||||
返回值 | 成功返回值为0,非0详见错误码说明。 | ||||||||||||||||||||||||||||||||||||||||||||||||||
指令示例 | 机械手的建立 | ||||||||||||||||||||||||||||||||||||||||||||||||||
详细说明 | 此指令为逆解运动的反运动指令。 当虚拟轴CONNREFRAME运动LOAD时,关节轴的CONNFRAME运动会自动被CANCEL。 当关节轴的CONNFRAME运动LOAD时,虚拟轴CONNREFRAME运动会自动被CANCEL。 | ||||||||||||||||||||||||||||||||||||||||||||||||||
FRAME机械结构一览表 | 详细说明请查看《正运动机械手指令说明》文档。 其他特殊的机械结构如需支持请联系厂家。
|
指令24 | ZAux_Direct_Connframe | ||||||||||||||||||||||||||||||||||||||||||||||||||
指令原型 | int32 __stdcall ZAux_Direct_Connframe(ZMC_HANDLE handle, int Jogmaxaxises, int *JogAxislist, int frame, int tablenum , int Virmaxaxises , int *VirAxislist) | ||||||||||||||||||||||||||||||||||||||||||||||||||
指令说明 | 机械手逆解指令 | ||||||||||||||||||||||||||||||||||||||||||||||||||
输入参数 |
| ||||||||||||||||||||||||||||||||||||||||||||||||||
输出参数 | / | ||||||||||||||||||||||||||||||||||||||||||||||||||
返回值 | 成功返回值为0,非0详见错误码说明。 | ||||||||||||||||||||||||||||||||||||||||||||||||||
指令示例 | 机械手的建立 | ||||||||||||||||||||||||||||||||||||||||||||||||||
详细说明 | 连接速度=0时关节坐标系的运动速度和加速度受SPEED等参数的限制。 当关节轴告警等出错时,此运动会被CANCEL。 不要在虚拟轴高速运动中CANCEL此运动,会引起轴高速运动中停止。 此命令LOAD时会自动修改虚拟轴的坐标,使得与关节轴一致,因此调用后需要WAIT LOADED后才开始运动。 连接过程中不要修改虚拟轴的坐标,或是调用DATUM等可能改坐标的运动,这样会导致关节轴快速运动到新的虚拟位置。 CONNFRAME生效后,关节轴的MTYPE为33,此时无法直接运动关节轴,必须通过运行虚拟轴来间接运动关节轴,当要直接移动关节轴时,先调用CANCEL取消CONNFRAME,再运动关节轴。 当虚拟轴和实际轴都是旋转轴时,例如末端旋转轴,虚拟轴和实际轴的脉冲当量注意要一致。 | ||||||||||||||||||||||||||||||||||||||||||||||||||
FRAME机械结构一览表 | 详细说明请查看《正运动机械手指令说明》文档。 其他特殊的机械结构如需支持请联系厂家。
|
指令26 | ZAux_Direct_FrameRotate | ||||||||
指令原型 | int32 __stdcall ZAux_Direct_FrameRotate(ZMC_HANDLE handle,int iaxis, float *pfRotatePara) | ||||||||
指令说明 | 机械手坐标系旋转,用于对工件坐标系的平移和旋转。 | ||||||||
输入参数 |
| ||||||||
输出参数 | / | ||||||||
返回值 | 成功返回值为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.轴方向要求
相关例程演示
//连接控制器,控制器默认IP是192.168.0.11
ZauxErr = 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并联机械手参数设置。
/************************************************************************************
'任务编号:无
'函数功能:机械手的正逆解的建立
'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;
}
/************************************************************************************
'任务编号: 无
'函数功能: 关节轴负向手动运动,负向点动按钮按下时调用
'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);
}
}
虚拟轴手动运动演示
本次,正运动技术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的视觉飞拍与精准输出
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指令简介
经济型EtherCAT运动控制器(四):ModbusRTU或ModbusTcp与触摸屏通讯
经济型EtherCAT运动控制器(三):PLC实现多轴直线插补与电子凸轮
经济型EtherCAT运动控制器(二):ZBasic实现多轴直线插补运动
运动控制+机器视觉Demo软件框架(三):视觉纠偏+连续插补的配方编辑
运动控制+机器视觉Demo软件框架(二):移动标定和形状匹配
开放式激光振镜+运动控制器(五):ZMC408SCAN控制器硬件介绍
开放式激光振镜+运动控制器(四):PSO位置同步输出在激光振镜加工中的应用
快速入门 | 篇十九:正运动技术运动控制器多轴同步与电子凸轮指令简介
快速入门 | 篇十六:正运动控制器EtherCAT总线快速入门
快速入门 | 篇十四:运动控制器基础轴参数与基础运动控制指令
快速入门 | 篇十三:正运动技术运动控制器ZDevelop 编程软件的使用
快速入门 | 篇八:如何进行运动控制器EtherCAT总线的基础使用?
快速入门 | 篇七:如何进行运动控制器ZCAN总线扩展模块的使用?
快速入门 | 篇五:如何进行运动控制器输入/输出IO的应用?
快速入门 | 篇二:如何进行运动控制器ZBasic程序开发?
EtherCAT与RTEX驱动器轴回零的配置与实现
EtherCAT运动控制卡开发教程之Qt(中):小线段连续轨迹加工、暂停与继续
EtherCAT运动控制卡开发教程之Qt(上):开发环境配置与简单运动控制应用
EtherCAT运动控制卡的PWM与模拟量输出和运动速度同步
EtherCAT运动控制卡的硬件接线与C#的硬件外设读写与回零运动
简单易用的运动控制卡(十四):PWM、模拟量输出与运动控制的同步
简单易用的运动控制卡(六):Basic文件下载和连续轨迹加工
EtherCAT运动控制卡和LabVIEW构建智能装备(五)
EtherCAT运动控制卡和LabVIEW构建智能装备(四)
EtherCAT运动控制卡和LabVIEW构建智能装备(三)
EtherCAT运动控制卡和LabVIEW构建智能装备(二)
EtherCAT运动控制卡和LabVIEW构建智能装备(一)
关于正运动技术
深圳市正运动技术有限公司成立于2013年,专注于纯国产运动控制技术研究和通用运动控制软硬件平台和产品的研发,是国家级高新技术和专精特新“小巨人”企业。
正运动技术汇集了来自华为、中兴等公司的优秀人才。力求创新,目前公司拥有专利、著作权等知识产权五十余项。在坚持自主创新的同时,积极联合各大高校和科研院所协同运动控制基础技术的研究,是国内工控领域发展最快的企业之一,也是国内少有、完整掌握运动控制核心技术和实时工控软件平台技术的企业。
正运动技术除本部研发中心外,设有中山、武汉、上海三个研发分部。为更好地服务客户,本部之外设有苏州、东莞两个区域性服务中心,设有佛山、厦门、青岛、西安、武汉、成都、天津、郑州等销售和技术服务机构。
经过众多合作伙伴多年的开发应用,正运动技术的产品广泛地应用于3C电子、半导体、新能源、机器人、包装印刷、纺织服装、激光加工、医疗制药、数控机床、传统加工等领域。