Amplifier Analyzer AOIP AOIP Calibrator AOIP Calys AOIP Viet Nam Bài giảng LabView Balance Bản tin công nghệ Biến tần-Khởi động mềm blogger_ino Calibrator Cảm biến chuyên dụng Takex DX-S35F – DX-S33C – Phase Diffrential Detection BGS Sensors – Takex Việt Nam Cảm biến quang AECO FT18SM-CP50 – Photoelectric Sensors AECO – AECO Viet Nam Cảm biến quang AECO FTQSP – Photoelectric Sensors AECO – AECO Viet Nam Cảm biến quang IFM – Photoelectric Sensor IFM O1D100 – IFM Việt Nam – INO Việt Nam Cảm biến siêu âm Takex US-1AH / US-1AHPN – Ultrasonic Sensers – Takex Viet Nam Cảm biến siêu âm Takex US-S25AN – Takex Viet Nam – INO Việt Nam Cảm biến siêu âm Takex US-T04AN – Ultrasonic Sensers – Takex Viet Nam – INO Việt Nam Cảm biến siêu âm Takex US-T50 / US-R25 – Ultrasonic Sensers – Takex Viet Nam – INO Việt Nam Cảm biến siêu âm Takex US-U30AN – Takex Viet Nam – INO Việt Nam Cảm biến siêu âm Takex USA-S1AN / USA-S3MAN / USA-S6AN – Ultrasonic Displacement Sensers – Takex Viet Nam Cảm biến siêu âm Takex VS-S50RNF / VS-S20R / VS-S20B / VS-S15W / VS-S15WNF / VS-S15RBNF – BGS Photodiode Array Sensers – Takex Viet Nam Cảm biến sợi quang Takex F1R – F1RPN – F1RH – F1RHPN – F1RM – F1RMPN – F1RH-J – F11R – F11CR – F11CRPN – Digital Display Fiber Optic Sensors – Takex Viet Nam Cảm biến sợi quang Takex F70RK – F70GK – F70BK – F70WK – F70RKPN – F70GKPN – F70BKPN – F70WKPN – Fiber Optic Sensors – Takex Viet Nam Cảm biến sợi quang Takex F80R – F80RPN – Digital Display Fiber Optic Sensors – Takex Viet Nam Cảm biến vị trí AECO – Cảm biến cảm ứng AECO SMF – M12 – M18 – M30 – Metalface Inductive Sensors – AECO Việt Nam Cảm biến vị trí AECO – Cảm biến điện dung AECO SC18SP – SC30SM – Capacitive Sensors – AECO Việt Nam Cảm biến vị trí AECO – Cảm biến điện dung AECO SC30SP – SC30M – Capacitive Sensors – AECO Việt Nam Cảm biến vị trí AECO – Cảm biến từ AECO SI12SM – Inductive Sensors – AECO Việt Nam Cảm biến vị trí AECO – Cảm biến từ AECO SIP12 – SIQ80 – Inductive Sensors – AECO Việt Nam Controller Counter/Timer Data Acquisition System Đếm xung và đếm số vòng quay của động cơ bằng encoder ElCO và PLC S7-300 – ELCO Việt Nam Dịch vụ Điều Khiển-Giám Sát Đo các đại lượng điện Đo lực-Momen Đo Lường-Kiểm Tra Đo quang-Âm thanh Download featuredpost featuredpost/sản phẩm Form-Biểu mẫu Giới thiệu Hiệu chuẩn-Cân chỉnh HMI Siemens – Biến Tần Siemens – Simatic Siemens – Module Siemens – Siemens Việt Nam IFTTT INO Việt Nam Khác Khoảng cách-Vị trí LabView Linh kiện thiết bị khác Lưu lương-Mức Meter Mỹ áp thuế khủng gần 800% lên thép Nga National Instruments – Integrated 266 MHz Real-Time Controller and 2M Gate FPGA (Model: NI cRIO-9073) Nhiệt độ-Áp suất Oscilloscope Phần mềm LabView Phân tích-Thử nghiệm PLC-HMI Power Supply Sản phẩm Sản phẩm - Dự án Sản phẩm nổi bật Sản-phẩm-nổi-bật Sensor Signal Generator Súng bắn nhiệt Fluke – Máy chụp nhiệt Fluke – Fluke Việt Nam – INO Việt Nam Switch Tài liệu LabView Technical Document Tin tức Tin tức - Sự kiện Tự Động-Đóng Cắt Twitter wordpress YouTube

