万博1manbetx通过TCP/IP实现机器人的实时控制

10次浏览(过去30天)
你好,
简介
我正在使用万能机器人公司的UR10e机械臂。机器人有一个静态IP地址,制造商提供一个TCP/IP接口,用于发送控制命令(如关节位置、速度等),并接收机器人所需的状态更新(实际姿势、逆运动学、时间戳等)。
该接口位于机器人的特定端口上,需要一些初始消息来在服务器和客户端之间建立所需的对话(告诉机器人发送什么消息,定义频率并为机器人输入消息做好准备)。因此,客户端(网络中的本地计算机)必须通过稍后用于整个通信的相同端口发送初始消息(在端口A上发送数据,在端口A上接收数据)。
任务
有了Simulink强大的代码生成功能和大量的控制选项,我想在我的计算机上在Simu万博1manbetxlink中设置这个TCP/IP控件。
因此,我需要Simulink以实时万博1manbetx模式运行,并让它在每个迭代步骤中读取TCP/IP输入,并在每个迭代步骤中发送TCP/IP消息。
不久之后,我就被这个解释弄糊涂了 https://de.mathworks.com/matlabcentral/answers/536647-what-is-the-difference-between-normal-accelerator-and-external-mode-when-using-万博1manbetxsimulink-desktop-rea ,而且由于我没有任何远程计算机来使用实际的实时环境,实时桌面环境似乎是最适合我的解决方案。
正常模式 加速器模式 外部模式 为控制和通信提供所需的实时选项,同时仍然在我的本地机器上运行。但是由于两者 正常的 而且 加速器 模式不能保证100%实时,只能 外部模式 满足实时和代码生成的要求,其中代码运行在我的windows实时内核上,与Simulink交互。万博1manbetx
问题
的TCP/IP块 仪器Controlbox 类的TCP块("TCP/IP Send"和"TCP/IP Receive") 万博1manbetxSimulink实时/ IP库(“TCP客户端”,“TCP发送”和“TCP接收”) 与代码生成不兼容,因此不能使用外部模式(见下图)。
万博1manbetxSimulink桌面实时 库是为正常模式、加速器模式和外部模式设计的,但由于某种原因,TCP/IP连接(我使用的是“数据包输出”和“数据包输入”块)从机器人那里获得了一个RST响应,表明通信失败(见下图)。
“Packet Output”和“Packet Input”块的另一个问题是,初始消息在3到250字节的范围内,而实际对话使用500Hz的52字节(接收)和104字节(发送)的静态消息长度。“Packet”块似乎不支持可变消息长度
问题
  1. 关于“Packet Output”和“Packet Input”区块的外部模式方法:为什么我被机器人拒绝?我的分组设置错了吗?
编辑: 我只是在主机设备上定义端口时犯了一个错误:我输入的不是30004,而是300004。现在它的反应是正确的。
  1. 关于“数据包输出”和“数据包输入”的外部模式方法:有没有一种方法可以为接收和发送选项实现可变的包长度?
  2. 一般来说:这种方法注定会失败吗?如果是的话,我还有其他选择吗?我可以修复以前的TCP/IP或TCP方法吗?
图片
  1. TCP块的代码生成,在正常的模拟中工作,并且能够处理由于发送和接收块中的“Length”端口而导致的可变消息长度
2.设置“包”块。这里是第一个初始消息的静态长度
3.在外部模式下使用“Packet”块时,数据包拒绝
提前感谢你给我的每一个提示。
最好的问候,
马克斯
3评论
马克西米利安•贝克
马克西米利安•贝克 2021年6月25日
编辑:马克西米利安•贝克 2021年6月25日
由于与机器人的通信协议,我可以将要发送的消息大小设置为最长消息的最大字节数,并在发送之前将较短的消息填充为零。这是可能的,因为消息的前两个字节声明了它的长度,后面的字节将被机器人忽略。
对于传入消息,我仍然不知道数据包输入块的实际行为,但我相信它是用FIFO缓冲区和一些阻塞模式实现的,这意味着我不能接收不同长度的消息。
但是在采样时间方面,我仍然遇到数据包输入/输出块的问题。有时,Packet Output块将多个消息打包成一个消息,甚至发送错误的消息,导致机器人发送错误消息。

登录评论。

答案(0)

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!