0

我想将数据从 Simulink 模型(实时运行)发送到 Python 脚本(也实时运行。我正在使用 Simulink 的内置“UDP Send”块,它可以工作,但我不知道如何解码我得到的数据。这就是我的python脚本的样子:

import sys, struct
from socket import *

SIZE = 1024      # packet size

hostName = gethostbyname('0.0.0.0')

mySocket  = socket( AF_INET, SOCK_DGRAM )
mySocket.bind((hostName,5002))

repeat = True
while repeat:
    (data,addr) = mySocket.recvfrom(SIZE)
    data = struct.unpack('d',data)
    print data

我怀疑数据流应该是双精度的,但是虽然它给了我数字,但它们没有意义:

  • 如果 simulink 发送一个常量“1”,我会得到“3.16e-322”的输出

  • 如果 Simulink 发送一个常数“2”,我会得到“3.038e-319”的输出

有任何想法吗?

4

2 回答 2

0

原来我的网络正在反转数据包位。解决方案是将其读取为位反转:

data = struct.unpack('!d',data)

我不知道为什么这会发生在某些网络上而不是其他网络上。有人可以评论一种判断我是否需要使用位反转的方法吗?

于 2013-07-07T04:45:50.377 回答
0

当发送方和接收方的字节顺序不同时,就会出现问题。请参阅 sys.byteorder。最佳实践应该是在发送时始终转换为网络顺序,并在接收时再次转换。

于 2014-02-17T12:28:12.367 回答