今天郑运动助手给大家分享MotionRT7的安装和使用,以及使用C++开发MotionRT7的前期准备。
01
MotionRT7简介
MotionRT7是深圳市正动科技推出的跨平台运动控制实时核心。也是国内首款完全自主研发、独立可控的Windows运动控制实时软核。
1.MotionRT7具有以下特点
(1)独立软件安装,适用于各种Windows电脑;绿色免安装,极速体验;使用硬件绑定的操作许可授权(无需授权也可以尝试);可以轻松配置、启动、连接、模拟运行等。
(2)功能上兼容其他版本的MotionRT,一旦开发完成,可以快速切换到嵌入式和Linux平台。
(3)统一函数库接口,快速本地LOCAL接口,运动函数调用速度达到us级,比普通PCI卡快几十倍。
(4)集成机器视觉,快速构建运动控制+机器视觉的各种实时应用。
(5)强大的多卡功能,最多240轴联动,支持跨卡联动、脉冲与总线联动、振镜与平台联动,轻松实现位置锁存/PSO等高级功能。
2. 持续迭代运动控制实时内核MotionRT
MotionRT是一个实时运动控制内核,持续构建和开发运动技术。从MotionRT1到MotionRT7,已经持续迭代了7代。
3.MotionRT7采用模块化软件架构
运动控制程序、视觉算法、MotionRT7运动控制引擎通过高共享内存与数据进行交互,大大提高了运动控制与机器视觉的交互效率。用户定义的功能集成了Gmc、齿轮/凸轮、框架、机器人、CNC 和其他算法,以创建用户特定的控制系统。
4. 统一开放的API函数
统一完整的SDK库、适用于所有第三方开发环境的同一套API接口、跨平台的产品架构提高了效率并保持了兼容性。
5. 易于使用的运动控制功能
A。点运动、直线插补、圆弧插补、螺旋插补、连续轨迹加工;
b.电子凸轮、电子齿轮、同步跟随、位置锁存、虚轴叠加;
c.S曲线加减速、SS曲线加减速,轨迹运动更柔和;
d. 1D/2D/3D高速位置同步输出PS0,充分满足视觉飞行拍摄、高速点胶、激光加工;
e.客户可定制运动控制算法或机器人正反转解算算法;
F。与第三方便捷的视觉合作。
6.打开EtherCAT和配置调试工具
ZDevelop 拥有开放且易于使用的配置、开发、调试和诊断工具。 ZDevelop不仅是一款绿色免费软件,而且还拥有轴调试、轴状态、示波器等工具。
MotionRT7广泛支持EtherCAT总线,支持市场上广泛存在且易于使用的EtherCAT伺服、EtherCAT步进、EtherCAT IO、EtherCAT阀岛和EtherCAT传感器。我公司未来将不断完善EtherCAT组态工具,继续努力提供最实用的运动控制。
02
MotionRT7的安装和使用
第1步:安装驱动程序
1、打开“设备管理器”,在“操作”中选择“添加过时的硬件”,然后选择“手动选择”。
2. 单击“下一步”。
3. 单击“从磁盘安装”。
4. 单击“浏览按钮”选择驱动程序所在路径,打开文件夹“driver_signed”,选择“ZMotionRt64.inf”。
5. 继续单击“下一步”直至安装完成。
注意:更新驱动程序时,如果要从设备管理器中删除该设备,则必须选择同时删除驱动程序文件。 6.MotionRT7驱动安装视频演示。
第二步:运行控制台程序
1. 打开控制台程序所在位置并运行可执行文件“MotionRt710.exe”。
2. 单击“开始”。
步骤3:使用ZDevelop软件链接控制器进行参数监控
ZDevelop链路控制器,软件版本3.10以上,采用PCI/LOCAL方式连接。
第四步:网口扩展EtherCAT主站协议
1. 检查网络连接。
2、选择用作EtherCAT的网卡,右键属性,安装协议。
3. 单击从磁盘安装,选择驱动器所在路径,打开“driver_signed”文件夹,选择“MotionRtPacket.inf”。
4、安装成功后,确认选择ZMotionRT64 Packet Protocol Driver。
在RT 控制台程序中选择AddEcat。就可以看到对应的网卡了。选择后,启动RT。
5.MotionRT7 EtherCAT协议安装视频演示。
PC自带的网卡EtherCAT具有一定的实时性能。如果EtherCAT想要提高性能,就需要将网口的其他协议去掉,以提高实时性能。
如果您需要进一步提高实时性能,请使用Positive Motion的专用EtherCAT运动控制卡XPCIE1032。
03
用于开发MotionRT7 项目的C++
1. 创建一个新的MFC 应用程序。
2、将四个文件zauxdll.lib、zauxdll2.h、zauxdll.dll和zmotion.dll放入刚刚创建的MFC项目文件夹中。
3.添加头文件声明并声明句柄。
(1) 相关PC功能介绍
命令1ZAux_FastOpen 命令原型int32__stdcallZAux_FastOpen(ZMC_CONNECTION_TYPEtype, char*pconnectstring, uint32uims,ZMC_HANDLE* phandle) 命令说明与控制器建立连接,并可以指定连接的等待时间。输入参数参数名称描述类型连接类型
type: 1-COM 2-ETH 4-PCI 5-LOCALpconnectstring 连接字符串:
COM端口号/IP地址/LOCALuims连接超时uims;单位ms 输出参数参数名称说明phandle 控制器连接句柄返回值成功返回值为0,非0 请参见错误码说明。指令示例串口连接:
ZMC_HANDLE 手柄; //控制器连接句柄
char comID[32]='0';//串口ID
ZAux_FastOpen(1, comID,1000s,phandle);
网口连接示例:
ZMC_HANDLE 手柄; //控制器连接句柄
Char EthID[32]='192.168.0.11';//网口ID
ZAux_FastOpen(1, EthID,1000s,phandle);
LOCAL接口连接示例:
ZMC_HANDLE 手柄; //控制器连接句柄
ZAux_FastOpen(ZMC_CONNECTION_LOCAL, 'LOCAL1',3000,g_handle);详细说明/命令2ZAux_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库中,专门用于控制卡连接数据定义类型。命令3ZAux_Direct_GetDpos 命令原型int32__stdcall ZAux_Direct_GetDpos(ZMC_HANDLE handle, int iaxis, float *pfValue) 命令描述读取轴的当前位置或控制器发送的所需位置,单位为单位。输入参数参数名称说明句柄连接标识符iaxis 轴号输出参数参数名称说明pfValue 获取当前轴位置返回值成功返回值为0,如果不为0,请参见错误码说明。获取指令示例轴基本运动参数设置。详细说明/指令4ZAux_Execute 指令原型int32__stdcall ZAux_Execute(ZMC_HANDLE handle, const char *pszCommand, char *psResponse, uint32 uiResponseLength) 指令说明向控制器发送字符串命令,缓存模式(控制器无缓冲区时自动阻塞)。输入参数参数名称说明handle 连接句柄pszCommand 发送的命令字符串uiResponseLength 返回的字符长度输出参数参数名称说明psResponse 返回的字符串返回值成功返回值为0,如果不为0,请参见错误码说明了解详情。指令示例使用在线指令功能。上位机调用未封装的上位机基本指令函数的详细说明。指令5ZAux_DirectCommand 指令原型int32__stdcall ZAux_DirectCommand(ZMC_HANDLE handle, const char *pszCommand,char *psResponse, uint32 uiResponseLength) 指令说明以直接方式向控制器发送字符串命令(不进入缓冲区,有几个命令,不暂时支持)。输入参数参数名称说明handle 连接句柄pszCommand 发送的命令字符串uiResponseLength 返回的字符长度输出参数参数名称说明uiResponseLength 返回的字符串返回值成功返回值为0,如果不为0,请参见错误码说明了解详情。指令示例使用在线指令功能。上位机调用未封装的上位机基本指令函数的详细说明。指令6ZAux_Close 指令原型int32__stdcall ZAux_Close(ZMC_HANDLE handle) 指令描述关闭控制器连接。输入参数参数名称说明句柄连接句柄输出参数/返回值成功返回值为0,如果不为0,请参见错误码说明。与控制器串行端口连接的指令示例。详细说明/在C++ MFC设计界面中,找到自己需要的控件,拖入窗体中,即可设计UI界面。效果如下。
注意:使用IP模式连接MotionRT7时,请将MotionRT710中的Config配置项Eth num的值设置为大于0的数字(1-12)。输入的IP是本地IP,可以直接在ZDevelop中查看。
(2)C++例程讲解视频演示
(3)相关代码
IP 联动模式下,通过联动按钮的消息响应功能连接控制器。
//IP链接模式链接控制器void CcRunSpdDlg:OnBnClickedButton1(){ CString s; ed1.GetWindowText(s); std:string ip=s.GetBuffer(); if (!ZAux_OpenEth(ip[0],handle)) { MessageBox('MotionRT7 链接成功!'); } else { MessageBox('MotionRT7 链接失败!'); }} 在LOCAL联动模式下,通过联动按钮的消息响应功能连接控制器。 //本地链接模式链接控制器void CcRunSpdDlg:OnBnClickedButton3(){ //连接类型,CStrings; cb1.GetWindowText(s); if (!ZAux_FastOpen((ZMC_CONNECTION_TYPE)5, s.GetBuffer()[0], 1000, handle) ) { MessageBox('MotionRT7 链接成功!'); } else { MessageBox('MotionRT7 链接失败!'); }} 通过断开按钮的消息响应功能断开控制器的连接。 //断开上位机与控制器的链接void CcRunSpdDlg:OnBnClickedButton2(){ ZAux_Close(handle); MessageBox('MotionRT7已断开连接!');} 通过单命令交互周期的测试按钮测试单命令交互的周期。 void CcRunSpdDlg:OnBnClickedButton5(){ CString s; std:字符串S;浮动dpos;双倍时间;字符g[30]; cb2.GetWindowText(s); S=s.GetBuffer();整数我; DWORD startTime=GetTickCount64();//计时开始for (i=1; i=std:stoi(S); i++) { ZAux_Direct_GetDpos(handle, 0, dpos); ed2.SetWindowText(g); DWORD 结束时间=GetTickCount64(); //计时结束tme=(double )(endTime - startTime)/(std:stoi(S)) * 1000; ed2.SetWindowText(std:to_string(tme).data()); ed3.SetWindowText(std:to_string((double)(endTime - startTime)).data()) ; ed6.SetWindowText(std:to_string(dpos).data());} 通过多指令交互周期测试按钮测试多指令交互周期。 void CcRunSpdDlg:OnBnClickedButton6(){ CString s; std:字符串S;浮点数据[12]={ 0 };字符获取[255]; cb2.GetWindowText(s); S=s.GetBuffer(); std:string cmd='?dpos(0),dpos(1),dpos(2),dpos(3),axisstatus(0),axisstatus(1),axisstatus(2),axisstatus(3),in(0),在(1),在(2),在(3)'; DWORD startTime=GetTickCount64();//开始计时for (int i=1; i=std:stoi(S); i++) { ZMC_DirectCommand(handle, cmd[0], get, 255); } DWORD endTime=GetTickCount64(); //结束时间double tme=(double)(endTime - startTime)/(std:stoi(S)) * 1000; ed4.SetWindowText(std:to_string(tme).data()); ed5.SetWindowText (std:to_string((double)(endTime - startTime)).data()); ZAux_TransStringtoFloat(get[0], 12, 数据); ed7.SetWindowText(std:to_string(data[0]).data()); ed8.SetWindowText ed11。 SetWindowText(std:to_string((int)data[4]).data()); ed12.SetWindowText(std:to_string((int)data[5]).data()); ed13.SetWindowText(std:to_string((int)data[6]).data()); ed14.SetWindowText(std:to_string((int)data[7]).data()); ed15.SetWindowText(std:to_string((int)data[8]).data());第16 版。 SetWindowText(std:to_string((int)data[9]).data()); ed17.SetWindowText(std:to_string((int)data[10]).data()); ed18.SetWindowText(std:to_string((int)data[11]).data());}
(四)运行效果
IP链路模式测试(1w次)
LOCAL链路模式测试(1w次)
IP链路模式测试(10万次)
LOCAL链接模式测试(10万次)
04
分析与结论
以上是IP模式链接MotionRT7和LOCAL模式链接MotionRT7的命令交互测试。从上面运行效果图的数据显示来看,在执行10000次和10000次单指令交互或多指令交互时,LOCAL链路指令交互所需的单指令交互时间(平均在4.7us和3.9us左右),以及多条指令一次读取12个状态的交互时间(平均在6.2us和5.5us左右)都比IP链路短。该方式速度更快(平均约28us vs. 29us)。
平均LOCAL 链路MotionRT IP 链路其他PCI 卡1w 次单次读取4.70us28.20us64us10w 次单次读取3.90us27.97us65us1w 次多次读取6.20us29.70us472us10w 次多次读取5.50us30.00us471us 其次,我们从运行结果可以看出, MotionRT7中指令交互的效率在LOCAL链接模式下也非常稳定。当测试数量从1w增加到10w时,单条指令的交互时间和多条指令的交互时间波动并不大,这将为流程运行的稳定性提供很大的保证。
MotionRT7的出现绝对是一次重大惊喜和升级。它为我们在大批量指令交互的过程中提供了更好的效率和稳定性,为生产创造更高的效率和更多的价值!
审稿人:刘庆