Как очистить последовательный порт BytesAvailable с помощью Matlab?

Я подключил телефон к компьютеру через последовательный порт и использую Matlab для управления им (телефоном).

s = serial('COM8');
s.BytesAvailable %this returns 0

после использования некоторой fwrite AT-команды s.BytesAvailable возвращает число больше 0 (в моем случае она возвращает 54, но число здесь не имеет значения).

Итак, могу ли я сбросить s.BytesAvailable, чтобы снова установить его на 0? Я попробовал fopen(s), но ничего (кажется) не произошло.


person A Petrov    schedule 09.06.2013    source источник
comment
Похоже, телефон отправляет вам какие-то данные. Если вам не нужны данные, почему бы вам просто не проигнорировать их? Какую проблему это вызывает?   -  person wakjah    schedule 09.06.2013
comment
@wakjah, мне нужны данные на мгновение (чтобы отобразить сообщение), а затем мне нужно, чтобы они исчезли. Теперь, как мне заставить его исчезнуть? Я использую fgets(s) для чтения данных, но это не сбрасывает s.BytesAvailable до 0.   -  person A Petrov    schedule 09.06.2013
comment
Чтобы прочитать все доступные данные в буфере последовательного ввода, вы можете использовать либо fscanf (для данных в текстовом формате), либо fread (для двоичных данных) в соответствии с Запись и чтение данных. Обратите внимание, что в обоих случаях BytesAvailable будет сброшено на 0. fgets считывает только одну строку текстовых данных, возможно, ваше устройство возвращает больше строки.   -  person p8me    schedule 09.06.2013


Ответы (1)


Вы можете попробовать функцию flushinput(Serial_Port_obj) в Matlab. Эта функция очищает все данные, хранящиеся во входном буфере.

В противном случае вы можете использовать fread(Serial_Port_obj,Serial_Port_obj.BytesAvailable). Последний просто мгновенно считывает все данные, сохраненные снова во входном буфере.

Но как только буфер очистится, данные с телефона снова начнут поступать в буфер компьютеров. Просто подумайте об этом так:

PhoneDataToTransmitOnThePhone -> SoftwareBufferOnThePhone -> HardwareBufferOnThePhone -> HardwareBufferOnThePC -> SoftwareBufferOnThePC -> PhoneDataToTransmitOnThePC

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

Обратите внимание, что все буферы являются FIFO (First In -> First Out).

person 2nisi    schedule 02.06.2015