TCP / IP接收块:使用消息长度定义在消息头接收变量消息长度

7视图(30天)
你好,
我试图发送和接收消息的实时远程tcp / ip设备。两者,我消息发送和接收的消息是可变长度的每个消息的标题定义它的长度(前两个字节定义整个消息的长度字节)。
送块虽然这是没有问题,因为它只是发送进入它的时间内固定步长,receive块使用固定长度的FIFO缓冲:我可以定义消息的特定长度将导致错误如果我接收不到我所定义的超时时间内我或者可以简单地把每个字节的字节。
我在等新消息的频率500赫兹(每个2 ms)并将发送在同一个频率。
我处理的消息都有一个头用2字节描述消息的长度。例如0 x00 x05 0 x56 0 x00 0 x02, 0 x05定义了消息的长度5字节。
通常我收到的消息的长度相同,除了5初始消息和错误消息。
有一些方法可以添加变量长度使用知识在消息头中,或有其他建议如何使用消息长度的知识找到他们内部的数据流?
TCP / IP接收块可以在这里找到: https://de.mathworks.com/help/instrument/tcpipreceive.html
提前谢谢你。
编辑:是否可以重置FIFO缓冲在每个时间步的状态接收消息(在非阻塞模式)= 0吗?当使用复位子系统我得到一个错误消息说“ 直接反馈连接涉及nonvirtual子系统” 无标题的/复位子系统 不允许。”因为重置子系统的子系统,因此循环的一部分。
2的评论
马克西米利安•贝克
马克西米利安•贝克 2021年6月23日
我注意到,仿真得到执行在一个非常高的速度。我会很喜欢仿真软件在实时运行模式,在每个万博1manbetx迭代步的TCP缓冲区将被加载,清除和消息被发送。这是可能的吗?
仿真软件在普通桌面模式的问题是,这万博1manbetx一块的设计与cpu时钟不同步为TCP实时设计集。
所以是唯一的办法来解决我的问题上运行相同的仿真软件代码外部获取远程计算机和使用外部模式?万博1manbetx

登录置评。

接受的答案

马克西米利安•贝克
马克西米利安•贝克 2021年6月24日
编辑:马克西米利安•贝克 2021年6月24日
变量消息长度:
TCP的接收和TCP发送块 万博1manbetx仿真软件的实时/ IP 图书馆有一个“长度”端口包含实际收到的消息的长度。这允许定义预期的消息的时间比实际得到的消息,只需添加0到实际的消息(例如:[消息,0 0 0])。利用知识信息的长度然后允许简单地减少实际的消息没有违反缓冲区。
似乎缓冲区重置在每个迭代步骤不是引起问题寻找消息。
我不能够使用TCP / IP块由于变量消息大小。
TCP和TCP / IP块都包含在代码生成。
停止的模拟
实际仿真软件模拟运行在万博1manbetx更高的速度比实时,所以即使设置仿真时间 不解决这个问题。
为此实时和桌面实时环境介绍了。记住,实际的实时环境需要一个外部机器,可以通过仿真软件,但有遥控代码运行在(c代码生成必须有效)。万博1manbetx
我仍然试图在桌面建立TCP / IP通信实时外部。为进一步更新(如果存在的话)检查:https://de.mathworks.com/matlabcentral/answers/864025-simulink-for-real-time-control-万博1manbetxof-a-robot-via-tcp-ip

更多的答案(0)

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!