Kỹ thuật sử dụng vòng lặp trong LabVIEW (phần 4)

Chúng ta hãy cùng khám phá  một kỹ thuật sử dụng vòng lặp tiếp theo là Event-Driven
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. Khi đó hệ thống luôn luôn phải dò xét (polling) xem chương trình có thể thực thi được vòng lặp tiếp theo hay chưa và khi nào kết thúc vòng lặp. Giải pháp tạm thời đưa ra là người dùng chỉ cần 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). Tuy nhiên khi sử dụng hàm Wait trong vòng lặp While lại phát sinh vấn đề sau:
-          Nếu người dùng đặt một khoảng thời gian t(ms) rất nhỏ hoặc bằng 0 ms trong hàm Wait thì vòng lặp While cứ lặp đi lặp lại liên tục, đ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.
-          Ngược lại nếu nếu thời gian t(ms) lớn hơn tốc độ thực thi của vòng lặp trong chương trình thì sẽ gây ra sự chậm trễ trong thời gian đáp ứng.
Giải pháp đưa ra trong trường hợp trên là đối với những ứng dụng vẫn thường gặp thì người dùng 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. Ngoài biện pháp trên , Labview đã phát triển thêm cấu trúc  event-driven với mục đích để tối ưu hóa vòng lặp
Sử dụng cấu trúc sự kiện trong LabVIEW (Event structure)
Vì sao phải sử dụng cấu trúc sự kiện?
Giả sử ta có một ứng dụng mà người dùng sẽ tương tác với chương trình thông qua một nút bấm trên Front Panel. Mỗi khi người dùng bấm vào nút đó thì chương trình sẽ thực thi tác vụ đã được chỉ định trước. Chương trình đó có thể được thực thi bởi code trong Block diagram sau đây.

Event-Driven, LabVIEW, học LabVIEW, kỹ thuật vòng lặp, thủ thuật vòng lặp trong LabVIEW
Theo đó, mỗi khi người dùng nhấn nút “Do some work?” thì nội dung code trong cấu trúc Case (Trường hợp True) sẽ được thực thi. Ở đây, nội dung code trong cấu  trúc Case chỉ là tự động cọng thêm một đơn vị để nhằm tính toán số lần người dùng nhấn nút “Do Some Work?”. Mặc dù chúng ta cũng đã sử dụng kỹ thuật Timing cho vòng lặp đã được trình bày ở các bài trước, song số lần thực thi vòng lặp vẫn còn khá nhiều. Vòng lặp vẫn phải dò xét liệu rằng người dùng đã nhấn nút hay chưa tuy rằng không còn liên tục nữa nhưng điều này cũng chiếm khá nhiều tài nguyên của CPU trong các ứng dụng lớn và phức tạp. Chúng ta thấy dù thực sự chúng ta chỉ cần 3 lần lặp cho 3 lần nhấn nút “Do some work?” nhưng vòng lặp đã thực thi tới 339 lần tổng cộng. Có quá nhiều lần thực thi một cách lãng phí (Đó là các trường hợp ứng “False” trong cấu trúc Case). Vậy có cách nào để giải quyết sự lãng phí tài nguyên CPU này hay không? Câu trả lời nằm ở cách lập trình dưới đây:

Event-Driven, LabVIEW, học LabVIEW, kỹ thuật vòng lặp, thủ thuật vòng lặp trong LabVIEW
 

