2013-04-18 16 views
0

我想从Simulink模型(实时运行)发送数据到Python脚本(也是实时运行的,我使用的是Simulink内置的“UDP Send”模块, 。它的工作原理,但我不知道怎么我得到的数据进行解码这是我的python脚本的样子:通过UDP将Simulink中的数据转化为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

@ user1636547这里5002是哪个端口号?对于我的脚本哪个端口号我不得不使用? –

回答

0

原来我的网络正在颠倒数据包位。解决方案是读取它位反转:

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

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

0

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