PIC Vietnam

Go Back   PIC Vietnam > Robotics > Matlab-Simulink & Labview & 20-Sim

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Matlab-Simulink & Labview & 20-Sim Các công cụ mô phỏng đa ngành...

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 28-02-2009, 10:36 PM   #1
dvnccbmacbt
Đệ tử 4 túi
 
Tham gia ngày: May 2007
Bài gửi: 65
:
Nhận dữ liệu qua cổng RS232 và vẽ đồ thì lên Matlab??

Chào mọi người.
Em đang thực hiện vẽ đồ thị tren matlab với dữ liệu là số xung encoder PIC truyền lên qua cổng com. Phần nhận dữ liệu em đã thực hiện xong. Nhưng vẽ đồ thị thì em chưa vẽ được. Nếu lưu lại dữ liệu nhận được rồi chờ đến khi kết thúc quá trình nhận dữ liệu thì không có vấn đề j.
Em có thắc mắc thế này: Nếu em muốn vẽ đồ thì ngay trong hàm ngắt của matlab có được không? Tức là động cơ đang quay và em muốn đồ thị cũng vẽ theo đó luôn chứ không chờ đến lúc động cơ dừng rồi mới vẽ ( em điêu khiên vị trí cua động cơ);
Em thấy trong luồng "PID cho động cơ đã có người làm rồi nhưng không thấy nói cụ thể về cái này. Mong mọi người giúp đỡ!
dvnccbmacbt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-03-2010, 04:42 PM   #2
luckyboy150488
Nhập môn đệ tử
 
Tham gia ngày: Feb 2009
Bài gửi: 1
:
mình cũng đang làm đề tài vẽ đồ thị dữ liệu nhận từ rs232 bạn nào có tài liệu share cho t với.t xin cám ơn
luckyboy150488 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 24-11-2010, 05:42 PM   #3
liusan
Nhập môn đệ tử
 
Tham gia ngày: Nov 2008
Bài gửi: 4
:
Trích:
Nguyên văn bởi luckyboy150488 View Post
mình cũng đang làm đề tài vẽ đồ thị dữ liệu nhận từ rs232 bạn nào có tài liệu share cho t với.t xin cám ơn
Bạn dùng thử code này xem sao:

---my code---
serialObj=serial('COM1','baudrate',9600,'Timeout', 2);
serialObj.BytesAvailableFcnMode='byte';
serialObj.BytesAvailableFcnCount=2;
serialObj.BytesAvailableFcn={@mycallback,handles};
......
......
function mycallback(hObject, eventdata, handles)
tframe=2; %width of the oscilloscope screen
global ia count t tocold samples
if isempty(count)
count=1;
end
try
x=fread(handles.serialObj,2,'uint8');
ia(count)=x(1)*256+x(2); %x=[quotient reminder]
samples(count)=count;
catch e
errordlg(e.message);
end
count=count+1;
set(handles.plot1,'xdata',samples,'ydata',ia);
set(handles.axes1,'xlim',[0 count]...
,'ylim',[min(ia)-1 max(ia)+1]);

Hoặc trong file .txt ở dưới, đổi nó lại thành .m ha(tại mình up ko đc). Bạn về chỉnh sửa cho hợp với mình.
File Kèm Theo
File Type: txt real_time_data_plot.txt (2.8 KB, 89 lần tải)
liusan vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 31-03-2010, 09:43 AM   #4
phulanchi
Nhập môn đệ tử
 
Tham gia ngày: Mar 2010
Bài gửi: 1
:
Bạn ơi, cho mình hỏi để nhận dữ liệu từ COM trong Matlab thì phải làm thế nào?
Mình truyền được dữ liệu từ PC xuống VDK qua Matlab nhưng không thể nhận dữ liệu từ VDK gửi lên PC. Giá trị muốn gửi lên là số, như nhiệt độ đo được.
phulanchi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 24-11-2010, 05:36 PM   #5
liusan
Nhập môn đệ tử
 
