Thông báo

Collapse
No announcement yet.

Lập trình GUI trong Matlab

Collapse
This is a sticky topic.
X
X
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • techpro
    replied
    Ủng hộ topic của bạn. Vấn đề rất hữu ich, thay vì nghiên cứu VB khá mất thời gian làm quen tôi cũng đã xây dựng một giao diện GUI trên Matlab mô phỏng các bài toán và thực hiện truyền thông với CHIP qua cổng COM nhưng chưa biết đến khả năng dịch thành file *.exe của Matlab, giờ được các bạn chỉ bảo thật là hay!

    Leave a comment:


  • ngohaibac
    replied
    Chào bạn.

    Trong Matlab mình chưa làm giao tiếp với cổng LPT bạn ạ. Nếu được bạn có thể cho mình xem Project của bạn được không? Mình cùng trao đổi nhé.

    Theo mình nghĩ nếu muốn truyền tốc độ cao mình có thể dùng các ngôn ngữ khác như C, C++, VC++ và dùng thư viện inoutport32.dll để giao tiếp rất đơn giản bạn ạ.

    Chúc bạn thành công.

    Leave a comment:


  • levuhai
    replied
    Điều khiển qua cổng LPT

    Mình sử dụng Matlap để xuất tín hiệu qua cổng LPT, nhưng tần số rất thấp vì dùng hàm Pause(0.01). Bạn có cách nào khác để có thể xuất tín hiệu qua cổng LPT với tần số cao không? Cám cơn nhiều!

    Leave a comment:


  • thuylt
    replied
    "Cho mình xin it tài liệu được ko?"

    Mình đang làm thực tập với MATLAB để lập trình các bài toán tối ưu, mình chưa sử dụng học MATLAB bây giờ mới bắt đầu. Mình đã đọc qua một số lệnh trong MATLAB. Nhưng không có nhiều về thiết kế giao diện.
    Pác nó có bài nào về giao diện rùi thì cho em xin dc ko để em tham khảo?
    Nếu có thì gửi qua mail cho em sau: thuylt.ictu@gmail.com.
    Em dang cần gấp!!!!!!!!!!
    Mong các Pác giúp đỡ!!!!!!
    Cảm ơn các Pác trước nhé!

    Leave a comment:


  • CNT
    replied
    Latex

    nếu muốn tìm hiểu về việc viết Latex trong Matlab thì trong Matlab Help
    bạn có thể search Text Properties

    Hình như không thể viết Latex Trên sơ đồ Simulink thf phải

    Leave a comment:


  • ngohaibac
    replied
    Chào các bạn. Việc viết các công thức Latex trong Matlab là có thể thực hiện được.

    Mình xin trích bài viết của anh Thevane:
    Với các đối tượng đồ họa trong Matlab ta có thể nhúng các công thức toán với mã Latex. Đoạn công thức phải đặt trong dấu $công thức Latex$ và dùng lệnh set(h,'Interpreter','latex') để thiết lập công thức Latex cho đối tượng text h.

    Ví dụ: Giả sử ta đã có một đối tượng Workspace có tên là omega và dùng các lệnh sau để vẽ đồ thị

    <br> plot(omega.time,omega.signals.values(:,1),'b-');<br> grid on;<br> title('Rotor angular speed');<br> xlabel('Time');<br> ylabel('rad/s');<br> h = legend('$\frac{J}{p}\frac{d\omega}{dt} = T_e-T_L$',4);<br> set(h,'Interpreter','latex') <br>

    Kết quả là


    Anh thevane trong dieukhien.net đã nói đến điều này và nó có ở trong Help của Matlab. Chi tiết tại địa chỉ sau:
    http://www.dieukhien.net/vn/discuss.php?thid=111


    Thuộc tính của nó tại địa chỉ:
    http://www.dieukhien.net/vn/index.ph...d=217&arid=558

    Các bạn hãy thực hành theo site này nhé và giới thiệu cùng mọi người.
    Chúc các bạn thành công.

    Leave a comment:


  • thanhtuandkh
    replied
    linh vuc nay rat hay minh cung dnag hoc ....

    Leave a comment:


  • ngohaibac
    replied
    Mình đã từng thử nhiều cách để link các form với nhau nhưng thấy có thể dùng các cách sau: lưu dữ liệu vào một file .mat và dùng các lệnh load, save để lấy dữ liệu và lưu dữ liệu vào. Như thế các form có thể dùng chung một dữ liệu. Nhưng nếu dữ liệu của form sau được sử dụng của form trước thì có thể là khi form sau chạy xong và biến mất thì ta mới nên cho form trước active và khi đó nên có biện pháp cập nhật dữ liệu vào như là thêm nút Update có tác dụng lây dữ liệu vào chẳng hạn. Khi nào nhớ ra cách nào khác mình sẽ post sau.

    Còn example code thì tớ k còn trong máy rùi. Bạn lên site mathworks.com xem nhé.

    Còn viết chữ Latex vào trong Simulink thì mình chưa nghiên cứu bạn ạ nên mình không biêt.

    Chúc các bạn thành công.

    Leave a comment:


  • CNT
    replied
    Nguyên văn bởi ngohaibac Xem bài viết
    Chào bạn, việc tạo nhiều form trong GUI thì rất đơn giản mà. Mình đã làm cái này tức là giống trong Simulink chọn Setting cho chương trình ControlDCMotor, nhưng viết xong rùi bị virus xoá hết cả ổ nên không còn gì cả , chưa có thời gian làm lại vì làm cái này hơi mất thời gian.

    Bạn có thể thấy việc làm 2 form thông qua ấn nút close trong chương trình ControlDCMotor đó bạn. Việc dùng nhiều form khi lập trình thì vấn đề cần quan tâm là việc trao đổi dữ liệu giữa các form với nhau phải thông qua workspace (mình đã dùng nhiều cách rùi nhưng thấy đây là cách hiệu quả nhất) qua lệnh loadsave vào file .mat.

    Có thời gian mình sẽ viết bài cụ thể về vấn đề này.

    Chúc các bạn thành công.
    chào Bắc
    cám ơn vì bài viết của bạn
    theo bạn thì có những cách nào để link các fig với nhau và ưu nhược điểm mỗi cách thế nào?
    nếu có example code thì càng tốt

    à Bắc cho tớ hỏi có cách nào viết chữ dạng Latex (VD alpha beta ...) lên mô hình Simulinhk(vd lên transfer function) không?

    Leave a comment:


  • ngohaibac
    replied
    Chào bạn, việc tạo nhiều form trong GUI thì rất đơn giản mà. Mình đã làm cái này tức là giống trong Simulink chọn Setting cho chương trình ControlDCMotor, nhưng viết xong rùi bị virus xoá hết cả ổ nên không còn gì cả , chưa có thời gian làm lại vì làm cái này hơi mất thời gian.

    Bạn có thể thấy việc làm 2 form thông qua ấn nút close trong chương trình ControlDCMotor đó bạn. Việc dùng nhiều form khi lập trình thì vấn đề cần quan tâm là việc trao đổi dữ liệu giữa các form với nhau phải thông qua workspace (mình đã dùng nhiều cách rùi nhưng thấy đây là cách hiệu quả nhất) qua lệnh loadsave vào file .mat.

    Có thời gian mình sẽ viết bài cụ thể về vấn đề này.

    Chúc các bạn thành công.

    Leave a comment:


  • CNT
    replied
    Form...?

    tại sao không thấy ai viết về việc tạo nhiều Form (Figure) trong GUI nhỉ?
    nếu một dự án mà chỉ có 1 form thì khả năng sử dụng giới hạn quá
    xin các bác cho ý kiến

    Leave a comment:


  • ITpro
    replied
    Bác nhắp luôn vào cái file down về để chạy thì nó sẽ báo lỗi thế đấy , bác hãy mở cửa sổ matlab ra chạy lệnh guide sau đó mởi file .fig là file bác down về nếu chạy được thì ok

    Leave a comment:


  • badboybig
    replied
    mình đang làm về tín hiệu DTMF, đây là đoạn code mình kiếm được
    nhưng khi mình thực hiện thì nó báo lỗi như sau:
    ??? Undefined function or variable 'cheby1'.

    Error in ==> C:\Documents and Settings\mummy\Desktop\DTMFdecoder\subdecode.m
    On line 10 ==> [b,a]=cheby1(cn,cr,cl);

    Error in ==> C:\Documents and Settings\mummy\Desktop\DTMFdecoder\decode.m (b1_Callback)
    On line 88 ==> subdecode;

    Error in ==> C:\MATLAB6p5\toolbox\matlab\uitools\gui_mainfcn.m
    On line 66 ==> feval(varargin{:});

    Error in ==> C:\Documents and Settings\mummy\Desktop\DTMFdecoder\decode.m
    On line 42 ==> gui_mainfcn(gui_State, varargin{:});

    ??? Error while evaluating uicontrol Callback.
    bạn nào chỉ giúp với thanks
    mình dùng matlab 6.5

    Leave a comment:


  • loveoflife
    replied
    Hôm nay vừa đi liên hoan kết thúc học kì về, dù vẫn hơi drunk nhưng thấy mọi người sôi nổi quá nên cũng mạo muội viết đôi dòng. Ngày mai tỉnh táo sẽ xem lại xem có viết gì sai không

    Về vấn đề dịch chương trình Matlab hay mô hình Simulink ra executable module (chương trình độc lập, COM, Realtime Workshop, xPC,...) thì quan điểm của tôi như sau: chỉ hữu ích trong 1 số ứng dụng hạn chế, chủ yếu là để experiment, test,..., do vậy không thực sự đáng để bỏ công nghiên cứu nhiều. Điều này có thể làm các bạn hơi cụt hứng, tuy nhiên đây chỉ là quan điểm cá nhân của tôi thôi.

    Trước hết ta thử nghĩ xem khi nào cần dịch ra executable module:
    • Khi cần sử dụng một đoạn mã Matlab hay một thuật toán đã phát triển với Matlab trong một phần mềm khác độc lập với Matlab, ví dụ như các phần mềm (thương mại) phục vụ thiết kế, tính toán, xử lý (ảnh, số liệu)...
    • Khi cần thực hiện (implement) các hệ thống thực (theo mô hình đã xây dựng trong Matlab/Simulink). Các hệ thống kiểu này thường là các hệ thống nhúng (embedded systems), hệ thống thời gian thực (real-time systems),...


    Bây giờ thử phân tích kĩ hơn 1 chút về từng nhu cầu trên.

    Về nhu cầu thứ nhất, thường chúng ta cần sử dụng mã/thuật toán đã xây dựng trên Matlab trong một phần mềm khác, nghĩa là phần mã Matlab đó chỉ là một phần nhỏ mà thôi. Các phần mềm này thường được phát triển bằng 1 ngôn ngữ khác như C, C++, Java, C# (theo quan sát của tôi, Java được sử dụng rất phổ biến trong các trường ĐH Mỹ). Dù Matlab cho phép phát triển ứng dụng với GUI, cũng có I/O, interact với users,... nhưng hiện tại vẫn không thể so sánh được với các ngôn ngữ lập trình kể trên. Vì vậy việc dịch chương trình Matlab ra stand-alone apps, theo tôi, hầu như chẳng để làm gì. Khẳng định luôn là việc làm này không giúp cho chương trình viết trên Matlab chạy nhanh hơn 1 cách đáng kể (không ít người nghĩ như vậy vì cho rằng machine code sẽ chạy nhanh hơn nhiều so với Matlab script). Muốn sử dụng được mã Matlab trong các chương trình viết bằng ngôn ngữ khác thì cần phải hoặc là dịch được sang thư viện lập trình (lib, dll) hoặc là dịch sang các component (COM). Có lẽ đó là lí do vì sao trong các phiên bản Matlab gần đây đã đưa thêm COM Builder (tôi đoán bừa là mcc không thực sự hữu ích & không được dùng nhiều trước khi có COM Builder). Tôi không cài COM Builder nên không rõ khả năng của nó đến đâu.

    Về nhu cầu thứ 2, theo tôi thì Real-time workshop & xPC mặc dù rất tiện lợi (dịch thẳng từ Simulink model sang embedded software thông qua C) nhưng tôi nghĩ rằng nó chỉ phù hợp với các ứng dụng đơn giản (embedded software trên PC) & các tests, experiments. Nếu để lập trình cho embedded systems, đặc biệt là các (hard) real-time systems, thì người ta vẫn dùng trực tiếp các ngôn ngữ lập trình chuyên dụng như ADA (Bộ QP Mỹ), Giotto, ESTEREL, LUSTRE,... hay ít ra là C. Người ta cũng quan tâm nhiều đến vấn đề architecture đối với real-time systems hơn là việc dùng ngôn ngữ cụ thể nào. Tất nhiên những ngôn ngữ chuyên dụng kể trên sẽ hỗ trợ trực tiếp & tốt hơn cho các architecture đó. Điều này đặc biệt đúng trong các ứng dụng đòi hỏi độ an toàn cao, ví dụ như trong máy bay, tàu cao tốc, tàu vũ trụ. Sau 1 thời gian tìm hiểu RTW & xPC của Matlab, tôi thấy không thực sự cần lắm nên không cài nữa, vì vậy cũng không rõ bây giờ đã phát triển đến mức nào. Nhưng tôi nghĩ rằng hiện tại nó vẫn chỉ thích hợp cho experiment & test là chính. Và tôi cũng không thực sự rõ lắm về architecture của real-time systems tạo ra từ Simulink RTW & xPC.

    Thêm 1 ý nhỏ là tôi thấy việc dùng Matlab Compiler khá đơn giản, đọc kĩ help 1 chút là có thể làm ngon lành.

    Tóm lại quan điểm của tôi là chẳng cần bỏ nhiều thời gian vào Matlab compiler làm gì. Chỉ cần biết 1 chút xíu để khi cần dùng thì biết làm thế nào hoặc tìm help ở đâu. Việc tìm hiểu kĩ hơn về các toolbox, các hàm, cách lập trình Matlab (kĩ năng vectorization,...) theo tôi là quan trọng hơn.

    P.S: tôi nhìn từ góc độ academic & research nhiều hơn là industry, nên có thể không chính xác lắm. Có ai biết liệu trong thực tế, khi implement (không phải test) các hệ thống điều khiển (real-time) cho các thiết bị như ô tô, tàu, máy bay, đặc biệt là ở các phần critical, người ta có thiết kế trên Simulink hoặc các phần mềm tương tự rồi compile thẳng ra software hay không? Tôi thấy ở Mỹ có nhiều project về chuyển tự động các mô hình sang real-time software code, hoặc xây dựng các ngôn ngữ lập trình chuyên dụng, nhưng nếu thực tế người ta đã toàn dùng Simulink & RTW thì mấy cái project đó xem chừng hơi bị lãng phí. Một điều thú vị tôi mới phát hiện ra là 1 giáo sư ở chỗ tôi, là chair của group chuyên về real-time embedded software của IEEE, không hề biết 1 chút gì về Simulink, thậm chí mới chỉ biết là có 1 cái tên gọi là Simulink chứ chưa hề dùng bao giờ.

    Leave a comment:


  • ngohaibac
    replied
    Em xin tiếp tục chủ đề này.

    Các bạn nên nhớ file ex1.m chỉ như là một ví dụ khi dịch có warning thì bạn cứ bỏ qua nha, chưa cần quan tâm mà chỉ quan tâm đến cách thức đã còn chi tiết bàn sau.

    2/ Dịch để tạo ra thư viện từ M file ex1.m chúng ta dùng lệnh sau:
    Code:
    >>mcc -l ex1.m
    Khi đó trình biên dịch sẽ tạo ra các file sau:
    • ex1.c
    • ex1.h
    • ex1.dll
    • ex1.lib
    • ex1_main.c
    • ex1_mcc_component_data.c
    • ex1.ctf


    Để có thể test được các component bạn phải copy thư mục <thư mục cài Matlab7>\bin\win32 vào thư mục có chứa thư viện liên kết động của bạn

    Để triển khai được các ứng dụng của bạn trong các máy PC mà không cài Matlab có version giống với máy phát triên các component đó thì bạn đóng gói các component đó và thiết lập trên máy đó như sau:
    • Cài đặt MATLAB Component Runtime(MCR) bằng cách copy file MCRInstaller.exe trong thư mục <thư mục cài Matlab>\toolbox\compiler\deploy\win32 vào một thư mục và cài file đó.
    • Copy component đó và file .ctf của trong list file vừa được tạo vào một thư mục nào đó ví dụ: C:\approot. Rồi bạn copy thư mục <ổ cài đặt>:\Program Files\MathWorks\MATLAB Component Runtime\v70\bin\win32vào trong thư mục đó. Rồi test ứng dụng.


    Bây giờ em xin dừng bút, tắt máy ôn thi tí đã không có điểm kém quá mama mắng chết.

    Chúc mọi người thành công.

    Leave a comment:

Về tác giả

Collapse

ngohaibac Tìm hiểu thêm về ngohaibac

Bài viết mới nhất

Collapse

Đang tải...
X