Ưu điểm của ngôn ngữ lập trình LabVIEW

841
4998
Khoảng 3 đến 4 năm trước đây, trên khắp các diễn đàn kỹ thuật của Việt Nam xuất hiện những bài viết về LabVIEW, mặc dù lúc đó những vấn đề được trao đổi cũng chỉ nằm ở mức độ là trả lời các câu hỏi kiểu như là LabVIEW là gì? Điều đó có nghĩa là cộng đồng kỹ sư, các nhà khoa học và sinh viên Việt Nam đã tiếp xúc và tìm hiều nhiều về LabVIEW ngay từ những thời điểm đó. Thế nên, cũng thật dễ hiểu rằng khi ngày nay LabVIEW đang được giảng dạy trong các trường Đại học trên khắp cả nước như Bách khoa, Khoa học tự nhiên, Sư phạm kỹ thuật, giao thông vận tải, Trà Vinh, Cần Thơ… và vì sao LabVIEW đang được sử dụng trong các công ty như Intel, Metronic, Fujikura…. Thậm chí ông lớn FPTSoft cũng đang xây dựng một đội ngũ kỹ sư chuyên lập trình về LabVIEW. Và mới đây, tháng 12/ 2010, hãng NI (Cha đẻ của LabVIEW ) cũng đã chính thức khai trương văn phòng đại diện tại Việt Nam để thực hiện chiến lược khai thác & chiếm lĩnh thị trường đầy tiềm năng này.
Nhìn lại một chặng đường đã qua để thấy ngôn ngữ lập trình đồ họa này có một sức hút và tiềm lực thật đáng kể. Vậy điều gì đã làm nên sức hấp dẫn đó của LabVIEW?
LabVIEW là một ngôn ngữ lập trình đồ họa trực quan (Graphical Programming)
Tính trực quan của ngôn ngữ này nằm ở chỗ thay vì phải viết những dòng lệnh bằng chữ và số như các ngôn ngữ lập trình truyền thống VB, C, C++…thì các câu lệnh của LabVIEW được lập trình bằng việc kéo thả các Icon và nối dây trong môi trường phát triển mã nguồn. Nhìn vào một đoạn code của LabVIEW chúng ta như đứng trước một bức tranh với các họa tiết là các icon, các SubVI, các dây nối có màu sắc sặc sỡ. Bên cạnh đó, một khi bạn vạch ra biểu đồ tiến trình (Flowchart) cho chương trình của bạn như thế nào thì môi trường LabVIEW cho phép bạn cứ như là bê nguyên xi Flowchart đó vào môi trường G Code.
Phân tích d liệu

Ví dụ: bạn viết một ứng dụng có nhiệm vụ thu thập data nhiệt độ từ một vài kênh khác nhau, sau khi tiếp nhận các dữ liệu nhiệt độ đó thì chương trình có chức năng phân tích và lưu trữ các dữ liệu phân tích đó vào ổ đĩa dưới dạng các file hoặc ghi lên database.

Flowchart cho ứng dụng của bạn sẽ có dạng như trên.
Sẽ chẳng có gì khác biệt khi ta sử dụng các Express VI để thực thi nhiệm vụ này với LabVIEW. Và ta có đoạn G Code sau có chức năng thực hiện nhiệm vụ đó ở hình dưới.
Tuy rằng một bên thì mang ý nghĩa sơ đồ thuật toán còn một bên là mã nguồn thực thi của thuật toán đó nhưng rõ ràng là cả hai hình ảnh ta đang đề cập trên đây có một sự tương đồng về bố cục. Do đó, có thể nói rằng với LabVIEW bạn nghĩ sao thì có thể làm được vậy. 3 Express VI trong G Code có chức năng thực hiện 3 khối chức năng trong Flowchart trên đây mà bạn đã vạch ra từ đầu cho ứng dụng của mình. Việc lập trình cứ được tiến hành một cách thật đơn giản. Bạn chẳng cần phải tốn công sức để nhớ những quy định về cú pháp, từ khóa, cấu trúc vòng lặp rối rắm trong các ngôn ngữ lập trình text truyền thống.
LabVIEW hỗ trợ đầy đủ bộ các công cụ gỡ lỗi tương tác (Interactive Debugging Tools)
Công cụ gỡ lỗi G code cũng được thực thi, tương tác một cách trực quan. Vì hoạt động của chương trình viết bằng LabVIEW tuân theo nguyên tắc dòng dữ liệu (Data flow) nên các giá trị đầu vào và đầu ra của một “hàm LabVIEW” được truyền đi trên các dây nối. Khi cần kiểm tra một giá trị của một biến nào đó, ở một vị trí xác định, tại một thời điểm nào đó thì đơn giản là chỉ cần đặt công cụ gỡ lỗi của LabVIEW (Probes) lên dây nối biến đó tại điểm cần kiểm là xong.
Như ví dụ dưới đây, ta đặt Probes lên các dây nối để biết các biến biên độ (Amplitude), tích phân (Integral) nhận giá trị bao nhiêu trong quá trình vòng lặp while thực thi.
So sánh với các ngôn ngữ lập trình truyền thống thì bộ các công cụ, chức năng gỡ lỗi của LabVIEW không thiếu đi một tính năng nào từ việc thăm dò (Probe), gián đoạn (Breakpoint), dò từng bước…
Với các công cụ gỡ lỗi của G, ta có thể đồng thời dò dữ liệu từ nhiều điểm, của nhiều biến, tại mỗi thời điểm một cách đồng thời, tạm dừng quá trình thực thi code và từng bước dò lỗi vào các “thủ tục và hàm con” mà không đòi hỏi một sự phức tạp nào trong quá trình lập trình và thực hiện. Điều này thực sự là một thách thức đối với các ngôn ngữ lập trình text truyền thống đặc biệt nếu trong ứng dụng có các phần mã lệnh thực thi song song.
Chúng ta hãy cùng xem xét các hình ảnh minh họa cho tính ưu việt của chức năng gỡ lỗi trong LabVIEW
 
