Chắc hẳn các bạn làm việc với Matlab - Simulink đã làm quen với khối Scope trong thư viện Sinks, khối này khi hiển thị mô phỏng với thời gian tương đối dài thì chúng ta khó lòng thu lại được đường đặc tính của nó. Khi chụp thẳng hình này thì sẽ toàn màu đen, khi đem in làm báo cáo,.. thì rất khó nhìn. Vì vậy nên tôi làm như sau.
Với các mô hình Simulink đó, bạn kích đúp chuột vào khối Scope.
Hình 1:Chọn Parameter trên cửa sổ Scope.
Hình 2: chọn tab Data history, Chọn Save data to workspace, chọn kiểu structure with time vì cần có biến time.
Trong này có nhiều lựa chọn cho biến ở trong khung Format nhưng mình chọn kiểu Structure để dễ thao tác.
Hình 3: Sau khi chạy mô phỏng xong bạn sẽ thấy cửa sổ Workspace có biến ScopeData
Như vậy biến ScopeData là một structure nên dùng toán tử truy nhập (.) để truy nhập vào từng phần tử của nó. Bạn thử dùng lệnh sau để biết tên của các thành phần của biến này:
>>ScopeData
Bạn gõ lệnh sau để vẽ :
>>figure(1); >>plot(ScopeData.time,ScopeData.signals.values); >>grid on;
Lưu ý, với phiên bản Matlab R009b cần đổi lệnh plot thành bên dưới. Cảm ơn em trungkstn đã góp ý cho anh
plot(ScopeData.time,ScopeData.signals.values(:));
Hình 4: Cửa sổ figure 1 hiện ra, kích vào pictools trên thanh công cụ.
Khi cái scope của bạn có nhiều hình trong đó thì mà bạn muốn vẽ từng hình thì bạn làm như ví dụ sau. Mình có 2 hình trong một scope:
%% Plot speed
figure(1);
x = out.time;
y = out.signals(1).values;
plot(x,y,'k-','LineWidth',2);
title(' Motor speed [Rad/s]','FontSize',12);
xlabel('Time [s]','FontSize', 12);
grid on;
%% Plot torque
figure(2);
x = out.time;
y = out.signals(2).values;
plot(x,y,'k-','LineWidth',2);
title('Amature Current [A]','FontSize',12);
xlabel('Time [s]','FontSize', 12);
grid on;
Hình 5: Các công cụ hiện ra, bạn có thể xào nấu cái plot của mình theo ý muốn rùi nhé.
Tham khảo
Ngô Hải Bắc, Matlab - các thủ thuật nhỏ, đơn giản nhưng hiệu quả, www.dientuvietnam.net, 2006
Các bạn có ý kiến gì hoặc thắc mắc gì về Matlab xin cứ nêu câu hỏi nhé. Mình rảnh sẽ trả lời.
Các bài viết liên quan:
- Hiển thị Led 7 thanh trên GUI Matlab Chào các bạn. Mình cũng đang làm cái giao diện cho đồ án tốt nghiệp và có tìm kiếm source Matlab cho Led7 thanh và tìm được một project rất hay. Từ đó, có thể nhúng vào trong GUI của mình. Các bạn có thể xem Project đó tại đây. Demo cái hình trông cho [...]...
- Phan tich thuat toan: thuc hien lenh dieu khien tu PC qua RS232 Chào các bạn. Không biết ai đã đọc bài viết của mình PIC16F887 – Điều khiển thời gian đóng cắt một led từ PC qua UART chưa. Trong này, mình có thực hiện đặt thời gian đóng cắt từ PC bằng lệnh với cú pháp. Txyzt#: trong đó xyzt là thời gian tính theo hệ [...]...
- Matlab001: Kỹ thuật lập trình Matlab căn bản Homepage: http://hocdelam.com/home/index.php Chào các bạn. Hiện nay bọn mình đang tổ chức một số khóa học miễn phí dành cho mọi người tại http://hocdelam.com nên mình copy một số bài học sang đây để các bạn biết và đăng ký. Mọi ý kiến đóng góp xin gửi về: supports@hocdelam.com Tải bài giảng tóm tắt về [...]...
- Tạo file .exe trong Matlab dùng Matlab Compiler Có nhiều bạn khá băn khoăn về việc dịch một ứng dụng trong Matlab ra file .exe để chạy độc lập trên các máy không cài Matlab đúng không ?? Hay là cách để đóng gói sản phẩm của mình thì nên làm thế nào ? Để có thể dịch ra file .exe yêu cầu [...]...
- Vẽ đồ thị trong Matlab Mình đang làm đồ án về đề tài giao tiếp máy tính và vđk qua công com, mình có 1 thắc mắc mong được các bạn chỉ giáo: khi dữ liệu được truyền vào máy tính thì có sự kiện BytesAvailable, mình viết hàm serial_Callback() để đọc dữ liệu này như sau: function serial_CallBack(obj,event) inval=fread(obj,1); [...]...
- Demo sử dụng RTAI, ComediLib kết hợp với Matlab/Simulink/RTW Sau khi tốn một thời gian config linh tinh với Ubuntu 8.04 cuối cùng cài đặt xong RTAI và ComediLib nhân diện được xong cái PCI6220 của NI. Đến phần cài cái trình để biên dịch mô hình thành mã C thì thằng Scilab/Scicos chạy tốn quá nhiều CPU, move 1 cái mô hình là [...]...








