TCP / IP MATLAB和Python

时间:2019-03-05 04:28:45

标签: python matlab tcp

我试图在MATLAB中运行一个仿真模型,该模型通过python代码通过TCP / IP接收输入并将一些数据发送回python代码。我无法同时同步这两个时间。我的TCP / IP以不同的时间间隔(0.02)发送数据,而我的仿真模型以不同的时间间隔(0.08)运行。我试图固定仿真模型配置中的步长,但没有帮助。有人可以解释吗?

1 个答案:

答案 0 :(得分:0)

通常使用TCP / IP连接,执行一次握手以确保在发送下一个数据包之前成功传输数据。

例如python将执行以下操作

    # Setup Socket for data transfer
    TransferSocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    host = 'localhost'
    port = '5050'
    TransferSocket.connect((host,port))

    # Get data to send (this case a text file)
    f = open("file.txt","rb")

    # send message
    chunk = f.read(1024)
    while (chunk):
        TransferSocket.send(chunk)  # Send data
        Rmsg = TransferSocket.recv(1024) # wait for handshake before sending more
        if Rmsg.decode() == "ACK":
            chunk = f.read(1024)
        else:
            pass

已发送包裹,并在发送下一个包裹之前立即等待答复

在matlab中

tcpipServer = tcpip('localhost',5050,'NetworkRole','Server');
            set(tcpipServer,'OutputBufferSize',8);
            set(tcpipServer, 'BytesAvailableFcnCount',512);
            set(tcpipServer, 'BytesAvailableFcnMode','byte');
            set(tcpipServer, 'BytesAvailableFcn', @(h,e)recmessage(h,e));

从这里每当收到python的软件包时,函数remessage将运行。函数在下面。

    function recmessage(h,e)
        message = fread(tcpipServer,tcpipServer.BytesAvailable);
        % Do whatever else you want
        fwrite(tcpipServer,"ACK");
    end

从这里,“确定”将被发送回python并重复。

这是数据传输的基本示例。对于您想要的内容,很可能是数据而不是“确定”的代码。

但是,如果您设置一次握手而不是尝试对其进行计时,它应该可以解决您的问题。