如何通过TCP / IP将Simulink / MATLAB连接到Python?

时间:2018-01-16 14:24:11

标签: python matlab sockets tcp simulink

我想将Visual Components 软件中的 MATLAB / Simulink Python API连接在一起。我想在运行时/逐步更新中共享信息。有某种连接,但它会突然发生并停止,它也不是一步一步的,而且端口的地址与给定的地址不同。

可以看到Simulink屏幕截图here。虽然Python代码如下

#!/usr/bin/env python
from vcScript import *

import socket
import sys
import time

# start simulation
# -init TCP-Server
# -wait for connection
def createTCPIPServer(TCP_IP, TCP_PORT):

  s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  s.settimeout(30)
  s.bind((TCP_IP, TCP_PORT))
  s.listen(20)

  conn, addr = s.accept()
  print('Connection address:', addr)
  conn.setblocking(1)
  return conn

# at each simulation step
# read and write to TCP
def readTCP(conn):
  BUFFER_SIZE = 1  # Normally 1024 
  data = conn.recv(BUFFER_SIZE)

  return data

def writeTCP(conn,data):
  conn.sendall(data)  # echo

# end simulation 
# close connection 
def closeTCP(conn):
  print("Close connection in 5 sec")
  time.sleep(10)
  conn.close()
  print("connection closed")

def OnSignal( signal ):
  pass

def OnRun():
  #createTCPIPClient(4112)
  conn = createTCPIPServer('127.0.0.1', 5005)
  while 1:
      data = readTCP(conn)
      if not data: break
      print("received data:", data)
      writeTCP(conn,data)
  closeTCP(conn)
  pass

在Simulink中,取消注释 TCP / IP接收块:双方运行,Python端等待,超时后失败。 See here.

在Simulink中, TCP / IP接收块被注释:双方都在运行,Python端等待,超时后它会突然显示所有收到的值。 See here.

我希望在运行时/逐步中与输出正确连接,以便在Visual Components中处理它。如何获得所需的稳定输出?

0 个答案:

没有答案