unetpy中的RxFrameNtf,TxFrameNtf和Ntf.data

时间:2018-06-23 08:38:05

标签: unetstack

我正在与Unetpy一起使用Unetstack软件。我希望在运行导入Unetpy python库的.py文件时检索传输和接收通知。我关注了this tutorial

我可以成功连接到本地主机并打印phy.MTU等值。当我发送数据包时,我还会在命令提示符下收到回复“同意”的信息。output_of_my_script enter image description here   my_script

enter image description here 您能帮我接收Txframentf和rxframentf以及数据有效载荷吗?

我已经进行了this link中建议的错误报告中发布的更改。 请指导我如何打印rxframe和txframe的通知。 谢谢``

2 个答案:

答案 0 :(得分:2)

您的脚本很好,直到最后一行:

print(phy << org_arl_unet_phy.TxFrameNtf())

此处您正尝试向物理代理发送TxFrameNtf。这没有任何意义,因为在传输完成后,物理代理会向您发送此类通知。

在到达此行时,只要传输在5秒钟内完成(txntf),您就应该已经收到timeout=5000的通知。要打印出通知,您需要做的是:

print(txntf)

我刚刚针对3-node-network.groovy示例进行了测试。我正在使用unetpy-1.3b5fjagepy-1.4.2b3。这是修改后的代码:

from unetpy import *
modem = UnetGateway('localhost', 1102)
phy = modem.agentForService(Services.PHYSICAL)
print(phy.MTU)
print(phy.basebandRate)
print(phy << org_arl_unet_phy.TxFrameReq(to=3, data=[1,2,3,4]))
txntf = modem.receive(timeout=5000)
print(txntf)

和输出:

16
4096
AGREE
TxFrameNtf:INFORM[type:1]

您可以看到TxFrameNtf已正确接收。

要进行接收,您需要订阅代理的通知,然后接收框架:

modem.subscribe(phy)
rxntf = modem.receive(org_arl_unet_phy.RxFrameNtf, timeout=5000)
print(rxntf)

假设您在指定的5秒超时内收到一帧(在此示例中,在节点3上),则应打印出类似以下内容的

RxFrameNtf:INFORM[type:CONTROL from:1 to:3 protocol:0 rxTime:34587658 (4 bytes)]

答案 1 :(得分:1)

您通过某个支持DATAGRAM服务的代理发送了数据报。可能有许多代理支持此服务(而不仅仅是物理层)。无论如何,该数据报都会在其他节点上接收,因此您不会期望在传输节点上接收到DatagramNtf

如果成功,RangeReq应该产生一个RangeNtf,但这可能会花费超过默认的接收超时1秒的时间,具体取决于节点2的距离。因此,您可能想尝试更长的接收超时时间,以查看是否收到通知。

要从rxntf访问有效负载中的数据,可以尝试print(rxntf.data)