CS机器人二次开发端口总结

2024-11-05

1.  简介

艾利特CS机器人为方便用户二次开发而开放了一些机器人控制器端口,包括29999、30001、30004、30011、30020、40011等。本质都是TCP/IP协议,29999连接上位机(示教器界面),30001、30004、30011、30020、40011主要连接A9,原理都是通过socket通讯发送指定字符串或其它指定格式控制机器人或接收特定的格式数据进行解析,目前没有动态链接库连接对应的控制器端口,各通讯接口相互独立,可以同时使用

2.  操作流程

2.0. 端口简介

2.1. 端口选择

● 29999(Dashboard)端口,可用于机器人的上下电操作、切换机器人的任务或配置、运行,停止,暂停程序等操作。

● 30001端口,可用于获取机器人的各种状态及数据,机器人会以10HZ的频率向30001端口发送机器人的状态数据,还可以往30001端口发送脚本命令,运动指令,控制机器人运动等。

● 30004(RTSI)端口,全称为实时数据交互,可用于获取机器人的各种状态及数据,以及设置输入订阅(改变一下IO变量的值,调整速度滑块等)与30001端口不同的是可按指定频率订阅用户指定的数据返回,在返回速率方面最快可达250HZ。

● 30020(解释器)端口,可用于实现一些动态的脚本排队运行,比如用户在自己的上位机程序,实时计算出一些运行点位,用户在程序运行的过程中,将一些实时计算的脚本排队到当前运行的任务后。

● 40011(明文状态请求)端口,可用于获取机器人的各种状态及数据或者设置机器人相应的参数(运动指令和耗时指令除外),与其他获取数据端口相比,属于一问一答式数据回复类型,上位机发送对应的请求,机器人返回对应的数据。

● 端口详细使用说明可查看对应的端口使用手册技术资料_机器人技术-艾利特机器人。

2.2. 端口介绍及作用

2.2.1 29999端口介绍及作用

介绍

29999端口描述的是 EliRobot 机器人平台开放的 dashboard shell,允许用户或开发者通过 TcpSocket 连接 EliRobot 的29999端口并对其进行访问控制,其中让包括机器人的上下电操作、切换机器人的任务或配置、运行,停止,暂停程序等操作。

作用

EliRobot dashboard shell 提供了大量的命令,以便与 EliRobot 机器人平台进行交互,创建 TcpSocket 客户端并连接 dashboard shell 后,发送对应格式的字符至 EliRobot,即可控制机器人做出相应的命令 。(端口详细使用教程请查看EliRobot Dashboard 手册或29999端口使用文档技术资料_机器人技术-艾利特机器人)

2.2.2 30001端口介绍及作用

介绍:

30001端口描述的是 EliRobot 机器人平台开放的数据获取端口,控制器会提供机器人的数据状态,例如关节角、温度等等,这些数据都会通过 socket 打包以10HZ的频率发送至连接的客户端。

除了获取机器人的状态信息外,还可以通过30001端口发送脚本来控制机器人的各种操作。

作用:

EliRobot 提供了大量状态获取数据,以便与 EliRobot 机器人平台进行监测,创建 TcpSocket 客户端并连接 30001端口后,系统会自动返回的对应格式的报文,可查询机器人状态报文表(30001端口详细使用教程请查看机器人状态报文示例或30001端口使用文档技术资料_机器人技术-艾利特机器人)。

2.2.3 30004端口介绍及作用

介绍:

通过socket链接机器人的30004端口,可以按指定频率订阅用户指定的数据,例如,用户程序socket链接30004端口后告诉控制器,需要订阅”payload”变量,以125HZ发送,然后控制器就开始按125HZ向用户程序发送”payload”的值。这个功能叫做RTSI 全称为实时数据交互(Real-Time Synchronization Interface), 该协议提供了标准的TCP/IP链接, 用于与外部程序进行实时的数据交互。

- 输出:机器人输出整型寄存器的值、末端负载等

- 输入:机器人浮点输入寄存器、数字输入IO的状态设置  

作用:

- 输出订阅:客户端向 RTSI 服务端发送输出订阅项并发送开始信号后,服务端将按照客户端所指定的频率周期性发送所订阅的数据。

- 输入订阅:客户端向 RTSI 服务端发送输出订阅项并发送开始信号后,客户端可以向服务端发送订阅的变量的值,服务端将会把这些值设置到机器人中。