{ 47 comments… read them below or add one }
em da doc bai veit nay cua anh va lam theo huong dan nhung ma van khong duoc. Khi chay xong phan mo phong tren scope paramaters phan variable name ko co scopedata ma chi co scope thui. Khi dung em da thay lenh co scopedata bang scope. thu rat nhieu cach van ko duoc em ko hieu tai sao lai vay ca? anh co the giup em duoc ko? neu duoc xin hay lien lac qua email: happylife.huyen@gmail.com. Em cam on anh rat nhieu.
Em report lỗi lên anh xem thế nào nhé. Còn cái tên scopedata và scope là do em đặt mà. Mặc định nó có tên là Scope thì phải, em xem lại nhé.
Chúc em thành công.
Cám ơn anh Bắc, em đã làm và kết quả rất đẹp. Tuy nhiên khi đem hình đó in ra thì nó rất mờ vì nét nhỏ quả. Em phải copy cái figure vào paint thì nó Ok ngay nhưng một số chỗ hình hơi bị vỡ
Anh xem giúp em xem nên làm thế nào?
Cảm ơn anh
ực, cái đó đã ra figure rồi thì em chỉnh cho các đường của đồ thị đậm nét lên là được mà. Khi em chụp hình thì co cái hình đúng khuân mà em muốn chụp rồi hãy chụp. In ra ngọt ngào ngay. Anh đảm bảo đó.
Chúc em thành công.
anh Bắc ah! sao em làm giống như cái anh chỉ rồi nhưng nó chỉ hiện cái fugure ra chứ ko có hình ảnh cái đồ thị em muốn lấy. nó báo lỗi là :
“?? >>plot(ScopeData1.time,ScopeData1.signals.values);
Error: Missing variable or function.”
anh trả lời sớm giúp em với!
@Huedtvt: Em nhìn trong workspace xem có cái biến ScopeData1 không nhé, nó là biến có tên giống trong setup cái Scope của em đó.
Chúc em thành công.
có anh ah!trong workspace có 3 biến ScopeData, ScopeData1, và ScopeData2. vì em dùng 3 scope để xem tín hiệu và em lưu nó vào workspace mà. lúc lưu biến em đổi tên khác cũng ko được. anh đã gặp trường hợp này chưa?
Chào em.
Anh chưa gặp thế bao giờ cả, về nguyên tắc là em có thể đặt bất cứ biến gì miễn là không trùng nhau giữa các scope là được rồi.
Em thử gõ lệnh sau lên command windows xem sao:
>> ScopeData1
Note: Chú ý viết hoa viết thường phải đúng như cái tên trong cái scope của em nhé.
Chúc em thành công.
.-= ngohaibac´s last blog ..Tăng cường bảo mật cho blog wordpress =-.
Anh Bắc à với khối ScopeData thì OK với bài của anh rồi. Đi in cũng tốn ít mực. Nhưng XY Plane thì làm thế nào để Save được thành file ảnh anh nhỉ. Em viết báo cáo mà đến chỗ đó chẳng lẽ lại Print Screen
thế thì mất hết tính chuyên nghiệp (mặc dù mình nghiệp dư
)
Chúc anh mạnh khỏe
.-= trungkstn´s last blog ..Working With Vrml in MatLab =-.
Cái này á, có 2 giải pháp như sau:
- Cho nó ra 2 cái scope, khi đó sẽ có 2 biến nhá. Dựa vào đó mà plot ra thôi, 1 cái là trục x, cái kia là trục y. Chi tiết thì tự ngẫm nghĩ
)
- Dùng khối to workspace cũng thế em ạ
Chúc em thành công.
Em hiều rồi thanks anh nha
.-= trungkstn´s last blog ..Working With Vrml in MatLab =-.
Hj, thanks bạn bắc nhiều về những tài liệu của ban. Mình đang làm về matlab, cậu có thể chỉ cho mình cách truyền số liệu giữa Simulink và guid ko?
Cái đó không hề khó, bạn cần phải biết thực hiện với Simulink bằng các câu lệnh, như câu lệnh nào để thay đổi tham số của các object, lệnh nào để thay đổi tham số chạy simulink, … là xong.
Còn GUI thì chủ yếu là gõ lệnh mà, nên tất cả các lệnh tính toán đều dùng okie cả, không có gì đặc biệt lắm.
Chúc bạn thành công.
Lệnh ĐK simulink? cái này tôi chưa làm bao giờ, anh có thể cho tôi tài liệu hoặc chỉ tôi tìm tài liệu đc ko?
Cái này nằm trong toolbox của Simulink, bạn mở Help ra là hoàn toàn có thể xem được thôi.
tôi tiến hành truyền số liệu như hình trên
out1—–>in2
in1<——out2
Giữa 2 khối subsystem1 và subsystem2 trong Simulink nhưng 2 đường dữ liệu này quá rối, nếu kết nối nhiều hơn 2 khối thì đường đi tín hiệu trở nên rất phức tạp. Bạn cho mình hỏi có cách nào để ghép 2 tín hiệu đó vào cùng 1 Bus ko
Ngoai ra con cach nay nua : trong Command Window go lenh turn on the Scope figure properties:
>shh = get(0,’ShowHiddenHandles’);
set(0,’ShowHiddenHandles’,'On’)
set(gcf,’menubar’,'figure’)
set(gcf,’CloseRequestFcn’,'closereq’)
set(gcf,’DefaultLineClipping’,'Off’)
set(0,’ShowHiddenHandles’,shh)
chao ca nha
hom nay tui lang thag tren mang va biet ve matlab
tui dag down ve voc thu sao
nhung tui thay phan mem nay co ve nang day
hon 3G lun
chac cai vao may nang lam nhi
con van de hoc no ?
tui khong biet phai bat dau tu dau
vay ai da tung di truoc xin chi giao lai it kinh nghiem
va noi them tui hoc ben co khi vay tui dung phan mem nay sao cho hieu qua cho cong viec cua tui sau nay(mac du chua biet sau nay lam gi nua)
cam on rat nhieu
3G là bình thường mà bạn. Một đĩa DVD của Matlab giờ là hơn 4G rồi
. Bạn cứ cài đặt vào và thực hiện theo các hướng dẫn ở trong Help là làm được mà bạn.
Chúc bạn thành công.
Xin anh Ngo Hai Bac huong dan cách sử dụng khối From Workspace lấy tín hiệu từ Workspace đưa vào simulink.
Tôi đã thử dùng khối To Workspce để đưa tín hiệu từ khối Sine Wave vào Workspace với tên là SIN (cho sơ đồ này chạy trước để tạo biến SIN)
Sau đó dùng khối From Wokspace với tên là SIN để lấy tín hiệu từ biến SIN trong Workspace đưa vào simulink cho hiển thị ra Scope, nhưng cứ bị lỗi :
Invalid setting for parameter ‘Interpolate’ in ‘WORKSPACE_VAO/From Workspace’. When time field is not specified in ‘VariableName’ parameter, interpolation has to be turned off and the extrapolation option cannot be chosen for forming the output after the final data value.
Loay hoay với cái thông báo lỗi này mãi rồi cũng không được, nên phải theo chân Google vào được đây, nên nhờ anh xem giúp. Chắc phiền anh quá, mong thông cảm !
He, ổn rồi !
Dùng cái Scope xuất số liệu ra Workspace như thủ thuật trên đây của anh N.H.Bac thì OK,
Đối chiếu lại thì thấy:
Hoá ra bị lỗi ở cái To Workspace, mặc định nó chỉ xuất struct mang số liệu, time để rỗng.
Cái From Workspace thì yêu cầu phải có time, nên không xài được cái struct đó, lỗi.
Thank nhiều!
Thế là ổn rồi em, tự mình tìm ra câu trả lời thì sẽ hiểu vấn đề rất tốt và sâu đó em.
Chúc em thành công.
Minh sơn có địa chỉ email mình hởi thêm về các khối Workspace? bạn làm mãi không dc. email của mình: vumicrotek@gmail.com. Thank cậu trước nha.
Anh Bắc ơi, có thể chỉ cho em cách sử dụng khối from workspace trong simulink được không. em đang cần mô phỏng với tín hiệu đặt tính toán từ workspace
Em sử dụng scope trong simulink mô phỏng ra được một dạng sóng. Bây giờ em cần phân tích dạng sóng này dưới dạng FFT. Mong nhận đuợc sự giúp đỡ của anh.
cảm ơn anh nhiều
__________
>|in1 out1|>
| Subsystem |
>|in2 out2|>
|________ _|
hình 1
__________
<|out1 in1||in2 out2|>
|________ _|
hình 2
khi sử dụng Creat Subsystem của Simulink chương trình chạy mặc định như hình 1. bây giờ em muốn chuyển sang hình 2 thì phải l như thế nào. Anh giúp tôi với. Thanks
Chào em.
Nhìn hình của em anh chưa hiểu vấn đề nằm ở đâu cả, em chụp cái hình rồi up lên host chia sẻ ảnh nào đó đi em.
Chúc em thành công.
[IMG]http://i424.photobucket.com/albums/pp325/digan/SubSystem.jpg[/IMG]
khi sử dụng Creat Subsystem của Simulink chương trình chạy mặc định như hình 1. bây giờ em muốn chuyển sang hình 2 thì phải l như thế nào. Anh giúp tôi với. Thanks
Chào bạn.
Theo mình biết thì Simulink không có chức năng đổi chân như thế cho bạn đâu. Mặc định của nó là các đầu input cho vào 1 bên, các đầu output cho vào 1 bên. Không biết đó có phải 1 điểm yếu của Simulink hay không, nhưng trong nhiều chương trình mô phỏng cũng không hỗ trợ chức năng này.
Chúc bạn thành công.
http://s424.photobucket.com/albums/pp325/digan/?action=view¤t=SubSystem.jpg
khi sử dụng Creat Subsystem của Simulink chương trình chạy mặc định như hình 1. bây giờ em muốn chuyển sang hình 2 thì phải l như thế nào, giúp mình với nha, mình đang cần gấp quá
Anh à dạo em có đóng góp thế này.
Với Matlab 2009 (em dùng bản R2009b) thì
>>plot(ScopeData.time, ScopeData.signals.values);
Được chuyển thành
>>plot(ScopeData.time,ScopeData.signals.values(:));
Thank Trung,
Mấy nay chắc em bận rộn k thấy comment blog anh :p. Bản Matlab R2009b anh chưa có thử qua nên không rõ, anh sẽ bổ sung thêm vào bài viết cho hợp lý.
Chúc em thành công.
Tôi muốn tính giá trị trung bình dữ liệu trên đồ thị của scope trong một khoảng nhất định, ví dụ tính trung bình dữ liệu thu được trên scope từ giây thứ 2 đến giây thứ 3. Anh có kinh nghiệm gì không ah.
Dựa vào vector time để lấy phần đồ thị muốn plot thôi bạn.
ScopeData.timelà toàn bộ thời gian đo, dựa vào đó lấy phần dữ liệu cần hiển thị thôi, nhưng cần xem là phân thử thứ bao nhiêu để plot, như:ScopeData.time(10:100)Chúc bạn thành công.
Anh cho em hỏi: em dùng lệnh “plot(ScopeData.time,ScopeData.signals.values(:)); ” để vẽ nhưng giá trị time và signals có kích thước khác nhau ( ScopeData =
time: [51x1 double]
signals: [1x1 struct]
blockName: ‘coexistence/Scope’).
em phải làm thế nào được ?
Xin lỗi, em hỏi ngốc quá. Scope có tới 3 biến trong khi em chỉ nhập vào 1 nên nó không biết vẽ cái nào ^^. Sr lần nữa vì làm phiền anh.
Không vấn đề gì em. Em làm thế là được rồi đó
Chúc em thành công.
Anh có thể chỉ giúp cách sử dụng khối to/from workspace. Tôi muốn gửi số liệu vào workspace sau đó lấy ra để xử lý. cảm ơn anh.
Anh có thể chỉ cho em cách lấy 2 điểm trên đồ thị và xác định khoảng cách giữa 2 điểm này như thế nào đc ko.Ví dụ như em vẽ đáp ứng của một bộ điều khiển và cần xác định thời gian( trục hoành) giữa 2 điểm trên đồ thị thì phải làm thế nào.Anh giúp em với nhé.Cảm ơn anh nhiều.
Thời gian giữa 2 điểm trên trục hoành thì em lấy trường time trong biến đó là được mà.
Chào anh Bắc!!
Trong khối Scope , em cho hai khung nhìn trên một Scope (trong mục number of axes = 2 ), áp dụng >>plot(ScopeData.time, ScopeData.signals.values); thì không vẽ được. có cách nào để vẽ cho trường hợp này không anh. Mong hồi âm của anh. Chúc anh sức khỏe và công việc tốt!!
cho minh hoi mun lay phan do thi >o thi lam the nao?la lay phan truc tung>0,truc hoanh >0 chi lay phan tu goc (0;0) thoi,thanks nhiu
chao anh Bac!
em co mot van de thac mat can anh giai dap dum`
g=1.4;
m=;
l=20:0.01:90;
p=l*pi/180
d=atan(2*(m^2*sin(p).^2-1)./tan(p)./(2+m^2*(g+cos(2*p))))*180/pi;
plot(d,l)
cai code nay` em muon’ cho gia trị m chạy để vẽ đồ thị hàm d(p) vậy em phải làm sao?
Chao Anh Hai Bac, em co tai lieu mo phong matlab khoi nhu so do, nhung e khong biet khoi “FLUX” nam o dau trong Matlab, nho bac giup em voi. Co hinh anh kem theo.Cam on bac nhieu. Chao bac!
http://profile.imageshack.us/user/nguyenkha79/
em dùng matlab 2007a và làm theo cách của anh nhưng trên worrkspace k hiện ra tên biến là ScopeData,a giúp em với nhé
a bac oi cho em hoi: từ biểu đồ có sẵn m dùng lệnh gì trong matlab để lấy được ảnh tương ứng của nó ạ,jay là mình phải viết hàm a.e tk a nhiu nhiu
anh bắc ơi cho em hỏi làm sao để simulink lấy dữ liệu từ excel.
em cảm ơn anh nhìu.