Trong cách lập trình này, chúng ta đã sử dụng cấu trúc Event Driven để giải quyết vấn đề chương trình, vòng lặp cứ phải liên tục polling (Dò xét) liệu khi nào thì người dùng nhấn nút “Do some work?”. Ở đây, vòng lặp chỉ thực thi khi người dùng nhấn nút mà thôi, trong thời gian người dùng không tương tác, nhấn nút thì vòng lặp rơi vào trạng thái ngủ đông (Idle), tài nguyên của máy được giải phóng hoàn toàn. Số lần lặp thực thi tương ứng với số lần người dùng nhấn nút (5-5) như hình trên.
Định nghĩa sự kiện:
Giống như cấu trúc Case Structure, Event driven bao gồm nhiều sơ đồ con, trong số đó được cấu hình để xử lý một hoặc nhiều sự kiện. Sự kiện là những hành động người dùng trên front panel,  chẳng hạn như nhấn vào một phím (Key Down) hoặc di chuyển chuột (Mouse Move) có thể thêm một Event Structure để sơ đồ khối giống như bất cứ câu trúc nào khác của LabVIEW. Như trường hợp trên, sự kiện ở đây là trường hợp nút nhấn “Do some work?” thay đổi giá trị. Cứ mỗi lần nút nhấn có kiểu dữ liệu Boolean này thay đổi trạng thái từ True sang False hoặc ngược lại thì tác vụ tương ứng với sự kiện đó được thực thi.
Cách thức sử dụng và cấu hình sự kiện:
Người dùng có thể sử dụng cấu trúc event-driven để xử lý các sự kiện trong một ứng dụng giống như cấu trúc Case Structure, có thể thêm nhiều trường hợp sự kiện và có thể cấu hình những trường hợp để xử lý một hoặc nhiều sự kiện. Khi những sự kiện xảy ra, LabVIEW thực hiện các trường hợp tương ứng.
 Khi các Event Structure đã xử lý một sự kiện, nó đã hoàn tất thực hiện. Event Structure không tự động lặp để xử lý nhiều sự kiện, điều này đòi hỏi bổ sung một vòng lặp while ngoài Event Structure. Đó cũng chính là lí do chúng tôi coi việc sử dụng Event Structure là một trong những kỹ thuật sử dụng vòng lặp và nội dung này được trình bày trong serial bài viết cho chủ đề này.
Các hình ảnh dưới đây mô tả các thao tác để đặt một cấu trúc sự kiện Event-driven trong Block diagram cũng như cách cấu hình cho một sự kiện
 

Event-Driven, LabVIEW, học LabVIEW, kỹ thuật vòng lặp, thủ thuật vòng lặp trong LabVIEW
Lựa chọn  các sự kiện bằng click  phải chuột lên biên cấu trúc sự kiện và chọn Edit Events Handled by This Case từ menu. Sử dụng hộp thoại Edit sự kiện xuất hiện để chỉnh sửa một hoặc nhiều  trường hợp
Event-Driven, LabVIEW, học LabVIEW, kỹ thuật vòng lặp, thủ thuật vòng lặp trong LabVIEW
 
Những lưu ý khi sử dụng cấu trúc Event-driven:
  1. 1.    Ứng dụng đang chạy không phải dùng  polling
  2. 2.    Khi ứng dụng không hoạt động, hệ điều hành giải phóng tài nguyên, có thời gian xử lý các chương trình khác. Điều này làm cho VI và các ứng dụng khác hiệu quả hơn và nâng cao hiệu suất.
  3. 3.      Mỗi lần một sự kiện xảy ra, nó được lưu trữ trong dữ liệu đang chờ xử lí của hệ điều hành. Khi các event-driven được tác động, sự kiện đầu tiên trong dữ liệu đang chờ xử lí được thực hiện, sau đó là sự kiện  tiếp theo và cứ như vậy người dùng không phải lo lắng về việc thiếu một sự kiện thay đổi nhanh chóng trên Front Panel:
  4. 4.      Không bao giờ đặt một cấu trúc event-driven bên trong một cấu trúc event-driven khác, khi đó Chương trình VI sẽ ngưng hoạt động.
Để tìm hiểu và thực hành thêm về cấu trúc sự kiện, chúng ta có thể tham khảo ví dụ demo dưới đây về cách sử dụng cấu trúc sự kiện Event-Driven
- File : demo_event_driven.zip
- Type : zip
- Size : 485.1 KB

Người viết : Nguyễn Tiến & Dung nv
Labels: ,
[blogger]

Author Name

CÔNG TY TNHH GIẢI PHÁP VÀ CÔNG NGHỆ ĐO LƯỜNG INO Địa chỉ: S2-G2, Chung cư SunView, Đường Cây Keo, Phường Tam Phú, Quận Thủ Đức, TP Hồ Chí Minh, Việt Nam Tel: (084)2873.000.184 | Email: info@ino.com.vn Hot line: 0939021319/0908289053 | Website: www.ino.com.vn | www.ino.vn

Biểu mẫu liên hệ

Name

Email *

Message *

Powered by Blogger.