(Đỗ 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!
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!
Comment