当前位置: 首页 > 知识库问答 >
问题:

Python到MATLAB的实时数据传输

魏熠彤
2023-03-14

我正在使用python从USB输入设备读取数据。我想知道是否有一种方法可以与MATLAB中的模型实时交换。我现在的做法是将读取的数据保存在一个.mat文件中,然后让模型从那里读取数据,这不是很直观。我使用的代码如下所示:

    #Import the needed libraries
    import usb.core,usb.util,sys,time
    import sys
    from array import *
    import scipy.io

    #find our device
    dev = usb.core.find(idVendor=0x046d, idProduct=0xc29a)

    # was it found?
    if dev is None:
       raise ValueError('Device not found')

   # set the active configuration. With no arguments, the first
   # configuration will be the active one
   try:
     dev.set_configuration()
     #In the event of an error
   except usb.core.USBError as e:
     print('Cannot set configuration the device: %s' %str(e))
     sys.exit()

   # get an endpoint instance
   cfg = dev.get_active_configuration()
   intf = cfg[(0,0)]
   ep = usb.util.find_descriptor(
               intf,
     # match the first IN endpoint
     custom_match = \
     lambda e: \
     usb.util.endpoint_direction(e.bEndpointAddress) == \
     usb.util.ENDPOINT_IN)

  #Initialising variables
  #Databases for access in MATLAB
  gas_pedal_data={}
  brake_pedal_data={}
  steering_wheel_bit5_data={}
  steering_wheel_bit6_data={}
  gas_pedal=[]
  brake_pedal=[]
  steering_wheel_bit5=[]
  steering_wheel_bit6=[]
  i=0
  #Read data from the device as long as it is connected
  while(dev!= None):
       try:
          #Read data
          data = dev.read(ep.bEndpointAddress, ep.wMaxPacketSize,
                          timeout=1000)
          gas_pedal.append(data[6])
          gas_pedal_data['gas_pedal']=gas_pedal
          scipy.io.savemat('test.mat',gas_pedal_data)
          brake_pedal.append(data[7])
          brake_pedal_data['brake_pedal']=brake_pedal
          scipy.io.savemat('test.mat',brake_pedal_data)
          steering_wheel_bit5.append(data[4])
          steering_wheel_bit5_data['steering_wheel_bit5']=steering_wheel_bit5
          scipy.io.savemat('test.mat',steering_wheel_bit5_data)
          steering_wheel_bit6.append(data[5])
          steering_wheel_bit6_data['steering_wheel_bit6']=steering_wheel_bit6
          scipy.io.savemat('test.mat',steering_wheel_bit6_data)
       except usb.core.USBError as e:
          print("Error readin data: %s" %str(e))
          time.sleep(5)
          continue

共有1个答案

史昊焱
2023-03-14

你有几个选择。

  • 您可以从Matlab中轮询文件的存在,然后在可用时读取新数据
  • 您可以打开一个管道来执行python和matlab之间的进程间通信(也需要从matlab端进行轮询)。请参阅此处获取代码。
  • 您可以使用本地UDP或TCP套接字进行通信。通过使用PNET(仍然需要轮询)或matlab仪器控制工具箱(允许您配置回调函数)。

由于matlab是单线程的,您的模型必须在设计时考虑到新数据的提供。当提供新数据时,您需要显式地触发模型来重新评估。

 类似资料:
  • 下面是MATLAB文档中的例子。我想在Python中用相同的结果生成相同的代码。我在其他文章中看到了三维数组如何为numpy数组(sub2ind)获得线性索引的例子,但我想要一个简单的二维数组的例子,如我所示。感谢回答代码!

  • 本文向大家介绍python实现udp数据报传输的方法,包括了python实现udp数据报传输的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python实现UDP数据报传输的方法,非常具有实用价值。分享给大家供大家参考。具体方法分析如下: 服务端代码: 客户端代码: 结果:先运行服务端,然后运行客户端, 服务端打印出: 补充: socket.sendto(string[, flags

  • 主要内容:示例,写到日记文件,将数据导出到具有低级I/O的文本数据文件MATLAB中的数据导出(或输出)可以理解为写入文件。 MATLAB允许在其他应用程序中使用读取ASCII文件的数据。 为此,MATLAB提供了几个数据导出选项。 可以创建以下类型的文件: 来自数组的矩形,有分隔符的ASCII数据文件。 日记(或日志)文件的按键和结果文本输出。 使用等低级函数的专用ASCII文件。 MEX文件访问写入特定文本文件格式的C/C++或Fortran例程。 除此之外,还

  • 主要内容:示例 - 1,示例 - 2,示例 - 3,低级文件I/O,导入具有低级别I/O的文本数据文件,示例在MATLAB中导入数据意味着从外部文件加载数据。importdata函数允许加载不同格式的各种数据文件。它有以下五种形式 - 序号 函数 描述 1 从文件filename中将数据加载到数组A中。 2 从系统剪贴板而不是从文件加载数据。 3 解析作为在文件,文件名或剪贴板数据中的列分隔符。可以使用与上述语法中的任何输入参数。 4 从ASCII文件,文件名或剪贴板加载数据,从行头标题开始读取

  • 主要内容:MATLAB数据类型,示例,数据类型转换,数据类型确定,示例MATLAB不需要任何类型声明或维度语句。当MATLAB遇到新的变量名称时,它将创建变量并分配适当的内存空间。 如果变量已经存在,则MATLAB将使用新内容替换原始内容,并在必要时分配新的存储空间。 例如, 上述语句创建一个名为的矩阵,并将值存储在其中。 MATLAB数据类型 MATLAB提供种基本数据类型。每种数据类型存储矩阵或数组形式的数据。矩阵或数组的最小值是到,并且是可以到任何大小的矩阵或

  • 我正在尝试上传图像到firebase,以及其他字符串和双数据类型。 我现在正在考虑两个选项,一个是上载imageUrl到firebase实时数据库,当我检索它时,我将检索一个imageUrl并将其转换为图像。 谢谢你的帮助!我很感激。