MATLAB komunikacja UART, Serial Port

0

Witam,

Staram się uruchomić odczyt danych z czujnika poprzez uC do MATLABA.

Niestety nie rozumiem pewnej sytuacji, w której uruchomienie komunikacji się nie udaje.

Taki kod:

s = serial('COM3');
set(s,'BaudRate',19200);
set(s,'Terminator','LF');
fopen(s);
fclose(s);
delete(s);
clear s;

skutkuje:

Error using serial/fopen (line 72)
Open failed: Port: COM3 is not available. No ports are available.
Use INSTRFIND to determine if other instrument objects are connected to the requested device.

Error in test1 (line 12)
fopen(s);

użycie:
s = instrfind('Port','COM3');
Wyświetla listę wyglądającą tak:

  1. serial closed Serial-COM3
    ...
  2. serial open Serial-COM3
  3. serial closed Serial-COM3
  4. serial closed Serial-COM3

ale nie rozwiązuje problemu.
Dopiero gdy znalazłem i dodałem taki warunek:

if isempty(s)
    s = serial('COM3');
else
    fclose(s);
    s = s(1);
end

Komunikacja zostaje nawiązana.
Czy mógłby mi ktoś w prosty sposób wyjaśnić czemu przy pierwszej próbie nie wykrywa mi dostępnego portu COM3?
Co takiego robi ten warunek? Czym różnią się te porty z listy? Czemu większość z nich jest zamknięta a jeden otwarty i czym się one różnią?

Z góry dzięki za odp,
Piotrek

0

Może port pozostaje otwarty po poprzednim wywołaniu skryptu? Przy poprzednim czytaniu nie robisz na końcu fclose(s) i kolejne wywołanie skryptu nie działa. To by wyjaśniało dlaczego dodanie

if isempty(s)
    s = serial('COM3');
else
    fclose(s);
    s = s(1);
end

pomaga

1 użytkowników online, w tym zalogowanych: 0, gości: 1