2013-04-18 19 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。 最好的做法應該是在發送時總是轉換爲網絡順序,並在接收時再次轉換。