- 消息传输:任何时刻,RTSI 的客户端和服务端都可以向对方发送普通消息、警告消息、异常消息、错误消息。

- 客户端运行环境:可以为任意的外部链接程序。

● 30004端口详细使用教程请查看机器人RTSI使用说明或30004端口使用文档技术资料_机器人技术-艾利特机器人。

2.2.4 30011端口介绍及作用

介绍:

30011端口描述的是 EliRobot 机器人平台开放的数据获取端口,控制器会提供机器人的数据状态,例如关节角、温度等等,这些数据都会通过 socket 打包以10HZ的频率发送至连接的客户端,与30001不同的是不受机器人模式影响,无法向端口发送脚本。

作用:

EliRobot 提供了大量状态获取数据,以便与 EliRobot 机器人平台进行监测,创建 TcpSocket 客户端并连接 30011端口后,系统会自动返回的对应格式的报文,可查询机器人状态报文表,可以在机器人任何模式下获取对应的数据。

2.2.4 30020端口介绍及作用

介绍:

系统进入解释器模式后,允许编程人员在任务运行时发送并排队运行脚本语句,只需要脚本语句为有效的python语句即可,用户可以将脚本语句通过30020端口,发送到控制器,控制器解收之后,会根据当前的状态,对语句进行编译运行。发送到30020端口的脚本语句,会以队列的方式存储在控制软件内部,并按顺序执行。

脚本语句必须为单行语句,并以\n作为结束符,如 set_tcp([0,0,0,0,0,0])\n。

● 30020端口详细使用教程请查看机器人解释器模式使用说明或30020端口使用文档技术资料_机器人技术-艾利特机器人。

作用:

用于实现一些动态的脚本插队运行,比如用户在自己的上位机程序,实时计算出一些运行点位,用户在程序运行的过程中,将一些实时计算的脚本插队到当前运行的任务当中,脚本语句为有效的python语句且必须为单行语句。

2.2.5 40011端口介绍及作用

介绍:

用于实现明文TCPIP状态请求,客户端可以连接到系统的40011端口,通过下发固定格式的请求报文,获取机器人的各种状态及数据或者设置机器人相应的参数,属于一问一答式数据回复类型,上位机发送对应的请求,机器人返回对应的数据。该端口与SEC命令相同,不支持运动指令、延时指令等耗时指令,仅支持不耗时指令执行。

作用:

目前CS软件目前30001端口无返回值,用户有较多的获取返回值的需求(比如请求逆解结果)实现起来不够方便。根据该需求,系统增加40011端口,用于实现快速的明文数据请求功能。

40011端口类似于一问一答式与机器人交互。

2.3. 端口比较(获取数据信息)

30001、30004、30011、40011端口对比(获取数据信息)

● 30001和30011端口全数据获取,频率均为10HZ,区别30001可以响应外部脚本输入,30011仅用于外部监测机器人状态,可在任意机器人模式下获取。

● 30001和30004端口,30001为全数据获取,频率为10HZ,30004可订阅输出,最高频率250HZ,例如客户只想获取机器人的力值,可通过30004端口订阅,只接收力值,相对于30001更简便,无需考虑或者解析其他数据。

● 40011实现明文TCPIP状态请求,下发固定格式的请求报文,可直接获取机器人的各种状态及数据,无需复杂的转化解析,30001目前无返回值,相对于用户有较多的获取返回值的需求(比如请求逆解结果),30001实现起来不够方便。

● 获取数据各个端口选择使用,可根据客户现场实际应用来选择对应端口。

2.4. 端口比较(控制运动)

● 30001端口无法实现一些动态的脚本排队运行,只能保持当前的脚本运行,若第一个移动脚本没有执行完,下一个移动脚本已经下发,第一个移动会直接停止,执行下一个移动。

● 30020端口用于在一定的条件下,实现用户脚本的排队运行,比如用户在自己的上位机程序,实时计算出一些运行点位脚本,第一个任务在运行的过程中,将一些实时计算的脚本排队到当前运行的任务后。不会打断第一个任务的执行。

3.  常见问题解答

● CS系列支持Python脚本运行,并且脚本分为sec脚本与def脚本,def脚本为主程序脚本,一次仅支持一个def脚本运行,如果在第一个def脚本运行过程中,下发第二个def脚本,则会强制停止第一个运行中的def脚本,去执行新收到的def脚本,sec脚本可以与def脚本同时运行,不会导致def脚本停止,但sec脚本不支持运动指令,并且不允许运行耗时指令(如sleep、串口、socket的超时操作等),存在一定的限制。