Ở hình trên, trong môi trường G code thì các con số từ 1, 2, 3 đến 9 biểu thị các điểm mà ta muốn dò (Probes) giá trị. Và ở cửa số Probe bên dưới ta thấy các giá trị ứng với các điểm dò được hiển thị tương ứng và cập nhật liên tục trong quá trình vòng lặp while của đoạn G code thực thi.Thật dễ dàng để trả lời câu hỏi tại một thời điểm nào đó, các giá trị của các biến bằng bao nhiêu. Và với phiên bản mới nhất của LabVIEW, bạn còn có thể minh họa sự thay đổi giá trị của các biến bằng các đồ thị, biểu đồ ngay chính trên cửa sổ hiển thị kết quả dò lỗi.
Một trong những tính chất phổ biến nhất của bộ công cụ gỡ lỗi LabVIEW là nó luôn luôn tự mình biên dịch (Compiler) mã code. Trong quá trình mình phát triển một ứng dụng (khâu kéo thả các icon, nối dây), trình biên dịch luôn luôn tự động thực thi để kiểm tra các lỗi và ngay khi có lỗi xảy ra trong chương trình của bạn, mũi tên ở trên góc trái giao diện sẽ đứt đoạn. Việc sửa lỗi cũng được hỗ trợ bởi các giải thích về nguồn gốc lỗi xuất hiện trong các thông báo (như dưới đây) khi ta bấm nút RUN để chạy chương trình. Tất nhiên, bạn phải khắc phục hết tất cả các lỗi thì chương trình mới thực thi một cách trọn vẹn.
Cơ chế thực thi mã lệnh, tác vụ song song tự động (Automatic Parallelism and Performance)
Hơn 40 năm qua, các nhà sản xuất chip máy tính luôn tìm cách gia tăng tốc độ của bộ vi xử lí máy tính bằng việc tăng tốc độ của mạch đồng hồ bên trong vi xử lí (Clock Speed). Tuy nhiên, ngày nay hướng phát triển này không còn có thể theo đuổi được nữa bởi vì các ràng buộc về điện năng tiêu thụ và lượng nhiệt thải ra ngoài môi trường. Thay vào đó, các hãng chip máy tính chuyển sang sản xuất các máy tính có nhiều bộ vi xử lí (Multiple processor).
Song để tận dụng được tốc độ & hiệu năng hoạt động của các máy tính multiple core khi lập trình các ứng dụng thì các ngôn ngữ đó phải có khả năng thực thi các tác vụ một cách độc lập, song song. Điều này là một thách thức không mong đợi của các lập trình viên chuyên dùng ngôn ngữ lập trình text truyền thống. Trong khi đó, với G code thì nhiệm vụ này được thực hiện một cách dễ dàng và có thể nói là gần như là tự động. Mỗi khi bạn viết code, trình biên dịch luôn luôn thực thi để nhận dạng các đoạn code và cố gắng thực thi các tác vụ đó đồng thời nếu như không vi phạm nguyên tắc dòng dữ liệu. Trong các thuật ngữ khoa học máy tính thì điều này được gọi là “ implicit parallelism” bởi vì bạn không cần phải chủ tâm viết code với mục đích thực thi song song. Ngôn ngữ G tự bản thân nó chịu trách nhiệm hoạt động với cơ chế song song. Cơ chế này quả thực là càng sinh sôi nảy nở trong sự phát triển của lĩnh vực FPGA. Trước đây việc lập trình FPGA chỉ giành cho các chuyên gia có kiến thức sâu sắc về thiết kế phẩn cứng FPGA nhưng ngày nay đã có một lượng lớn, đông đảo các kỹ sư vốn không thông thạo lắm về FPGA vẫn có thể sử dụng FPGA cho nhiều ứng dụng, mục đích khác nhau. Điều đó có phần đóng góp không nhỏ của LabVIEW.
 Sự trừu tượng các tác vụ bậc thấp (Abstraction of Low-Level Tasks )
