Как использовать MATLAB для отправки сигналов на порт IP-адреса?

Как использовать MATLAB для отправки сигналов на порт IP-адреса?

Дело в том, что я подключил автомобиль-робот к ПК по Wi-Fi и решил, что сигнал FF000400FF, полученный роботом, будет вести машину вперед. Я проверил это с помощью инструментов TCP&UDP, и все было в порядке. Поэтому я думаю, что использование MATLAB для отправки этого сигнала тоже должно быть в порядке.

мой код:

t = tcpip('192.168.1.1',2001);
fopen(t);
a=dec2hex(1095216922879);  %FF000400FF(H)
fprintf(t,a)

но это не работает. Я долго работал над этим, но потерпел неудачу.


person Yancy    schedule 14.12.2015    source источник
comment
Добро пожаловать в Stack Overflow! Обратите внимание, что это не работает, никогда не бывает достаточно информации. Есть ли ошибка? Что-нибудь происходит? Что происходит вместо ожидаемого поведения?   -  person Andras Deak    schedule 14.12.2015
comment
MATLAB не сообщает об ошибке. Но машина-робот просто не двигается. Поэтому мне интересно, был ли отправлен сигнал. И я использую инструмент TCP, чтобы поймать сумку, отправленную с ПК. Он ничего не поймал. что-то не так с кодом? или MATLAB? СПАСИБО!   -  person Yancy    schedule 14.12.2015
comment
Какой тип данных ожидает ваш робот? Действительно ли он ожидает строковые данные?   -  person Daniel    schedule 14.12.2015
comment
Поскольку вы не видели ничего, переданного с ПК: вы уверены, что с IP и портом все в порядке?   -  person Andras Deak    schedule 14.12.2015
comment
1. На самом деле робот может читать только шестнадцатеричные данные, например FF000400FF. Но в коде я преобразовываю его в десятичные данные благодаря функции fprintf. Я не совсем уверен, есть ли в MATLAB какие-либо инструкции или функции, которые могут отправлять шестнадцатеричные данные непосредственно на IP-порт?   -  person Yancy    schedule 14.12.2015
comment
2. Я думаю, что можно читать строковые данные, так как я напрямую отправляю FF000400FF роботу по пути TCP-IP. Это работает.   -  person Yancy    schedule 14.12.2015
comment
3. IP и порт в порядке, потому что все в порядке, если я использую другие инструменты, кроме MATLAB... поэтому я озадачен. MATLAB не может отправлять шестнадцатеричные данные?   -  person Yancy    schedule 14.12.2015
comment
Подключили ли вы wireshark или что-то подобное для просмотра необработанных пакетов? Это должно помочь вам диагностировать проблему.   -  person zelanix    schedule 14.12.2015
comment
@zelanix Нет   -  person excaza    schedule 14.12.2015
comment
@Yancy, у вас есть панель инструментов для управления прибором?   -  person excaza    schedule 14.12.2015
comment
Что вы подразумеваете под робот может читать только шестнадцатеричные данные? Означает ли это действительно число, закодированное как шестнадцатеричная строка? Шестнадцатеричный код обычно представляет собой только способ представления числовых данных для удобочитаемости. Опять же, подключите wireshark и сравните то, что отправляется с тем, что отправляется из других работающих инструментов.   -  person zelanix    schedule 14.12.2015
comment
Я думаю, вам следует использовать fwrite(tcpip_object,value) вместо fprintf.   -  person NKN    schedule 14.12.2015
comment
@excaza Я почти уверен, что в противном случае это выдаст ошибку.   -  person Andras Deak    schedule 14.12.2015
comment
Я согласен с @NKN. Когда вы говорите, что ваш робот принимает шестнадцатеричные данные в качестве входных данных, для меня это означает, что он ожидает двоичные значения, возможно, последовательности байтов, которые обычно представляются в виде шестнадцатеричных строк для нас, людей... но большинство микроконтроллеров предпочитает старые добрые двоичные байты. Итак, как говорит NKN, попробуйте fwrite вместо fprintf. (также попробуйте отправлять свои байты последовательно, чтобы у вас был контроль над порядком байтов (который довольно часто меняется между большинством ПК / Mac и встроенными микроконтроллерами).   -  person Hoki    schedule 14.12.2015


Ответы (2)


Попробуй это:

fwrite(t, [255, 0, 4, 0, 255])
person user5678677    schedule 14.12.2015

Попробуй это:

myhost = java.net.InetSocketAddress('192.168.1.1',2001);
mysoc = java.net.Socket();
mysoc.connect(myhost, 2000); % Two second timeout
connected=mysoc.isConnected();
if connected
    mystream = mysoc.getOutputStream();
    mystream.write(hex2dec('FF000400FF'));
    mystream.flush();
    mystream.close();
end

mysoc.close();

Вы можете обернуть это в блок try catch:

try
...
catch ME
    if (isa(ME, 'matlab.exception.JavaException'))
       reason = class(ME.ExceptionObject);
       connected = 0;
    end
end

Это должно работать на любой платформе, рабочем столе или в развернутом виде. Если ваш автомобиль возвращает что-то в ответ на команду, вы можете прочитать это с помощью inputStream. Лучше всего, вы можете опубликовать текст в причине, если «это не работает»!

person Jeff E Mandel    schedule 04.03.2016