реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Отображение данных в МАТЛАБ в режиме реального времени
Mityan
сообщение Jul 25 2012, 09:11
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 78
Регистрация: 5-07-11
Пользователь №: 66 068



Получаю байты с СОМ-порта. Как мне сделать красивый график, чтобы сидеть и наблюдать, как в него с течением времени точки добавляются?

В симулинке можно просто scope открыть во время симуляции, но у меня в м-коде. Как?

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

Сообщение отредактировал Mityan - Jul 25 2012, 09:12
Go to the top of the page
 
+Quote Post
_4afc_
сообщение Jul 25 2012, 09:44
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565



Цитата(Mityan @ Jul 25 2012, 13:11) *
Получаю байты с СОМ-порта. Как мне сделать красивый график, чтобы сидеть и наблюдать, как в него с течением времени точки добавляются?

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


Google(matlab com read) - третья строчка сверху.

А вообще проще в терминалке такой график смотреть:


Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
ToR_TDA
сообщение Jul 25 2012, 09:48
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 133
Регистрация: 7-08-10
Из: Мурманск
Пользователь №: 58 796



Цитата(Mityan @ Jul 25 2012, 13:11) *
Задаю вопрос, потому что не могу даже сформулировать это подходящим для поисковика образом.

Аналогичной проблемой занимался, потом решил что это все от лукавого и стал накапливать буфер и выводить данные целиком и уже не в matlab (для моей задачи это было допустимо).
Ваш вопрос предполагает, что Вы уже умеете в M-коде инициализировать com-порт, читать его и что-то от туда получать в задержанном времени (через буфер).
По реальному времени на вскидку нашел в M-коде что-то похожее, не проверял.
Изначально у меня была идея вообще в simulink это делать, используя библиотеку COMMSTR.
Go to the top of the page
 
+Quote Post
Mityan
сообщение Jul 25 2012, 10:13
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 78
Регистрация: 5-07-11
Пользователь №: 66 068



Вот код:

Код
%% 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) делать, а то матлаб придется перезагружать (он просто уже этого сом-порта не увидит).


Сообщение отредактировал Mityan - Jul 25 2012, 10:05
Go to the top of the page
 
+Quote Post
aT-DeviLru
сообщение Jul 25 2012, 10:54
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 106
Регистрация: 11-11-10
Из: Санкт-Петербург
Пользователь №: 60 826



Реализовывал приём и передачу данных в Matlab через COM-порт, используя графический интерфейс (GUI), где по таймеру считывал данные и отображал их.
Часть кода:
Код
% Функция настройки соединения по последовательному порту
function connect_Callback(hObject, eventdata, handles)
handles.ser = serial('COM2');
set(handles.ser,'BaudRate',9600);
fopen(handles.ser);

%Обработка принятых данных
function TmrFcn(src,event,handles)
handles = guidata(handles);
if handles.ser.BytesAvailable > 0
    % Чтение принятого байта
    x = fread(handles.ser,handles.ser.BytesAvailable,'uchar');
    % дальнейшая обработка и вывод на экран
    % ...    
end

% Настройка таймера для чтения принятых данных
handles.guifig = gcf;
handles.tmr = timer('TimerFcn',{@TmrFcn,handles.guifig},'BusyMode','Queue',...
    'ExecutionMode','FixedRate','Period',0.1);%timer
guidata(handles.guifig,handles);
start(handles.tmr);
Go to the top of the page
 
+Quote Post
Mityan
сообщение Jul 31 2012, 11:38
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 78
Регистрация: 5-07-11
Пользователь №: 66 068



Пытаюсь реализовать GUI.

Помогите, пожалуйста, с синтаксисом.

Почитал много форумов matlab.exponenta.ru, но не нашел похожего примера.
Все успешно передают в функцию таймера параметры и рисуют графики. А возвратить значение как?
Конкретно, у меня есть handles.transaction_counter, который инкрементируется по нажатию кнопки одиночной посылки, а также при нажатии кнопки циклического опроса (она-то и запускает таймер). Хочу, чтобы на экране счетчик бежал, да не знаю, как с возвратом параметров справиться.

