Thông báo

Collapse
No announcement yet.

[LabVIEW] Hiển thị Multiplot trên Chart của LabVIEW sử dụng mảng 2 chiều

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • [LabVIEW] Hiển thị Multiplot trên Chart của LabVIEW sử dụng mảng 2 chiều

    (Đỗ Trung Hiếu Cyberlab JSC.)
    Trong nhiều bài toán đo lường, điều khiển, thu thập và hiển thị dữ liệu, ta hay gặp những yêu cầu về việc hiển thị cùng lúc nhiều biến trên 1 đồ thị thời gian, trong đó chương trình cần phải có thể thêm, bớt số biến biểu diễn ngay trong khi chương trình đang chạy.
    Một đồ thị như thế ta gọi là một Multiplot Chart. Trong LabVIEW có 2 cách để biểu diễn 1 Multiplot chart : Một cách sử dụng Cluster, cách thứ 2 sử dụng 2D Array (mảng 2 chiều).

    Cách thứ nhất : Sử dụng Cluster
    Để biểu diễn nhiều biến trong 1 Chart, ta gom các biến đó vào trong 1 Cluster (bó dữ liệu), rồi đưa vào Chart đó. Chart sẽ biểu diễn các biến trong Cluster dưới dạng các đường (plot) riêng biệt và có màu riêng biệt. Xem ví dụ:

    Trong phương pháp này, ta sử dụng khối Cluster, Class, Variant Palette >> Bundle để gom các biến cần hiển thị vào 1 Cluster, và truyền Cluster vào Chart.
    Đây là phương pháp nhanh và đơn giản nhất để gom các biến vào 1 Chart để hiển thị. Tuy nhiên, các nhược điểm của phương pháp này là:
    • Số lượng biến được hiển thị có giới hạn(tôi chưa thử xem số lượng tối đa là bao nhiêu nhưng có lẽ không quá 10 biến)
    • Không thể thêm, bớt 1 biến được hiển thị trong khi chương trình đang chạy, vì phép gom các biến là do chương trình ban đầu, không thể thay đôi chương trình khi chương trình đang chạy.
    Do đó cần dùng đến phương pháp thứ 2.

    Cách thứ 2: sử dụng mảng 2 chiều (2D Array)
    Trong cách này, ta gom các biến cần hiển thị vào 1 mảng 1 chiều sử dụng khối Build Array, sau đó biến nó thành 1 mảng 2 chiều cũng sử dụng khối Build Array. Xem ví dụ dưới.

    Ta chú ý là 2 khối Build Array và Build 2D Array thực chất chỉ là 1 hàm trong Array >> Build Array, tuy với số đầu vào khác nhau.
    Với đầu vào là 2 biến, sử dụng Build Array ta được 1 mảng 1 chiều. Với đầu vào là 1 mảng, sử dụng Build Array ta được 1 mảng 2 chiều. Nối mảng 2 chiều này vào Chart, ta được đồ thị của 2 biến dưới dạng 2 plot khác nhau.

    Với cách thứ 2 này, ta có thể dễ dàng thêm bớt các biến vào 1 mảng để hiển thị ngay trong khi chương trình đang hoạt động. Điều này có thể thực hiện với các phép toán với mảng.

    Sau đây là ví dụ:
    Viết chương trình tạo 10 biến ngẫu nhiên khác nhau, và hiển thị các biến đó trong 1 Chart duy nhất bằng cách lựa chọn các biến được hiển thị. Việc lựa chọn có thể thực hiện trong khi chương trình đang chạy.
    Bài giải :
    Trước tiên, ta cần thực hiện tạo tin hiệu giả lập ngẫu nhiên.
    Việc này có thể thực hiện rất dễ dàng chỉ bằng 1 vòng lặp For, với 10 vòng lặp, mỗi vòng lặp tạo 1 tín hiệu ngẫu nhiên. Các tín hiệu này sẽ được cộng với biến đếm vòng lặp để tách các biến cần hiển thị ra cho dễ theo dõi (nếu không chung sẽ chập vào nhau rất khó theo dõi). Kết quả đầu ra của vòng lặp FOR là 1 mảng 10 phần tử các biến giả lập (chưa được hiển thị)

    Để lựa chọn các biến cần hiển thị, ta sử dụng một dãy các đèn Led. Chú ý là ban đầu khi tạo các đèn Led, mặc định chúng là các Indicator (Biến hiển thị). Tuy nhiên ta sẽ cần chúng là các Control để thể hiện lựa chọn của người điều khiển. Điều này thực hiện đơn giản bằng cách Click chuột phải chọn « Change to Control »

    Ta gom các biến Logic này vào 1 mảng sử dụng khối Build Array.
    Cuối cùng để lựa chọn thêm hoặc bớt các biến vừa tạo vào 1 mảng hiển thị, ta dùng 1 vòng lặp FOR duyệt từng biến logic vừa tạo ở trên.
    Sử dụng Shift Register với đầu vào là 1 mảng trống, ta tạo ra 1 mảng hiển thị. Mỗi khi 1 vòng lặp FOR xảy ra, ta sẽ quyết định có thêm hoặc không thêm biến đang duyệt vào mảng hiển thị hay không, bằng cách kiểm tra giá trị (true hay false) của « Plot n » đang được duyệt.
    Nếu « Plot n » = True, ta thêm biến vào mảng hiển thị.

    Nếu « Plot n » có giá trị False, ta không thêm biến được duyệt vào mảng hiển thị.

    Cuối cùng sử dụng khối Buld Array để chuyển mảng hiển thị 1 chiều, sang mảng hiển thị 2 chiều như trong ví dụ trước, và đưa vào Chart.
    Chạy chương trình, ấn vào các đèn LED để thêm hoặc không thêm biến vào mảng hiển thị, ta sẽ thấy kết quả như ý muốn.


    Ấn vào các đèn LED để thêm hoặc bớt biến được hiển thị.
    Với phương pháp trên, ta có thể thêm rất nhiều biến hiển thị vào 1 Chart ngay khi chương trình đang chạy. Tôi đã từng viết phần mềm tương tự hiển thị tín hiệu điện tim, với số lượng Plot lên tới 24 biến. Số lượng tối đa các biến vẫn chưa được kiểm nghiệm. Các bạn thử tự làm nhé.
    Đây là 1 ví dụ khá thú vị về việc lập trình sử dụng các hàm với vòng lặp FOR, Mảng và Case Structure.
    Chương trình có thể down tại đây:
    multiplot_chart.vi
    Chúc các bạn thành công trong công việc và nghiên cứu!
    Công Ty Cổ phần thương mại và Công nghệ Tự động hóa Cyberlab

    Simplify your life!

  • #2
    Một ví dụ tuyệt vời ông mặt trời cho mảng hai chiều và một chiều!
    Nhưng đoạn này em thấy chưa có ổn lắm
    Nguyên văn bởi setwon Xem bài viết
    (Đỗ Trung Hiếu Cyberlab JSC.)
    .....
    Cách thứ nhất : Sử dụng Cluster
    Để biểu diễn nhiều biến trong 1 Chart, ta gom các biến đó vào trong 1 Cluster (bó dữ liệu), rồi đưa vào Chart đó. Chart sẽ biểu diễn các biến trong Cluster dưới dạng các đường (plot) riêng biệt và có màu riêng biệt. Xem ví dụ:

    Trong phương pháp này, ta sử dụng khối Cluster, Class, Variant Palette >> Bundle để gom các biến cần hiển thị vào 1 Cluster, và truyền Cluster vào Chart.
    Đây là phương pháp nhanh và đơn giản nhất để gom các biến vào 1 Chart để hiển thị. Tuy nhiên, các nhược điểm của phương pháp này là:
    • Số lượng biến được hiển thị có giới hạn(tôi chưa thử xem số lượng tối đa là bao nhiêu nhưng có lẽ không quá 10 biến)
    • Không thể thêm, bớt 1 biến được hiển thị trong khi chương trình đang chạy, vì phép gom các biến là do chương trình ban đầu, không thể thay đôi chương trình khi chương trình đang chạy.
    Do đó cần dùng đến phương pháp thứ 2.

    Hai vấn đề này có thể giải quyết rất chi là đơn giản! em đã từng làm với sóng não EEG bằng phương pháp cluter! số lượng kênh hiển thị có thể lên tới 64 kênh và có thể hơn (do em chỉ làm có 64 kênh!),còn ẩn và hiện 1 tín hiệu trong graph thì LabVIEW đã hỗ trợ sẳn tính năng này rồi không cần dùng đến mảng hai chiều.Đến tối em có nhà em sẽ đưa VI mẫu và video cách làm lên để minh họa.

    Comment


    • #3
      Cảm ơn apulaogia2!

      Bạn sớm up giải pháp của bạn lên cho mọi ng học hỏi nhé. Mình cũng muốn mở mang tầm mắt ^^
      Công Ty Cổ phần thương mại và Công nghệ Tự động hóa Cyberlab

      Simplify your life!

      Comment


      • #4
        Chờ bác apulaogia2 up giải pháp!

        Comment


        • #5

          Clip quay sơ xài! anh em xem tạm! VI thì ko biết up lên đây như thế nào

          Comment


          • #6
            Hay quá bác ơi.
            Ngoài lề tý,bác cũng dùng FastStone Caputure ạ? giống em thế!

            Comment


            • #7
              Cảm ơn Apulaogia2.

              Nhờ comment của Apulaogia2 mình đã tự tìm hiểu và hóa ra đúng là có 1 cách khác ngắn gọn hơn nhiều để ẩn hiện các plot trong multiplot chart của LabVIEW sử dụng cluster. Và đúng là cách này không bị giới hạn về số plot hiển thị.

              Tuy nhiên khi xem clip của Apulaogia2 thì mình lại thấy cách của bạn lại khác cách mà mình tìm được .

              Mình đã xem kỹ clip bạn gửi và đúng là đây cũng là 1 cách, nhưng có vẻ ta sẽ phải làm 1 vài thao tác trên chart, như click chuột phải, chọn 1 cái gì đó, rồi ẩn 1 plot đi, Mỗi thao tác dài chỉ ẩn được 1 plot, chứ cũng không ẩn 1 hay nhiều plot ngay trên giao diện chương trình.

              Cách của bạn hơi phức tạp đối với người sử dụng - vốn mặc định là không biết nhiều về hệ thống, vì tiêu chí cho các thao tác giao diện HMI chuyên nghiệp cần phải càng đơn giản, nhanh gọn, dễ thực hiện. (tiêu biểu như các thao tác giao diện iphone, rất nhanh, gọn nhẹ, người mới dùng lần đầu chưa được hướng dẫn thậm chí có thể tự tìm ra cách luôn ^^)

              Vì thế nên mình mới đề xuất là cần thực hiện việc ẩn -hiện plot ngay trong giải thuật chương trình, và đưa ra giao diện những thao tác dễ hiểu nhất - ví dụ bằng cách ấn vào một trong các đèn led trên front panel. Trong ví dụ này ta sử dụng một khái niệm mới: "property node" mà mình sẽ trình bày trong những bài giảng sau.

              Mình gửi file chương trình này để các bạn tham khảo. Dù sao cũng nhờ Apulaogia2 gợi ý, mình đã tự tìm ra đc 1 cách mới. Rất cảm ơn bạn .

              Đây là link chương trình

              Chúc các bạn thành công!
              Công Ty Cổ phần thương mại và Công nghệ Tự động hóa Cyberlab

              Simplify your life!

              Comment


              • #8
                Vâng nếu bác thích thiết kế theo kiểu dành cho người dùng ko rành về LV thì dùng property node để tương tác vào tính năng của đối tượng thôi.

                Comment

                Về tác giả

                Collapse

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

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

                Collapse

                Đang tải...
                X