Tổ chức một phòng thí nghiệm ảo Đo lường- lý thuyết mạch
Trang 1Lời nói đầu
Khi xây dựng một phòng thí nghiệm cho sinh viên học tập nghiên cứu, cần phải trang bị khá nhiều thiết bị hiện đại và chuyên dụng Trong thực tế, do
sự phát triển mạnh mẽ của khoa học kỹ thuật, nên các hệ thống thiết bị phục
vụ cho bài toán kỹ thuật luôn được phát triển không ngừng và vì sự hạn chế về kinh phí nên các phòng thí nghiệm nhà trường khó có thể trang bị đầy đủ và kịp thời các thiết bị thực để đáp ứng nhu cầu học tập và nghiên cứu Đây là một trong những nguyên nhân khiến cho các sinh viên khi ra trường lúng túng,
bỡ ngỡ trong các thao tác thực hành và vì thế hiệu quả công việc giảm đi rất nhiều
Có thể khắc phục hạn chế này bằng cách xây dựng một phòng thí nghiệm ảo có đủ các trang thiết bị hiện đại với mục đích giúp các sinh viên có thể làm quen với mặt máy, thao tác trên các núm nút, đọc chỉ số thiết bị đo một cách thành thạo trước khi làm việc với các thiết bị thật Thiết bị ảo có những lợi thế rất lớn về giá cả, chỉ tiêu chất lượng và tính linh hoạt so với thiết
bị thực Do vậy, việc xây dựng một phòng thí nghiệm ảo bao gồm các thiết bị
đo lường hiện đại cùng các panel thí nghiệm tổng hợp tạo ra một hiệu quả
đáng kể về kinh tế và có ý nghĩa rất lớn trong công tác đào tạo, giảng dạy và nghiên cứu tại các nhà trường
Với mục đích nghiên cứu, xây dựng một phòng thí nghiệm ảo Lý thuyết mạch trên cơ sở mạng máy tính và các thiết bị ảo chuyên dụng phục vụ cho công tác đào tạo giảng day môn học Lý thuyết mạch , đồ án của em bao gồm các nội dung chính như sau:
- Chương 1: Trình bày về ngôn ngữ lập trình LabVIEW trong các
bài toán điều khiển, ghép nối, mô phỏng thiết bị ảo và các kỹ thuật lập trình tạo thiết bị ảo trên LabVIEW
Trang 2- Chương 2: Trình bày lưu đồ thuật toán và các bước thiết kế xây
dựng thiết bị ảo cho phòng thí nghiệm Đo lường - Lý thuyết mạch
- Chương 3: Trình bày về phần mềm EWB trong mô phỏng
nguyên lý hoạt động của mạch điện tử và các bước xây dựng một bài thí nghiệm Lý thuyết mạch trên EWB
- Chương 4: Sử dụng kết quả nghiên cứu của các chương trước để
tổ chức xây dựng một phòng thí nghiệm ảo Đo lường - Lý thuyết mạch
Do hạn chế về thời gian và trình độ nên đồ án không tránh khỏi những sai sót Em rất mong nhận được các ý kiến đóng góp, chỉ bảo của các thầy giáo và các bạn đồng nghiệp
Cuối cùng em xin chân thành cảm ơn thầy giáo PGS TSKH Nguyễn Công Định, KS Cao Hữu Tình, các thầy giáo trong khoa Kỹ thuật Điều khiển
và Trung tâm Công nghệ Mô phỏng - HVKTQS đã quan tâm và tạo mọi điều kiện giúp đỡ em hoàn thành đồ án của mình
Xin chân thành cảm ơn
Tác giả
Trang 3Chương 1: Kỹ thuật lập trình hỗ trợ tạo thiết bị ảo
trên LabVIEW 1.1 Khái niệm về phần mềm đồ hoạ LabVIEW
LabVIEW (Laboratory Virtual Istrument Engineerring Worbench) là một chương trình ứng dụng phát triển, dựa trên cơ sở ngôn ngữ lập trình đồ hoạ G, thường được sử dụng cho mục đích đo lường, xử lý, điều khiển tham số
và mô phỏng thiết bị
Là một ngôn ngữ lập trình đa năng, giống như C hoặc BASIC, LabVIEW có các thư viện hàm cho các nhiệm vụ khác nhau Với mục đích xây dựng một ngôn ngữ chuyên dụng cho các bài toán khoa học kỹ thuật, các thư viện hàm được cung cấp bởi LabVIEW rất mạnh, phong phú và luôn được phát triển để tương thích với sự phát triển của phần cứng và của các yêu cầu thực tiễn Có thể kể ra một số thư viện hàm sau:
- Analysis VIs: Bao gồm các hàm phân tích và xử lý tín hiệu
- Communication VIs: Cung cấp các hàm dùng để kết nối và trao đổi
dữ liệu giữa các ứng dụng trên nền WINDOWS
- Control & Simulation Toolkit: Dùng cho các bài toán mô phỏng
và điều khiển
Khác với ngôn ngữ lập trình thông thường (ngôn ngữ dòng lệnh) LabVIEW sử dụng ngôn ngữ lập trình G – ngôn ngữ lập trình đồ hình - để tạo các chương trình ở dạng sơ đồ khối Do đó người lập trình có thể thiết kế một giao diện mô phỏng theo panel của các thiết bị vật lý thực Nó còn tạo ra một cái nhìn trực quan trong việc xây dựng mã nguồn, giúp người lập trình trong thiết kế hệ thống, gỡ rối và kiểm tra chương trình
1.2 Kỹ thuật lập trình cơ bản trên LabVIEW
1.2.1 Cấu trúc chương trình
Trang 4Các chương trình xây dựng trên LabVIEW (VIs) tương tự như các function của một ngôn ngữ lập trình dòng lệnh Một VI gồm có ba phần: Giao diện với người sử dụng – Front Panel, lưu đồ cung cấp mã nguồn – Block Diagram, và biểu tượng kết nối – Icon/Conector
- Front Panel: Là nơi giao tiếp giữa người dùng và chương trình Nó
tương tự như một panel của các thiết bị vật lý, bao gồm các nút bật, công tắc chuyển mạch, bộ hiển thị, Với Front Panel bạn có thể nhập
số liệu từ bàn phím (hoặc chuột) và xem kết quả từ màn hình Hình 1.1 minh hoạ một Front Panel của chương trình
- Block Diagram: VI nhận lệnh từ block diagram Đây là một phương
thức được sử dụng trong G – ngôn ngữ đồ hình Block diagram thường có các đối tượng, các hàm và SubVI, được kết nối với nhau theo một quy tắc nhất định để cung cấp mã nguồn đồ hình cho VI thực hiện Block diagram gồm có các terminal, node và wire
Terminal là cổng truyền dữ liệu giữa block diagram với front panel
hoặc giữa các node trong cùng một block diagram Để hiển thị các terminal của hàm hoặc VI, kích chuột phải vào icon của chúng rồi
chọn menu: Show>>Terminal Node là các phần tử thực hiện
Hình 1.1: Front Panel của chương trình
Trang 5chương trình Chúng tương tự như các mệnh đề, toán tử, hàm hoặc
chương trình con ở trong các ngôn ngữ lập trình dòng lệnh Wire
giống như các bus truyền dữ liệu giữa các node Hình 1.2 minh hoạ một Block Diagram của chương trình
- Icon và Connector: VI có thể thực hiện một cách độc lập hoặc được
một VI khác gọi tới như một chương trình con (SubVI) Để làm điều
này LabVIEW đưa ra khái niệm icon và connector Icon là biểu
tượng của một VI, được dùng khi sử dụng VI này như một SubVI trong một VI khác Một VI gọi tới một VI khác bằng cách đưa icon
của nó vào block diagram Connector là một phần tử của terminal
dùng để kết nối các đầu vào hoặc đầu ra của một SubVI với các node khác trong block diagram của VI gọi nó Mỗi VI có một icon mặc
định hiển thị trong bảng Icon ở góc trên bên phải của cửa sổ Front Panel hoặc Block Diagram (hình 1.3)
Hình 1.2: Block Diagram của chương trình
Hình 1.3: Icon của chương trình
Trang 6Để hiển thị connector của một VI trên front panel, kích chuột phải vào
icon và chọn menu: Show>>Connector
1.2.2 Các công cụ hỗ trợ lập trình
- Tools palette: Bao gồm các chế độ làm việc của chuột Các công cụ
có trong tools palette được sử dụng để soạn thảo hoặc chạy chươg
trình Để truy cập vào Tools palette chọn menu: Window>>Show Tools palette Khi này xuất hiện một bảng công cụ như minh hoạ ở
hình 1.4
- Controls palette: Là bảng chứa các bộ điều khiển và chỉ thị được sử
dụng trên front panel của các VI Controls là các terminal đầu vào, dùng để cung cấp dữ liệu cho VI còn Indicators là các terminal đầu
ra dùng để hiển thị dữ liệu do VI tạo được Để truy cập vào controls
panel ta chọn menu: Window>>Show Controls palette Khi này
xuất hiện bảng controls như minh hoạ ở hình 1.5 Có thể tham khảo [10] hoặc xem help của phần mềm để có thông tin chi tiết hơn về các
điều khiển trong controls palette
Hình 1.4: Tools palette Hình 1.5: Controls Palette
Trang 7- Functions palette: Functions là các node cơ bản trong ngôn ngữ lập
trình G, nó tương tự các toán tử hoặc các hàm trong ngôn ngữ thông thường Functions có biểu tượng màu vàng, không có front panel và block diagram (do chúng không phải là các VIs) Có thể truy nhập
các functions từ Window>>Functions palette Hình 1.6 minh hoạ
một Functions Palette
Functions được sử dụng để xây dựng block diagram LabVIEW có thư viện hàm rất mạnh và phong phú để xử lý kết quả cũng như điều khiển và mô phỏng thiết bị như: các hàm xử lý toán học - Numeric Functions, các hàm biến đổi logic - Boolean Functions, các hàm xử
lý mảng và ma trận - Array Functions Cùng với sự phát triển của khoa học kỹ thuật mà các thư viện hàm trên LabVIEW luôn được
Hình 1.6: Functions Palette
Trang 8phát triển và chuyên dụng hoá để người dùng có thể cập nhật và sử dụng hiệu quả cho mục đích công việc của mình
1.2.3 Các bước xây dựng chương trình trên LabVIEW
Sau khi đã tìm hiểu đặc điểm của ngôn ngữ, công cụ hỗ trợ và điều khiển chương trình ta sẽ bắt tay vào xây dựng một VI Để xây dựng một chương trình trên LabVIEW cần tuân thủ theo các bước sau:
- Thiết kế giao diện trên Fronl panel: Tạo một VI mới bằng cách chọn New VI từ hộp hội thoại hoặc từ menu: File>>New Đặt các
Control và Indicator cần thiết lên Front Panel bằng công cụ
positioning tool Pop-up lên từng đối tượng để lựa chọn cách hiển
thị và thay đổi thuộc tính của chúng
- Xây dựng mã nguồn trên Block Diagram: Chọn Windows>> Show Block Diagram (phím tắt là Ctrl+E) để hiện Block Diagram
của VI Thao tác tương tự bước 1 để xây dựng các cấu trúc và hàm
cần thiết cho chương trình Chọn công cụ Wiring tool để liên kết
các đối tượng trong Block Diagram Trở lại front panel chọn công cụ
Operating tool để nhập giá trị đầu vào và kích hoạt cho VI hoạt
động để kiểm tra lỗi và đánh giá thuật toán
- Sao lưu chương trình: Ghi chương trình lên đĩa với tên mở rộng là
*.VI bằng cách chọn New >>Save (Ctrl+S) hoặc New>>Save As
1.2.4 Khái niệm và cách xây dựng một SubVI
Trong lập trình ta thường gặp hai vấn đề:
- Có một số đoạn mã được lặp lại mà việc viết chúng khiến chương trình trở nên cồng kềnh nên cần phải tập hợp vào một modul để khi chương trình có yêu cầu thì chỉ cần gọi modul này
- Với một chương trình lớn cần phải chia thành các modul nhỏ cho nhiều người cùng xây dựng (kiểu top-down) mà các modul này có
Trang 9thể hoạt động độc lập song cũng có thể kết hợp lại trong một modul mức đỉnh để thực hiện các yêu cầu đặt ra
Để giải quyết vấn đề này, LabVIEW đưa ra khái niệm SubVI SubVI là một VI được bổ sung thêm biểu tượng (icon) và đầu nối (connector) để có thể
sử dụng trong VI khác Việc sử dụng SubVI giúp chương trình dễ hiểu, dễ gỡ rối và có thể phân chia một nhiệm vụ phức tạp thành nhiều modul để nhiều người cùng tham gia hoàn thành
Trong LabVIEW có hai cách cơ bản để xây dựng một SubVI: Xây dựng
từ một VI và xây dựng từ một phần của VI
Để xây dựng SubVI từ một VI ta làm theo các bước sau:
- Thiết kế front panel và xây dựng mã nguồn trên block diagram:
Bước này tương tự như các bước tạo một VI mà ta đã trình bày ở trên
- Tạo biểu tượng cho SubVI: Để tạo biểu tượng của VI cần cho hiện cửa sổ Icon Editor Có thể gọi cửa sổ này bằng cách kích đúp chuột
vào ô biểu tượng ở góc bên phải hoặc kích chuột phải và chọn mục
Edit Icon Khi đó cửa sổ sẽ hiện lên như minh hoạ dưới hình 1.12
Sử dụng các công cụ ở bên trái cửa sổ để thiết kế biểu tượng theo ý muốn
Hình 1.12: Icon Editor
Trang 10- Xác định các mẫu connector terminal: Để có thể nhận hay truyền
dữ liệu bạn cần phải có các connector LabVIEW có rất nhiều mẫu conector mà ta có thể chọn bằng cách pop-up trên icon và chọn
Pattern Khi này một bảng mẫu của connector sẽ xuất hiện nh− hình
1.13
Ta có thể thêm một terminal vào mẫu (Add Terminal), bỏ một terminal (Remove Terminal) hoặc thay đổi không gian sắp xếp (Flip Horizontal, Flip Vertical, Rotage 90 degrees)
Hình 1.13: Pattern Icon
Hình 1.14: Gán Terminal cho Controls
Trang 11- Gán Terminal cho Control và Indicator: Bấm chuột vào một Terminal, nó chuyển thành màu đen và chuột chuyển thành Wiring tool Bấm chuột vào control (hoặc Indicator) muốn gán cho
Terminal đã chọn, một khung nhấp nháy sẽ bao lấy đối t−ợng Kích chuột lên vùng trống bất kỳ để hoàn thành việc gán Lặp lại cho các Control và Indicator khác Hình 1.14 minh hoạ việc gán Terminal cho Control và Indicator
Để xây dựng SubVI từ VI ta chọn phần cần xây dựng bằng công cụ
Positioning tool sau đó chọn menu: Edit>>Creat SubVI Khi này các
control và indicator đ−ợc tự động tạo cho SubVI mới, SubVI đ−ợc tự động nối với các dây nối đang có và một biểu t−ợng thay thế cho phần đ−ợc chọn của Block Diagram của VI gốc Tạo một SubVI từ một phần của VI giống nh− việc bỏ một phần của SubVI và thay thế bằng một SubVI ngoại trừ các điểm sau:
- Không một terminal nào của Front Panel trong phần đ−ợc chọn bị loại bỏ Chúng đ−ợc giữ lại và đ−ợc nối với SubVI vừa tạo
- Tất cả các thuộc tính trong phần chọn đ−ợc giữ lại trong VI và đ−ợc nối với SubVI Những thuộc tính này đ−ợc thay thế bởi các terminal của Front Panel trong SubVI và hoạt động nh− các kênh truyền giá trị của một thuộc tính vào hoặc ra khỏi SubVI
- Khi phần đ−ợc chọn chứa một biến cục bộ, nó đ−ợc thay thế bởi terminal của Front Panel trong SubVI và đ−ợc giữ lại trong VI gọi để nối với SubVI Khi có nhiều biến cục bộ thì chỉ có biến đầu trở thành terminal của Front Panel còn các biến còn lại đ−ợc chuyển vào SubVI
Chú ý: Biểu t−ợng đặt lên SubVI khi tạo chúng từ một phần của VI là
một biểu t−ợng mặc định Do vậy cần phải soạn lại biểu t−ợng theo cách đã trình bày ở trên
Trang 121.2.5 Gỡ rối chương trình
Một VI không thể biên dịch hoặc chạy nếu nó bị lỗi Nếu VI bị lỗi, nút
VI Run có biểu tượng là mũi tên gãy (Brocken Run) Điều này có thể do trong Block Diagram có các Wire sai quy cách Để loại bỏ chúng chọn Edit
>> Remove Bad Wires Nếu thao tác trên vẫn không được ta có thể tìm nguyên nhân gây lỗi bằng cách kích vào nút Brocken Run Khi đó xuất hiện
hộp thông tin Error List liệt kê dạnh sách các lỗi
Để truy cập vào hộp này chọn Windows >> Show Error List hoặc kích vào nút Warning (chỉ xuất hiện khi VI có lỗi) Để tìm vị trí lỗi kích đúp
chuột vào dòng văn bản mô tả lỗi, nội dung của lỗi sẽ xuất hiện trong của sổ phía trước làm rõ đối tượng gây ra lỗi trên Block Diagram
Hình 1.15 minh hoạ một hộp thông tin Error List:
Trong trường hợp chương trình thực hiện nhưng không tạo ra kết quả như mong muốn (lỗi thuật toán), ta có thể debug theo các bước sau:
Hình 1.15: Cửa sổ Error List
Trang 13- Loại bỏ tất cả các lời báo hiệu Chọn Show Warning trong cửa sổ Error List, hộp liệt kê danh sách sẽ nhận ra các lời báo hiệu đối với
VI Xác định nguyên nhân và loại bỏ chúng
- Kiểm tra dây nối
- Đảm bảo các node và function đã được dùng đúng
- Sử dụng Breakpoints thực hiện từng bước để xác định xem VI hoạt
động có đúng trình tự không
- Sử dụng đặc tính thăm dò Probe để quan sát các giá trị dữ liệu trung
gian Kiểm tra lỗi đầu ra của các function và VI thực hiện vào ra
- Kiểm tra sự tràn của các Control và Indicators
- Kiểm tra thứ tự các phần tử của Cluster tại điểm nguồn và đích Dưới đây xin trình bày chi tiết hơn một số phương pháp gỡ rối cho chương trình hay được dùng trong LabVIEW
Sử dụng đặc tính thăm dò – Probe: Phương pháp này thường được sử
dụng để quan sát các giá trị dữ liệu trung gian trong cấu trúc lặp Trong Tools palette chọn Probe tool Trên Block Diagram chọn đối tượng cần debug, kích chuột trái lên đối tượng để tạo một điểm dò Làm tương tự cho các đối tượng cần debug khác Trở lại Front Panel chạy chương trình để quan sát giá trị trả
về trong cửa sổ Probe
Chạy chương trình theo chế độ Execution Highlighting: Để kiểm tra
kết quả, cách tốt nhất là theo dõi sự hoạt động của Block Diagram dưới dạng hoạt hoạ (animation) – trong đó giá trị của các phần tử được hiển thị và di chuyển chậm trong luồng dữ liệu (data flow) để người lập trình theo dõi và
kiểm tra tính đúng đắn của nó Kích vào nút Highlighting Execution để chạy
trong chế độ này, kích lại một lần nữa để về chế độ bình thường
Sử dụng chế độ hoạt động Single-Step: Chạy chương trình theo từng
node và tạm dừng ở node kế tiếp cho đến khi có sự kích hoạt của người sử
Trang 14dụng Chế độ này thường được sử dụng cùng với chế độ Highlighting để kiểm tra tính đúng đắn của chương trình
1.2.6 Ví dụ minh hoạ
Để kết thúc phần trình bày về lập trình cơ bản trên LabVIEW, em xin
đưa ra một ví dụ nhỏ về sử dụng ngôn ngữ G để giải bài toán đa thức Chương trình có nhiệm vụ tính giá trị một đa thức bậc hai cho một mảng biến bất kỳ
được nhập từ bàn phím Dưới đây là các bước cụ thể để xây dựng chương trình:
Bước 1: Mở một file mới bằng cách chọn File >> New Thiết kế giao
diện cho chương trình bao gồm ba numeric control tham số a, b và c, một array numeric control đối số x và một array numeric indicator hàm số y Pop-
up vào từng đối tượng để chọn thuộc tính của chúng Kết thúc bước 1 ta được một front panel như hình 1.16
Bước 2: Xây dựng mã nguồn cho Block diagram ở đây ta sử dụng
Formula node để lập một đa thức bậc hai có dạng: y=ax2+bx+c Node này
được đưa vào trong một vòng lặp For loop để xử lý với mảng đối số x ở đầu vào, cho ra kết quả là mảng hàm số y đầu ra Block diagram của ví dụ 1 được hoàn chỉnh như hình 1.17
Hình 1.16: Front Panel của Ví dụ 1
Trang 15Bước 3: Sau khi đã xây dựng xong mã nguồn đồ hình, đảm bảo chương
trình chạy đúng, chúng ta kết thúc việc lập trình bằng cách lưu chương trình
vào đĩa với tên Vidu1.vi bằng menu: File >> Save hoặc phím tắt Ctrl+S
Có thể xây dựng Vidu1.vi thành một SubVI cho các chương trình khác theo các bước sau:
Bước 1: Tạo Icon và Connector Sử dụng Edit icon để tạo biểu tượng
như hình 1.18 Nên tạo biểu tượng một cách trực quan thể hiện được các tính
Hình 1.17: Block Diagram của ví dụ 1
Hình 1.18: Thiết kế icon
Trang 16chất của SubVI mà ta xây dựng Sau đó pop-up vao icon chon menu: Show connector để chọn mẫu connector phù hợp từ bảng pattern
Bước 2: Gán từng connector cho các terminal tương ứng (như hình
1.19) Chuyển icon về dạng ban đầu bằng cách chọn Show icon, ghi lại những thay đổi trong chương trình ta sẽ được một SubVI hoàn chỉnh
Trên đây là toàn bộ các bước để xây dựng một VI Có thể phát triển VI này để tìm giá trị của một đa thức bậc N với chỉ số bậc nhập vào từ bàn phím
1.3 Lập trình nâng cao hỗ trợ tạo thiết bị ảo trên LabVIEW
1.3.1 Trao đổi thông tin và lập trình mạng bằng LabVIEW
LabVIEW hỗ trợ khả năng kết nối và chia sẻ tài nguyên giữa các ứng dụng chạy trên nền Windows trong môi trường mạng Để trao đổi dữ liệu giữa các ứng dụng, LabVIEW sử dụng các giao thức sau (ở đây ta chỉ quan tâm đến các ứng dụng chạy trên nền Windows):
- TCP/IP: Có sẵn trong tất cả các máy tính
- DDE: Có sẵn trong các máy PC để rao đổi thông tin giữa các ứng
dụng của Windows
- Active X: Có sẵn trong các máy PC chạy trên hệ điều hành Win 9X
- Data Socket: Được hỗ trợ trong phần mềm LabVIEW phiên bản 6.i
Hình 1.19: Thiết kế connector
Trang 17Tất cả các ứng dụng mạng đều có chung một mô hình, đó là mô hình
client/server Trong mô hình này một tập các quá trình (client) yêu cầu sự
phục vụ từ một tập các quá trình khác (server) Trong LabVIEW chúng ta có thể sử dụng mô hình này cho tất cả cácgiao thức liệt kê ở trên Có thể khái
quát một quá trình kết nối sử dụng mô hình client/server như sau
Đối với một máy khách:
Đầu tiên client mở một kết nối với server Nếu kết nối thành công, client sẽ gửi tới server một tập lệnh yêu cầu truyền dữ liệu hoặc lệnh điều khiển từ xa và nhận giá trị gửi trả (response) của server Cuối cùng client đóng
kết nối lại kết thúc một quá trình trao đổi thông tin
Đối với một máy chủ:
Đầu tiên LabVIEW khởi tạo một server Nếu khởi tạo thành công nó sẽ
đi vào một vòng lặp, tại đó nó đợi các client kết nối và phát yêu cầu Server
thực hiện các yêu cầu và lặp lại quá trình này cho đến khi bị dừng lại bởi
người sử dụng hoặc khi tiếp nhận lệnh kết thúc từ xa (do một client nào đó yêu
cầu)
Hình 1.20: DataSocket Server Manager
Trang 18Khi xây dựng bài toán mạng trong các ngôn ngữ lập trình kiểu dòng lệnh, người lập trình thường phải tự xây dựng và quản lý các tiến trình trong
mô hình client/server của mình, điều này gây ra một khó khăn không nhỏ và
chiếm nhiều thời gian trong việc lập trình Bắt đầu từ phiên bản 6.0 trở đi, LabVIEW hỗ trợ việc trao đổi dữ liệu thông qua Data Socket bằng cách cung cấp một thư viện hàm và một tiện ích quản lý việc trao đổi dữ liệu bằng Data Socket – Data Socket Server Manager (minh hoạ ở hình 1.20), điều này giúp người lập trình giảm được đáng kể thời gian cài đặt một hệ quản trị mạng và khiến cho hiệu quả lập trình tăng lên rất nhiều
Data Socket là một phương thức trao đổi dữ liệu của Windows cho phép các ứng dụng trao đổi dữ liệu cho nhau thông qua mạng Nó cho phép các ứng dụng trao đổi dữ liệu với nhau theo các gói thông tin (giao thức TCP/IP) hoặc dưới dạng các file dữ liệu (giao thức truyền file - FPT) Khi này Data Socket Server tạo ra các Data Items cho phép một ứng dụng gửi dữ liệu tới hoặc nhận dữ liệu về
Để gửi dữ liệu tới một Data Items có thể sử dụng hàm DataSocket Write, còn để nhận dữ liệu từ một Data Items có thể sử dụng hàm DataSocket Read Hình 1.21 và 1.22 minh hoạ hai hàm này trong LabVIEW
Hình 1.21: DataSocket Read
Hình 1.22: DataSocket Write
Trang 19Các terminal cần thiết cho hai hàm này: tên máy tính trên mạng, tên của Data Items, kiểu dữ liệu và dữ liệu
Để sử dụng phương thức này, có thể gọi các hàm từ thư viện
Communication >> DataSocket Tham khảo Help để có thêm thông tin chi
tiết về các hàm
1.3.2 Thiết kế custom controls
Như đã trình bày ở các mục trước, Controls là các terminals cho phép người sử dụng nhập dữ liệu vào chương trình và quan sát các kết quả nhận
được từ chương trình Với mục đích hỗ trợ cho các bài toán kết nối và điều khiển, các controls trong LabVIEW được xây dựng như các núm nút, bộ hiển thị trong thiết bị vật lý thực Hình 1.23 minh hoạ một số Controls trong LabVIEW
Mặc dù các controls được xây dựng bởi LabVIEW khá phong phú và đa dạng về kiểu loại song vẫn không thể theo kịp sự phát triển liên tục của các thiết bị kỹ thuật Để giải quyết điều này, LabVIEW cho phép người lập trình
sử dụng Custom Controls Custom Controls là các điều khiển tuỳ biến do người lập trình tự thiết kế Từ những Controls cơ bản, người lập trình có thể thay đổi các thuộc tính, kiểu hiển thị, để tạo những Controls của riêng mình
Điều này tạo ra một hiệu quả cao và đặc biệt có ý nghĩa trong bài toán mô phỏng những thiết bị vật lý cụ thể Hình 1.24 và 1.25 minh hoạ một Default Controls và Custom Controls trong bài toán mô phỏng thiết bị
Hình 1.23: Một số Controls cơ bản trên LabVIEW
Trang 20Trong ví dụ minh hoạ này, em thiết kế một máy đo với phần hiển thị là các đèn LED 7 đoạn Rõ ràng là với chương trình mô phỏng sử dụng các Custom Controls tạo ra được một giao diện rất trực quan và ấn tượng mạnh cho người thao tác
Để tạo một Custom Controls, ta có thể xây dựng chúng theo các bước sau đây:
- Bước 1: Từ menu bar chọn File >> New >> Control Khi này xuất
hiện một cửa sổ xây dựng Custom Controls như hình 1.26
Hình 1.24: Mô phỏng thiết bị đo hiển thị số với các Default Controls
Hình 1.25: Mô phỏng thiết bị đo hiển thị số với Custom Controls
Hình 1.26: Tạo một New Custom Control
Trang 21- Bước 2: Lựa chọn Control để phát triển thành Custom Control Lưu
ý rằng trên LabVIEW, không thể tạo một Custom Controls hoàn toàn mới (điều này phải sử dụng phương thức ActiveX) mà chỉ có thể phát triển nó từ một Control cơ bản của LabVIEW Khi này cần chọn Control với những thuộc tính gần giống với Custom Controls
cần xây dựng nhất và đặt vào cửa sổ như minh hoạ ở hình 1.27
- Bước 3:Sửa đổi các thuộc tính của control thành điều khiển tuỳ biến của người sử dụng Để có thể sửa đổi Controls chúng ta phải chuyển
chúng từ chế độ Edit Mode sang chế độ Customize Mode bằng shortcut button minh hoạ ở hình 1.28
Khi này các thành phần của một Control sẽ được tháo rời và cho phép người sử dụng thay đổi thành các tuỳ chọn của riêng mình Thông thường chúng ta chỉ thay đổi Picture Item của các thành phần Hình 1.27: Lựa chọn một Control cơ sở để phát triển thành Custom Control
Hình 1.28: Chế độ Customize
Trang 22của một Control Khi này có thể click chuột phải vào đối tượng và
chọn Picture Item từ menu-popup như hình 1.29
- Bước 4: Dùng cửa sổ Edit Icon để soạn thảo biểu tượng của Custom
Controls (thao tác như việc soạn thảo biểu tượng cho một VI) Sau
cùng ghi lên đĩa với tên mở rộng *.ctl
Để sử dụng một Custom Controls trong Cotrols Palette ta lựa chọn
Select a Control Khi này một hộp thoại xuất hiện cho phép người sử dụng
lựa chon Custom Controls cần thiết (hình 1.30)
Có thể xây dựng một thư viện các Custom Controls và cài vào Control
Palette trong lớp User Controls để tiện sử dụng cho các bài toán có liên quan
Hình 1.29: Sử dụng menu-popup để chọn picture item của control
Hình 1.30: Hôp thoại lựa chọn một Custom Controls
Trang 23Kết luận chương 1
LabVIEW là một ngôn ngữ lập trình rất mạnh và chuyên dụng cho các bài toán điều khiển, ghép nối và mô phỏng thiết bị ảo Sử dụng LabVIEW trong bài toán mô phỏng rất hiệu quả về mặt kinh tế Trong chương này, em
đã trình bày đặc điểm, kỹ thuật lập trình cơ bản cũng như nâng cao trên LabVIEW để làm cơ sở cho việc xây dựng các thiết bị ảo và phòng thí nghiệm
ảo Lý thuyết mạch - nhiệm vụ chính của đồ án
Trang 24Chương 2: Xây dựng các thiết bị ảo cho phòng thí nghiệm Đo lường - Lý thuyết mạch
Đối với các thiết bị ảo trong phòng thí nghiệm Đo lường - Lý thuyết
mạch, chúng ta có thể xây dựng theo các hướng sau:
- Xây dựng một thiết bị mô phỏng bán tự nhiên trên máy tính, bao
gồm một card ADC ghép với máy tính, và một phần mềm điều
khiển, ghép nối để giao tiếp với card Theo hướng này, thiết bị mô
phỏng có thể được sử dụng để thu thập dữ liệu (thông qua card
ADC) và phân tích, xử lý cũng như lưu trữ trên máy tính
- Thiết kế một thiết bị ảo, mô phỏng nguyên lý hoạt động và giao diện
sử dụng theo một thiết bị vật lý thực Khi này có thể xây dựng một
hệ thống thiết bị ảo theo các thiết bị vật lý hiện đại, cho phép người
sử dụng làm quen với thiết bị cũng như cách sử dụng chúng
Với hướng tiếp cận thứ hai, một thiết bị ảo cần thoả mãn các yêu cầu
sau:
- Thiết bị ảo phải được xây dựng theo phương trình động lực học của
thiết bị thực Đây là một yêu cầu bắt buộc đối với mỗi thiết bị ảo để
chúng có thể hoạt động chính xác như thiết bị vật lý thực Để giải
quyết điều này, đòi hỏi người thiết kế phải nắm vững nguyên lý hoạt
động của từng thiết bị cụ thể và xây dựng chương trình theo phương
trình động lực học của chúng
- Thiết bị ảo cần có một front panel như thiết bị vật lý được mô
phỏng Điều này có nghĩa là cần phải xây dựng trên thiết bị đo lường
ảo các núm, nút, màn hiển thị như thiết bị thật để người sử dụng có
thể thao tác và xem kết quả trên chúng Đây là một yêu cầu quan
trọng trong các bài toán mô phỏng nói chung và trong bài toán xây
dựng thiết bị ảo nói riêng
Trang 25- Tiếp cận tốt nhất với tính thời gian thực của hệ thống Đây là một yêu cầu khó và trên thực tế khó có thể giải quyết triệt để Người thiết
kế chỉ có thể làm cho hệ thống thiết bị ảo của mình tiệm cận tới tính thời gian thực bằng cách lựa chọn ngôn ngữ lập trình hiệu quả, phù hợp và xây dựng thuật toán lập trình tối ưu nhất
- Hệ thống phải có tính mở, tức là phải có tính linh hoạt cao, cho phép kết nối và trao đổi dữ liệu dễ dàng với các phần mềm ứng dụng khác Thiết bị ảo phải có khả năng kết nối, trao đổi qua các cổng và card phần cứng vào – ra để có thể xây dựng một hệ thống mô phỏng bán
tự nhiên
Từ các yêu cầu cơ bản kể trên có thể nhận thấy rằng, ngoài việc phải nắm chắc cấu tạo và nguyên lý hoạt động của thiết bị, để bài toán mô phỏng thiết bị ảo đạt hiệu quả cao nhất người lập trình cần phải lựa chọn một công cụ lập trình chuyên dụng cho bài toán mô phỏng phương trình động lực học, hỗ trợ cho việc xây dựng giao diện mặt máy ảo và có khả năng ghép nối và điều khiển với các thiết bị phần cứng Từ những kết quả phân tích và đánh giá ở chương một cho thấy: Có thể sử dụng ngôn ngữ LabVIEW cho bài toán xây dựng các thiết bị ảo cho phòng thí nghiệm ảo Đo lường - Lý thuyết mạch
Quá trình xây dựng một thiết bị ảo trên LabVIEW sẽ bao gồm các vấn
đề sau:
- Xây dựng giao diện cho thiết bị mô phỏng: Để thiết bị ảo có hiệu
quả cao nhất thì ngoài việc xây dựng mã nguồn mô tả phương trình
động lực học của thiết bị thực, cần phải xây dựng cho thiết bị ảo một giao diện sử dụng giống như thiết bị vật lý được mô phỏng Để làm
được điều này, trong phạm vi đồ án của mình, em đã dựa vào các tài liệu về giao diện đi kèm thiết bị để xây dựng một thư viện điều khiển tuỳ biến phục vụ cho thiết kế các thiết bị ảo của phòng thí nghiệm
Đo lường - Lý thuyết mạch
Trang 26- Kết nối và trao đổi dữ liệu: Trong phòng thí nghiệm Đo lường –
Lý thuyết mạch, chức năng chính của các thiết bị là phát các tín hiệu với dạng chuẩn hoặc thu và hiển thị các tín hiệu Như vậy, một cách
tự nhiên khi xây dựng thiết bị ảo, chúng ta sẽ nghĩ ngay đến việc xây dựng chúng như một terminal trong một mạng thiết bị ảo Điều này còn cho phép người sử dụng thao tác với các thiết bị ảo một cách độc lập với nhau làm tăng tính thời gian thực của hệ thống phòng thí nghiệm ảo Khi này phòng thí nghiệm ảo sẽ được xây dựng như một mạng của các thiết bị đo lường và panel thí nghiệm, kết nối và trao
đổi dữ liệu với nhau thông qua một mạng cục bộ Hình 2.1 minh hoạ một mạng thiết bị thí nghiệm ảo
Và theo cách đặt vấn đề về kết nối và trao đổi dữ liệu trong thiết bị ảo,
ta có thể xây dựng một thuật toán điều khiển chung cho thiết bị ảo như lưu đồ thuật toán sau:
Data Flow
Hình 2.1: Mô hình một mạng thiết bị ảo
Trang 27Sau đây em xin trình bày chi tiết quá trình xây dựng các thiết bị ảo trong phòng thí nghiệm Đo lường - Lý thuyết mạch
2.1 Xây dựng máy tạo tín hiệu chuẩn ảo
Máy phát tín hiệu chuẩn là một thiết bị không thể thiếu trong phòng thí nghiệm Đo lường - Lý thuyết mạch Thiết bị này được dùng để tạo ra các tín hiệu đầu vào chuẩn hình sin hoặc xung vuông cho các bài thí nghiệm Trong thư viện thiết bị ảo chuyên dụng phục vụ cho việc xây dựng phòng thí nghiệm
Đo lường - Lý thuyết mạch, em đã xây dựng thiết bị LS27A, một máy phát tín hiệu sin và xung vuông do hãng LEADER chế tạo, được sử dụng nhiều trong các phòng thí nghiệm Đo lường - Lý thuyết mạch
2.1.1 Nguyên lý làm việc và các đặc tính kỹ thuật
LS27A là thiết bị phát tín hiệu tần số thấp Các đặc tính kỹ thuật cơ bản của nó như sau:
Trang 28- Dải tần từ 10Hz đến 1MHz với 5 băng tần
- Sai số: ±(5% + 2Hz) trong dải [10Hz - 1MHz]
±(3% + 2Hz) trong dải [100Hz - 100KHz]
- Trở kháng ra: 600Ω
- Tín hiệu sin đầu ra từ 10Hz đến 1MHz, điện áp 5V với sai số:
Dưới 0,5% trong dải 200Hz - 100KHz
Dưới 1% trong dải 100Hz - 500KHz
Dưới 2% trong dải 10Hz - 1MHz
- Tín hiệu xung từ 10Hz đến 100KHz, điện áp 5V
- Có đầu vào đồng bộ
Để lấy tín hiệu ra, chúng ta làm như sau:
- Thiết lập công tắc WAVEFORM ở vị trí tín hiệu sin hoặc xung vuông theo yêu cầu
- Thiết lập công tắc HIGH - LOW ở vị trí tuỳ thuộc vào mức suy giảm tín hiệu, vị trí LOW tương ứng với mức suy giảm 1/10 (40dB)
- Thiết lập tần số nhờ chuyển mạch FREQUENCY RANGE và núm xoay FREQUENCY
- Bật công tắc nguồn POWER
- Điều chỉnh núm FINE để nhận được ở đầu ra OUTPUT dạng tín hiệu với tần số và mức điện áp theo yêu cầu
2.1.2 Lưu đồ thuật toán xây dựng thiết bị ảo LS27A
Từ các đặc tính kỹ thuật trình bày ở trên, chúng ta có thể xây dựng được lưu đồ thuật toán điều khiển thiết bị như sau:
Trang 29Trong chương trình, các tham số của tín hiệu sẽ được thay đổi như đáp ứng của các sự kiện xuất hiện bởi tác động của người sử dụng lên các điều khiển trên giao diện mặt máy của thiết bị ảo
Khi xây dựng máy phát tín hiệu chuẩn ảo thì đặc tuyến cũng như mức suy giảm tín hiệu không phụ thuộc vào trở kháng vào/ra và dải tần công tác của thiết bị Do vậy, để chương trình đơn giản hơn mà vẫn đảm bảo hoạt động theo đúng phương trình động học của thiết bị thì các điều khiển về mức suy giảm (công tắc HIGH - LOW) sẽ không được sử dụng
Trong mạng thiết bị ảo chuyên dụng dùng cho phòng thí nghiệm Đo lường - Lý thuyết mạch thì tín hiệu chính là dữ liệu được trao đổi giữa các chương trình Đối với mỗi thiết bị cụ thể có các yêu cầu khác nhau về thông tin của tín hiệu vào (như tham số về biên độ, tham số về tần số, tham số về pha, ) Do vậy, khi xây dựng cơ sở dữ liệu cho tín hiệu cần phải phù hợp với tất cả các thiết bị trong thư viện và đảm bảo khi cập nhật các thiết bị mới
Bắt đầu
Thiết lập các tham số của tín hiệu theo giá trị mặc định
Thay đổi các tham số của tín hiệu
theo yêu cầu
Phát tín hiệu vào mạng
Trang 30chúng phải trao đổi dữ liệu được với các thiết bị trước đó Trong thiết bị ảo LS27A dữ liệu ra được xây dựng gồm các trường sau:
- Freq: Chứa thông tin về tần số của tín hiệu
- Wave: Chứa thông tin về dạng tín hiệu (hình sin hoặc xung vuông)
- Ampli: Chứa thông tin về biên độ tín hiệu
- Data: Bao gồm thông tin về số mẫu tín hiệu, tần số lấy mẫu và mảng
dữ liệu của tín hiệu trong một chu kỳ
Cơ sở dữ liệu này đảm bảo đủ thông tin về tín hiệu để các chương trình
có thể trao đổi với nhau
Mảng dữ liệu chứa tín hiệu trong một chu kỳ thực chất là mảng tín hiệu
được lượng tử hoá theo thơì gian Vì vậy để đảm bảo khôi phục lại chính xác tín hiệu ta cần phải thay đổi số mẫu và tần số lấy mẫu theo tần số của tín hiệu Nếu giữ nguyên tần số lấy mẫu và thay đổi số lượng mẫu theo tần số tin hiệu thì với các tín hiệu có tần số trong dải MHz, số lượng mẫu tín hiệu cần phải có
là rất lớn Do vậy khi này tốc độ xử lý của chương trình giảm đi rất nhiều và không đáp ứng được tính thời gian thực của hệ thống Trong đồ án em thực hiện lượng tử hoá tín hiệu theo cách giữ cố định số mẫu tín hiệu và thay đổi tần số lấy mẫu theo công thức:
Trang 31Hình 2.4: Block Diagram của máy phát ảo LS27A
Toàn bộ chương trình nằm trong một vòng lặp while loop với điều kiện thoát là trạng thái của nút Power Tại đây, các tham số chính của tín hiệu như tần số, biên độ, dạng tín hiệu được thay đổi bởi người thao tác và gửi đến modul tạo tín hiệu (SubVI Fcn) và phát lên mạng theo form dữ liệu đã trình bày ở mục trên
Modul Fcn - modul chính của chương trình có nhiệm vụ tạo ra mảng dữ liệu tín hiệu với tần số và mức điện áp theo yêu cầu Trong modul này em sử dụng hàm Basic Function Generator trong thư viện Waveform Generation để
Hình 2.5: Block Diagram của modul Fcn
Trang 32tạo khối phát tín hiệu (hình 2.5) Hàm này nhận các tham số vào là Tần số, biên độ, dạng tín hiệu, số mẫu tín hiệu, tần số lấy mẫu (xây dựng theo công thức (2.1)) và phát ra một cluster chứa mảng tín hiệu và các thông tin về mẫu
2.1.3 Xây dựng giao diện mô phỏng mặt máy cho thiết bị ảo LS27A
Để xây dựng mặt máy cho thiết bị ảo LS27A, em đã tạo một thư viện
điều khiển tuỳ biến dựa trên các núm nút, màn hiển thị của thiết bị thực và xây dựng được một giao diện mô phỏng như hình 2.6
Trên mặt máy mô phỏng này, người dùng có thể sử dụng các núm nút, chuyển mạch để thay đổi tần số, biên độ, dạng tín hiệu của máy phát tín hiệu chuẩn LS27A để phát tín hiệu vào mạng thí nghiệm ảo cho các bài thí nghiệm
Đo lường – Lý thuyết mạch
2.2 Phân tích nguyên lý và xây dựng máy hiện sóng ảo LS1020
Máy hiện sóng – Oscilloscope là thiết bị đo vạn năng dùng để quan sát dạng tín hiệu và đo các tham số tín hiệu điện (biên độ, tần số, pha, ) Kết quả
đo hiển thị dưới dạng đồ thị hai chiều, trong đó trục dọc (trục Y) tỷ lệ với cường độ, còn trục ngang (trục X) tỷ lệ với chu kỳ tín hiệu Có nhiều kiểu
Hình 2.6: Giao diện sử dụng của máy phát tín hiệu ảo
Trang 33oscilloscope được phân loại theo cấu tạo như: oscilloscope điện tử, oscilloscope cơ, oscilloscope một tia, hai tia, song với tính chất thực tiễn của thiết bị, ở đây ta chỉ xem xét máy hiện sóng điện tử loại hai tia – là thiết bị
được sử dụng phổ biến trong các phòng thí nghiệm Đo lường - Lý thuyết mạch hiện nay
Trong đồ án của mình, em đã xây dựng máy hiện sóng ảo mô phỏng theo thiết bị LS1020 - một oscilloscope hai tia của hãng LEADER
2.2.1 Nguyên lý hoạt động của máy hiện sóng ảo LS1020
LS1020 là máy hiện sóng loại hai tia, tính năng kỹ thuật cơ bản của nó như sau:
- Thời gian quét: 0,1μs/vạch - 0,2s/vạch
- Bộ hiệu chuẩn: Điện áp ra 0,5Vp-p ±2, tần số 1KHz, xung vuông Nguyên lý hoạt động của thiết bị được trình bày ở dạng sơ đồ khối trên hình 2.7 Sơ đồ này biểu diễn nguyên lý hoạt động của một kênh tín hiệu
Màn hình
Trang 34Đây là cấu trúc đơn giản nhất của máy hiên sóng hoạt động trong chế
độ quét liên tục Có thể mô tả hoạt động của thiết bị như sau: Tín hiệu đầu vào
được chia làm hai đường Đường thứ nhất đi qua bộ khuếch đại của kênh lệch
đứng, tại đây tín hiệu được hiệu chỉnh bởi các chiết áp dịch tia và chuyển mạch hệ số lệch đứng rồi đi tới đầu vào Y của phần hiển thị Đường thứ hai
được đưa tới đầu vào của bộ chuyển mạch đồng bộ Tại đây, tuỳ thuộc vào chế
độ đồng bộ (đồng bộ trong hoặc động bộ ngoài) mà tín hiệu cần đo hoặc tín hiệu đồng bộ ngoài (được đưa vào đầu vào thứ hai của bộ chuyển mạch) sẽ
được chọn để kích hoạt cho bộ tạo quét Đầu ra của bộ tạo quét là một dãy xung răng cưa có chu kỳ TRC thoả mãn điều kiện: TRC = N.TTH ở đây N là số nguyên dương, TTH là chu kỳ tín hiệu cần đo Dãy xung này sau khi qua bộ khuếch đại của kênh tạo quét được đưa tới đầu vào X của phần hiển thị Tại
đây cặp tín hiệu X-Y sẽ điều khiển ống tia điện tử để hiển thị trên màn hình dạng tín hiệu cần quan sát
Trong thực tế ngoài chế độ đồng bộ ngoài và đồng bộ trong còn có chế
độ đồng bộ bằng điện áp lưới và chế độ quét đợi (phục vụ cho việc đo các tín hiệu không tuần hoàn hoặc có chu kỳ lớn) Tuy nhiên với phòng thí nghiệm
Đo lường - Lý thuyết mạch thì chế độ được sử dụng phổ biến nhất là chế độ quét liên tục đồng bộ trong, đây cũng là chế độ hoạt động của máy hiện sóng
được mô phỏng trong đồ án
Một vấn đề quan trọng cần chú ý khi thiết kế xây dựng máy hiện sóng
là vấn đề đồng bộ điện áp quét với tín hiệu cần điều khiển Ta biết rằng, mục
đích của bộ tạo quét là tạo ra được một dãy xung răng cưa liên tục có chu kỳ bằng số nguyên lần chu kỳ tín hiệu cần quan sát Trong một phép đo, cần xác
Mạch
so sánh
Máy phát xung răng cưa
Trang 35định pha của tín hiệu, do đó cần có biện pháp điều khiển thời điểm bắt đầu phát xung răng cưa Để giải quyết vấn đề này, trong máy hiện sóng LS1020,
bộ tạo quét được xây dựng theo sơ đồ minh hoạ ở hình 2.8
Khi điện áp tín hiệu bằng điện áp ngưỡng, ở đầu ra mạch so sánh xuất hiện một xung kích hoạt cho máy phát xung răng cưa hoạt động Kết quả ta tạo được dãy xung răng cưa đồng bộ với tín hiệu cần quan sát Việc điều chỉnh
điện áp ngưỡng Ungưỡng sẽ làm thay đổi thời điểm tạo xung răng cưa tương ứng với pha ban đầu của tín hiệu, do vậy cho phép quan sát được sự dịch pha của tín hiệu cần đo
2.2.2 Lưu đồ thuật toán và chương trình mô phỏng thiết bị LS1020
Xuất phát từ sơ đồ nguyên lý trình bày ở mục trước ta có thể xây dựng
được lưu đồ thuật toán điều khiển hoạt động của thiết bị như sau:
Toàn bộ quá trình mô phỏng được đặt trong một vòng lặp While Loop với điều kiện thoát là trạng thái của nút Power (minh hoạ ở hình 2.10) Việc xác định các kết nối với thiết bị phát, chuẩn bị quá trình thu tín hiệu được thực hiện trong Modul Focus (SubVI Focus) Tuỳ thuộc vào trạng thái của hai điều
Hình 2.9: Lưu đồ thuật toán điều khiển máy hiện sóng ảo LS1020
Có
Không Hiển thị dữ liệu ra màn hình