为TCP / IP通信数据包输入块缓冲区
17日视图(30天)
显示旧的评论
你好,
我使用
数据包输入
块的
万博1manbetx桌面实时仿真软件
[SLDRT]图书馆仿真软件模型在外部模式下万博1manbetx运行。
https://de.mathworks.com/help/sldrt/ref/packetinput.html
在我的设置,我接收和发送串行二进制消息通过TCP / IP在frquency 500 hz。我的问题是,有5个不同长度的消息最初真正的通信开始前和消息成为不变的长度。
使用一些子系统和多个启用
包输出
块我能够处理不同的发送消息,但我不知道如何使用
数据包输入
块不同长度的接收消息。
输入块的功能包
它提供了一个槽的接收消息长度在某种程度上看起来像一个缓冲区,但表现得有点奇怪。
在下面的图片中你看到的结果初始信息。我把包uint8输入块100字节。在黑色,有消息1(最古老的)绿色有消息2和蓝色是最新的消息。我预计总共115字节,但块只是充满了数组和切断就100字节。
当我设置块比它将得到更多的字节,字节数组没有显示。
结论
:这段等待一定数量的字节被捕获并将它们存储在一个数组。如果数组填充,它再次等待相同数量的字节,然后覆盖前面的数组。
问题:
有一些方法可以接收消息的长度不同,当我知道,每条消息的前两个字节确定消息的长度? ?
我将收到的消息有以下字节长度:4,19岁,27岁,65年,3,然后不断104(至少现在)
0评论
接受的答案
Jan Houska
2021年6月28日
编辑:Jan Houska
2021年6月28日
嗨Maxmilian,
你理解的功能包输入块几乎是正确的。唯一的区别是,阻塞不等待(你不能等待一个实时模型),但信号的新数据的可用性的数据准备好端口。如果数据准备好是假的,块输出相同的数据与前面的时间步。当数据准备变得真实,它意味着一个新消息在这个时间步已经收到。你也是正确的,块只返回新消息时完成。也就是说,如果你将消息长度设置为100,不设置数据块准备好直到收到100个字节。
上面的建议如何处理适应的消息。你需要几包输入端口。首先,你读一两字节消息包含大小。根据大小读,你读剩下的消息被其他包输入块设置适当读的字节数。,只因为你想读消息如果有新来的,你使用数据端口驱动实现子系统,只有实现消息阅读如果有一个新的准备。
请参阅附件为例。
祝你好运,简