我想将数据从Simulink模型(实时运行)发送到Python脚本(也是实时运行。我使用的是Simulink内置的“UDP发送”块,但是我没有我知道如何解码我得到的数据。这就是我的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”的输出
有什么想法吗?
答案 0 :(得分:0)
结果我的网络正在反转数据包位。解决方案是将其读取为位反转:
data = struct.unpack('!d',data)
我不知道为什么会在某些网络上发生这种情况而不是其他网络。有人可以评论一种告诉我是否需要使用位反转的方法吗?
答案 1 :(得分:0)
当发送方和接收方具有不同的字节顺序时,会出现问题。 请参阅sys.byteorder。 最佳做法应该是在发送时始终转换为网络订单,并在接收时再次转换。