点击上方“正运动小助手”,随时关注新动态!
本文导读
今天,正运动小助手为大家分享一下运动控制卡周期上报,通过提前设置经常读取的参数主动周期上报,可以减少PC主动轮询的时间。此次介绍将以ECI2A18B为例,主要讲解如何使用C++编程语言来进行周期上报函数的编写和功能的开发。
01
ECI2A18B控制卡硬件介绍
ECI2A18B经济型多轴运动控制卡是一款脉冲型、模块化的网络型运动控制卡。控制卡本身最多支持10轴,用以实现直线插补、任意圆弧插补、空间圆弧、螺旋插补、电子凸轮、电子齿轮、同步跟随、虚拟轴、机械手指令等简单的轨迹控制需求;采用优化的网络通讯协议可以实现实时的运动控制。
ECI2A18B控制卡功能特点:
(1)本身支持6差分脉冲轴+4单端脉冲轴运动控制,最多可扩展至12轴运动控制。
(2)脉冲输出模式:脉冲/方向或双脉冲。
(3)AXIS接口支持编码器位置测量,可以配置为手轮输入模式。
(4)专用的手轮输入接口。
(5)每轴最大输出脉冲频率10MHz。
(6)通过CAN总线,最多可扩展到256个隔离输入口和256个隔离输出口。
(7)轴正负限位信号口/原点信号口可以随意配置到任何输入口。
(8)通用数字输出口最大输出电流可达500mA,可直接驱动部分电磁阀。
(9)RS232接口、以太网接口、CAN接口。
(10)支持最多达12轴直线插补、任意圆弧插补、螺旋插补。
(11)支持点位运动、电子凸轮、直线插补、圆弧插补、连续插补运动、机械手指令。
(12)支持Basic多文件多任务编程。
(13)多种程序加密手段,保护客户的知识产权。
接口定义:
ECI2000系列经济型多轴运动控制卡可用于电子半导体设备(检测类设备、组装类设备、锁附类设备、焊锡机)、点胶设备和流水线等12轴以内脉冲应用场合。
控制器支持windows、linux、Mac、Android、wince各种操作系统下的开发,提供vc、c#、vb.net、labview等各种环境的dll库,如下图。上位机软件编程参考《ZMotion PC函数库编程手册》。
02为什么要进行周期上报,作用是什么?
1、当PC主动轮询的次数过多时,可能会导致以下问题:
(1)消耗系统资源
轮询会使系统资源消耗增加,无论是任务轮询或定时器轮询,都会消耗系统的部分资源。在多用户或者资源受限的环境里,这极有可能致使系统性能下滑。
(2)浪费CPU资源
只要是轮询都会造成CPU资源的浪费。这是因为轮询会会在系统内不间断的运行,不论当前设备的状态是否有改变。实际上,设备的诸多状态并不经常改变,轮询空转只会无端消耗CPU的时间。
(3)影响电源管理
向PC报告外围设备次数增多会使功耗提高,这可能缩短电池寿命或增加能源消耗,从而影响电源管理。
(4)降低响应速度
如果轮询频率过高,系统响应其他任务的速度或许会变慢。造成原因是由于CPU会不间断的轮询当前状态,从而响应处理其他计算或与用户交互任务会减慢。
(5)网络负载增加
若轮询涉及网络通信,轮询请求过多就可能加大网络负载,造成网络拥堵或者延迟加剧。
(6)服务器压力增大
在客户端服务器架构里,要是频繁进行轮询请求,就可能给服务器带来压力。主要集中在在服务器资源不足时,也许会使服务质量降低或者出现请求超时的情况。
2、多种获取方式对于程序运行占比的区别:
在探讨单条获取、多条获取以及周期性获取对程序运行产生的影响时,我们需要考量这些操作的特性以及它们对程序整体性能可能存在的潜在影响。
(1)单条获取
单条获取即程序每次仅处理一个单独的数据项。此方式简单直接,然而处理大量数据时效率不高,因为每次操作都会有上下文切换与资源管理方面的开销。此时,程序运行时间主要耗费在数据处理上。
(2)多条获取
多条获取意味着同时处理多个数据项。在现代计算机系统里,常借助多线程或者并发技术达成这一操作,这样做能大幅提升数据处理的吞吐量。不过,多线程虽有好处,却可能被锁争、内存竞争和上下文切换等问题所抵消。所以,多条获取也许会缩短单个数据项处理的相对运行时间,但总体运行时间能否减少取决于多线程优化的成效。
(3)周期性获取
周期获取即按照固定的时间间隔重复开展数据获取操作。在诸如实时监控系统、定时任务这类需要定期更新数据状态的应用场景中较为常见。其运行时间占比由任务的周期性和每个周期内实际工作量决定。若周期性任务负载较轻,则对程序整体运行时间影响不大。
应用场合:在实际应用里,具体的应用场景、数据特性以及性能要求决定了选择何种数据获取策略。比如,若程序要对单个事件快速响应,单条获取或许更合适;要是旨在使数据处理速度最大化,多条获取可能更有利;而对于那些需要定期保持数据新鲜度的应用而言,周期性获取则不可或缺。
03
新建MFC项目并添加函数库
1、首先打开Visual Studio 2022,点击创建新项目。
2、选择开发语言为“Visual C++”和程序类型“MFC应用程序”。
3、点击下一步即可。
4、选择类型为“基于对话框”,下一步或者完成。
5、前往正运动官网下载PC函数库,路径如下(本文采用64位函数库为例)。
(1)进入官网,选择支持与服务,打开下载中心选择库文件,就能找到所有的PC函数库。
(2)点击下载Windows C++(64位),可按需求另存为想要保存的路径下。
(3)函数库另存为具体路径如下。
6、将厂商提供的C++库文件和相关头文件复制到新建的项目里。
7、在项目中添加静态库和相关头文件。
(1)先右击项目文件,接着依次选择:“添加”→“现有项”。
(2)在弹出的窗口中依次添加静态库和相关头文件。
8、声明用到的头文件和定义控制器连接句柄。
至此项目新建完成,可进行MFC项目开发。
04
查看PC函数手册,熟悉相关函数接口
1、PC函数手册也可以在正运动官网“支持与服务”→“下载中心”→“编程手册”中找到。
2、链接控制器,获取链接句柄。
3、控制器自动上报相关指令。
4、读取数字输入输出相关指令。
5、读取Modbus寄存器相关指令。
05
MFC实现轴的周期上报
1、例程界面如下。
2、通过下拉控件选择连接控制器/控制卡连接方式。
BOOL CTest_CycleUpDlg::OnInitDialog(){ CDialogEx::OnInitDialog();// 将“关于...”菜单项添加到系统菜单中。// IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE);if(pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid);if(!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX,strAboutMenu); } }// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动// 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标// TODO: 在此添加额外的初始化代码 GetDlgItem(IDC_COMBO2)->SetWindowTextA("网口\n"); CComboBox *connetList; connetList = (CComboBox *)GetDlgItem(IDC_COMBO2); connetList->AddString(_T("网口\n")); connetList->AddString(_T("LOCAL\n")); connetList->AddString(_T("PCI\n")); connetList->AddString(_T("串口\n"));returnTRUE; // 除非将焦点设置到控件,否则返回 TRUE}
3、自动搜索IP。void CTest_CycleUpDlg::OnCbnDropdownCombo1(){char Buffer[256]; CTest_CycleUpDlg* pDlg = (CTest_CycleUpDlg*)AfxGetMainWnd(); GetDlgItemText(IDC_COMBO2,Buffer,256); Buffer[255] = '\0';if(0==strcmp(Buffer,"串口\n")) { Com_SCAN(pDlg); }elseif(0==strcmp(Buffer,"网口\n")) { IP_SCAN(pDlg); }elseif(0==strcmp(Buffer,"PCI\n")) { PCI_SCAN(pDlg); }elseif(0==strcmp(Buffer,"LOCAL\n")) { CComboBox *m_pEthList; m_pEthList = (CComboBox *)GetDlgItem(IDC_COMBO1); m_pEthList->ResetContent(); m_pEthList->AddString(_T("LOCAL1\n")); }else { CString str; MessageBox("请选择正确的链接类型!");return; }return;}
4、开启上报。
//开启关闭上报void CTest_CycleUpDlg::OnBnClickedCheckStart(){if(NULL == G_ZmcHandle) { MessageBox(_T("控制器未连接"));return; } CString tempstr; UpdateData(true); int iret = 0;if(m_If_StartUp) //开启上报 { GetCycleStr(); iret = ZAux_CycleUpEnable(G_ZmcHandle,m_CyclePort,m_CycleTime,Str_CycleCmd);if(ERR_SUCCESS != iret) { tempstr.Format("周期上报打开失败!错误码:%d 命令:%s\r\n",iret,Str_CycleCmd); AppendTextOut(tempstr);return; } tempstr.Format("周期上报开始!命令:%s\r\n",Str_CycleCmd); AppendTextOut(tempstr); ifirsttimeus = GetTickCount(); SetTimer(1,1,NULL); }else { m_CycleCount = ZAux_CycleUpGetRecvTimes(G_ZmcHandle,m_CyclePort); iret = ZAux_CycleUpDisable(G_ZmcHandle,m_CyclePort);if(ERR_SUCCESS != iret) { tempstr.Format("周期上报关闭失败!错误码:%d \r\n",iret); AppendTextOut(tempstr);return; } tempstr.Format("周期上报关闭-上报用时:%dms, 上报次数:%d ,平均时间:%.3fms\r\n",(GetTickCount() - ifirsttimeus),m_CycleCount,(float)(GetTickCount() - ifirsttimeus)/m_CycleCount); AppendTextOut(tempstr); KillTimer(1); }}
5、选择获取参数类型和起始地址及数量。
//获取上报参数void CTest_CycleUpDlg::GetCycleStr(){memset(Str_CycleCmd,0,sizeof(Str_CycleCmd)); CString TempString = "";int ilen = 0;if(m_CycleParaEnAble[0]) {switch(m_CyclePara[0]) {case0: //AXISSTATUS TempString.Format("AXISSTATUS(%d,%d),",m_CycleParaStart[0],m_CycleParaNum[0]);break;case1: //DPOS TempString.Format("DPOS(%d,%d),",m_CycleParaStart[0],m_CycleParaNum[0]);break;case2: //IDLE TempString.Format("IDLE(%d,%d),",m_CycleParaStart[0],m_CycleParaNum[0]);break;case3: //IN TempString.Format("IN(%d,%d),",m_CycleParaStart[0],m_CycleParaNum[0]);break;case4: //MODBUS_REG TempString.Format("MODBUS_REG(%d,%d),",m_CycleParaStart[0],m_CycleParaNum[0]);break;case5: //MPOS TempString.Format("MPOS(%d,%d),",m_CycleParaStart[0],m_CycleParaNum[0]);break;case6: //OP TempString.Format("OP(%d,%d),",m_CycleParaStart[0],m_CycleParaNum[0]);break;case7: //TABLE TempString.Format("TABLE(%d,%d),",m_CycleParaStart[0],m_CycleParaNum[0]);break;default:break; } } ilen += TempString.GetLength();memcpy(Str_CycleCmd,TempString.GetBuffer(0),TempString.GetLength()*sizeof(TCHAR));if(m_CycleParaEnAble[1]) {switch(m_CyclePara[1]) {case0: //AXISSTATUS TempString.Format("AXISSTATUS(%d,%d),",m_CycleParaStart[1],m_CycleParaNum[1]);break;case1: //DPOS TempString.Format("DPOS(%d,%d),",m_CycleParaStart[1],m_CycleParaNum[1]);break;case2: //IDLE TempString.Format("IDLE(%d,%d),",m_CycleParaStart[1],m_CycleParaNum[1]);break;case3: //IN TempString.Format("IN(%d,%d),",m_CycleParaStart[1],m_CycleParaNum[1]);break;case4: //MODBUS_REG TempString.Format("MODBUS_REG(%d,%d),",m_CycleParaStart[1],m_CycleParaNum[1]);break;case5: //MPOS TempString.Format("MPOS(%d,%d),",m_CycleParaStart[1],m_CycleParaNum[1]);break;case6: //OP TempString.Format("OP(%d,%d),",m_CycleParaStart[1],m_CycleParaNum[1]);break;case7: //TABLE TempString.Format("TABLE(%d,%d),",m_CycleParaStart[1],m_CycleParaNum[1]);break;default:break; } }if((ilen + TempString.GetLength()) < 1000) {memcpy(&Str_CycleCmd[ilen],TempString.GetBuffer(0),TempString.GetLength()*sizeof(TCHAR)); ilen += TempString.GetLength(); }if(m_CycleParaEnAble[2]) {switch(m_CyclePara[2]) {case0: //AXISSTATUS TempString.Format("AXISSTATUS(%d,%d)",m_CycleParaStart[2],m_CycleParaNum[2]);break;case1: //DPOS TempString.Format("DPOS(%d,%d)",m_CycleParaStart[2],m_CycleParaNum[2]);break;case2: //IDLE TempString.Format("IDLE(%d,%d)",m_CycleParaStart[2],m_CycleParaNum[2]); break;case3: //IN TempString.Format("IN(%d,%d)",m_CycleParaStart[2],m_CycleParaNum[2]); break;case4: //MODBUS_REG TempString.Format("MODBUS_REG(%d,%d)",m_CycleParaStart[2],m_CycleParaNum[2]);break;case5: //MPOS TempString.Format("MPOS(%d,%d)",m_CycleParaStart[2],m_CycleParaNum[2]);break;case6: //OP TempString.Format("OP(%d,%d)",m_CycleParaStart[2],m_CycleParaNum[2]);break;case7: //TABLE TempString.Format("TABLE(%d,%d)",m_CycleParaStart[2],m_CycleParaNum[2]);break;default:break; } }if((ilen + TempString.GetLength()) < 1000) {memcpy(&Str_CycleCmd[ilen],TempString.GetBuffer(0),TempString.GetLength()*sizeof(TCHAR)); ilen += TempString.GetLength(); }}
6、获取上报结果并输出。
//获取上报结果void CTest_CycleUpDlg::GetCycleInfo(){ CString ParaString = ""; CString TempString = ""; CString ShowString = "";int iret = 0;int ival = 0;for(int inum=0;inum<3;inum++) { ShowString ="";if(m_CycleParaEnAble[inum]) {switch(m_CyclePara[inum]) {case0: //AXISSTATUS ParaString = "AXISSTATUS";break;case1: //DPOS ParaString = "DPOS";break;case2: //IDLE ParaString = "IDLE";break;case3: //IN ParaString = "IN";break;case4: //MODBUS_REG ParaString = "MODBUS_REG";break;case5: //MPOS ParaString = "MPOS";break;case6: //OP ParaString = "OP";break;case7: //TABLE ParaString = "TABLE";break;default:break; } ShowString += ParaString;for(int i =0;i<m_CycleParaNum[inum];i++ ) { iret = ZAux_CycleUpReadBuffInt(G_ZmcHandle,m_CyclePort,ParaString,m_CycleParaStart[inum] +i,&ival); //获取周期上报信息if(ERR_SUCCESS != iret) { MessageBox(_T("周期上报读取失败!"));return; } TempString.Format(" %d",ival); ShowString +=TempString; } ShowString +="\r\n"; AppendTextOut(ShowString); } }}7、强制上报一次。//强制上报一次void CTest_CycleUpDlg::OnBnClickedBtnCycleup(){if(NULL == G_ZmcHandle) { MessageBox(_T("控制器未连接"));return; } UpdateData(true); int iret = ZAux_CycleUpForceOnce(G_ZmcHandle, m_CyclePort);if(ERR_SUCCESS != iret) { MessageBox(_T("周期上报刷新失败!"));return; }}8、使用正运动RTSys软件输出窗口和轴参数窗口方便直接的观察到我们周期上报的数值。
9、上位机读取周期上报的值并输入在文本框。
10、可以点击下拉框选择其他参数或更改起始地址及数量读取不同区域数据。
11、周期上报获取信息和单次获取信息的比较。
12、视频教程。
video: https://mp.weixin.qq.com/mp/readtemplate?t=pages/video_player_tmpl&action=mpvideo&auto=0&vid=wxv_3744151374745829385
完整代码获取地址
▼
本次,正运动运动控制卡周期上报实时数据IO状态之C++篇就分享到这里。
更多精彩内容请关注“正运动小助手”公众号,需要相关开发环境与例程代码,请咨询正运动技术销售工程师:400-089-8936。
本文由正运动技术原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。
回顾往期内容
开奖啦!参与《运动控制系统应用与实践》赠书活动的粉丝们看这里
送书福利!全自主IDE的《运动控制系统应用与实践》
RTSys:自主自研、简单易用的运动控制集成开发平台(上)
RTSys:自主自研、简单易用的运动控制集成开发平台(下)
运动控制看的更清楚细致!RTSys示波器功能简介
简单易用的以太网数据采集卡应用开发之C#
简单易用的以太网IO控制卡:C#读写测试
以太网IO控制卡:C#实时读写时间测试
脉冲全闭环EtherCAT运动控制器的固件升级
EtherCAT运动控制器配套用手持示教器快速入门
8轴/4轴的EtherCAT轴模块EIO24088-V2及EIO16084的使用(一):RTSys总线配置与使用
8轴/4轴的EtherCAT轴模块EIO24088G-V2及EIO16084G的使用(一):TwinCAT总线配置与使用
BissC绝对值编码器在EtherCAT运动控制器中的应用
SSI绝对值编码器在EtherCAT运动控制器中的应用
开放式激光振镜运动控制器在Ubuntu+Qt下自定义图形标刻
开放式激光振镜运动控制器在Ubuntu+Qt下CAD图形标刻
开放式激光振镜运动控制器在Ubuntu+Qt下的文本标刻
开放式激光振镜运动控制器在Ubuntu+Qt下的激光振镜校正
EtherCAT运动控制器上位机开发之Python+Qt(三):PDO配置与SDO读写
EtherCAT运动控制器上位机开发之Python+Qt(二):回零
EtherCAT运动控制器上位机开发之Python+Qt(一):链接与单轴运动
C#之Delta并联机械手的视觉相机标定与形状匹配
C#之Delta并联机械手正逆解的建立和手动运动
C#之Delta并联机械手的视觉同步分拣
PCIe EtherCAT实时运动控制卡PCIE464的安装与调试
PCIe EtherCAT实时运动控制卡PCIE464的IO与编码器读写应用
PCIe EtherCAT实时运动控制卡的DXF图形的CAD导图与多条运动指令的快速加工
VPLC7机器视觉运动控制一体机在三轴SCARA机械手螺丝锁付的应用
VPLC系列机器视觉运动控制一体机在五轴联动点胶上的应用
基于VPLC7机器视觉运动控制一体机的UVW视觉对位解决方案
基于VPLC711的曲面外观检测XYR运动控制解决方案
基于VPLC532E开放式数控系统在五轴义齿机上的应用
机器视觉运动控制一体机在SCARA机械手柔性上下料的应用
机器视觉运动控制一体机在DELTA并联机械手视觉上下料应用
机器视觉运动控制快组态软件RTFuse在XYZ三轴运动平台的应用方案
机器视觉运动控制一体机在光伏汇流焊机器人系统的解决方案
机器视觉运动控制一体机VPLC532E在汽车胶带缠绕的开放式CNC应用
机器视觉运动控制一体机在喇叭跟随点胶上的应用
机器视觉运动控制一体机在点胶胶路检测上的应用
机器视觉运动控制一体机在智能磁驱输送线的应用
机器视觉运动控制一体机在PCB跟随点胶上的应用
开放式激光振镜运动控制器在动力电池模组连接片的焊接应用
开放式激光振镜运动控制器的视觉校正振镜精度解决方案
开放式激光振镜运动控制器的激光清洗应用
激光振镜运动控制器在智能镜激光打砂机应用
PCIe实时运动控制卡的双盘视觉筛选机上位机开发应用
PCIE超高速实时运动控制卡在六面外观视觉检测上的应用
超高速PCIe EtherCAT运动控制卡在高速异形插件机上的应用
运动控制器多工位位置比较输出在转盘式视觉筛选设备中的应用
EtherCAT总线冗余让制造更安全更可靠更智能
机器视觉运动控制一体机结构体功能上线,助力客户高效开发
正运动携手EPLAN,以高效的电气设计助力运动控制的数字化设计
EtherCAT运动控制器在SCARA和码垛机械手中的应用
EtherCAT运动控制器PT/PVT实现用户自定义轨迹规划
EtherCAT运动控制器在UVW对位平台中的应用
EtherCAT运动控制器Delta机械手应用
EtherCAT运动控制器的MATLAB开发
运动控制器/运动控制卡配套ZCAN总线ZIO模块的使用
运动控制卡/运动控制器的ZCAN总线ZMIO310扩展模块使用
运动控制器/运动控制卡的EtherCAT总线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硬件接口
高柔SS加减速曲线在锂电池焊接中的应用
EtherCAT和Ethernet的不同点有哪些, 通信周期又是什么意思?
工业以太网时代,该如何选择总线运动控制器?
正运动技术运动控制器如何快速实现单轴/多轴同步跟随功能?
EtherCAT总线运动控制器中简单易用的直线插补
EtherCAT运动控制器在数控加工手轮随动中的应用
EtherCAT运动控制器在数控加工手轮随动中的应用之C++
EtherCAT运动控制器在LabVIEW中的运动控制与实时数据采集
运动控制器PSO视觉飞拍与精准输出的C++开发(三):二维/三维/多轴PSO输出
运动控制器PSO视觉飞拍与精准输出的C++开发(二):多轴PSO等距/周期输出
运动控制器PSO视觉飞拍与精准输出的C++开发(一):单轴PSO
运动控制器八通道PSO的视觉飞拍与精准输出
Windows实时运动控制软核(六):LOCAL高速接口测试之Labview
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运动控制卡的自定义运动曲线
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中的运动控制与数据采集
运动控制卡应用开发教程之C++
运动控制卡应用开发教程之Python
运动控制卡应用开发教程之C#
运动控制卡应用开发教程之Linux
运动控制卡应用开发教程之VB.NET
运动控制卡应用开发教程之VB6.0
运动控制卡应用开发教程之VC6.0
运动控制卡应用开发教程之使用Qt
运动控制卡应用开发教程之LabVIEW
运动控制卡应用开发教程之激光振镜控制
运动控制卡应用开发教程之硬件比较输出
关于正运动技术
深圳市正运动技术有限公司成立于2013年,专注于纯国产运动控制技术研究和通用运动控制软硬件平台和产品的研发,是国家级高新技术和专精特新“小巨人”企业。
正运动技术汇集了来自华为、中兴等公司的优秀人才。力求创新,目前公司拥有专利、著作权等知识产权五十余项。在坚持自主创新的同时,积极联合各大高校和科研院所协同运动控制基础技术的研究,是国内工控领域发展最快的企业之一,也是国内少有、完整掌握运动控制核心技术和实时工控软件平台技术的企业。
正运动技术除本部研发中心外,设有中山、武汉、上海三个研发分部。为更好地服务客户,本部之外设有苏州、东莞两个区域性服务中心,设有佛山、厦门、青岛、西安、武汉、成都、天津、郑州等销售和技术服务机构。
经过众多合作伙伴多年的开发应用,正运动技术的产品广泛地应用于3C电子、半导体、新能源、机器人、包装印刷、纺织服装、激光加工、医疗制药、数控机床、传统加工等领域。
|