通过UDP将数据从Simulink读取到Python中

时间:2013-04-18 01:42:14

标签: python udp simulink

我想将数据从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”的输出

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

相关问题