Если пишу handles.TMR = timer( 'TimerFcn',{@Timer_Func, handles}, ...
то при вызове start(handles.tmr) пишет -

??? Error while evaluating TimerFcn for timer 'Polling Timer'
H must be the handle to a figure or figure descendent.


Если передаю handles.TMR = timer( 'TimerFcn',{@Timer_Func, handles.transaction_counter, ...
Забыл уже, что пишет, но тоже ругается.

Пробовал объявить счетчик как global - вообще не понимаю, как должно работать, ни одна функция этого глобального счетчика не видит.

В хелпах матлаба ничего по этим поводам нет. Буду очень признателен.

Сообщение отредактировал Mityan - Jul 31 2012, 11:53
Go to the top of the page
 
+Quote Post
syoma
сообщение Aug 9 2012, 13:42
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 817
Регистрация: 14-02-07
Из: наших, которые работают за бугром
Пользователь №: 25 368



Я делал GUI на Матлабе по вот этой Демке: http://www.mathworks.de/help/stateflow/exa...-subcharts.html
Мне очень понравилось. Чтобы сделать все в примерно реальном времени я использовал хитрую функцию, только забыл какую.
Go to the top of the page
 
+Quote Post
Mityan
сообщение Aug 17 2012, 09:03
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 78
Регистрация: 5-07-11
Пользователь №: 66 068



Выложил готовый код вот здесь
Go to the top of the page
 
+Quote Post
Herz
сообщение Aug 18 2012, 10:18
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287



Цитата(Mityan @ Aug 17 2012, 12:03) *

А зачем?

Цитата(Mityan @ Jul 25 2012, 12:11) *
Получаю байты с СОМ-порта. Как мне сделать красивый график, чтобы сидеть и наблюдать, как в него с течением времени точки добавляются?

Я такую программку в своё время написал сам. Почти без навыков MATLABа. Это достаточно просто. Если хотите, выложу код.
Go to the top of the page
 
+Quote Post
Myron
сообщение Aug 18 2012, 12:30
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 849
Регистрация: 6-02-05
Пользователь №: 2 451



Цитата(Herz @ Aug 18 2012, 04:18) *
Я такую программку в своё время написал сам. Почти без навыков MATLABа. Это достаточно просто. Если хотите, выложу код.

Выложитье, пожалуйста. И подскажите, какие ограничения - мах частота отсчетов, полоса и пр. - в Вашем случае. Можно ли сжимать и расширять в режиме реального времени, т.е. изменять количество точек на экране?
Go to the top of the page
 
+Quote Post
Herz
сообщение Aug 19 2012, 07:27
Сообщение #11


Гуру
******

Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287



Дело было довольно давно и подробностей я уже не помню. Программка предназначалась для приёма последовательности из трёх 16-битных переменных (названных R, G, B ), разделённых пробелом, и вывода на экран, а также сохранения в лог-файле. Можно было выводить не каждую точку, а усреднять по нескольким значениям. Вряд ли Вас устроит в готовом виде, но, возможно, будет полезной как пример.Прикрепленный файл  Terminal.rar ( 3.18 килобайт ) Кол-во скачиваний: 306
Go to the top of the page
 
+Quote Post
almost
сообщение Aug 20 2012, 09:29
Сообщение #12


Частый гость
**

Группа: Свой
Сообщений: 199
Регистрация: 27-05-09
Из: Москва
Пользователь №: 49 648



В данный момент решаю подобную задачу, только для ethernet=>ip=>udp.
Windows не является приложением реального времени, к примеру тулза xPC target использует real time kernel для этого, которое позволяет дать максимальный приоритет вашему приложению (насколько я понял) и работать по промежуткам 20 мкс, мне этого хватает (т.е. для моих задач это является реальным временем).
Go to the top of the page
 
+Quote Post
Mityan
сообщение Aug 21 2012, 07:54
Сообщение #13


Частый гость
**

Группа: Участник
Сообщений: 78
Регистрация: 5-07-11
Пользователь №: 66 068



Цитата(Herz @ Aug 18 2012, 13:18) *
А зачем?


Я такую программку в своё время написал сам. Почти без навыков MATLABа. Это достаточно просто. Если хотите, выложу код.


Вы знаете, наверняка очень многие из задаваемых здесь вопросов вам покажутся достаточно простыми. Спросите всех, зачем они их задают.
Go to the top of the page
 
+Quote Post
Herz
сообщение Aug 21 2012, 15:55
Сообщение #14


Гуру
******

Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287



Цитата(Mityan @ Aug 21 2012, 10:54) *
Вы знаете, наверняка очень многие из задаваемых здесь вопросов вам покажутся достаточно простыми. Спросите всех, зачем они их задают.

Это как раз понятно.
Непонятно, зачем Вы код выкладывали. Для критики, для поиска ошибок, похвастать или в качестве подарка?
Получилось, будто сами себя спросили и сами ответили.
Go to the top of the page
 
+Quote Post
Mityan
сообщение Aug 22 2012, 06:13
Сообщение #15


Частый гость
**

Группа: Участник
Сообщений: 78
Регистрация: 5-07-11
Пользователь №: 66 068



Цитата(Herz @ Aug 21 2012, 18:55) *
Это как раз понятно.
Непонятно, зачем Вы код выкладывали. Для критики, для поиска ошибок, похвастать или в качестве подарка?
Получилось, будто сами себя спросили и сами ответили.


Если б хвастал, написал бы: смотрите, какой у меня классный код! sm.gif
Хотя идеального кода не существует.

Конечно, для того, кому это может потом понадобиться
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th June 2025 - 23:08
Рейтинг@Mail.ru


Страница сгенерированна за 0.03313 секунд с 7
ELECTRONIX ©2004-2016