Professional Documents
Culture Documents
Tai - Lieu - LabVIEW - FULL
Tai - Lieu - LabVIEW - FULL
Tai - Lieu - LabVIEW - FULL
https://www.facebook.com/groups/486295328966960/ 1
Contents
I. TỔNG QUAN VỀ NGÔN NGỮ LẬP TRÌNH LABVIEW.......................................... 5
2.2.1.Numeric: ......................................................................................................... 17
2.2.2.Boolean:.......................................................................................................... 18
2.3.3. Hàm cụm & biến thể – Cluter & Variant: ..................................................... 30
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 2
2.3.4.Hàm số học – Numeric Function: .................................................................. 33
IV. Vòng lặp While (While Loop), vòng lặp For (For Loop) và kỹ thuật sử dụng vòng
lặp. ................................................................................................................................... 61
4.3.Formula Node:....................................................................................................... 64
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 3
V. Mảng ........................................................................................................................... 80
VI. Bó .............................................................................................................................. 84
7.2. Làm thế nào khai báo tham số cho một subVI? ................................................... 90
7.4. Việc tạo các VI con từ các thành phần của một VI.............................................. 92
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 4
I. TỔNG QUAN VỀ NGÔN NGỮ LẬP TRÌNH LABVIEW
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 5
Ě Cho phép kết hợp với nhiều ngôn ngữ truyền thống như C, C++…
Ě Cho phép thực hiện các thuật toán điều khiển như PID, Logic mờ (Fuzzy Logic).
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 6
1.6. Các Module và bộ công cụ LabVIEW
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 7
excution) để xem dữ liệu truyền trong chương trình như thế nào và từng bước thực hiện chương trình
thế nào để gỡ rối hoặc phát triển chương trình dễ dàng hơn.
- Labview cung cấp khả năng xây dựng những chương trình cho các hệ thống khoa học kỹ
thuật,cung cấp cho bạn một ngôn ngũ lập trình linh hoạt và có tính khả thi.
- Labview cung cấp cách nhanh hơn để lập trình với các thiết bị và các hệ thống thu thập dữ
liệu. Với việc dùng Labview, bạn có thể giảm bớt thời gian phát triển hệ thống và tăng hiệu suất làm
việc. Labview cung cấp những công cụ mạnh cho việc ghép nối các thiết bị vật lý bên ngoài mà không
phải qua phần thiết kế hệ thống một cách phức tạp như trong những ngôn ngữ khác.
- Labview là ngôn ngữ lập trình đồ họa nên rất trực quan và dễ sử dụng. Labview chứa các thư
viện cho việc thu thập dữ liệu, điều khiển các thiết bị GBIB và Serial, phân tích dữ liệu, biểu diễn dữ
liệu và cất giữ dữ liệu. Với một thư viện phong phú cho các hệ thống điều khiển, Labview có thể ứng
dụng mạnh trong việc lập trình điều khiển hệ thống.
*Việc sử dụng các hàm chức năng và các VI gắn sẵn
- LabVIEW bao gồm các VI và các hàm chức năng gán sẵn để trợ giúp bạn xây dựng các ứng
dụng đặc trưng, chẳng hạn như các VI và các hàm chức năng thu nhận dữ liệu, các VI mà truy nhập
các VI khác, các VI mà giao tiếp với các ứng dụng khác... Bạn có thể sử dụng các VI như các VI con
trong một ứng dụng để rút gọn thời gian phát triển. Trước khi bạn xây dựng một VI mới, xem xét việc
tìm kiếm bảng Functions cho các VI và các hàm thời gian tương tự và việc sử dụng một VI tồn tại như
điểm bắt đầu cho một VI mới.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 8
vì sự xuất hiện và hoạt động của chúng mô phỏng các dụng cụ thực tế. Các VI có cả 2 tương tác đó là:
một tương tác giao diện người dùng, một mã nguồn tương đương, và truy nhập các tham số từ các VI
tầng cao.
- LabVIEW gồm có 3 thành phần chính đó là: bảng giao diện ( The Front Panel), sơ đồ khối
(The Block Diagram) và biểu tượng & đầu nối (The Icon - Connect).
a. Front Panel
- Bảng giao diện Front Panel là giao diện mà người sử dụng hệ thống nhìn thấy. Các VI bao
gồm một giao diện người dùng có tính tương tác mà được gọi là bảng giao diện, vì nó mô phỏng mặt
trước của một dụng cụ vật lý. Bảng giao diện có thể bao gồm các núm, các nút đẩy, các đồ thị và các
dụng cụ chỉ thị và điều khiển khác. Người dùng nhập vào dữ liệu sử dụng bàn phím và chuột rồi sau đó
quan sát các kết quả trên màn hình máy tính. Front Panel thường gồm các bộ điều khiển (control) và
các bộ chỉ thị (inducator): Control là các đối tượng đặt trên của sổ Front Panel để cung cấp dữ liệu cho
chương trình. Indicator là đối tượng đặt trên cửa sổ Front Panel dùng để hiển thị kết quả.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 9
Trong đó:
(1) là nút chạy chương trình
(2) nút chạy lặp
(3) nút dừng cưỡng ép chương trình
(4) nút tạm dừng
(5) text setting (màu sắc, định dạng, kích thước, phông chữ)
(6) giống điều đối tượng theo hàng dọc và ngang
(7) phân bố các đối tượng
(8) thay đổi kích thước các đối tượng
(9) lệnh bổ sung
(10) khung tìm kiếm
(11) của sổ trợ giúp
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 10
Hình 5. Cửa sổ Block Diagram
- Sơ đồ khối Block Diagram là một sơ đồ được xây dựng trên môi trường Labview, nó có thể
gồm nhiều đối tượng và các hàm chức năng khác nhau. Block Diagram là một mã nguồn đồ họa. Các
thiết bị đầu cuối chỉ mất đi sau khi loại bỏ đối tượng tương ứng trên Front Panel. Mỗi sơ đồ khối sử
dụng đồ thị biễn các chức năng để điều khiển các đối tượng trên giao diện. Các đối tượng trên giao
diện xuất hiện như biểu tượng các thiết bị trên sơ đồ khối. Kết nối điều khiển và các đầu của dụng cụ
chỉ thị tới Express VIs, VIs, và các chức năng. Dữ liệu chuyển đi thông qua dây dẫn từ các điều khiển
đến các VI và các hàm chức năng, từ các VI và các hàm chức năng đến các VI và các hàm chức năng
khác, và từ các VI và các hàm chức năng đến các dụng cụ chỉ thị. Sự di chuyển của dữ liệu thông qua
các nút trên sơ đồ khối xác định mệnh lệnh thực hiện của các VI và các hàm chức năng. Sự di chuyển
dữ liệu này được biết như lưu đồ lập trình. Cấu trúc của một Block Diagram gồm các thiết bị đầu cuối
(Timinal), nút (node) và các dây nối (Wire).
- Terminal: là các cồng mà dữ liệu truyền qua giữa Block Diagram và Front panel, và giữa các
Node trong Block Diagram. Các Terminal tồn tại dưới dạng các Icon của các Function.
- Node: là các phần tử thực thi chương trình, chúng tương tự như các chương trình con trong
các ngôn ngữ lập trình thông thường.
- Wire: là dấy nối dữ liệu giữa các node.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 11
Hình 6. Cửa sổ Block Diagram
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 12
Hình 7. Dòng dữ liệu trong Labiew
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 13
Hình 8. Biểu tượng sơ đồ
Hình 9. Ví dụ về Flowchart
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 14
II. Các công cụ hỗ trợ lập trình
- Các công cụ lập trình trên Labview bao gồm các công cụ để tạo ra các thiết bị ảo(VI). Nó bao
gồm các công cụ trong bảng giao diện (Front Panel) và các công cụ trong sơ đồ khối (Block Diagram).
Việc lập trình trên Labview cần sử dụng các bản: Tools Palette, Controls Panelette, Functions Palette.
Các bản đó cung cấp các chức năng để người sử dụng có thể tạo và thay đổi trên Front Panel và Block
Diagram.
Positionting Những lựa chọn vị trí, thay đổi kích thước và lựa chọn các
tool đối tượng
Soạn thảo văn bản và tạo ra các nhãn tự do.
Labeling tool
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 15
Nối dây các đối tượng với nhau trong sơ đồ khối
Wiring tool
Object pop-up Mang lên trên một thực đơn pop-up cho một đối tượng.
menu tool
Cuộn xuyên qua cửa sổ không sử dụng thanh công cụ cuộn.
Scroll tool
Thiết đặt các điểm dừng trên các VI, các hàm chức năng,
Breakpoint tool
các vòng lặp, các chuỗi và các trường hợp.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 16
Hình 11. Bảng mẫu Controls
2.2.1.Numeric:
- Các điều khiển và dụng cụ chỉ thị số ( Numeric Controls and Indicator ). Ta dùng điều khiển
số để nhập các đại lượng số, trong khi đó những dụng cụ chỉ thị số thì hiển thị các đại lượng số. Hai
đối tượng số được sử dụng thông dụng nhất đó là digital control - điều khiển số và digital indicator –
chỉ thị số.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 17
Hình 12. Bảng điều khiển và chỉ thị số
2.2.2.Boolean:
- Các điều khiển và dụng cụ chỉ thị kiểu logic (Boolean Controls and Indicator ). Ta sử dụng
điều khiển và dụng cụ chỉ thị kiểu logic cho việc nhập và hiển thị các giá trị kiểu Bool (đúng/sai-
True/False). Các đối tượng đại số Bool mô phỏng các chuyển mạch - công tắc, các nút bấm, đèn LED.
Các đối tượng đại số Bool được sử dụng thông dụng nhất là vertical toggle switch – công tắc đảo chiều
thẳng đứng và round LED - đèn LED xung quanh.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 18
Hình 13. Bảng điều khiển và chỉ thị logic.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 19
Hình 14. Bảng Graph
- Ngoài ra, LabVIEW con rất nhiều thư viện trong bảng mẫu Control như: System, Classic,
Express, Control Design & Simulation…Trong đó có hỗ trợ rất nhiều hàm với chức năng khác nhau.
Việc sử dụng các hàm trong từng thư viện hết sức linh hoạt và tùy thuộc vào mục đích sử dụng và yêu
cầu từng bài toán.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 20
Hình 15. Bảng Functions
- Việc khai thác thế mạnh của LabVIEW trên mỗi lĩnh vực phụ thuộc rất nhiều vào khả năng
khai thác thư viện hàm của LabVIEW. Thư viện hàm của LabVIEW được hình tượng hoá trên bảng
Funtion. Người sử dụng dễ dàng truy cập hàm cần dùng bằng cách kích chuột vào biểu tượng trên
bảng.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 21
Hình 16. Hàm cấu trúc- Structures Function.
- Giống như bạn có thể thấy, chúng tôi chủ yếu sẽ làm việc với For Loop, While Loop, Nút
công thức. Nếu bạn đã có một số kinh nghiệm trong lập trình ngôn ngữ, sau đó các vòng lặp xây dựng
sẽ không khó để đối phó với.
While Loop:
- Lặp lại những gì nằm bên trong nó cho đến khi thiết bị đầu cuối có điều kiện nhận được một
giá trị Boolean cụ thể. Theo mặc định, nếu thiết bị đầu cuối có điều kiện nhận được một TRUE (Giá trị
Boolean) lặp lại dừng. Tuy nhiên, điều kiện này có thể là thay đổi bằng cách nhấp chuột phải vào nó và
thay đổi hành vi tiếp tục từ dừng lại nếu đúng để tiếp tục nếu đúng.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 22
Hình 17. While Loop [1]
For Loop:
- For Loop và While Loop là hai lệnh cần thiết trong mọi chương trình ngôn ngữ. Sự khác biệt
chính giữa hai cái này là bởi cái sau số lần lặp được giới hạn ở số được xác định trước (N). Lặp lại (i)
terminal cung cấp số lần lặp hiện tại của vòng lặp, dao động từ 0 đến n-1.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 24
lnp1(x) Logarit tự nhiên (Luận +1) Tính toán logarit tự nhiên của (x + 1).
Tính toán logarit của x (với cơ sở của
log(x) Cơ sở logarit 10
10).
So sánh x và y và trả về giá trị lớn hơn
max(x,y) Lớn nhất nhỏ nhất
giá trị.
So sánh x và y và trả về giá trị nhỏ hơn
min(x,y) Lớn nhất nhỏ nhất
giá trị.
Tính phần còn lại của x / y, khi thương
mod(x,y) Quotient & phần còn lại
số được làm tròn về phía tích hợp.
pow(x,y) Sức mạnh của X Tính x tăng lên sức mạnh y.
Tạo một số dấu phẩy động giữa 0 và 1
rand( ) Số ngẫu nhiên (0 - 1)
độc quyền.
Tính phần còn lại của x / y, khi thương
rem(x,y) Quotient & phần còn lại số được làm tròn đến số nguyên gần
nhất.
Trả về 1 nếu x lớn hơn 0, trả về 0 nếu x
sign(x) Ký tên bằng 0 và trả về chương trình1 nếu x
nhỏ hơn hơn 0.
Tính sin của x, trong đó x nằm trong
sin(x) Sin
radian.
Trả về kích thước của kích thước di
sizeOfDim(ary,di) -
được chỉ định cho mảng ary.
sqrt(x)
Căn bậc hai Tính căn bậc hai của x.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 26
Hình 22. Nút phản hồi và thanh ghi Shift Registers
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 27
màu đối tượng)
Sử dụng hằng này để cung cấp một giá trị mảng
Array Constant
không đổi cho khối sơ đồ.
Trả về giá trị tối đa và tối thiểu được tìm thấy trong
Array Max & Min
mảng, cùng với các chỉ số cho từng giá trị.
Array Size Trả về số lượng phần tử trong mỗi chiều của mảng.
Trả về một phần của mảng bắt đầu từ chỉ mục và
Array Subset
chứa độ dài các yếu tố.
Chuyển đổi một mảng 1D thành một cụm các phần tử
cùng loại như các phần tử mảng. Nhấp chuột phải
Array To Cluster
vào chức năng và chọn Cluster Kích thước từ menu
phím tắt để đặt số lượng phần tử trong cụm.
Chuyển đổi một mảng thành một ma trận các phần tử
cùng loại với các phần tử mảng. Nối dữ liệu vào đầu
Array To Matrix
vào Real 2D Array để xác định thể hiện đa hình để sử
dụng hoặc chọn thủ công.
Nối nhiều mảng và nối các phần tử vào một mảng n
Build Array
chiều.
Chuyển đổi một cụm các phần tử có cùng kiểu dữ
Cluster To Array
liệu thành mảng 1Dcủa các yếu tố cùng loại dữ liệu.
Chia các phần tử của mảng thành các mảng đầu ra,
đặt các yếu tố vào đầu ra liên tiếp. Hàm này giảm bất
Decimate 1D Array
kỳ các phần tử gây ra các mảng đầu ra có độ dài khác
nhau.
Xóa một phần tử hoặc phân đoạn khỏi mảng chiều
dài n-dim các yếu tố bắt đầu từ chỉ số. Trả về mảng
Delete From Array
đã chỉnh sửa trong mảng w / tập hợp con đã bị xóa và
phần tử hoặc phần tử bị xóa trong phần bị xóa phần.
Trả về phần tử hoặc phân đoạn của mảng n chiều tại
Index Array
chỉ mục.
Initialize Tạo một mảng n chiều trong đó mọi phần tử là
Array khởi tạo giá trị của phần tử.
Insert Into Chèn một phần tử hoặc phân đoạn vào mảng n-dim
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 28
Array tại điểm bạn chỉ định trong chỉ mục.
Interleave Xen kẽ các yếu tố tương ứng từ các mảng đầu vào
1D Arrays thành một mảng đầu ra duy nhất.
Tuyến tính nội suy một giá trị y thập phân từ một
Interpolate
mảng số hoặc các điểm sử dụng chỉ số phân số hoặc
1D Array
giá trị x.
Chuyển đổi một ma trận các phần tử thành một mảng
Matrix To các phần tử giống nhau loại dữ liệu. Nối dữ liệu vào
Array đầu vào Real Matrix để xác định Ví dụ đa hình để sử
dụng hoặc chọn thủ công.
Replace
Thay thế một phần tử hoặc phân đoạn trong một
Array
mảng tại điểm bạn chỉ định trong chỉ mục.
Subset
Reshape Thay đổi kích thước của một mảng theo các giá trị
Array củakích thước kích thước 0..m-1.
Reverse 1D Đảo ngược thứ tự của các phần tử trong mảng, trong
Array đó mảng là bất kỳ kiểu.
Rotate 1D Xoay các phần tử của mảng số lượng vị trí và trong
Array hướng được chỉ định bởi n.
Tìm kiếm một phần tử trong mảng 1D bắt đầu từ chỉ
mục bắt đầu. Bởi vì tìm kiếm là tuyến tính, bạn
Search 1D
không cần phải sắp xếp mảng trước gọi chức năng
Array
này. LabVIEW ngừng tìm kiếm ngay khi yếu tố được
tìm thấy.
Trả về một phiên bản được sắp xếp của mảng với các
phần tử được sắp xếp trong thứ tự tăng dần. Nếu
mảng là một mảng của cụm, hàm sắp xếp các yếu tố
Sort 1D
bằng cách so sánh các yếu tố đầu tiên. Nếu các yếu tố
Array
đầu tiên khớp, hàm so sánh thứ hai và tiếp theo các
yếu tố. Cửa sổ kết nối hiển thị các loại dữ liệu mặc
định cho chức năng đa hình này.
Split 1D Chia mảng tại chỉ mục và trả về hai phần với
Array yếu tố của chỉ số ở đầu phân đoạn thứ hai.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 29
Nội suy các điểm trong mảng 1D đại diện cho một
2D không đồ thị giảm dần. Hàm này so sánh ngưỡng
y với các giá trị trong mảng số hoặc điểm bắt đầu từ
Threshold
chỉ mục bắt đầu cho đến khi nó tìm thấy một cặp
1D Array
phần tử liên tiếp sao cho ngưỡng y là lớn hơn hoặc
bằng giá trị của phần tử đầu tiên và nhỏ hơn hoặc
bằng giá trị của phần tử thứ hai.
Transpose Sắp xếp lại các phần tử của mảng 2D sao cho mảng
2D Array 2D [i, j] trở thành mảng chuyển [j, i].
Hình 24. Hàm cụm & biến thể – Cluter & Variant
Bảng 5 Chi tiết về bảng cụm [2]
Palette Object(Bảng
Sự miêu tả
màu đối tượng)
Chuyển đổi một mảng 1D thành một cụm các
Array To
phần tử cùng loại như các phần tử mảng. Nhấp
Cluster
chuột phải vào chức năng và chọn Cluster Kích
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 30
thước từ menu phím tắt để đặt số lượng phần tử
trong cụm.
Build Cluster Gói từng phần tử đầu vào thành một cụm và tập
Array hợp tất cả cụm phần tử thành một mảng của cụm.
Bundle Lắp ráp một cụm từ các yếu tố cá nhân.
Thay thế một hoặc nhiều thành phần cụm. Hàm
Bundle By này dùng để chỉ các yếu tố cụm theo tên thay vì
Name theo vị trí của chúng trong
cụm.
Gọi việc thực hiện tổ tiên gần nhất của một
phương thức lớp. Bạn chỉ có thể sử dụng nút
Phương thức cha mẹ gọi trên khối sơ đồ của một
Call Parent
thành viên VI thuộc về một lớp kế thừa VI thành
Method
viên từ một lớp tổ tiên. Thành viên VI phải là
thành viên điều phối VI năng động và có cùng tên
là thành viên tổ tiên VI.
Cluster Sử dụng hằng số này để cung cấp một giá trị cụm
Constant không đổi cho khối sơ đồ.
Chuyển đổi một cụm các phần tử có cùng kiểu dữ
Cluster To
liệu thành 1D mảng các phần tử của cùng một
Array
loại dữ liệu.
Trả về dữ liệu lớp cho lớp có đường dẫn bạn nối
tới đầu vào đường dẫn lớp. Nếu lớp không có
trong bộ nhớ, LabVIEW cố gắng tải nó từ
đĩa. Nếu bất kỳ phụ thuộc bị thiếu, LabVIEW tìm
Get LV Class
kiếm các phụ thuộc còn thiếu. Nếu LabVIEW
Default Value
không thể tìm thấy sự phụ thuộc, LabVIEW giả
định sự phụ thuộc bị thiếu và không nhắc người
dùng duyệt đến cần thiết
tập tin.
Get LV Class Trả về dữ liệu lớp cho lớp có tên bạn nối với nhập
Default Value tên lớp. Nếu lớp không có trong bộ nhớ hoặc bị
By Name hỏng, LabVIEW trả về một lỗi.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 31
Get LV Class
Trả về tên của lớp của đối tượng.
Name
Get LV Class
Trả về đường dẫn đến lớp của đối tượng.
Path
Index & Lập chỉ mục một tập hợp các mảng và tạo một
Bundle mảng cụm trong đó phần tử thứ i chứa phần tử
Cluster Array thứ i của mỗi mảng đầu vào.
Đối tượng LabVIEW là kiểu dữ liệu tổ tiên chung
cho tất cả Các lớp LabVIEW. Bạn có thể sử dụng
LV Object
Đối tượng LabVIEW để tạo các phương thức
Constant
chung có thể xử lý tất cả các kiểu dữ liệu của lớp
LabVIEW.
Kiểm tra trong thời gian chạy xem đối tượng
trong có cùng lớp với, hoặc là một lớp con của,
đối tượng đích. Sử dụng chức năng này trên sơ đồ
Preserve Run khối của một SubVI khi bạn muốn đảm bảo rằng
Time Class LabVIEW hạ thấp lớp LabVIEW đầu ra của nút
subVI cho cùng loại lớp với LabVIEW
đầu vào lớp khi subVI nhận được một lớp con của
dự kiến kiểu đầu vào.
Đánh máy một tham chiếu, chẳng hạn như điều
To More
khiển hoặc định nghĩa kiểu, cho một lớp chung
Generic Class
hơn trong hệ thống phân cấp thừa kế.
Đánh máy một tham chiếu, chẳng hạn như điều
To More
khiển hoặc định nghĩa kiểu, cho một lớp cụ thể
Specific Class
hơn trong hệ thống phân cấp thừa kế.
Unbundle Chia một cụm thành từng yếu tố riêng lẻ của nó.
Unbundle By
Trả về các thành phần cụm có tên bạn chỉ định.
Name
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 32
2.3.4.Hàm số học – Numeric Function:
- Sử dụng hàm này để tạo và thực hiện những thao tác số học, lượng giác, Lôgarit, số phức toán
học trong các số và chuyển đổi những số từ một kiểu dữ liệu này sang một kiểu dữ liệu khác. Đường
dẫn truy cập: Function>>Numeric. Biểu tượng của hàm:
Absolute Value Trả về giá trị tuyệt đối của đầu vào.
Add Array
Trả về tổng của các phần tử trong mảng số.
Elements
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 33
Thực hiện số học trên một hoặc nhiều đầu vào số,
mảng, cụm hoặc Boolean. Để chọn thao tác (cộng,
nhân, AND, OR hoặc XOR), bấm chuột phải vào
Compound
chức năng và chọn thay đổi chế độ từ menu lối tắt.
Arithmetic
Khi bạn chọn chức năng này từ bảng số, chế độ mặc
định là Cộng (+). Khi bạn chọn chức năng này từ
bảng Boolean chế độ mặc định là OR.
Sử dụng hằng số DBL chuyển giá trị số dấu phẩy
DBL Numberic động, chính xác kép cho sơ đồ khối. Đặt giá trị này
Constant bằng cách nhấp vào bên trong hằng số bằng công cụ
điều hành và nhập giá trị.
Biểu thị lỗi làm tròn số cho một số điểm nổi với độ
chính xác cho trước. Sử dụng hằng số epsilon của
Machine Epsilon
máy để so sánh xem hai số dấu phẩy động có tương
đương hay không.
Multiply Array Trả về sản phẩm của tất cả các phần tử trong mảng
Elements số. Nếu mảng số là một mảng trống, hàm trả về giá
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 34
trị là 1. Nếu mảng số chỉ chứa một phần tử, hàm sẽ
trả về phần tử đó.
Square Root Tính căn bậc 2 của giá tri đầu vào.
Subtract Tính toán sự khác biệt của các yếu tố đầu vào.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 35
2.3.5. Hàm Boolean - Boolean Function:
- Chứa các hàm logic như: and, or, xor, nor và các hàm logic phức tạp khác. Đường dẫn truy
cập: Function>>Boolean.
Biểu tượng của hàm Boolean:
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 36
Boolean.
Chuyển đổi một mảng Boolean thành một số nguyên
Boolean Array hoặc một số điểm cố định bằng cách giải thích mảng
To Number là biểu diễn nhị phân của số đó. Phần tử đầu tiên của
mảng tương ứng với bit có ý nghĩa nhỏ nhất trong số.
Chuyển đổi giá trị Boolean FALSE hoặc TRUE
Boolean To(0,1) thành số nguyên 16 bit với giá trị tương ứng là 0 hoặc
1.
Thực hiện số học trên một hoặc nhiều đầu vào số,
mảng, cụm hoặc Boolean. Để chọn thao tác (Thêm,
Nhân, VÀ, HOẶC hoặc XOR), bấm chuột phải vào
Compound
chức năng và chọn Thay đổi Chế độ từ menu lối tắt.
Arithmetic
Khi bạn chọn chức năng này từ bảng Số, chế độ mặc
định là Thêm. Khi bạn chọn chức năng này từ bảng
Boolean, chế độ mặc định là HOẶC.
Tính toán độc quyền logic hoặc (XOR) của các đầu
vào. Cả hai đầu vào phải là giá trị Boolean, giá trị số
Exclusive Or hoặc cụm lỗi. Nếu cả hai đầu vào là TRUE hoặc cả
hai đầu vào là FALSE, hàm sẽ trả về FALSE. Nếu
không, nó trả về ĐÚNG.
Sử dụng hằng số này để cung cấp giá trị FALSE cho
False Constant
sơ đồ khối.
Phủ định x và sau đó tính toán OR logic của y và x
phủ định. Cả hai đầu vào phải là giá trị Boolean, giá
Implies
trị số hoặc cụm lỗi. Nếu x là TRUE và y là FALSE,
hàm sẽ trả về FALSE. Nếu không, nó trả về ĐÚNG.
Tính toán phủ định logic của đầu vào. Nếu x là
Not FALSE, hàm trả về TRUE. Nếu x là TRUE, hàm trả
về SAI.
Tính toán NAND logic của các đầu vào. Cả hai đầu
vào phải là giá trị Boolean, giá trị số hoặc cụm lỗi.
Not And
Nếu cả hai đầu vào là TRUE, hàm sẽ trả về SAI. Nếu
không, nó trả về ĐÚNG.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 37
Tính toán phủ định logic của độc quyền logic hoặc
(XOR) của các đầu vào. Cả hai đầu vào phải là giá trị
Not Exclusive Or Boolean, giá trị số hoặc cụm lỗi. Nếu cả hai đầu vào
là TRUE hoặc cả hai đầu vào là FALSE, hàm sẽ trả
về TRUE. Nếu không, nó trả về SAI.
Tính toán logic NOR của các đầu vào. Cả hai đầu
vào phải là giá trị Boolean, giá trị số hoặc cụm lỗi.
Not Or
Nếu cả hai đầu vào là FALSE, hàm sẽ trả về TRUE.
Nếu không, nó trả về SAI.
Chuyển đổi một số nguyên hoặc số điểm cố định
thành một mảng Boolean. Nếu bạn nối một số
nguyên thành số, mảng Boolean trả về một mảng
gồm 8, 16, 32 hoặc 64 phần tử, tùy thuộc vào số
Number To lượng bit trong số nguyên. Nếu bạn nối một số điểm
Boolean Array cố định thành số, kích thước của mảng mà mảng
Boolean trả về bằng với độ dài từ của số điểm cố
định. Phần tử thứ 0 của mảng tương ứng với bit có ý
nghĩa nhỏ nhất trong biểu diễn phần bù của hai số
nguyên.
Tính toán logic OR của các đầu vào. Cả hai đầu vào
phải là giá trị Boolean, giá trị số hoặc cụm lỗi. Nếu
Or
cả hai đầu vào là FALSE, hàm sẽ trả về FALSE. Nếu
không, nó trả về TRUE.
Trả về FALSE nếu tất cả các phần tử trong mảng
Boolean là FALSE hoặc nếu mảng Boolean trống.
Or Array Nếu không, hàm trả về ĐÚNG. Hàm này chấp nhận
Elements một mảng có kích thước bất kỳ nhưng chỉ trả về một
giá trị duy nhất dựa trên tất cả các giá trị trong mảng
Boolean.
Sử dụng hằng số này để cung cấp giá trị TRUE cho
True Constant
sơ đồ khối.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 38
2.3.6.Hàm chuỗi – String Function:
- Sử dụng hàm này để liên kết hai hay nhiều chuỗi, tách một tập con của các chuỗi từ một
chuỗi, chuyển dữ liệu vào bên trong chuỗi, và định dạng một chuỗi sử dụng trong một công đoạn xử lý
từ hoặc ứng dụng bảng biểu. Đường dẫn truy cập: Function>>String. Biểu tượng của hàm:
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 39
một chuỗi dựa trên cấu hình của Express VI.
Carriage
Bao gồm một chuỗi không đổi chứa giá trị CR
Return
ASCII.
Constant
Ghép chuỗi đầu vào và mảng 1D của chuỗi thành
Concatenate
một chuỗi đầu ra duy nhất. Đối với đầu vào mảng,
Strings
hàm này nối từng phần tử của mảng.
Empty String Bao gồm một chuỗi không đổi trống (độ dài bằng
Constant không).
End of Line Bao gồm một chuỗi không đổi chứa phụ thuộc vào
Constant nền tảng giá trị cuối dòng.
Format Hiển thị giá trị dấu thời gian hoặc giá trị số theo
Date/Time thời gian trong định dạng bạn chỉ định sử dụng mã
String định dạng thời gian.
Định dạng chuỗi, đường dẫn, kiểu liệt kê, dấu thời
Format Into
gian, Boolean hoặc dữ liệu số dưới dạng văn bản.
String
Line Feed Bao gồm một chuỗi không đổi chứa giá trị ASCII
Constant LF.
Tìm kiếm biểu thức chính quy trong chuỗi bắt đầu ở
offset. Nếu Hàm tìm thấy một kết quả khớp, nó chia
chuỗi thành ba chuỗi con. Một biểu thức chính quy
Match Pattern đòi hỏi một sự kết hợp cụ thể của ký tự cho khớp
mẫu. Chức năng này cung cấp cho bạn ít hơn tùy
chọn cho chuỗi phù hợp nhưng thực hiện nhanh hơn
chức năng Kết hợp biểu thức chính quy.
Tìm kiếm một biểu thức chính quy trong chuỗi đầu
vào bắt đầu tại phần bù bạn nhập. Nếu hàm tìm thấy
Match Regular
khớp, nó sẽ tách chuỗi thành ba chuỗi con và bất kỳ
Expression
số lượng phụ. Thay đổi kích thước hàm để xem bất
kỳ chuỗi con nào được tìm thấy trong chuỗi.
Normalize End Chuyển đổi kết thúc dòng của chuỗi đầu vào thành
Of Line kết thúc dòng định dạng bạn chỉ định. Nếu bạn
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 40
không chỉ định định dạng kết thúc dòng, VI này
chuyển đổi các kết thúc dòng của chuỗi thành dòng
kết thúc mà nền tảng hiện tại mong đợi. Sử dụng VI
này để thực hiện chuỗi của bạn có thể đọc được bởi
các nền tảng khác nhau hoặc bằng lệnh dòng của
nền tảng hiện tại.
Replace Chèn, xóa hoặc thay thế một chuỗi con ở phần bù
Substring bạn chỉ định trong chuỗi.
Scan From Quét chuỗi đầu vào và chuyển đổi chuỗi theo chuỗi
String định dạng.
Thay thế một hoặc tất cả các phiên bản của chuỗi
con bằng một chuỗi khác chuỗi con. Để bao gồm
Search and
nhiều dòng? đầu vào và cho phép nâng cao tìm
Replace String
kiếm biểu thức thông thường, bấm chuột phải vào
chức năng và chọn Biểu hiện thông thường.
Space Sử dụng hằng số này để cung cấp chuỗi không gian
Constant một ký tự cho sơ đồ khối.
Spreadsheet Chuyển đổi chuỗi bảng tính thành một mảng kích
String To thước và biểu diễn kiểu mảng. Hàm này hoạt động
Array cho mảng của chuỗi và mảng số.
String Sử dụng hằng này để cung cấp một chuỗi văn bản
Constant không đổi cho khối sơ đồ.
String Length Trả về độ dài số ký tự (byte) trong chuỗi.
Trả về chuỗi con của chuỗi đầu vào bắt đầu ở offset
String Subset
và chứa số lượng ký tự.
Bao gồm một chuỗi không đổi chứa ASCII HT (tab
Tab Constant
ngang) giá trị.
Chuyển đổi tất cả các ký tự chữ cái trong chuỗi
thành chữ thường nhân vật. Đánh giá tất cả các số
To Lower Case trong chuỗi dưới dạng mã ASCII cho nhân
vật. Chức năng này không ảnh hưởng đến phi chữ
cái nhân vật.
To Upper Case Chuyển đổi tất cả các ký tự chữ cái trong chuỗi
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 41
thành chữ hoa nhân vật. Đánh giá tất cả các số trong
chuỗi dưới dạng mã ASCII cho nhân vật. Chức
năng này không ảnh hưởng đến phi chữ cái nhân
vật.
Xóa tất cả khoảng trắng ASCII (dấu cách, tab, trả
Trim về vận chuyển, và linefeed) từ đầu, cuối hoặc cả hai
Whitespace đầu của chuỗi. Trim Whitespace VI không loại bỏ
byte kép nhân vật.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 42
này sử dụng ký tự đầu tiên trong chuỗi. Nếu
char là một số, hàm này diễn giải nó là giá trị
ASCI của một ký tự. Nếu char là số dấu phẩy
động, hàm này làm tròn đến số nguyên gần
nhất. Mặt khác, hàm này trả về mảng đầu vào
FALSE.
Trả về TRUE nếu mảng đầu vào trống. Nếu
Empty Array?
không thì hàm này trả về FALSE.
Trả về TRUE nếu chuỗi/đường dẫn là một
Empty String/Path? đường dẫn trống rỗng, nếu không hàm này trả
về FALSE.
Trả về TRUE nếu x bằng 0. Nếu không hàm
Equal To 0?
này trả về FALSE.
Trả về TRUE nếu x bằng y. Mặt khác, hàm
Equal? này trả về thay đổi chế độ có thể so sánh của
hàm này.
Trả về TRUE nếu FXP bao gồm trạng thái
Fixed-Point Overflow? tràn và FXP là kết quả bị tràn. Nếu không
hàm này trả về FALSE.
Trả về TRUE nếu x lớn hơn hoặc bằng 0. Nếu
Greater Or Equal To 0?
không, hàm này trả về FALSE.
Trả về TRUE nếu x lớn hơn hoặc bằng y. Nếu
Greater Or Equal?
không, hàm này trả về FALSE.
Trả về TRUE nếu x lớn hơn 0. Nếu không,
Greater Than 0?
hàm này trả về FALSE.
Trả về TRUE nếu x lớn hơn y. Nếu không,
Greater? hàm này trả về FALSE. Bạn có thể thay đổi
chế độ so sánh của chức năng này.
Trả về TRUE nếu char biểu thị một chữ số
hex từ 0-9, A đến F hoặc a đến f. Nếu char là
Hex Digit? một chuỗi, hàm này sử dụng ký tự đầu tiên
trong chuỗi. Nếu char là một số, hàm này diễn
giải nó là giá trị ASCII của 1 ký tự. Nếu char
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 43
là số dấu phẩy động, hàm này làm tròn đến số
nguyên gần nhất. Nếu không, hàm này trả về
FALSE.
Xác định xem x có nằm trong phạm vi được
chỉ định bởi giới hạn trên không và tùy ý ép
buộc giá trị nằm trong phạm vi đó. Hàm chỉ
thực hiện cưỡng chế trong chế độ so sánh các
In Range and Coerce
thành phần. Hàm này chấp nhận gia trị thời
gian nếu tất cả đầu vào là giá trị thời gian.
Bạn có thể thay đổi chế độ so sánh của chức
năng này.
Trả về TRUE nếu x nhỏ hơn hoặc bằng 0.
Less Or Equal To 0?
Nếu không hàm này trả về FALSE.
Trả về TRUE nếu x nhỏ hơn hoặc bằng y.
Less Or Equal?
Nếu không hàm này trả về FALSE.
Trả về TRUE nếu x nhỏ hơn 0. Nếu không
Less Than 0?
hàm này trả về FALSE.
Trả về TRUE nếu x nhỏ hơn y. Nếu không
Less? hàm này trả về FALSE. Bạn có thể thay đổi
chế độ so sánh của chức năng này.
Trả về số lớp cho char. Nếu char là một chuỗi,
hàm này sử dụng ký tự đầu tiên trong chuỗi.
Lexical Class
Nếu char là một số, hàm này diễn giải nó là
giá trị ASCII của một ký tự.
So sánh x và y và trả về giá trị lớn hơn ở đầu
ra trên và giá trị nhỏ hơn ở đầu ra dưới. Hàm
này chấp nhận giá trị thời gian nếu tất cả các
đầu vào là giá trị thời gian. Nếu các đầu vào
Max &Min là các giá trị thời gian , hàm sẽ trả về thời gian
muộn hơn ở trên cùng và thời gian sớm hơn ở
phía dưới. Dây bị đứt nếu đầu vào không
cùng loại dữ liệu. Bạn có thể thay đổi chế độ
so sánh của chức năng này .
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 44
Trả về TRUE nếu số/đường dẫn/giới thiệu
Not A không phải là số(NaN), <Không phải là
Number/Path/Refnum? đường dẫn> hoặc không phải là giới thiệu.
Nếu không hàm này trả về FALSE.
Trả về TRUE nếu x khác 0. Nếu không hàm
Not Equal To 0?
này trả về FALSE.
Trả về TRUE nếu x không bằng y. Nếu không
Not Equal? hàm này trả về TRUE. Bạn có thể thay đổi
chế độ so sánh của chức năng này.
Trả về TRUE nếu char đại diện cho một chữ
số bát phân từ 0-7. Nếu char là một chuỗi
chức năng này sử dụng ký tự đầu tiên trong
chuỗi. Nếu char là một số, hàm này diễn giải
Octal Digit?
nó là giá trị ASCII của một ký tự. Nếu char là
số dấu phẩy động, hàm này làm tròn đến số
nguyên gần nhất. Nếu không này trả về
FALSE.
Trả về TRUE nếu char đại diện cho một ký tự
ASCII có thể in được. Nếu char là một chuỗi,
hàm này sử dụng ký tự đầu tiên trong chuỗi.
Nếu char là một số, hàm này diễn giải nó là
Printable?
giá trị ASCII của một ký tự. Nếu char là số
dấu phẩy động, hàm này làm tròn đến số
nguyên gần nhất . Nếu không, hàm trả về
FALSE.
Trả về giá trị có dây cho đầu vào t hoặc đầu
vào f, tùy thuộc vào giá trị của s. Nếu s là
Select TRUE, hàm này trả về giá trị có dây cho t.
Nếu s là FALSE, hàm này trả về giá trị có dây
cho f.
Trả về TRUE nếu char đại diện cho một ký tự
White Space? khoảng trắng, chẳng hạn như Dấu cách, Tab,
Dòng mới, Trả về vận chuyển, Nguồn cấp
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 45
biểu mẫu hoặc Tab dọc. Nếu char là một
chuỗi, hàm này sử dụng ký tự đầu tiên trong
chuỗi. Nếu char là một số, hàm này diễn giải
nó là giá trị ASCII của một ký tự. Nếu char là
số dấu phẩy động, hàm này làm tròn đến số
nguyên gần nhất. Nếu không, hàm này trả về
FALSE.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 46
Elapsed Cho biết lượng thời gian đã trôi qua kể từ khi được chỉ định
Time thời gian bắt đầu.
Hiển thị giá trị dấu thời gian hoặc giá trị số theo thời gian
Format Date/Time
trong định dạng bạn chỉ định sử dụng mã định dạng thời
String
gian.
Get Trả về dấu thời gian của thời điểm hiện tại. LabVIEW tính
Date/Time In toán dấu thời gian này sử dụng số giây trôi qua kể từ 12:00
Seconds a.m., Thứ Sáu, ngày 1 tháng 1 năm 1904, Giờ phổ quát.
Chuyển đổi giá trị dấu thời gian hoặc giá trị số thành ngày
Get và giờ chuỗi trong múi giờ được cấu hình cho máy
Date/Time tính. Chức năng diễn giải các dấu thời gian và các giá trị số
String là múi giờ- số giây độc lập đã trôi qua kể từ 12:00 sáng, thứ
Sáu, ngày 1 tháng 1 năm 1904, Giờ phổ quát.
Trả về thời gian hiện tại tương đối tính bằng giây. Sử dụng
sự khác biệt giữa hai giá trị liên tiếp để đo thời gian trôi qua
High
thời gian giữa các cuộc gọi. Sử dụng VI này để đo khoảng
Resolution
thời gian với độ phân giải cao hơn nhiều so với số lượng
Relative
bạn có thể đạt được từ Đếm số (ms) chức năng. Độ phân
Seconds
giải thời gian của VI này có thể thay đổi theo hệ điều hành
và loại CPU khác nhau.
Chuyển đổi một giá trị dấu thời gian hoặc một giá trị số
thành một cụm giá trị thời gian. Hàm này mất một phần giây
Seconds To
chính xác khi chuyển đổi dấu thời gian. Nếu bạn chuyển đổi
Date/Time
thời gian ngày rec trở lại thành một dấu thời gian, dấu thời
gian có thể không hiển thị chính xác giá trị.
Tick Count (ms) Trả về giá trị của bộ đếm thời gian mili giây.
Time Delay Chèn thời gian trễ vào cuộc gọi VI.
Time Stamp Sử dụng hằng số dấu thời gian để chuyển giá trị thời gian và
Constant ngày cho sơ đồ khối.
To Time Stamp Chuyển đổi một số thành dấu thời gian.
Chờ số mili giây đã chỉ định và trả về giá trị của bộ đếm
Wait (ms) thời gian mili giây. Đấu giá trị từ 0 đến mili giây chờ đầu
vào buộc luồng hiện tại kiểm soát năng suất của CPU.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 47
Chờ cho đến khi giá trị của bộ đếm thời gian mili giây trở
thành bội số của bội số mili giây được chỉ định. Sử dụng
Wait Until chức năng này để đồng bộ hóa hoạt động. Bạn có thể gọi
Next ms hàm này trong một vòng lặp để kiểm soát tốc độ thực hiện
Multiple vòng lặp. Tuy nhiên, có thể là chu kỳ vòng đầu tiên có thể
ngắn. Nối giá trị 0 đến nhiều mili giây nhiều đầu vào buộc
luồng hiện tại mang lại điều khiển CPU.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 48
Hình 31. Hàm File I/O- File I/O Function
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 49
Hình 32. Hàm dạng sóng – Waveform
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 50
Hình 33. Hàm điều khiển ứng dụng- Application Control
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 51
Hình 35. Hàm đồ họa và âm thanh – Graphic & Sound Function
Hình 36. Hàm phát sinh báo cáo – Report Generation Function
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 52
2.4. Các loại Control và Indicatior
Pointer
Control dạng thanh trượt có nút kéo.
slide
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 53
Dial Đĩa xoay.
- Thường các control được chia làm 3 dạng: Boolean, Numeric và String.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 54
Hình 39. Cách lấy Indicator
Bảng 12: Tóm tắt các Indicator
Numeric
Là Indicator dạng số.
indicator
Chart Là biểu đồ hiển thị các giá trị theo trục thời gian.
Là đồ thị thường ñược dùng ñể hiển thị các tín hiệu dạng
Graph
sóng (waveform).
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 55
Đồ thị hiển thị quan hệ giữa hai tín hiệu X và Y hoặc
XY Graph
dùng trong bài vẽ đồ thị.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 56
III. Kiểu dữ liệu trong LabVIEW và chuyển đổi dữ liệu.
- LabVIEW đại diện cho các loại dữ liệu số dưới dạng số dấu phẩy động, cố định-số điểm, số
nguyên, số nguyên không dấu và số phức. Các sự khác biệt giữa các kiểu dữ liệu số là số bit chúng sử
dụng để lưu trữ dữ liệu và các giá trị dữ liệu mà chúng đại diện. [2] (Windows) LabVIEW chỉ có thể
xử lý dữ liệu trong phạm vi được hiển thị trongBảng kiểu dữ liệu số, nhưng nó có thể hiển thị ở định
dạng văn bản một phạm vi
± 9,9999999999999999E999. (Ví dụ = 10 ^ x) [2]
Bảng 13: Số phức
Độ chính xác đơn, điểm nổi (CSG) phức tạp – gọi là độ chính xác đơn, điểm nổi cho
từng phần(thực và ảo).
Độ chính xác kép, điểm nổi (CDB) phức tạp-Được gọi là độ chính xác kép, điểm nổi cho
từng phần (thực và ảo).
Độ chính xác mở rộng phức tạp, điểm nổi (CXT)- Được gọi là độ chính xác mở rộng.
Dấu phẩy động cho mỗi phần(thực và ảo).
Bảng 14: Số dấu phẩy động
Single-precision(SGL) - Các số có độ chính xác, dấu phẩy động có định dạng chính xác
đơn 32 bit của IEEE. Sử dụng các số có dấu phẩy động, chính xác đơn khi tiết kiệm bộ
nhớ là quan trọng và bạn sẽ không vượt quá phạm vi của các số.
Double-precision(DBL)- Các số có độ chính xác kép, dấu phẩy động có định dạng
chính xác kép 64 bit của IEEE. Độ chính xác kép là định dạng mặc định cho các đối
tượng số. Đối với hầu hết các tình huống, sử dụng số chính xác, số dấu phẩy động.
Extended-precision(EXT) - Khi bạn lưu các số có độ chính xác mở rộng vào đĩa,
Labview lưu trữ chúng ở định dạng 128 bit độc lập với nền tảng. Trong bộ nhớ, kích
thước và độ chính xác khác nhau tùy thuộc vào nền tảng. Chỉ sử dụng các số dấu phẩy
động, chính xác mở rộng khi cần thiết. Hiệu suất của số học chính xác mở rộng khác
nhau giữa các nền tảng.
- LabVIEW hỗ trợ cho tất cả các dạng dữ liệu. Các kiểu dữ liệu dạng Boolean, bytes, string,
array, file, text, cluster và dạng số có thể được chuyển đổi một cách dễ dàng sang các dạng cấu trúc.
- Kiểu dữ liệu là công cụ dùng để gán (ép) một numeric hay indicator vào một dãy giá trị nào
đó. Ví dụ, ta muốn một Numeric Control có giá trị (và chỉ nằm trong giá trị đó ngay cả khi người điều
khiển nhập giá trị khác) là 0-255 thì ta sẽ gán Numeric Control đó vào kiểu dữ liệu Unsigned 8 bit
(Viết tắt là U8). Muốn đổi kiểu dữ liệu của một Control, ta chọn Right Click lên Control đó> Chọn
Representation> Chọn Kiểu cần gán. Hình 42 liệt kê các kiểu dữ liệu trong LabVIEW.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 57
Hình 42. Các kiểu dữ liệu trong LabVIEW
- Trong LabVIEW có nhiều kiểu dữ liệu khác nhau.
Bảng 14: Bảng kiểu dữ liệu số
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 58
phức tạp mở
Thay đổi từ 15 giống như độ chính xác mở rộng,
rộng - chính
256 đến 20 theo nền dấu phẩy động cho từng phần
xác, nổi -
tảng (thực và ảo)
điểm
64 hoặc 72
nếu bạn bao thay đổi theo cấu thay đổi theo cấu hình người
điểm cố định
gồm trạng hình người dùng dùng
thái tràn
Byte signed
8 2 -128 đến 127
integer
Word signed
16 4 -32,768 đến 32,767
integer
Long signed -2,147,483,648
32 9
integer đến2,147,483,647
Quad signed
64 18 -1e19 đến 1e19
integer
Byte
unsigned 8 2 0 đến 255
integer
Word
unsigned 16 4 0 đến 65,535
integer
Long
unsigned 32 9 0 đến 4,294,967,295
integer
Quad
unsigned 64 19 0 đến 2e19
integer
Thời gian tối thiểu: 01/01/1600
128-bit time 00:00:00
128 19
stamp Thời gian UTC tối đa:
01/01/3001 00:00:00 UTC
- Cách chuyển đổi kiểu dữ liệu: chuột phải lên đối tượng muốn chuyển đổi chọn Represention
rồi chọn kiểu dữ liệu mong muốn.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 59
*Variables (biến).
- Trong quá trình lập trình cần thiết phải sử dụng tới các biến. Thông qua các biến, người lập
trình có thể thực hiện được việc xử lý và thay đổi dữ liệu một cách thuận lợi. Trong LabVIEW, các
biến được sử dụng dưới 2 dạng là biến toàn cục (global variables) và các biến địa phương (local
variables).
- Global variables (biến toàn cục):
• Biến toàn cục được sử dụng để thực hiện công việc truyền và lưu trữ dữ liệu giữa một vài VI.
Biến toàn cục được coi là một đối tượng trong LabVIEW. Khi ta tạo ra một biến toàn cục LabVIEW sẽ
tạo ra một “VI toàn cục” đặc biệt. Để tạo ra các biến toàn cục, ta lựa chọn chúng trên menu “Structs
and Constants function” sau đó đặt chúng lên Block Diagram. Tiếp tục cần xác định cho chúng kiểu dữ
liệu thông qua các kiểu dữ liệu đã sử dụng thông qua các Controls hoặc các Indicators. Chúng ta cần
chú ý là đối với mỗi biến toàn cục chúng ta cần phải tạo ra một VI với một tên riêng duy nhất. Đối với
các biến toàn cục chúng ta cũng cần xác định chế độ chỉ cho phép ghi hoặc chỉ cho phép đọc. Đối với
việc truy xuất vào biến toàn cục sẽ thực hiện rất nhanh chóng đối với các kiểu dữ liệu đơn giản như
Numerics và Boolean. Tuy nhiên, khi ta sử dụng biến toàn cục để lưu trữ và xử lý các dữ liệu dưới
dạng mảng (arrays), Clusters hay các sâu (string) lớn thì thời gian cũng như bộ nhớ cần thiết để xử lý
chúng lại sẽ tương đối lớn. Vì nó đòi hỏi một vài dịch vụ quản lý bộ nhớ mỗi khi các biến đó gọi tới.
Khi sử dụng các biến toàn cục cũng như các biến cục bộ thì một vấn đề có thể gặp phải là “sự tranh
chấp dữ liệu”. Biến sử dụng trong Labview không hoàn toàn giống như trong các ngôn ngữ lập trình
dòng lệnh. Việc “tranh chấp dữ liệu” xảy ra khi hai hoặc nhiều hơn các đoạn mã lệnh cùng thực hiện
song song cùng thay đổi giá trị của một biến. Đầu ra của VI phụ thuộc vào thứ tự được thực thi của các
dòng lệnh. Bởi vì nếu không có sự phụ thuộc dữ liệu giữa các biểu thức khác nhan thì sẽ không xác
định được cái nào chạy trước. Nếu sử dụng các biến toàn cục trong Vis mà được thực hiện song song,
thì ta có thể sử dụng một biến toàn cục thêm vào để xác định khi nào dữ liệu được phép thay đổi và
được đọc giá trị mới.
- Local variable (các biến địa phương):
• Biến địa phương cho phép người sử dụng đọc hoặc viết thông tin lên một trong những thiết bị
điều khiển hoặc thiết bị hiển thị trên Front Panel. Để tạo một biến địa phương, chọn Local Variable từ
bảng Structs & Constant. Khi sử dụng biến địa phương cần chú ý một số thông tin sau:
Ě Các biến địa phương bộ chỉ có tác dụng duy nhất trên các thiết bị điều khiển hoặc thiết bị hiển
thị mà cùng ở trên một lược đồ. Ta không thể sử dụng biến địa phương để truy cập tới một điều khiển
mà không cùng trên một lược đồ.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 60
Ě Ta có thể có rất nhiều các biến địa phương cho mỗi thiết bị điều khiển hoặc thiết bị hiển thị.
Tuy nhiên điều đó có thể gây ra sự phức tạp, cho rằng điều khiển của bạn thay đổi trạng thái một cách
khó hiểu bởi vì bạn ngẫu nhiên lựa chọn sai các phần tử trong một hoặc nhiều biến địa phương
• Giống như biến toàn cục, bạn có thể sử dụng biến địa phương không có một “dòng dữ liệu”
hợp lệ khác sử dụng.
IV. Vòng lặp While (While Loop), vòng lặp For (For Loop) và
kỹ thuật sử dụng vòng lặp.
(conditional terminal) nút Stop tại FP được nhấn (Lưu ý rằng nút Stop có dạng dữ liệu là
Boolean-true hoặc false).
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 61
Hình 44. Tính tổng với While Loop
Xét ví dụ trong hình 44 như sau:
- Có hai phép tính cộng. Phép cộng A là cộng Numeric 1và Numeric 2 hiển thị kết quả ra
Indicator 1, phép cộng B là phép cộng Numeric 2 và Numeric 3 hiển thị kết quả ra Indicator 2. Khác
biệt duy nhất là phép cộng A đặt ngoài vòng lặp còn phép cộng B đặt trong vòng lặp. Chạy chương
trình (nhấn phím tắt Ctrl+R), sau đó thay đổi giá trị của Numeric 1, 2, 3, 4. Ta sẽ quan sát thấy phép
cộng A sẽ không có giá trị thay đổi tại Indicator 1. Còn Indicator 2 sẽ thay đổi giá trị khi bạn thay đổi
giá trị nhập vào Numeric 3 và 4. FP và BD của ví dụ này được trình bày trong hình 1.35. Ngoài ra,
trong While Loop còn có chân iteration (i) có ký hiệu ( ) là bộ đếm số lần lặp hiện tại (current loop
iteration count) (lần thực hiện đầu tiên i=0). Giá trị lớn nhất của (i) là 2,147,483,647 (231,), và giữ mãi
mãi sau đó. Nếu cần giá trị lớn hơn 2,147,483,647, dùng shift registers có miền giá trị integer lớn hơn,
hoặc sử dụng một vòng lặp For Loop trong trường hợp này.
- Ngoài ra, ta còn có thể sử dụng shift-register trong While Loop. Shift-register là một thanh
ghi hoạt động như một ô nhớ. Ta sử dụng thanh ghi này để truy cập lịch sử giá trị của một tín hiệu nào
đó, ví dụ chương trình của chúng ta đang chạy ở thời gian là 10:30am, và ta muốn xem lại giá trị của
tín hiệu đo được từ cảm biến nhiệt độ ở thời điểm 10:29am. Ngoài ra, Shift register cũng có thể dùng
để thực hiện các phép toán cộng dồn. Nói cách khác là có thể dùng Shift registers để “chuyển” giá trị
của đối tượng/tín hiệu nào đó ở vòng lặp này sang vòng lặp kế tiếp.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 62
Hình 45. Sử dụng shift register
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 63
Hình 46. For Loop
4.3.Formula Node:
- Nút này tính toán các công thức toán học. Nhiều công thức toán học chẳng hạn như sin, asin,
cos, acos, giá trị tuyệt đối,vv… có thể được sử dụng với điều này nút.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 65
4.4. Kỹ thuật sử dụng vòng lặp trong labview.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 66
Hình 48.2. Timing cho vòng lặp while loop
- 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.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:
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 67
Hình 48.3. Timing cho vòng lặp while loop
- 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:
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 68
Hình 49. Các hàm thời gian sử dụng trong vòng lặp
- 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 timevà 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.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 71
Hình 50.5. Timing trong vòng lặp For
- Chúng ta thường xuyên sử dụng vòng lặp For trong lập trình LabVIEW với hai thành phần
quen thuộc là Count terminal N (Quy định số vòng lặp) và interaction count i (luôn bắt đầu từ giá trị
0). Thế nhưng thử nhìn Block diagram dưới đây với cấu trúc vòng lặp For có thêm một chỉ số P (Block
diagram bên trái) và có thêm cả chỉ số C (Block diagram bên phải), bạn có quá lạ lẫm với các chỉ số
này và ý nghĩa của chúng?
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 72
- Làm thế nào để thiết lập và cấu hình cơ chế thực thi vòng lặp này một cách song song? Chúng
ta chỉ đơn giản là click chuột phải lên vòng lặp và chọn thuộc tính “Configue interation parallelism” từ
menu pop up của nó. Chi tiết cấu hình như hình ảnh dưới đây.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 73
Hình 50.9. Timing trong vòng lặp For
4.4.3. Shift Registers và the Feedback Node trong các vòng lặp ( Loops).
Hình 51. Shift Registers và the Feedback Node trong các vòng lặp
- Bài viết trình bày kỹ thuật sử dụng Shift Register và Feedback Node trong các vòng lặp
(For hoặc While loop). Đây là kỹ thuật dùng để truyền dữ liệu từ một lần thực thi trước sang lần thực
thi vòng lặp tiếp theo.
Shift Registers
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 74
- Biểu tượng Shift Registers xuất hiện thành từng cặp mũi tên trên bờ biên đứng của các vòng
lặp như hình dưới đây. Đầu terminal bên phải (mũi tên hướng lên) của vòng lặp (là đầu out put) chứa
đựng giá trị của một lần thực thi vòng lặp. LabVIEW truyền dữ liệu lưu trữ ở terminal bên phải
sang terminal bên trái (Mũi tên hướng xuống). Vòng lặp sau đó sử dụng dữ liệu của terminal bên trái
như là giá trị ban đầu cho lần thực thi tiếp theo của vòng lặp. Quá trình này cứ tiếp diễn cho đến khi
vòng lặp được thực thi hết. Sau khi thực thi xong cả vòng lặp, terminal bên phải trả về và lưu trữ giá trị
cuối cùng của vòng lặp. Để đặt một Shift Register lên một vòng lặp, ta click phải lên bờ biên của vòng
lặp và chọn Add Shift Register từ menu pop up của nó. Một Shift Register có thể lưu trữ và truyền bất
cứ loại dữ liệu nào và các terminal (Trái và phải) của một Shift Register phải nối cùng một loại dữ liệu.
Chúng ta có thể đặt nhiều Shift Register lên một vòng lặp. Mỗi Shift Register sẽ làm việc độc lập với
một hoạt động nào đó trong vòng lặp.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 75
- Vì terminal bên trái của một Shift Register chỉ nhận giá trị từ terminal bên phải sau khi kết
thúc lần lặp thứ nhất. Vậy tại lần lặp đầu tiên thì giá trị của terminal bên trái sẽ nhận giá trị bao nhiêu
và lấy từ đâu? Chính vì lí do đó, chúng ta cần thiết lập giá trị ban đầu cho terminal bên trái ngay tại lần
lặp thứ nhất khi VI chạy ( Để làm việc này chúng ta chỉ cần nối dây từ một giá trị xác định (hằng số
hoặc control) tới đầu terminal bên trái như hình dưới đây.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 76
Hình 54. Uninitialized Shift Registers
- Một “Uninitialized Shift Registers” sẽ giữ nguyên giá trị của những lần chạy trước cho tới khi
bạn đóng VI đó lại.
Stacked Shift Registers
-Một vấn đề đặt ra là nếu bạn muốn sử dụng dữ liệu của những lần lặp trước đó nhưng không
phải là ngay trước đó thì làm thế nào. Ví dụ tại lần lặp thứ n nhưng bạn có nhu cầu sử dụng dữ liệu, kết
quả của terminal bên phải (out put) tại lần lặp thứ n-2, n-3 hay trước đó 4 năm lần thì sao? Lúc này bạn
cần sử dụng “Stacked Shift Registers”. Để thiết lập một “Stacked Shift Register”, bạn click chuột phải
lên đầu terminal bên trái của một Shift Register và chọn Add Element từ Shortcut menu pop-up. Để dễ
hình dung hoạt động của các Stacked Shift Register, có thể so sánh rằng terminal bên trái là đời con
của terminal bên phải, Stacked của terminal bên trái là đời cháu của Terminal bên phải, và cứ thế nếu
bạn tạo ra một stacked của stacked nữa bằng việc click chuột phải và chọn add Element. Lưu ý
là Stacked Shift Register chỉ được đặt ở cạnh trái của vòng lặp như hình dưới đây mà thôi.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 77
khi vòng lặp hoàn toàn kết thúc. Tuy nhiên không có khái niệm tương đương với Stacked Shift
Register trong Feedback Node, nó chỉ lưu trữ và truyền dữ liệu ở hai vòng lặp kế tiếp nhau mà thôi.
Chúng ta cũng có thể thiết lập giá trị ban đầu cho một Feedback Node với ý nghĩa
như initialize của Shift Register.
Initializing the Feedback Node on Loop Execution
- Để thiết lập giá trị ban đầu cho Feedback Node, chúng ta nối một giá trị xác định vào
đầu terminalInitialize của Feedback Node. Hãy kiểm tra việc thực hiện Feedback Node của Block
Diagram dưới đây.
0 3 0 3
1 4 1 4
2 5 2 5
3 6 3 6
- Để thiết lập giá trị ban đầu cho Feedback Node, chúng ta cũng có thể Righ Click
vào initialize và chọn Move Initializer One Loop Out để một biểu tượng dấu chấm có màu tương ứng
với kiểu dữ liệu bạn nối với Feedback Node hiện ra ở bờ biên trái của vòng lặp. Đó chính
là terminal cho phép bạn nối giá trị ban đầu của Feedback Node để thiết lập giá trị ban đầu cho nó.
Trong trường hợp vòng lặp có chứa Feedback Node của bạn lại nằm trong một vòng lặp khác thì bạn
có thể click chuột phải vào initialize để di chuyển terminal initialize này ra bờ biên trái của vòng lặp
ngoài (Thực hiện bằng việc click chuột phải vào initialize terminal và chọn Move Initializer One Loop
In). Hãy tự mình kiểm tra sự thực hiện của hai thay đổi này như thế nào bằng việc tạo ra hai Block
Diagram có các vị trí initialez terminal nằm ở vòng lặp ngoài và ngay trên vòng lặp chứa trực
tiếp Feedback Node.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 78
Hình 56. Feedback Node trong While Loop
- Nếu chúng ta không nối giá trị nào vào initialize terminal của Feedback Node, vòng lặp sẽ
hoạt động tương tự như trường hợp Uninitialized Shift Registers. Hãy tạo ra một Block Diagram có
chứa vòng lặp như hình dưới đây để kiểm tra việc thực thi của nó. Trường hợp này gọi là “unwired
initializer terminal” của Feedback Node.
0 1 0 5
1 2 1 6
2 3 2 7
3 4 3 8
- Mặc dù bạn có thể tách Feedback Node và initialize terminal của nó rời ra nhau (như trường
hợp đặt trên biên của vòng lặp For hay While ở trên, song bạn không thể tách riêng ra khỏi vòng lặp
hay cấu trúc của Feedback Node (Bờ biên của các vòng lặp chứa Feedback Node là giới hạn cuối cùng
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 79
của sự tách riêng). Bạn cũng không thể tách chúng riêng rẽ ra khi bạn tạo một SubVI chứa Feedback
Node và initialize terminal của nó nằm ngoài SubVI đó. Nếu bạn làm thế thì trong cả hai trường hợp
trên, LabVIEW đều báo lỗi.
Thay thế Shift Registers bằng một Feedback Node
- Bạn hoàn toàn có thể thay thế một Shift Register bằng một Feedback Node bởi việc click
chuột phải lên Shift Register và chọn Replace with Feedback Node từ Shortcut menu. Hay bạn cũng có
thể làm ngược lại là thay thế một Feedback Node bằng Shift Register với việc lựa chọn Replace with
Shift Register.
V. Mảng
5.1.Khái niệm về mảng và cách tạo mảng
- Ngoài các loại dữ liệu như đã bàn ở các bài trước, LabVIEW cũng hỗ trợ các cấu trúc dữ kiểu
liệu mảng. Như trong ngôn ngữ dựa trên văn bản, Mảng là một khối có nhiều chiều (n-chiều) của một
loại dữ liệu nào đó các phần tử trong mảng được đánh chỉ số. Và ta có thể truy suất các phần tử này
thông qua các chỉ số đó. Không giống như trong các ngôn ngữ dựa trên văn bản, mảng LabVIEW được
tự động thay đổi kích cỡ để phù hợp với dữ liệu của nó.
Hình 57. Mảng 1 chiều dạng so, 2 chiều dạng boolean, và 3 chiều dạng chuỗi
- Cách tạo một mảng như sau: Vào FP> Modern >Array, Matrix> Lấy array ra đặt tại FP.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 80
Hình 59. Tạo Numeric array
- Rê chuột trên mảng cho tới khi có biểu tượng sau: , kéo dài mảng để có một mảng 1
chiều có 5 phần tử.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 81
Hình 62. Chương trình hoàn thiện
- Nhập giá trị vào hai mảng Control. Nhấn chạy chương trình. Ta thấy tổng của hai mảng chính
là tổng của các thành phần tương ứng trong mảng.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 82
Hình 65. Chương trình truy xuất giá trị thành phần trong array.
- Khi sử dụng array trong For loop. Bạn cần lưu ý một số vấn đề. Cùng nhau xem một ví dụ
trên ni.com trong hình 1.46 để giải thích rõ hơn vấn đề này. Chương trình này là một for loop, for loop
này lặp lại 15 lần phép cộng các thành phần trong 2 array (array 1 có 10 phần tử, array 2 có 20 phần
tử). Kết quả trả về chỉ là một array có 10 phần tử. Lý do: Khi for loop thực hiện tới vòng lặp thứ 11 thì
array 1 sẽ không có phần tử thứ 11 nên phép cộng không thể tiếp tục thực hiện.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 83
Hình 67. Tạo array 2 chiều
VI. Bó
- Bó là kiểu dữ liệu hoạt động như hộp đen có khả năng lưu trữ các loại dữ liệu khác nhau. Có
thể hiểu rằng: Bó được coi là một nhóm các giá trị dữ liệu được đóng gói với nhau để tạo thành một
kiểu dữ liệu phức tạp hơn, và thường có ý nghĩa hơn.
- Ví dụ: Hãy tạo một Output cluster (là một Indicator) chứa các thông tin sau: Họ tên, tuổi, giới
tính. Thực hiện như sau:
FP> Mordern> Array, Matrix, > Cluster
Kéo thả cluster ra ngoài FP
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 84
Hình 69. Cluster đã tạo ra
-Bây giờ, ta hãy tạo một Cluster indicator như hình 1.51.
Hình 71. Kết quả tạo ra là Cluster indicator sẽ hiển thị đúng Cluster control
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 85
- Như vậy ta vừa biết phương pháp tạo một cluster. Bây giờ ta sẽ tạo một Cluster như trên bằng
cách sử dụng hàm Bundle (tổng hợp) như sau.
- Lấy các String control, Numeric control và LED đặt tại FP.
- Lấy hàm Bundle tại BD> Programming> Cluster> Bundle. Kết nối lần lượt các control vào
Bundle này và tạo Cluster indicator như bài trên.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 86
Hình 73. Bóc tách các phần tử trong một bó
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 87
Hình 74
- Chương trình được thực hiện đơn giản bằng cách thực hiện phép tính nhân các giá trị đầu vào
với chính nó và hiển thị kết quả.
- Phải thay đổi gì khi thay đổi hàm đã cho thành y = + 1?
- Tránh việc 1 đoạn code bị lặp lại nhiều lần không cần thiết, hãy thay thế việc tính hàm y =
bằng 1 VI và thay vào chương trình hiện như hình 2. Khi đó, hàm Labview VI y= trở thành một
SubVI.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 88
Hình 75
- Một VI có thể phục vụ như một giao diện người dùng hoặc một hoạt động bạn sử dụng
thường xuyên. Sau khi bạn học làm thế nào để xây dựng một giao diện và một sơ đồ khối, bạn có thể
tạo ra các VI và các VI con và các tuỳ biến VI mà thuộc quyền sở hữu của bạn.
- Sau khi bạn xây dựng một VI, bạn có thể sử dụng nó trong một VI khác. Một VI được gọi từ
sơ đồ khối của VI khác được gọi là VI con. Bạn có thể sử dụng lại một VI con trong các VI khác. Để
tạo ra một VI con, bạn cần xây dựng một bảng nối và tạo ra một biểu tượng. Mỗi VI đều có một icon,
nó nằm ở góc trên bên phải của cả 2 cửa sổ Front panel và Block diagram.
- Để hiểu rõ cách tạo subVI và icon, connector panel của nó thì ta làm ví dụ sau. Tạo giao diện
Front panel của VI và trong Block Diagram ta liên kết giống hình 76.1 và 76.2 bên dưới:
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 89
a) Giao diện b) Sơ đồ khối
Hình 76. Ví dụ minh họa
7.2. Làm thế nào khai báo tham số cho một subVI?
- Trước khi bạn xây dựng một VI mới, bạn nên xem xét việc tìm kiếm một ví dụ VI mà đáp
ứng các yêu cầu của bạn bằng việc lựa chọn Help>>Find Examples để mở ví dụ tìm ra NI Example
Finder. Nếu bạn không tìm thấy một ví dụ VI thích hợp, mở một VI mẫu từ hộp thoại New và cư trú
bảng mẫu với các VI và các hàm chức năng gắn sẵn tư bảng mẫu Functions.
- Các bước tạo một SubVI:
· Tạo một VI với tham số đầu vào và đầu ra (các control hoặc indicator).
· Viết code cho VI
· Kiểm tra
· Trên front panel, di chuyển chuột vào biểu tượng của LabVIEW nằm ở góc phải của
VI và click chuột phải và chọn Show Connector trên menu vừa xuất hiện.
Hình 77
· Click chuột vào vị trí trên biểu tượng và chọn kết nối với các control và indicator
tương ứng trên front panel. Tùy vào số lượng các tham số, bạn có thể click phải chuột và chọn kiểu và
số lượng connector sao cho phù hợp với số lượng tham số cần thiết cho subVI.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 90
Hình 78
· Để tạo icon thì ta click phải vào biểu tượng ở góc phải bên trên của Front panel hoặc Block
diagram. Sau đó bảng Icon Editor xuất hiện như hình dưới, trong đó có các công cụ dùng để vẽ tương
tự trong Paint.
Hình 79. Cửa sổ Icon Editor Giả sử ta vẽ biểu tượng như sau:
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 91
Hình 80. Ví dụ minh họa vẽ Icon
- Sau đó save lại với tên PTB1.vi và tạo một VI mới. Có thể click phải vào block digram của
VI sau đó vào Function pallete Select a VI… Rồi trỏ tới tập tin PTB1.vi hoặc ta có thể kéo biểu tượng
của PTB1.vi đang mở sang block diagram của VI mới.
Hình 81
7.4. Việc tạo các VI con từ các thành phần của một VI.
- Chuyển một thành phần của một VI vào trong một VI con bằng cách sử dụng công cụ
Positioning để lựa chọn thành phần của sơ đồ khối bạn muốn sử dụng lại và lựa chọn Edit>>Create
SubVI . Một biểu tượng cho VI con mới thay thế phần được lựa chọn của sơ đồ khối. LabVIEW tạo ra
các điều khiển và các dụng cụ chỉ thị cho VI con mới, tự động định dạng ô vuông đầu nối dựa trên số
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 92
lượng của các thiết bị điều khiển và dụng cụ chỉ thị bạn đã lựa chọn, và nối dây VI con tới những dây
hiện hữu.
- Việc tạo một VI con từ một thành phần là tiện lợi nhưng còn đòi hỏi việc quy hoạch cẩn thận
để tạo ra một trật tự logic của các VI. Xem xét những đối tượng nào chứa trong thành phần và tránh sự
thay đổi chức năng của VI tổng.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 93
- Khi bạn lưu một VI vào một phiên bản trước, LabVIEW không chuyển đúng VI đó như mọi
VI trong trật tự của nó, loại trừ các file trong thư mục labview\vi.lib.
- Thường thì một VI sử dụng chức năng không sẵn có trong phiên bản trước của LabVIEW.
Trong những trường hợp như vậy, LabVIEW lưu lại như nhiều VI như nó có thể và đưa ra một thông
báo là không thể chuyển đổi nó được. Thông báo xuất hiện ngay lập tức trong hộp thoại Warning. Kích
nút OK để ghi nhận các cảnh báo đó và đóng hộp thoại. Kích nút Save to File để lưu các cảnh báo tới
một file văn bản để quan sát lại sau đó.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 94
VIII.THỰC HÀNH
Phần 1: Các vòng lặp và chart.
A. Lý Thuyết
1. Vòng lặp While
- Thực thi lệnh cho đến khi gặp điều kiện dừng. Trong Block Diagram, chọn Functions >
Structures, dùng trỏ chuột click và chọn đường biên vòng lặp sao cho bao quanh đoạn code cần thực
hiện.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 95
-Vòng lặp While thực thi chương trình bên trong vòng lặp cho đến khi conditional terminal
nhận 1 giá trị Boolean nhất định nào đó. Khi điều kiện dừng là Continue If True, vòng lặp While sẽ
thực thi chương trình cho đến khi conditional terminal nhận giá trị False. Iteration Terminal biểu thị số
lần lặp lại đã thực hiện xong. Khi thực hiện vòng lặp lần thứ nhất, Iteration Terminal trả lại giá trị là 0.
- Block diagram sau cho ta thấy, vòng lặp While thực thi chương trình cho đến khi giá trị ngõ
ra từ SubVI nhỏ hơn 10 hay điều khiển Enable có giá trị là False.
- Ngược lại, ta có thể thay đổi hoạt động của conditional terminal bằng cách click phải chuột
hay đường biên của vòng lặp While và chọn Stop If True. Vòng lặp sẽ ngừng cho đến khi conditional
terminal nhận giá trị TRUE như hình sau.
2. Waveform Chart
- Chọn Controls > Graph palette . Waveform chart cho phép hiển thị cùng lúc 1 hay nhiều plot,
một hay nhiều tín hiệu như sau:
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 96
- Chart có 3 kiểu khác nhau để hiển thị data. Click phải chuột, chọn Advanced > Update Mode,
chọn Strip Chart, Scope Chart hay Sweep Chart. Kiểu mặc định là Strip Chart.
• Strip Chart: hiển thị dữ liệu đang running liên tục từ trái sang phải
• Scope Chart: hiển thị một phần của dữ liệu từ trái sang phải
• Sweep Chart: tương tự như Scope chỉ hiện thị một phần của dữ liệu nhưng lại hiển thị
data cũ bên phải và data mới bên trái ngăn cách với nhau bởi 1 vạch thẳng đứng như hình sau:
- Trong Block Diagram, ta có thể nối trực tiếp ngõ ra scalar đến 1 waveform chart như sau:
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 97
- Để hiển thị nhiều plot cùng lúc, chọn Functions > Cluster . Có thể thêm nhiều plot bằng cách
thay đổi lại kích thước của Bundle như hình sau:
- Terminal bên phải chứa giá trị dữ liệu sau khi hoàn tất 1 vòng lặp, sau đó dữ liệu này được
dịch khi kết thúc vòng lặp và nó xuất hiện tại terminal bên trái bắt đầu 1 vòng lặp mới như hình sau:
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 98
- Một shift register có thể lưu trữ bất kỳ loại dữ liệu nào: numeric, boolean, string, array…. Ta
có thể cấu hình shift register lưu trữ các giá trị từ các vòng lặp trước, thuận lợi khi chúng ta cần tính trị
trung bình của các điểm giá trị. Để tạo thêm các terminal cho phép truy xuất các giá trị từ các vòng lặp
trước đó, click phải chuột vào terminal bên trái và chọn Add Element.
- Để khởi tạo thanh ghi dịch với 1 giá trị cho trước bên ngoài vòng lặp, ta nối giá trị khởi tạo
này với terminal bên trái của shift register. Giá trị khởi tạo chính là giá trị mặc định cho loại dữ liệu
của shift register. Nếu loại dữ liệu của shift register là Boolean thì giá trị khởi tạo có giá trị là False.
Nếu shift register có loại dữ liệu là numeric thì giá trị khởi tạo là 0.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 99
4. Vòng lặp For.
- Khác với vòng lặp While thực thi chương trình cho đến khi gặp gặp điều kiện dừng, vòng lặp
For thực thi chương trình với số lần lặp lại cho trước. Vòng lặp For gồm 2 terminal: count terminal
định số lần thực thi chương trình và iteration terminal biểu hiện số lần lặp đã thực hiện xong.
B. Thực hành
Bài 1.
a. Thực hiện chương trình sử dụng vòng lặp While tạo tín hiệu ngẫu nhiên và hiển thị trên Scope Chart
như sau:
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 100
có Block diagram như sau:
Hướng dẫn:
• Chọn Waveform Chart, click phải chuột, chọn Visible Item > Plot Legend cho phép ẩn legend
• Chọn trục x-axis, click phải chuột, chọn Visible Scale Label để xóa label của trục x.
• Chọn Functions > Time & Dialog, định thời gian thực hiện 1 vòng lặp.
• Functions > Numeric, chọn hàm Random number.
b. Thực hiện chương trình tạo 1 số ngẫu nhiên đến khi bằng với 1 giá trị cho trước có Front Panel và
Block Diagram như sau:
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 101
Hướng dẫn:
• Number to match control chỉ rõ giá trị cần đạt đến
• Current Number indicator hiển thị giá trị ngẫu nhiên hiện thời # iteration hiển thị số lần lặp lại
trước khi bằng với giá trị cần.
• Thiết lập data range cho Number to match control: 0 – 10000.
• Thiết lập độ chính xác cho các controls và indicators.
• Chạy chương trình với number to match control: 50, 100, 11000. Nhận xét?
Bài 2: Thực hiện chương trình ứng dụng Shift register như sau:
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 102
Bài 3. Thực hiện chương trình sử dụng vòng lặp For như sau:
a. Tạo 100 số ngẫu nhiên và xuất ra waveform chart.
b. Thực hiện VI biểu diễn 2 plot ngẫu nhiên trên Sweep chart: plot biểu diễn tín hiệu ngẫu nhiên và 1
plot còn lại biểu diễn trị trung bình của 4 giá trị trước đó.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 103
Hướng dẫn:
• Sử dụng vòng lặp For (N = 200)
• Sử dụng 3 terminal bên trái để lấy trị trung bình của 4 giá trị dữ liệu trước đó.
• Chọn Functions > Cluster để nhóm giá trị ngẫu nhiên và trị trung bình trước khi vẽ chúng trên
cùng 1 chart.
Bài 4. Chỉ sử dụng vòng lặp While, kết hợp vòng lặp While và For sao cho chương trình dừng lại khi
nó đạt đến giá trị cho trước trên control panel hoặc khi bật nút Stop.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 104
2. Graph:
- Giản đồ cho phép biểu thị dữ liệu 2D hay nhiều hơn nữa. Có 2 loại là XY graph và waveform
graph.
3. Cluster
- Cluster là loại cấu trúc dữ liệu kết hợp một hay nhiều thành phần dữ liệu thành 1 loại dữ liệu
mới. Cluster khác với array là các thành phần hình thành nên cluster có thể là các loại dữ liệu khác
nhau như Boolean, String, Numeric.
- Tạo Cluster control hay indicator: Controls > Array & Cluster. Tất cả các đối tượng dữ liệu
trong cùng 1 cluster phải hoàn toàn là controls hoặc hoàn toàn là indicator.
- Để tạo 1 cluster constant, chọn Functions > Cluster > Cluster Constant.
- Cần lưu ý thứ tự của các đối tượng dữ liệu trong 1 cluster. Muốn thay đổi thứ tự, click phải
chuột, chọn Reorder Controls in Cluster.
B. Thực hành
Bài 1. Thực hiện array sử dụng các vòng lặp
a. Thực hiện array 1 chiều sử dụng vòng lặp For/While sử dụng khả năng auto-indexing
b. Click phải chuột trên đường biên của vòng lặp, chọn Disable Indexing. Cho biết kết quả?
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 105
c. Tạo array 2 chiều:
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 106
d. Chức năng Array subset
Bài 4. Viết VI đảo ngược 1 mảng n phần tử tạo trước, vd: a[0] ↔ a[n-1], a[1] ↔ a[n-2], …
Bài 5. Thực hiện các giản đồ sau
a. Giản đồ trình bày 1 plot duy nhất:
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 107
b. Giản đồ trình bày nhiều plot:
c. XY graph:
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 108
b.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 109
2. Chuỗi:
- Thực hiện chương trình theo trình tự
3. Formula Node:
- Thực hiện các biểu thức đa biến và phức tạp một cách đơn giản hơn
- Chọn Functions > Structures > Formula Node. Click phải chuột trên đường biên, chọn Add
Input/ Add Output để tạo các biến đầu vào và biến ngõ ra. Các biểu thức trong Node cách nhau bởi dấu
chấm phẩy.
B. Thực hành
Bài 1. Thực hiện các VI sau
a.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 110
b.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 111
Bài 2. Thực hiện VI sau:
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 112
Hướng dẫn:
• Thực hiện chương trình trong vòng lặp While trước.
• Chọn Functions > Structures > Sequence Structure bao quanh đoạn code vừa thực hiện.
• Click phải chuột vào đường biên, chọn Add Frame After.
• Chọn frame chứa vòng lặp While, click phải chuột, chọn Make This Frame >>0.
• Chọn Functions > Time & Dialog > Tick count: đọc giá trị hiện thời của đồng hồ hệ thống.
Bài 3. Thực hiện các Formula Node như sau
a.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 113
b. Vẽ graph biểu thị phương trình sau: y = f(x)^3 + f(x) với f(x) = tanh(x) + cos(x).
Bài 4.
a. Chỉ sử dụng 1 Formula Node để giải 2 phương trình sau:
b. Thực hiện Front Panel gồm 2 ngõ vào và 1 indicator biểu diễn kết quả các phép toán: cộng, trừ,
nhân chia từ 2 giá trị ngõ vào.
c. Thực hiện chương trình gồm 2 ngõ vào: 1 là giá trị ngưỡng và 1 input aray. Một ngõ ra biểu diễn giá
trị ngõ vào bé hơn giá trị ngưỡng cho trước.
Phần 4. String và file I/O
A. Lý thuyết
1. String
- String là chuỗi các ký tự ASCII có thể hoặc không thể hiển thị. String là kiểu dữ liệu không
phụ thuộc platform.
- String được dùng để: Tạo thông báo dạng text, chuyển dữ liệu dạng số thành chuỗi để truyền
và chuyển ngược lại khi xử lý, lưu thông tin vào file, tạo hướng dẫn hoặc nhắc nhở trong hộp thoại.
- Trên Front Panel, String có thể xuất hiện ở Text Entry Box, Table hoặc Label
Các kiểu hiển thị String: Normarl display, Code display, Password display và Hex display.
- Tạo String, Controls > String & Path
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 114
2. File I/O:
- Cho phép lưu trữ hay thu nhận thông tin từ file hoặc đĩa khác. Chọn Functions > File I/O.
Labview hỗ trợ rất nhiều hàm cho các thao tác file I/O. Chia làm 3 loại sau:
• Loại High-Level File Vis
• Loại Imtermediate File Functions
• Loại Advanced File Functions:
B. Thực hành
Bài 1: Thực hiện các chức năng của String:
a. String length:
b. Concatenate Strings:
c. String Subset:
d. Math Pattern:
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 115
Bài 2. Thực hiện VI sau
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 116
b. Read functions:
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 117
Bài 4. Thực hiện VI sau:
Hướng dẫn:
• Chọn Analyze > Signal Processing > Signal Generation cho Sine pattern, Uniform White
Noise.
• Chọn Functions > Array cho Transpose 2D Array
Bài 5. Thực hiện VI sau:
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 118
** Bài tập nhỏ:
1. Điều chỉnh núm, cho biết kết quả trên Bình chứa nước và Chỉ báo số
của mực nước ở bên cạnh Bể.
2. Đèn giao thông có 3 màu, Đèn đỏ tồn tại trong 10 giây, Đèn xanh kéo dài
trong 10 giây và ánh sáng vàng kéo dài trong 5 giây. Hãy để nó chạy không ngừng cho đến khi nhấn
nút Dừng.
3. Nhập một số, kiểm tra xem đó có phải là số nguyên tố không. Nếu đó là sự thật, hãy bật Ánh sáng
và hiển thị rất tuyệt! Nếu không, đừng bật Đèn và hiển thị Không!".
4. Nhập một số n, chạy trong cấu trúc vòng lặp để tính tổng của
các số từ 0 đến n-1. Cho biết kết quả trong thanh dọc.
5. Điền vào một mảng với 3 bối cảnh: Tên, Năm sinh, Công việc. Chiều dài của mảng là đầu vào của
người dùng. Khi bạn điều chỉnh số Chỉ mục, ví dụ: tại chỉ mục 3, dữ liệu là {Haul, 1988, Driver}, hiển
thị dữ liệu trên Mảng. Nếu nhấn Show, tất cả thông tin được hiển thị trên cụm.
6. Nhập một chuỗi, xoay chuỗi đó.
7. Thực hiện chuyển đổi, nếu nó BẬT. Hiển thị thông tin bao gồm 3 loại dữ liệu:
Nhân đôi, số nguyên, chuỗi. Nếu nó TẮT, hiển thị thông tin của 3 giá trị với
cùng loại dữ liệu.
8. Nhập số n, vẽ giá trị ngẫu nhiên từ 0 đến n trên biểu đồ, Dừng vòng lặp sau 10 giây.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 119
9. Đếm số lượng chữ cái từ một chuỗi bạn nhập.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 120
Unevenly Sampled Signal Spectrum, FHT, Inverse FHT, Walsh Hadamard, Walsh Hadamard Inverse,
WVD Spectrogram, Laplace Transform Real, Wavelet Transform Daubechies4, Wavelet Transform
Daubechies4 Inverse.
• Để tham khảo thêm về các VI này có thể xem trong Help Onlinecuar chúng.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 121
Chúng ổn định và có thể dự đoán được.
Chúng không bị trôi bởi nhiệt độ, độ ẩm và không yêu cầu phải có các thành phần chính
xác.
a) Các bộ lọc IIR và FIR.
Sự phân biệt giữa IIR và FIR là dựa trên đáp ứng xung của nó. Các bộ lọc IIR là các bộ lọc có đáp
ứng xung vô hạn còn các bộ lọc FIR có đáp ứng xung hữu hạn. Đáp ứng xung là hữu hạn hay vô hạn là
dựa vào cách tính toán ở đầu ra. Các bộ lọc FIR có đầu ra chỉ phụ thuộc vào giá trị đầu vào hiện tại còn
IIR thì không những phụ thuộc vào đầu vaopf hiện tại mà còn phụ thuộc vào các đầu ra trước đó. Vì
vậy bộ lọc IIR còn gọi là các bộ lọc đệ quy còn FIR là các bộ lọc không đệ quy.
Nhược điểm của các bộ lọc IIR là đáp ứng pha của chúng là phi tuyến. Nếu ứng dụng không yêu
cầu thông tin về pha thì có thể dùng IIR.
*Bộ lọc IIR
Bộ lọc IIR là các bộ lọc đáp ứng xung về lý thuyết là vô hạn. Phương trình vi phân cảu
chúng có dạng như sau :
(∑ ∑ ) (*)
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 122
Sau khi đặt tần số cắt, Labview sẽ đặt độ dốc của quá trình quá độ với bậc của bộ lọc. Bộ
lọc bậc càng cao thì càng tiến tới bộ lọc thông thấp lý tưởng.
Các bộ lọc Chebyshev: Các bộ lọc Chebyshev giảm tối thiểu đỉnh lỗi ở dải thông. Đặc
tuyến của đáp ứng tần số có đáp ứng biên độ lớn ở dải thông, giảm đơn điệu biên độ ở giải
chặn và có vùng chuyển tiếp sắc hơn bộ lọc Butterworth. Điều này khiến sai số tuyệt đối
nhỏ hơn và tốc độ thực hiện nhanh hơn.
Bộ lọc Chebyshev II (hay còn gọi là bộ lọc Chebyshev đảo: bộ lọc này tương tự như bộ lọc
Chebyshev nhưng có phân số sai số trên dải chặn và có sự bằng phẳng nhất ở dỉ thông.
Bộ lọc Eliptic (Cauer): các bộ lọc loại này giảm tối đa các sai số đỉnh bằng cách phân bố
chúng trên khắp dải thông và dải chặn. So với các bộ lọc Butterworth và Chebyshev cùng
bậc thì bộ lọc Eliptic có quá trình quá độ giữa giải thông và giải chặn là sắc nhất. Vì vậy, nó
được dùng rộng rãi.
Bộ lọc Bessel: có thể dùng để giảm sự méo pha phi tuyến vốn có trong các bộ lọc IIR. Ở
các bộ lọc bậc cao hơn và với vùng gấp dốc hơn thì méo pha càng rõ nét đặc biệt ở vùng
quá độ cảu bộ lọc. Bộ lọc này có đặc tuyến trơn tối đa ở cả pha và biên độ. Đặc tuyến pha ở
dải thông cảu bộ lọc thì gần như tuyến tính. Cũng giống như bộ lọc Butterworth, bộ lọc
Bessel đòi hỏi bộ lọc bậc cao để giảm sai số, vì vậy nó ít đc dùng.
*Bộ lọc FIR
Các bộ lọc đáp ứng hữu hạn FIR là các bộ lọc số mà có đáp ứng xung là hữu hạn. Các bộ
FIR cũng gọi là các bộ lọc không đệ quy. Phương trình sai phân cảu bộ lọc là:
Có thể truy cập vào các bộ lọc trong Labview bằng cách chọn Functions>>Signal
Processing>>Filters. Hình 2 minh họa các bộ lọc trong Labview.
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 123
Hình 83. Các bộ lọc trong Labview
Tài liệu được sưu tầm và chia sẻ miễn phí tại ARDUINO IOT VIETNAM
https://www.facebook.com/groups/486295328966960/ 124