【问题标题】:Reading data from Simulink into Python over UDP通过 UDP 将数据从 Simulink 读入 Python
【发布时间】:2014-02-17 20:28:12
【问题描述】:

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

有什么想法吗?

【问题讨论】:

  • @user1636547 这里的 5002 是哪个端口号?对于我的脚本,我必须使用哪个端口?

标签: python udp simulink


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多