Tham gia ngày: Nov 2008
Bài gửi: 4
:
Trích:
Nguyên văn bởi phulanchi View Post
Bạn ơi, cho mình hỏi để nhận dữ liệu từ COM trong Matlab thì phải làm thế nào?
Mình truyền được dữ liệu từ PC xuống VDK qua Matlab nhưng không thể nhận dữ liệu từ VDK gửi lên PC. Giá trị muốn gửi lên là số, như nhiệt độ đo được.
Bạn vào Matlab help gõ serial rồi tha hồ đọc.
liusan vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-12-2010, 06:38 PM   #6
nguyendtt
Nhập môn đệ tử
 
Tham gia ngày: May 2009
Bài gửi: 2
:
Em dùng đoạn lệnh dưới đây để xuất data và nhận data vào từ cổng com 1:
s = serial('COM1');
s.baudrate = 9600;
s.DataBits = 8;
s.Parity = 'none';
s.StopBit = 1;
s.ReadAsyncMode = 'continuous';
s.BytesAvailableFcnCount = 1;
s.Terminator = 'LF';
s.BytesAvailableFcnMode = 'terminator';
fopen(s);
fwrite(s,255);
n = fread(s,1);
if (n == 255)
set(handles.thketnoi,'String','ket noi thanh cong');
% Hide all setting popup menu.
set(handles.ComPort,'Enable','off');
set(handles.chedo,'Enable','off');
set(handles.dieukhien,'Enable','on');
else
set(handles.ketnoi,'Enable','on');
set(handles.thketnoi,'String','Loi, kiem tra lai cong COM');
end
fclose(s);
Nhưng xuất data thì nhanh còn nhận vào thì rất lâu (khoảng 2s) lại còn cảnh báo lỗi nữa:"Warning: The specified amount of data was not returned within the
Timeout period."
Pro nào biết xin chỉ giúp cách khắc phục lôi này với...Thanksssss
nguyendtt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-06-2011, 09:29 AM   #7
lequangthanh
Đệ tử 1 túi
 
Tham gia ngày: Jun 2011
Bài gửi: 22
:
Trích:
Nguyên văn bởi nguyendtt View Post
Em dùng đoạn lệnh dưới đây để xuất data và nhận data vào từ cổng com 1:
s = serial('COM1');
s.baudrate = 9600;
s.DataBits = 8;
s.Parity = 'none';
s.StopBit = 1;
s.ReadAsyncMode = 'continuous';
s.BytesAvailableFcnCount = 1;
s.Terminator = 'LF';
s.BytesAvailableFcnMode = 'terminator';
fopen(s);
fwrite(s,255);
n = fread(s,1);
if (n == 255)
set(handles.thketnoi,'String','ket noi thanh cong');
% Hide all setting popup menu.
set(handles.ComPort,'Enable','off');
set(handles.chedo,'Enable','off');
set(handles.dieukhien,'Enable','on');
else
set(handles.ketnoi,'Enable','on');
set(handles.thketnoi,'String','Loi, kiem tra lai cong COM');
end
fclose(s);
Nhưng xuất data thì nhanh còn nhận vào thì rất lâu (khoảng 2s) lại còn cảnh báo lỗi nữa:"Warning: The specified amount of data was not returned within the
Timeout period."
Pro nào biết xin chỉ giúp cách khắc phục lôi này với...Thanksssss
bạn xem lại cách định dạng dữ liệu đọc vào của bạn!
lequangthanh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-06-2011, 09:59 AM   #8
lequangthanh
Đệ tử 1 túi
 
Tham gia ngày: Jun 2011
Bài gửi: 22
:
Trích:
Nguyên văn bởi dvnccbmacbt View Post
Chào mọi người.
Em đang thực hiện vẽ đồ thị tren matlab với dữ liệu là số xung encoder PIC truyền lên qua cổng com. Phần nhận dữ liệu em đã thực hiện xong. Nhưng vẽ đồ thị thì em chưa vẽ được. Nếu lưu lại dữ liệu nhận được rồi chờ đến khi kết thúc quá trình nhận dữ liệu thì không có vấn đề j.
Em có thắc mắc thế này: Nếu em muốn vẽ đồ thì ngay trong hàm ngắt của matlab có được không? Tức là động cơ đang quay và em muốn đồ thị cũng vẽ theo đó luôn chứ không chờ đến lúc động cơ dừng rồi mới vẽ ( em điêu khiên vị trí cua động cơ);
Em thấy trong luồng "PID cho động cơ đã có người làm rồi nhưng không thấy nói cụ thể về cái này. Mong mọi người giúp đỡ!
có nhiều cách giải quyết vấn đề này:


