点击上方“正运动小助手”,随时关注新动态!
本文导读
前面两节课程我们介绍了怎么建立Delta并联机械手的正逆解以及如何通过视觉进行匹配定位。本节课程给大家分享如何通过C#语言开发正运动Delta并联机械手传送带同步的视觉分拣。
VPLC711硬件介绍
VPLC711是正运动推出的一款基于x86平台和Windows操作系统的高性能机器视觉EtherCAT运动控制器,具备强大的运算能力和灵活性。它具有出色的实时性能和多路高速硬件输入与多路高速PSO输出,能够精准控制多轴同步运动,并与外部设备实现多协议的高速通信。
VPLC711支持多种硬件接口和通信协议,方便与其他设备的连接和集成。除此之外,VPLC711还具备视觉处理功能,能够实时处理图像数据,实现视觉检测、测量和定位等应用。
VPLC711内置Windows运动控制实时内核MotionRT7,形成一种开放式IPC形态实时软控制器/软PLC,为用户提供灵活集成的运动控制+视觉一体化解决方案。
1.采用x86高性能CPU,EtherCAT可支持1ms 64轴同步运行;
5.支持DVI-D,HDMI显示,支持双网口不同IP设置。
C#语言进行Delta并联机械手的开发之运动库和视觉库的添加
1.在VS2010菜单“文件”→“新建”→“项目”,启动创建项目向导。
3.找到厂家提供的光盘资料里面的C#函数库,路径如下(32位库为例)。
PC函数介绍
1.链接控制器,获取链接句柄。
指令 | 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库中,专门用于控制卡连接数据定义类型; |
指令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) | ||||||||||||||||||
指令说明 | 同步运动,皮带上物体跟随,此运动非插补运动,不保证运动轨迹为直线。 | ||||||||||||||||||
输入参数 |
| ||||||||||||||||||
输出参数 | / | ||||||||||||||||||
返回值 | 成功返回值为0,非0详见错误码说明。 | ||||||||||||||||||
指令示例 | 皮带轴同步运动跟随 | ||||||||||||||||||
详细说明1 | Imode:同步模式 |
Basic脚本快速验证指令用法
1.编写Basic测试脚本进行MoveSync指令的用法测试。
'**************************************************************************************
'背景:假设有一对对射型的光电传感器固定在流水线的两端,来实时检测流水线上的产品到位情况
'MOVESYNC指令参数填写说明:
'syncposition:物体到感应点时皮带轴的位置,需要通过编码器锁存把产品的对应位置记录下来。
'pos1:跟随轴1原点到光电传感器感应点的位置,对于每个产品都是固定的。
'**************************************************************************************
GLOBAL CONST BeltAxis=4 '皮带轴是轴4
GLOBAL CONST FollowAxis1=0 '跟随轴1是轴0
GLOBAL CONST InducPos1=30 '跟随轴1原点到光电传感器感应点的位置
GLOBAL CONST StandbyPos1=50'跟随轴1的待机位
GLOBAL CONST EmptyPos1=400 '跟随轴1的放料位
'停止所有轴
RAPIDSTOP(2)
WAIT IDLE
'初始化相关轴的轴参数
BASE(FollowAxis1, BeltAxis)
ATYPE = 1,1
UNITS = 1000,1000
SPEED = 50,100
DPOS = 0,0
'触发示波器采集波形
TRIGGER
DELAY(1000)
'跟随轴先运动到待机位
BASE(FollowAxis1)
MOVEABS(StandbyPos1)
'皮带轴开始运动
VMOVE(1) AXIS(BeltAxis)
'假设皮带运动到200的位置时,有一个产品被检测到
BASE(FollowAxis1)
Wait UNTIL MPOS(BeltAxis)> 200
MOVESYNC(0, 2000, 200, BeltAxis, InducPos1) '跟随轴加速同步段该指令执行完后将同步上产品
MOVE_OP(0, ON) '同步上后打开真空吸
MOVESYNC(0, 1000, 200, BeltAxis, InducPos1) '继续同步1s
MOVESYNC(-1, 0, 0, -1, EmptyPos1) '走到放料位置
MOVE_OP(0, OFF) '到放料位后关闭真空吸
根据示波器的数据分析
2、跟随轴追上产品,并保持速度和皮带轴同步时皮带的位置是400,跟随轴1的位置是230。
3、由1和2可知,产品在同步过程中前进了200(400-200)。
4、因为跟随轴1原点到光电传感器感应点的位置InducPos1我们给的数据是30,所以在跟随轴1和皮带平行的情况下,皮带带着产品往前跑了200后,此时此刻跟随轴1原点到光产品的实际距离是230(200+30)。
C#例程建设之视觉流水线同步分拣
imode = -1,表示结束同步模式,可运动到指定的绝对位置,一般同步上抓取完物料后运动到放料位使用。
(2)参数synctime: 同步时间,ms单位.运动在指定时间内完成,完成时轴跟皮带轴上物体保持速度一致。0表示根据运动轴的速度加速度来估计同步时间。
(3)参数syncposition: 视觉或传感器识别到皮带是的产品时,皮带此时此刻的位置信息MPOS。
2.视觉流水线同步分拣流程图。
/************************************************************************************
'任务编号: 无
'函数功能: 视觉定位产品
'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);
}
}
/************************************************************************************
'任务编号: 无
'函数功能: 流水线同步分拣
'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的视觉飞拍与精准输出
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电子、半导体、新能源、机器人、包装印刷、纺织服装、激光加工、医疗制药、数控机床、传统加工等领域。