TCP / IP MATLAB и Python - PullRequest
       1

TCP / IP MATLAB и Python

0 голосов
/ 05 марта 2019

Я пытаюсь запустить имитационную модель в MATLAB, которая берет ввод через TCP / IP из кода Python и отправляет обратно некоторые данные в код Python.Я не могу синхронизировать оба раза.Мой TCP / IP отправляет данные с другим интервалом времени (0,02), а моя имитационная модель работает с другим интервалом (0,08).Я попытался исправить размер шага в конфигурации имитационной модели, но ничего не помогло.Кто-нибудь может объяснить то же самое?

1 Ответ

0 голосов
/ 12 марта 2019

Обычно при подключении 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, запускается функция recmessage. Функция находится ниже.

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

Отсюда 'ok' будет отправлено обратно на python и повторено.

Это базовый пример для передачи данных.Для того, что вы хотите, это, скорее всего, будут данные, а не «хорошо» код.

Но да, если вы установили рукопожатие вместо того, чтобы пытаться рассчитать время, это должно решить вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...