最近需要去搞机器人开发,就需要了解开发文档。
安川机器人,四大之一。机器人型号是MPL800,控制柜型号是DX100,DX100的CPU板是YCP01(这个是做机器人开发需要区分的,不同的控制柜开发IDE不一样),介绍一下MotoPlus,全称是Motoman Professional Programming Language,可以兼容C语言在PC上进行开发机器人控制程序,即客户自己定制用户程序。
MotoPlus支持的特性:
总结一下,就是MotoPlus用C语言开发,自己也有Motoman 库,可以实现外部PC或者传感器通过程序控制机器人,客户自己定制程序。
应用程序开发环境
MotoPlus 应用程序在 PC 上用 C 语言编写,并在 DX100 控制器上进行调试。 使用 MotoPlus IDE 的文本编辑器编写应用程序,然后编译并链接它以创建执行对象。 这是在 DX100 上安装并执行以进行调试。
开发就不用多说了,环境和一般的IDE差不多,开发好之后,编译生成对应的静态库和.out文件,通过IDE的telnet功能将程序传输到控制柜中,示教器去加载控制柜中的程序,进行调试。
一般情况下,开发完之后的程序会储存在机器人控制柜CPU(YCP01)的CF(闪存)中,不需要其他的硬件软件,但是要求系统软件版本DS1.2F-03以上。
控制器电源启动的时候,存储在主CPU上的CF的应用程序MotoPlusApi会首先加载到内存中,然后这个程序在操作系统VxWorks上做为一个任务启动,与系统程序同步执行。应用程序可以启动多个任务,可以通过mailbox或者信号量进行JOB或者IO通信、同步或者异步控制、数据转换等。
开发流程如下
维护模式下安装程序
1、加载应用程序并按照以下说明进行安装(不同版本有些许差异,版本节点 DS3.20-14):
(1) 将安全模式设置为管理模式。 选择主菜单 {MotoPlus APL.}。 然后{加载(用户应用程序)},{加载(系统库)},{文件列表(DX)},{DELETE (DX)}、{DEVICE}、{FOLDER} 和 {MotoPlus FUNC.SETTING} 显示为子菜单。 如果系统软件版本为 DS3.20-14 或更高版本,{LOAD (SYSTEMLIBRARY)} 不出现。
(2) 指定文件位置。使用子菜单 {DEVICE(选择 CF/USB)} 和 {FOLDER(选择包含应用程序的文件夹)} 选择适当的文件位置。
(3) 选择并加载文件。选择子菜单{加载(用户应用程序)}。 然后指定文件夹中的“*.out”文件如下所示。
通过DX100 Installer安装应用程序
启动程序
最多加载一个.out程序,否则报错:1020: “MOTOPLUS APPLICATION LOAD ERROR [1]”
可用内存不足2M,则报错:1020: “MOTOPLUS APPLICATION LOAD ERROR [2]”
CF中找不到APPLICATION文件夹,则报错:1020: “MOTOPLUS APPLICATION LOAD ERROR [3]”
程序最大2M,否则报错:1020: “MOTOPLUS APPLICATION
LOAD ERROR [4]”
启动程序异常处理
由于应用程序的问题,机器人运行过程中系统可能会挂起,DX100可能无法正常启动。为了恢复,必须在阻止应用程序运行的同时正常启动 DX100。在这种情况下,必须在维护模式下启动 DX100,进行设置以使应用程序不运行,正常启动DX100,然后运行机器人。遵循以下两个过程之一:
在维护模式下启动 DX100,将安全模式设置为管理模式。选择“MotoPlus APL.”,然后选择“DELETE
(DX)”删除应用程序。
在维护模式下启动 DX100,将安全模式设置为管理模式。选择“MotoPlus APL.”,然后选择“MotoPlus FUNC.
SETTING”以显示设置窗口。然后将“APPLI.AUTOSTART AT POWER ON”设置为“DISABLE”。
如果在机器人运行过程中出现上述问题,请选择程序2。机器人操作过程中的上述问题可能是由特定条件引起的。如果使用步骤1删除了MotoPlus应用程序,则在特定条件清除后,必须在CF中重新加载MotoPlus应用程序才能恢复。在这种情况下,如果要加载的应用程序不存在,应用程序将无法运行,系统也无法恢复。
调试
对于调试环境,通过 Telnet 将用于开发的 PC 与控制器操作系统 (VxWorks) 的 RUN-TIME 调试器连接起来。然后可以在应用程序源代码中插入 printf() 或 puts() ,以在调试时显示有关变量和程序执行状态的消息。
Note:调试完成后删除源代码中描述的所有调试代码。否则,printf() 和 puts() 的处理时间可能会影响系统,并可能导致机器人运行过程中处理时间不足等问题。
Note:使用 Telnet 功能,只能调试具有正常优先级的任务。调试高优先级任务(任务优先级启动的任务:MP_PRI_IO_CLK_TAKE、MP_PRI_IP_CLK_TAKE 或 MP_TIME_CRITICAL,或任务“mpUsrRoot”),建议使用 DX100 的变量。这是因为,如果 printf() 或 puts() 以高优先级任务执行,则会消耗机器人操作控制的处理时间,并且可能会因处理时间不足而发生系统报警。
Note:用C语言编程时,可以使用存储内存地址的指针变量。 如果指针变量设置错误,可能会重写系统内存区域。如果重写系统内存区域,会出现严重问题,例如软件挂起(通过 CPU 异常或看门狗检查检测到挂起状态) 功能,然后伺服电源关闭,系统关闭),机器人因报警停止运行,或编程器无法运行。 如果系统内存操作不正确,应用程序本身可能无法按设计运行。 因此,通过充分测试,可以找到错误位置。 充分检查应用软件的功能,确保所有功能都按设计运行。
Note:使用通过 Telnet 与 DX100 连接的 VxWorks 的 SHELL 调试功能时,由于机器人操作的处理时间不足,可能会出现系统报警。 不要使用 SHELL 调试功能。
PC电脑连接DX100
用 DX100 连接 PC 进行开发。 然后PC可以作为终端通过Telnet调试程序。 如下图所示,将以太网电缆连接到安装在 DX100 控制器 CPU 机架中 YCP01 板正面的 LAN 连接器 CN104 (RJ-45)。
如果要使用MotoPlus 提供的以太网服务,需要使用集线器并如下所示设置连接。如下
通过 Telnet 通信调试
DX100系统软件的RUN-TIME调试器,可通过Telnet连接调试PC,为用户提供各类调试功能。 因此,可以在应用程序源代码中插入 printf() 和 puts() 函数,并且可以在 Telnet 终端上显示所需的内存内容或消息。 使用此过程,仅调试具有正常优先级的任务。 调试高优先级任务(任务优先级启动的任务:MP_PRI_IO_CLK_TAKE、MP_PRI_IP_CLK_TAKE 或 MP_TIME_CRITICAL,或任务“mpUsrRoot”)。
Note:如果启用 Telnet 功能,则在启动 DX100 时可能会出现“0500:SEGMENT PROC NOT READY”等报警。 这是因为 DX100 端的 Telnet 任务以高优先级执行,所以其他系统的处理任务无法正常执行。 如果发生此类警报,请重新启动 DX100。 另外,调试完成后,请务必将 Telnet 功能设置为 INVALID (S2C1119 = 0)。
Note:调试完成后,将 Telnet 功能设置为无效 (S2C1119 = 0)。 这是因为 Telnet 功能消耗系统处理时间,并报警由于机器人操作的处理时间不足,可能会发生。
Note:以上密码为管理模式密码。
DX100用户变量调试
使用 printf() 或 puts() 对高优先级任务(以任务优先级启动的任务:MP_PRI_IO_CLK_TAKE、MP_PRI_IP_CLK_TAKE 或 MP_TIME_CRITICAL,或任务“mpUsrRoot”)进行调试可能会导致机器人操作控制任务的处理时间不足。 因此,使用 DX100 的用户变量(B 变量、I 变量、D 变量和 R 变量)进行调试。 在这种情况下,在 MotoPlus 应用程序中使用用于写入变量“mpPutVarData()”和“mpPutUserVars()”的 API 来描述调试信息,然后在查看编程器上 VARIABLE 窗口中的数据的同时进行调试。