Ngôn ngữ G ngoài việc thực thi mã lệnh theo hướng ưu tiên thực thi song hành thì còn tự động thực thi rất nhiều những tác vụ mà nếu với các ngôn ngữ lập trình truyền thống thì người lập trình phải tự mình làm lấy. Ví dụ như vấn đề chỉ định bộ nhớ thì bạn phải lưu ý tới vấn đề khai báo bộ nhớ trước khi sử dụng và đóng lại khi không còn cần thiết nữa. Bạn phải cân nhắc chỉ định đủ bộ nhớ cho các biến và sẽ gặp nhiều khó khăn trong việc gỡ lỗi nếu gặp phải vấn đề này khi làm việc với ngôn ngữ lập trình truyền thống. Tuy nhiên, với G code thì bạn bỏ qua những vấn đề này vì G tự động làm lấy. Bộ nhớ tự động được chỉ định mỗi khi các dòng dữ liệu truyền đến các biến (các incon) và khi dòng dữ liệu đi khỏi thì bộ nhớ cũng tự động được giải thoát. Bạn chỉ phải tập trung giải quyết các vấn đề phức tạp hơn, chính yếu hơn của lập trình.
Nếu bạn muốn can thiệp vào việc sử dụng bộ nhớ trong G code ở cấp kiểm soát thấp thì ngôn ngữ G cũng cho bạn can thiệp vào việc kiểm soát, khống chế bộ nhớ thông qua các kỹ thuật lập trình nâng cao. G cho phép bạn thấy một cách tường minh bản báo cáo tổng quan về bộ nhớ, thời gian thực hiện của các tác vụ bên trong chương trình của bạn. Nếu bạn không hài lòng với bản báo cáo này thì hoàn toàn có thể thay đổi dựa vào các kỹ thuật và công cụ gỡ lỗi đã biết. Một khi các công cụ và kỹ thuật thông thường vẫn không đem lại kết quả như bạn mong muốn, bạn vẫn chưa phải là hết hy vọng bởi bạn vẫn còn thể nghĩ tới một tính chất dò lỗi nâng cao hơn với LabVIEW Desktop Execution Trace Toolkit. Tookit này được thiết kế cho những người dùng chuyên nghiệp, những người mà muốn thực hiện sự phân tích code theo các đòi hỏi, yêu cầu ở tầm cao.
Tính kết hợp giữa G với các ngôn ngữ khác.
Trong khi G có những tính năng ưu việt như cơ chế thực thi song song và bỏ qua các đòi hỏi về tác vụ cấp thấp cho người lập trình, song thẳng thắn mà nói thì nó vẫn không hoàn toàn lý tưởng cho tất cả các tác vụ. Đơn cử là các phương trình và các hàm toán học thì thường là tối ưu nhất khi diễn tả bằng các chữ và số. Vì lí do đó, bạn có thể sử dụng LabVIEW kết hợp với một vài dạng ngôn ngữ lập trình text khác. Nghĩa là bạn có thể tùy chọn hướng phát triển theo đồ họa hay chữ viết.
Ví dụ LabVIEW chứa đựng một khái niệm là Formula Node, cho phép bạn sử dụng cấu trúc ngữ pháp của ngôn ngữ C vào môi trưởng phát triển G code. Bạn hoàn toàn có thể kết hợp cú pháp giữa C và G với nhau trong ứng dụng của mình.
Tương tự thì thuật ngữ Mathscript cho phép bạn kết hợp MatLab với LabVIEW.
LabVIEW cho bạn một cách thức tốt hơn để giải quyết các vấn đề.
Rõ ràng với các tính năng nổi bật trên, LabVIEW đang ngày càng được giới kỹ sư, nhà khoa học và sinh viên thích thú, tìm hiểu và khai thác sử dụng. Hy vọng rằng rồi một ngày không xa, hình ảnh dưới đây sẽ trở nên quen thuộc trong các trường học Việt Nam