3.1. 29999端口相关问题

●  29999端口 EliRobot dashboard shell 的控制指令在执行时,需要注意机器人的状态是否是处于远程模式,因为有一些指令需要机器人在远程模式下才生效。

● dashboard命令以”\n”为结束输入标志,但某些第三方Socket工具设计使用鼠标点击按键提交输入(不支持物理键盘的Enter提交),因此不会自动在输入末尾添加”\n”,导致dashboard认为输入未完成而不予响应,因此此类情况需在输入末尾自行添加结束输入标志”\n”。

3.2. 30001端口相关问题

● 远程模式:此时机器人仅能通过外部控制源对机器人进行控制(比如外部连接30001后,发送控制脚本),示教器上,会锁定,任务栏

● 本地模式:此时机器人仅能通过示教器对其进行控制,外部的控制源连接会被强制断开(即连接到30001的服务均会被强制断开),防止发生危险。

● 普通模式(非远程与本地模式):如在系统设置中,禁用远程控制模式,则此时系统会处于普通模式,该模式下不会对通过30001进行的外部控制源进行限制,可以理解为是远程模式+本地模式的状态,但此时无法执行IO的启动程序的功能,并且无法执行29999 Dashboard中的远程模式生效的指令。

● tcp通信的连包现象(包含30011端口),这个不是咱们的特性,所有的tcp通信都可能有这个现象。(接收到的是不是完整报文,那是根据报文长度判断的,比如报文长度是100,本次他直接收到了80,那就要等另外20上来一起解析)。

3.3. 30004端口相关问题

● RTSI 分为协议检查、设置、同步循环三个步骤,当 RTSI客户端接入时需要首先进行协议版本的校验,以确定是否可以继续进行通信

● 数据包都有统一的结构,都为报文头+报文内容的形式(有的数据包不需要报文内容)

● 不同变量类型所占字节数不同

● 协议数据采用大端模式

● 订阅输入输出需要注意(客户搞反)

3.4. 30020端口相关问题

● 目前解释中运行非运动类的耗时脚本(如sleep指令),会完整的等待sleep命令执行结束后,才可以自动退出,中途即使调用了end_interpreter()命令,也不会强制停止耗时脚本运行。

● 任务运行状态的控制,比如暂停、继续、停止等,对解释器模式同样生效。

● 解释器脚本队列数量上限目前为8500条,脚本队列数量超过该数量时,再次添加新的解释器脚本,会返回discard信息,并抛弃新添加的脚本。

● 解释器模式中目前不支持start_thread函数调用,下发的脚本中,如果包含了start_thread函数调用,会触发对应的discard。

● V2版本的解释器模式,如果运动指令后有转接半径设置,并且没有在规定时间内,下发后续的运动指令,会出现咯噔急停的情况,该现象目前认为是正常情况。

● 请关注长时间运行,大量脚本队列运行,内存是否存在异常的持续增加,并且通过停止运行任务等操作无法降低的情况。

● clear_interpreter()函数ack后,会停止新的脚本ack,此时新的脚本会处于等待状态,只有当clear_interpreter()执行后,才会将等待状态的脚本进行ack。

3.5. 40011端口相关问题

● 下发的id尽量每次不同,这样便于管理,同时在一些同时请求的情况,可以区分返回值与请求之间的匹配关系,(如果没有同时请求的情况,理论上来说id不变也没问题,但并非一个好的请求习惯)。

● 该请求的调用函数规则与SEC函数相同,即不可以执行运动指令(如movej命令)、不可以执行耗时指令(如sleep等),不可以执行无法退出的命令(如死循环等)。

● 与SEC命令类似,请求命令并不会打断正在执行的主函数(即def函数)。


download-669.svg comicon14.svg

电话咨询

download-397.svg comicon15.svg

免费试用

Vector.svg Frame.svg

微信小程序

img1.jpg

微信小程序

准备好突破增长瓶颈,开启智能制造了吗?
了解我们的机器人如何帮助您的业务增长
欢迎下载艾利特机器人资料

我已阅读并同意艾利特《隐私政策》《法律声明》

我已知晓并同意艾利特通过电子邮件发送相关资料

提交