nếu bạn không lập trình trong GUI,bạn có thể làm được việc này ,vì hiện tại mình chưa làm được với GUI.

bạn định dạng cổng COM như sau:


s=serial('COM1');%lựa chọn cổng com tùy vào phần cứng của bạn
get(s);%lấy các thông tin về cổng
hàm trên sẽ trả về các thuộc tính của đối tượng s,giống như lập trình hướng đối tượng bạn có thể thay đổi thông số sau khi khởi tạo (với các thông số mặc định)
s.BaudRate=9600;hoặc set(s,'BaudRate',9600);
s.InputBufferSize=1024;%tùy chọn,có thể bỏ qua các bước này
s.TimeOut=2;%thời gian phát sinh lỗi nếu quá trình đọc dữ liệu vượt quá thời gian này
s.BytesAvailableFcnMode='byte';%chế độ gọi hàm ngắt sẽ là đếm số byte nhận được,mặc định là terminal:gọi hàm ngăt khi gặp ký tự kết thúc
s.BytesAvailableFcnCount=10;%định nghĩa số byte nhận được trong bộ đệm thu 10 byte thì gọi chương trình ngắt
s.BytesAvailableFcn=@vedothi;%khai bao hàm call back
vedothi là một hàm ngắt mà ta sẽ định nghĩa và lưu trong thư mục đang làm việc của matlab,cách định nghĩa hàm này có đôi chút khác biệt

cấu trúc hàm này như sau:
kích phải trong thư mục đang làm việc và chọn new>function
ta sẽ chỉnh sữa lại như sau:
Function y = vedothi(obj,event) % có trả về kiểu dữ liệu
obj:là đối tượng serial
ví dụ một hàm mầu như sau
function th( obj,event )
%TH Summary of this function goes here
% Detailed explanation goes here
figure

end

cái hàm trên có tên là th và thực hiện một công việc vô cùng đơn giản là tạo một cái cửa sổ figure.và không trả về kiểu dữ liệu gì hết,hehe
lưu ý là cái hàm này phải tạo trước khi khai báo hàm callback trong matlab nhé
công việc còn lại là
fopen(s);
một số bạn thắc mắc là việc gửi dữ liệu thì rất nhanh,còn đọc thì chậm,tất nhiên rồi
khi bạn khởi tạo cổng com,matlab mặc định thời gian đọc dữ liệu tối đa là 10s,khi bạn gửi dữ liệu xuống cổng,thì cái cổng trong máy tính bạn nó gủi dữ liệu đi cho thiết bị đầu cuối đọc,chứ nó đâu có gửi cho nó đọc đâu,vì vậy đâu có gì trong bộ đệm nhận đâu mà đọc,bạn muốn gửi,rồi nhận lại cái mình đã gửi thì phải nối dây số 2 và dây 3 của cổng com lại thì sẽ làm được việc này,còn nếu bạn đang dùng laptop,thì dùng phần mềm giả lập cổng com để thử nghiêm!!

chúc bạn thành công!!!
lequangthanh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-06-2011, 11:39 AM   #9
redstarhd
Nhập môn đệ tử
 
Tham gia ngày: Jun 2011
Bài gửi: 2
:
Trời ơi các pro cứu em với, em đang làm đồ án về tạo mã manchester sử dụng 2 con pic smarter và slave để tạo mã manchester và yêu cầu hiển thị dạng xung của mã này trên PC thông qua cổng COM , nhưng em k bit dùng phần mềm nào cho thích hợp, matlab có được k ah hay là labview ??
Em mong sớm được các pro giúp đỡ
redstarhd vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 12:40 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam