Khái niệm vòng lặp (While loop hoặc For loop) là một trong những khái niệm cơ bản của bất cứ ngôn ngữ lập trình nào. Nhưng có một số vấn đề liên quan đến các vòng lặp mà những người mới lập trình LabVIEW thường không để ý hoặc vô tình mắc phải khiến cho sự hoạt động của chương trình LabVIEW không đạt được mức tối ưu. Một trong những điểm dễ mắc phải là thiếu sử dụng các hàm định cỡ thời gian trong các vòng lặp.
Ví dụ: Hãy thử tạo ra hai chương trình có Block diagram sau đây rồi lần lượt chạy thử chúng. Trong quá trình chạy thử bạn hãy kiểm tra thông tin của trình quản lí bộ vi xử lí (CPU)
Chương trình trên chỉ có một nhiệm vụ đơn giản là tạo ra một vòng lặp while và hiển thị số vòng lặp trong quá trình thực thi. Thế nhưng với phương pháp lập trình này, vòng lặp đã không được thực thi một cách tối ưu nên tài nguyên CPU của máy đã bị khai thác gần như là tối đa. Để ý rằng với một chương trình rất nhỏ và quá đơn giản như vậy nhưng bộ vi xử lí của một máy tính có cấu hình Intel ® Coẻ ™ 2 Duo CPU E750 @ 2.93 GHz 2.94GHz bị sử dụng tới 71% là một điều không thể chấp nhận.
Tại sao?
Trong LabVIEW, thông thường khi kết thúc một vòng lặp, nó ngay lập tức bắt đầu thực thi một vòng lặp tiếp theo. Không có một sự ngừng trệ hay trì hoãn giữa các vòng lặp liên tục. Hay nói đúng ra là hệ thống luôn luôn phải dò xét (polling) xem liệu đã có thể thực thi được vòng lặp tiếp theo hay chưa? Liệu đã kết thúc vòng lặp trước hay chưa? Liệu các giá trị, các tác vụ trong vòng lặp trước đã được cập nhật, hoàn thành.
Điều này dẫn tới việc toàn bộ CPU phải tập trung thực thi ứng dụng của LabVIEW mà không có thời gian và tài nguyên để thực thi các tác vụ khác, nhiều khi dẫn tới máy bị treo. Do đó đối với những ứng dụng vẫn thường gặp của chúng ta thì ta cần phải xác định và kiểm soát tốc độ thực thi vòng lặp của nó, mức độ tần suất thực thi của vòng lặp để CPU có những khoảng thời gian dù nhỏ nhưng rất đáng kể nằm ở trạng thái Idle, Sleep hoặc thực thi các tác vụ khác.
Ví dụ: Nếu bạn muốn truyền dữ liệu trong một vòng lặp, bạn cần một phương pháp xác định tốc độ (Tần số) mà dữ liệu được truyền. Hãy xác định cho vòng lặp được nghỉ trong một khoảng thời gian nào đó. Trong những khoảng thời gian nghỉ đấy, bộ vi xử lí có thể thực thi các nhiệm vụ khác từ các ứng dụng khác. Hãy xem cách cải thiện cho vấn đề trên như sau:
Bạn chỉ việc thêm vào vòng lặp while một hàm Wait (ms) để cho phép vòng lặp đươc nghỉ trong một khoảng thời gian xác định (Đơn vị ms). Đây chính là yếu tố nhằm cải thiện việc sử dụng tài nguyên CPU của máy tính. Bạn cũng có thể thấy điều này trong hầu hết các ví dụ về LabVIEW được tải về trên mạng mà có sử dụng vòng lặp.
Nhân đây cũng nên tìm hiểu qua một vài hàm timing trong LabVIEW. Có hai hàm chờ cơ bản (wait) trong LabVIEW là Wait (ms) và Wait Until Next ms Mutiple.
Hàm Wait (ms) khi đặt trong vòng lặp có tác dụng yêu cầu vòng lặp phải chờ trong một khoảng thời gian xác định trước khi thực thi vòng lặp tiếp theo. Lưu ý đơn vị của giá trị tại đầu vào input hàm wait này là mili giây.
Hàm Wait Until Next ms Multiple có tác dụng tương tự như hàm waite (ms) trong việc yêu cầu vòng lặp phải chờ sau khi kết thúc một vòng lặp. Nhưng có một sự khác biệt trong việc thực thi giữa hai hàm chờ này. CPU được nghỉ sau một khoảng thời gian bằng bội số của giá trị đầu vào.
Lưu ý là hai hàm chờ này không chỉ được sử dụng trong các vòng lặp mà ở bất cứ đâu, bạn cũng có thể sử dụng để yêu cầu một đoạn code, một subVI hay một VI phải chờ trước khi thực thi các tác vụ.
Ngoài ra, có một số hàm về thời gian như sau:
Tick Count Function có tác dụng trả về giá trị thời gian của đồng hộ hệ thống của bạn.
Bên cạnh các hàm thời gian cơ bản ở trên, LabVIEW còn cung cấp hai Express VI về thời gian là Time Delay và Elapsed Time.
Time Delay làm việc như hàm Wait (ms) ngoại trừ rằng thời gian mà nó nhận và trả về là ở đơn vị giây (second)
Elapsed Time cho phép bạn kiểm tra liệu một lượng thời gian nào đó đã trôi qua hay chưa. Khi bạn sử dụng hàm ExpressVI này bạn phải thiết lập khoảng thời gian cần kiểm tra là bao lâu ở ổ Elapsed time và kết quả là tại terminal out put của Time has Elapsed (Boolean) sẽ trả về TRUE nếu lượng thời gian bạn nhập vào đã trôi qua, nếu không thì sẽ giá trị này sẽ FALSE.
Còn nữa…