Вот код:
Код
%% Initial variables
clear all;
B_rate = 57600; % Baud rate
Rx_packet_len = 25; % Received packet length
Rx_counter = 0; % Packet counter
Packets_per_second = 50;
Rx_buffer = zeros(Rx_packet_len,1);
Packet_header = hex2dec('7777');
%% Open port
s = serial('COM3','BaudRate',B_rate);
fopen(s);
%% Read cycle
while 1 % Looking for packet header
a = fread(s,1);
if a == bitshift(Packet_header,-8) % Byte 1
a = fread(s,1);
if a == bitand(Packet_header,255) % Byte 2
fread(s,Rx_packet_len-2);
break;
end
end
end
while 1 % Infinite operation loop
A = fread(s,Rx_packet_len);
Rx_counter = Rx_counter + 1;
if Rx_counter == Packets_per_second
Rx_counter = 0;
disp( dec2hex( A(1)*256 + A(2) ) );
end
end
В первом бесконечном цикле просто ищу заголовок, чтобы синхронизироваться по нему.
Затем во втором бесконечном цикле намереваюсь разбирать пакет на компоненты и выводить интересующие параметры в режиме реального времени (типа осциллограф) вместо вот этого куска кода с Rx_counter.
Ссылка на функцию datetick интересная, буду изучать, возможно, это именно то что надо. Мне просто кажется, что на каждом цикле (или хотя бы на каждой секунде) просто делать плот - неоптимально.
В терминалке не подойдет, а вдруг я захочу некие операции еще произвести с данными, а потом уже выводить?
Симулинк я очень люблю, но это наверное не совсем для реал-тайм приложение.
Для тех, кто может этот мой кусок использовать: остановка Ctrl+C и перед новым запуском не забывайте fclose(s) делать, а то матлаб придется перезагружать (он просто уже этого сом-порта не увидит).