[Codientu.org] Labview

download [Codientu.org] Labview

of 54

Transcript of [Codientu.org] Labview

  • 8/19/2019 [Codientu.org] Labview

    1/54

    Bài 1: Điều khiển, Hiển thị và các Khái niệm cơ bản

    (Tác giả: Đỗ Trung Hiếu - CYBERLAB JSC.)

    1. Giao diện LabVIEW

    Đây là giao diện ban đầu khi khởi động chương trình LabVIEW. Từ đây các bạn có thể tạo một chương trình ban đầu (Blank VI), tạo một projecttr ống (ấn vào Empty Project), tạo một chương trình theo mãu (VI from Template),hoặc nhiều lựa chọn khác. Bạn cũng có thể mở  một chương trình có sẵn (Browse)

    2. Chương trình của LabVIEW: VI hay là Virtual Instruments

    Chương trình cơ bản của LabVIEW là một VI, hay là Virtual Instruments: Thiết bị 

    http://www.dientuvietnam.net/forums/filedata/fetch?id=1384047&d=1377360098

  • 8/19/2019 [Codientu.org] Labview

    2/54

    ảo.Để tạo 1 chương trình mớ i, ta ấn vào nút Blank VI. LabVIEW sẽ hiện ra 2 cửa sổ:Front Panel và Block Diagram.

    Đó là 2 thành phần cơ bản của LabVIEW.

    Front Panel (từ đây gọi là FP) là giao diện của chương trình với ngườ i dung. Tạiđây lưu trữ 

    • Các Biến điều khiển như: nút bấm (Button), thanh gạt (Slide), Núm vặn (Knob),TextBox để nhậ p chuỗi ký tự… đượ c gọi chung là các biến điều khiển, nơi ngườ idùng có thể điều chỉnh giá tr ị của các biến đó bằng tương tác trực tiế p với chươngtrình• Các Biến hiển thị: Đồng hồ (Meter), Đồ thị (Chart), Biểu đồ (Graph), đèn báo(LED), hình ảnh (Picture) hay hình ảnh 3D (3D picture)…gọi chung là các biếnhiển thị, nơi ngườ i dung có thể quan sát thay đổi của các biến một cách tr ực quan.• Các biến điều khiển và các biến hiển thị không có sự phân biệt rõ ràng trongLabVIEW, ngoài hướng tương tác với ngườ i dùng và vớ i máy tính. TrongLabVIEW coi 2 loại biến này đều là các biến, có thể đượ c lập trình để thay đổi tr ựctiế p• Mỗi khi tạo 1 Biến Điều khiển hoặc Hiển thị trong Front Panel (FP), một biểutượ ng (Icon) sẽ xuất hiện tương ứng trong Block Diagram (BD). Kích đúp vàoBiến trên FP, Icon tương ứng trong BD sẽ đượ c tự động biểu hiện.• Mũi tên được đánh dấu là nút RUN, dùng để bắt đầu chạy chương trình. Khi nút

    http://www.dientuvietnam.net/forums/filedata/fetch?id=1384048&d=1377360143

  • 8/19/2019 [Codientu.org] Labview

    3/54

    RUN đó bị gãy, tức là chương trình đang có lỗi (Error), không chạy đượ c

    Block Diagram (DB) : Là nơi chương trình LabVIEW đượ c lậ p trình, chứa nộidung (code) chương trình. 

    • Tương tự trong Simulink của Matlab, việc lậ p trình trong DB bằng cách nối các biến vớ i nhau và vớ i các khối biểu diễn phép toán giống như đi dây trong thiết bị điện.• Trên Block Diagram cũng biểu diễn các vòng lặ p, Cấu trúc lậ p trình, và các thuậttoán.• Khi chương trình VI chạy Block Diagram không hiển thị giao diện tương tác vớ ingườ i dùng.• Có thể chạy chế độ Debug trên Block Diagram bằng cách ấn vào biểu tượ ngBóng đèn trong BD (Highlight Execution). Các dòng dữ liệu sẽ đượ c biểu diễn

    chạy tuần tự để biểu thị sự thay đổi chi tiết các biến trong chương trình • Để tạo ra một chương trình sáng sủa, gọn gàng nhằm đơn giản hóa việc kiểm tra,kiểm soát chương trình, một chương trình LabVIEW thông thường đượ c lậ p trìnhtheo trình tự: Từ trên xuống dướ i, trái sang phải.

    3. Tạo project LabVIEW

    Để tạo 1 Project trong LabVIEW, ta ấn vào Empty Project. Trong các bài viết tiế pđây chúng ta hầu như làm việc bằng cách tạo Empty VI, việc tạo Project là chưa

    thực sự cần thiết.

    4. Các kiểu dữ liệu cơ bản trong LabVIEW

    Trong LabVIEW có nhiều kiểu biến: Biến số (Numeric), Biến ký tự (String), BiếnMảng, Biến Cluster, Biến Logic (Boolean)… 

    http://www.dientuvietnam.net/forums/filedata/fetch?id=1384049&d=1377360223

  • 8/19/2019 [Codientu.org] Labview

    4/54

    Mỗi biến đượ c phân biệt bằng các màu trong Block Diagram. Ví dụ:• Kiểu Numeric dạng Float (số 64 bit dấu phảy động) là kiểu biến có dải giá tr ị lớ nnhất, với độ chính xác cao nhất nhưng tốn nhiều dung lượng chương trình nhất,

     biểu diện bằng màu vàng da cam

    • Các kiểu Numeric Integer: Int8, Int16, Int32, Int64 (số nguyên 8, 16, 32, 64 bit)và U8, U16, U32, U64 (số nguyên không dấu 8,16,32,64 bit) đượ c biểu diễn màuxanh da tr ờ i• String: Chuỗi ký tự, biểu diễn màu hồng• Boolean : Kiểu Logic, là kiểu biến cho các nút bấm, đèn led và các giá trị logickhác, biểu diễn bằng màu xanh lá cây

    5. Các phép toán trong LabVIEW:

     Như ta đã biết, trong LabVIEW nội dung chương trình đượ c thiết lậ p trong BlockDiagram.Bạn có thể tìm thấy các thư viện hàm để thực thi các thuật toán từ đơn giản đến

     phức tạ p bằng cách: Ấn chuột phải, chọn mũi tên (như hình vẽ) và chọnProgramming (để chọn các khối hàm cơ bản) hoặc chọn các khối hàm nâng caohơn (ví dụ như khối Mathematics)

    http://www.dientuvietnam.net/forums/filedata/fetch?id=1384050&d=1377361338

  • 8/19/2019 [Codientu.org] Labview

    5/54

     LabVIEW là một môi trườ ng lậ p trình cực k ỳ đa dạng cho phép ta có thể thực thigần như bất cứ phép toán, thuật toán nào vớ i r ất nhiều kiểu biến, ví dụ:• Các phép toán cơ bản: Cộng, Tr ừ, Nhân, Chia, Cộng 1, Tr ừ 1, Bình phương, Đảodấu, Hàm Random, Dịch bit, …. 

    http://www.dientuvietnam.net/forums/filedata/fetch?id=1384052&d=1377361436http://www.dientuvietnam.net/forums/filedata/fetch?id=1384051&d=1377361354

  • 8/19/2019 [Codientu.org] Labview

    6/54

    • Các phép so sánh 

    • Các phép toán Logic 

    http://www.dientuvietnam.net/forums/filedata/fetch?id=1384055&d=1377361983http://www.dientuvietnam.net/forums/filedata/fetch?id=1384053&d=1377361469

  • 8/19/2019 [Codientu.org] Labview

    7/54

    • Các phép toán vớ i Mảng• Các hàm vớ i Chuỗi ký tự • Các hàm toán học phức tạp: Lũy thừa, Logarit, hàm lượ ng giác, hàm vớ i các Matr ận, hàm nội suy, hàm tối ưu 

    • Và nhiều khối hàm khác

    Bạn cũng có thể gọi một chương trình bên ngoài, viết bằng C hoặc Matlab… 

    Đặc biệt, bạn có thể tạo 1 chương trình con để có thể gọi lại trong các chương trìnhvề sau, hoặc để làm gọn chương trình chính. Một chương trình con trong labVIEWgọi là SubVI.

    Để thực thi một phép toán trong LabVIEW, bạn đơn giản nối các tham số vào đầuvào của khối hàm, và nối đầu ra. Xem các ví dụ dưới đây: 

    http://www.dientuvietnam.net/forums/filedata/fetch?id=1384056&d=1377362072

  • 8/19/2019 [Codientu.org] Labview

    8/54

     Các bạn chú ý: đầu vào của các khối hàm thườ ng là các biến Điều khiển

    (Controls), đầu ra thườ ng là các biến Hiển thị (Indicators).Mặc dù việc lậ p trình trong LabVIEW khá tự do theo bất cứ hướ ng nào, trình tự nào, nhưng các hàm thường đượ c thực thi theo hướ ng từ trái sang phải. Vì thế khilậ p trình trong LabVIEW, ta nên chú ý sắ p xếp chương trình theo hướng đó để đảm

     bảo sự thống nhất trong chương trình, tiện lợ i cho việc theo dõi, debug về sau.Đến đây ta tạm thờ i k ết thúc phần tìm hiểu các Khái niệm trong LabVIEW. Tấtnhiên còn r ất r ất nhiều khái niệm khác mà tôi chưa thể trình bày hết ra đây, nhưngnhư vậy cũng tạm đủ để chúng ta tiế p tục tìm hiểu các khái niệm và thuật toán caohơn, tiến tớ i lậ p trình một chương trình hoàn chỉnh.

    Sau này, khi có các khái niệm mới, tôi cũng sẽ bổ sung thêm trong các bài bổ sung,hoặc trong chính mục Khái niệm này.

    Bài 2: Array và Cluster (Đỗ Trung Hiếu - CYBERLAB JSC.)

    Array (Mảng dữ liệu) và Cluster (bó dữ liệu) là 2 khái niệm cơ bản r ất quan tr ọngtrong lậ p trình LabVIEW.

    1. Array: Mảng dữ liệu:

    Array hay mảng dữ liệu là khái niệm chỉ tậ p hợ  p hữu hạn được đánh số (index) cácgiá tr ị có cùng kiểu dữ liệu. Ví dụ: Mảng số thực, mảng số nguyên, mảng ký tự,mảng giá tr ị logic, mảng của mảng (mảng đa chiều), mảng đối tượng… Để tạo 1 mảng các biến điều khiển/hiển thị, thực hiện theo thao tác sau:Trên Front Panel, click chuột phải, chọn : Modern -> Array, Matrix & Cluster ->Array

    http://www.dientuvietnam.net/forums/filedata/fetch?id=1384057&d=1377362118

  • 8/19/2019 [Codientu.org] Labview

    9/54

    Sẽ tạo ra một biểu tượ ng Array tr ống (Empty Array - Array chưa có phần tử hayquy định kiểu phần tử.

    Để quy định kiểu phần tử vào mảng, chọn một Control hay Indicator bất k ỳ bằngcách click chuột phải vào Front Panel, r ồi di vào bên trong ô Array tr ống vừa tạo.Ví dụ ta đượ c một Nummeric Array (mảng số)

    Đánh dấu đỏ là chỉ số của mảng.Để tạo thêm thành phần (element) cho mảng, ta nhậ p giá tr ị vào mảng.Bạn có thể tạo một mảng vớ i kiểu giá tr ị bất k ỳ: Số, số nguyên, số FLOAT, chuỗi

    http://www.dientuvietnam.net/forums/filedata/fetch?id=1384074&d=1377404128http://www.dientuvietnam.net/forums/filedata/fetch?id=1384073&d=1377404051http://www.dientuvietnam.net/forums/filedata/fetch?id=1384072&d=1377403996

  • 8/19/2019 [Codientu.org] Labview

    10/54

    ký tự, giá tr ị logic, Cluster, mảng các mảng, đườ ng dẫn file,…Xem ví dụ dưới đây: 

    Ví dụ này mô tả nhiều dạng Array có thể đượ c tạo trong LabVIEW: mảng Numeric, mảng Biến Logic điều khiển (dạng nút bấm), mảng biến logic hiển thị (dạng đèn Led), mảng String, mảng biến Numeric dạng Slide Bar (thanh trượ t),

    mảng biến Numeric dạng Tank (bình chứa).Xem Front Panel:

    Trong ví dụ, tôi nối dây giữa các đầu vào Logic Control Array và Slide Bar Array

    với đầu ra Logic Indicator Array và Tank Array. Chạy chương trình (nút Run mũitên) ta có k ết quả như hình trên. Quay tr ở  lại Block Diagram, ta nhận thấy các đườ ng dẫn tải dữ liệu dạng Arraycũng có màu biểu thị kiểu dữ liệu mà nó mang (màu xanh lá cho kiểu Logic, vàmàu Da cam cho kiểu Numeric Float), nhưng có sự khác biệt về độ dày. Đườ ngmang dữ liệu Array có độ dày hơn đườ ng mang dữ liệu đơn giá trị thông thườ ng.

    http://www.dientuvietnam.net/forums/filedata/fetch?id=1384076&d=1377404248http://www.dientuvietnam.net/forums/filedata/fetch?id=1384075&d=1377404209

  • 8/19/2019 [Codientu.org] Labview

    11/54

    2. Array các Array, các hàm vớ i Array:2.1 Các hàm vớ i Array:LabVIEW cũng hỗ tr ợ  một thư viện tương đối phong phú các hàm vớ i Array, các

     bạn có thể tìm thư viện này trong: Block Diagram >> Programming >> Array

    Trong thư viện này, có chưa các hàm: • Tìm kích thướ c mảng : Array Size• Tìm phần tử trong mảng theo Index: Index Array• Tạo Array: Build Array• Tìm phần tử lớ n nhất/ nhỏ nhất; Max & Min• Xóa phần tử trong mảng: Delete From Array• Chèn phần tử trong mảng: Insert Into Array• Sắ p xế p mảng 1 chiều : Sort 1D Array• Vân vân Trong bài viết nhỏ này tôi không thể liệt kê tất cả các hàm về mảng cũng như về 

     bất k ỳ lĩnh vực gì, vì thế để thành thạo labview và sử dụng trong thực tế, các bạn phải chịu khó tự tìm hiểu và thử nghiệm vớ i các ví dụ tự tạo ra. Sau đây là một vídụ mẫu:

    http://www.dientuvietnam.net/forums/filedata/fetch?id=1384077&d=1377404511

  • 8/19/2019 [Codientu.org] Labview

    12/54

     Ví dụ này sử dụng các hàm để tính kích thướ c mảng, tìm phần tử (index =3) trongmảng, chèn phần tử mớ i vào vị trí có index =3, và tìm ra phần tử có giá tr ị max,min và index của các phần tử đó Dưới đây là Front panel biểu thị k ết quả 

    2.2 Mảng các mảng hay Mảng 2 chiều:Bạn cũng có thể tạo một mảng của các mảng, hay là mảng 2 chiều bằng cách đưa 1mảng vào thành phần tử của các mảng khác.Trong trườ ng hợ  p này, các hàm Array vớ i loại mảng này sẽ có 2 tham số đầu vào

    http://www.dientuvietnam.net/forums/filedata/fetch?id=1384079&d=1377404608http://www.dientuvietnam.net/forums/filedata/fetch?id=1384078&d=1377404559

  • 8/19/2019 [Codientu.org] Labview

    13/54

    (hoặc ra): X Index và Y Index. Ví dụ hàm Index Array.

    3. Cluster:Cluster là kiểu giá tr ị do người dùng quy định, tương tự như kiểu Structure trong

    lậ p trình C.Với Cluster, ngườ i dùng có thể tạo một kiểu biến là tổng hợ  p của nhiều kiểu biếncơ bản. Ví dụ:Kiểu biến có tên Sinh viên, vớ i các thuộc tính con:• Tên: Dũng (kiểu String)• ID: 01 (Numeric Integer) • Tuổi: 25 (Numeric Integer• Ngày tháng năm sinh: 01-01-1987 (string)• Điểm TB: 8.2 (Float)

    Để tạo kiểu biến Cluster, ta làm như sau: Tương tự cách tạo Array như trên, nhưng trong mục Array, Matrix, Cluster, tachọn ClusterTạo các biến điều khiển dạng Numeric Integer, String, Float và đưa vào trong khốiCluster trông vừa chọn-Trong Block Diagram, chọn Cluster vừa tạo, ấn chuột phải, chọn Creat >>Indicator, một Cluster mớ i dạng Indicator (hiển thị) đượ c tạo ra và nối vớ i ClusterStudent trước đó. Cluster mới đặt tên là Student Indicator-Chạy chương trình, toàn bộ thông tin từ Student đã đượ c chuyển sang Student

    Indicator- Để tách các thuộc tính con bên trong Cluster Student vừa tạo, ta tr ở  lại BlockDiagram, chọn biến Cluster Student, ấn chuột phải, chọn Cluster, Class, VariantPallete >> Unbundle by Name

    Ấn vào khối Unbundle by Name vừa tạo, hoặc kéo ra thêm các thuộc tính con để 

    http://www.dientuvietnam.net/forums/filedata/fetch?id=1384080&d=1377404826

  • 8/19/2019 [Codientu.org] Labview

    14/54

    lựa chọn như trong hình trên, ta có thể trích ra các thuộc tính con của ClusterStudent. Chạy chương trình ta thấy các giá tr ị trích ra đã đượ c hiển thị:

    Bài 3: Vòng lặ p While , Shift Register, Feedback node và Local Variable

    (Đỗ Trung Hiếu - CYBERLAB JSC.)1. Vòng lặ p While:

    Trong các bài trướ c mà tôi đã đăng, các chương trình đều chỉ thực hiện một lần sau

    khi ấn nút Run, thực thi thuật toán, xuất k ết quả, và dừng lại.Để chương trình có thể thực và cậ p nhật giá tr ị liên tục, và chỉ dừng khi ta muốn,chúng ta sử dụng vòng lặ p While.Vòng lặ p While thuộc dạng vòng lặp có điều kiện, chỉ dừng lại khi điều kiện đóđượ c thỏa mãn.Để tạo 1 vòng lặ p While, ta ấn chuột phải trong Block Diagram, chọnProgramming >> Structure >> While LoopSau đó, bạn có thể vẽ 1 hình chữ nhật với kích thướ c bất k ỳ. Đó chính là Vòng lặ pWhile.

    http://www.dientuvietnam.net/forums/filedata/fetch?id=1384081&d=1377404874

  • 8/19/2019 [Codientu.org] Labview

    15/54

      Nút màu đỏ là điều kiện dừng của vòng lặ p. Khi giá tr ị logic đưa vào Điều kiệndừng có giá tr ị đúng (True) thì vòng lặ p dừng, nếu không, vòng lặ p sẽ tiế p tục thựchiện.Ấn vào nút Điều kiện dừng, nút đó chuyển thành biểu tượng như hình bên. Đó là

    điều kiện chạy. Khi đầu vào logic điều kiện chạy có giá tr ị đúng, vòng lặ p tiế p tụcchạy. Nếu không, vòng lặ p sẽ dừng.Ô có chữ (i) màu xanh lam ở  góc của vòng lặ p là itoration (biến đếm vòng lặ p).Mỗi khi vòng lặ p thực hiện xong 1 chu k ỳ lặ p, i sẽ tăng lên 1 đơn vị. i đến tăng từ 0.Xem ví dụ sau đây: thực hiện 2 vòng lặ p While khác nhau, cùng chạy đủ 100 lầnlặp (i đếm từ 0 đến 99 thì dừng.K ết quả cuối cùng của i đều là 99.

    2. Thờ i gian thực thi vòng lặ p và các hàm Delay:Trong ví dụ trên, ta có thể thấy thờ i gian thực thi vòng lặ p While là r ất nhanh, đó làvì máy tính thực hiện các task trong vòng lặ p vớ i thờ i gian r ất nhỏ (nhưng khôngnhỏ hơn 1ms) Để có thể thiết lậ p thờ i gian thực thi cho các vòng lặ p này một cách gần đúng, ta sử dụng các hàm Delay.Click chuột phải trên Block Diagram, chọn Programming >> Timming >> Wait

    http://www.dientuvietnam.net/forums/filedata/fetch?id=1384093&d=1377438394http://www.dientuvietnam.net/forums/filedata/fetch?id=1384092&d=1377438352

  • 8/19/2019 [Codientu.org] Labview

    16/54

    (ms) hoặc Wait Until ms Multiple

    Hai hàm trên đều có tác dụng thực thi một tác vụ delay vớ i số mili giây bằng đầuvào của hàm. Sự khác nhau là: Hàm Wait thực hiện phép Delay thời gian cho trướ csau khi thực hiện các tác vụ trong hàm While, còn hàm Wait Until ms Multiple cố định thờ i gian thực hiện các tác vụ trong hàm While trong khoảng thời gian địnhtrướ c, bất k ể các tác vụ trong hàm là gì.Thiết lập đầu vào cho hàm Delay, thêm vào một Slide bar control, và một Chartnhư trong hình: 

    Chạy chương trình, di chuyển Slide bar, ta thấy k ết quả đượ c hiển thị trên Chart,vớ i tốc độ 100ms mỗi vòng.

    Thay đổi đầu vào hàm Delay để quan sát tốc độ nhanh chậm của vòng lặ p.3. Shift RegisterShift Register là một cách để lưu dữ liệu lại cho các vòng lặ p sau. Ví dụ khi bạnmuốn thực hiện chương trình nhấ p nháy Led, thuật toán là sau mỗi vòng lặ p, bạnđảo tr ạng thái của Led ở  thời điểm trước đó. Để làm đượ c vậy, bạn cần lưu trạngthái của Led, sử dụng Shift Register.

    http://www.dientuvietnam.net/forums/filedata/fetch?id=1384095&d=1377438570http://www.dientuvietnam.net/forums/filedata/fetch?id=1384094&d=1377438456

  • 8/19/2019 [Codientu.org] Labview

    17/54

    Click chuột phải vào rìa bên trái của vòng lặ p While, chọn Add Shift Register,được như hình dướ i:

    Ô có mũi tên bên trái lưu giá trị đượ c cậ p nhật ở  vòng lặp trước, ô có mũi tên bên phải lưu giá trị mới đượ c cậ p nhật cho vòng lặp sau. Ban đầu Shift Register chưachứa kiểu giá tr ị nào. Để đặt giá tr ị  ban đầu cho Shift Register, đưa vào đó 1 giá trị 

     bất k ỳ, ví dụ: kiểu logic

    Đặt một hàm Not để đảo giá tr ị của biến logic lưu trong Shift Register sau mỗivòng lặ p, và nối một Led Indicator vào đó. Ta đã thực hiện một thuật toán nhấ pnháy Led.

    Để có thể thấy Led nháy chậm như dự kiến, đưa vào chương trình một hàm Delay.Chạy chương trình để thấy Led nháy (xem file ví dụ)4. Ví dụ tạo và hiển thị hàm Sin:Trong ví dụ này ta sẽ thực hiện các hàm Sin(t), Sin (2t), Sin (3t) vớ i t là thờ i gianthực. Giá tr ị sẽ đượ c tín toán và xuất ra vớ i chu k ỳ 50ms• Vì giá trị đượ c tính toán và xuất ra vớ i chu k ỳ 50ms, ta cần vòng lặ p có hàm

    http://www.dientuvietnam.net/forums/filedata/fetch?id=1384100&d=1377438842http://www.dientuvietnam.net/forums/filedata/fetch?id=1384099&d=1377438795

  • 8/19/2019 [Codientu.org] Labview

    18/54

    Delay 50ms.• Để thực hiện đúng hàm Sin (t) vớ i t là thờ i gian thực tính bằng giây, ta có thể sử dụng biến đếm i. Ta sẽ có: t = (i*50)/1000 (s) = i * 0.05• Thực hiện hàm Sin (t) = Sin (i*0.05), tương tự vớ i các hàm khác.

    • Ta có 3 đầu ra, để hiển thị cùng lúc 3 đầu ra trên 1 Chart, ta sử dụng khối Bundletrong Programming >> Cluster, Class, Variant• Bố trí chương trình như hình dướ i

    Chạy chương trình, ta đượ c k ết quả:

    http://www.dientuvietnam.net/forums/filedata/fetch?id=1384102&d=1377438986http://www.dientuvietnam.net/forums/filedata/fetch?id=1384101&d=1377438887

  • 8/19/2019 [Codientu.org] Labview

    19/54

     * Chú ý: Khối Formula node là khối cho phép lậ p trình dạng dòng lệnh các phéptoán phức tạp, dướ i dạng ngôn ngữ lập trình tương tự C. Đây là một công cụ hếtsức hiệu quả và mạnh mẽ trong LabVIEW, chúng ta sẽ quay tr ở  lại vớ i nó sau này.Để tạo Formula node, ta click chuột phải vào Block Diagram, chọn Programming>> Structures >> Formula Node

    Ví dụ tính toán đạo hàm và tích phân:Sau đây ta sẽ tận dụng kiến thức đã biết về Shift Register để thực thi các đạo hàmvà tích phân của hàm vừa tạo.Công thức tính gần đúng đạo hàm của hàm y = f(x):• Y'(n) = [f(n) - f(n-1)] / dt• hoặc phương pháp chính xác hơn : y'(n-2) = [-f(n)+8*f(n-1)-8*f(n-3)+f(n-4)]Ở đây ta sẽ sử dụng phương pháp đầu tiên. Chú ý: dt = 50ms=0.05s.

    http://www.dientuvietnam.net/forums/filedata/fetch?id=1384103&d=1377439135

  • 8/19/2019 [Codientu.org] Labview

    20/54

     

    Trong ví dụ trên, ta sử dụng Shift Register để lưu trữ đầu ra f(n). Do đó có thể coiđầu ra từ shift register giá tr ị của đầu vào nhưng của vòng lặp trướ c.K ết quả hiển thị trên Front Panel, ta đượ c hàm gần đúng Cos (t), là đạo hàm củaSin (t).

    Các bạn cũng có thể thực hiện gần đúng bằng phương pháp thứ 2, sử dụng ShiftRegister để lưu trữ giá tr ị của trước đó 2,3,4… vòng lặ p, bằng di chuột xuống dướ iđầu vào shift register và kéo xuống:

    http://www.dientuvietnam.net/forums/filedata/fetch?id=1384105&d=1377439532http://www.dientuvietnam.net/forums/filedata/fetch?id=1384104&d=1377439424

  • 8/19/2019 [Codientu.org] Labview

    21/54

     Trong ví dụ trên sử dụng Shift Register lưu trữ giá tr ị của 4 vòng lặp trước đó củađầu vào biến đếm i, k ết quả ra là giá tr ị đã được lưu trữ của 1, 2, 3, 4 vòng lặ p:

    5. Feedback NodeTrong mục trên ta đã biết sử dụng Shift Register để thực hiện các thuật toán lưu trữ giá tr ị của vòng lặp trướ c.Tuy nhiên một nhược điểm của Shift Register là tốn không gian trong chươngtrình, vì cần phải nối từ đầu này tớ i tận đầu kia của vòng lặp, do đó trong lậ p trìnhđồ họa như LabVIEW, là một bất lợ i.Vì thế có một số cách khác để giải quyết điều này, đó là Feedback Node và Local

    Variable.Để tạo một Feedback Node, tao Click chuột phải Block Diagram, chọnProgramming >> Strutures >> Feedback NodeĐiều khác biệt của Feedback Node so vớ i các hàm khác trong LabVIEW, là Đầuvào feedback node ở  bên phải, cậ p nhật giá tr ị cho vòng lặp sau, và đầu ra ở  bêntrái, là giá tr ị ở  vòng lặp trước đó. 

    http://www.dientuvietnam.net/forums/filedata/fetch?id=1384107&d=1377439631http://www.dientuvietnam.net/forums/filedata/fetch?id=1384106&d=1377439579

  • 8/19/2019 [Codientu.org] Labview

    22/54

     Ví dụ, quay tr ở  lại bài toán nhấp nháy đèn Led đã nói ở  trên, ta lậ p trình sử dụngFeedback Node:

    Ta thấy chương trình đã gọn hơn rất nhiều so với chương trình trước đó. Điểm lợ icủa Feedback node so vớ i Shift register là có thể đặt dễ dàng ở  bất cứ vị trí nàotrong chương trình, tuy nhiên lại không lưu trữ đượ c giá tr ị ở  nhiều hơn 1 vòng lặ ptrước đó. 6. Local VariableTrong các ví dụ trướ c kia tôi mớ i chỉ giớ i thiệu các chương trình chạy vớ i 1 vòng

    lặ p. Một trong những điểm mạnh nhất của LabVIEW, đó là cho phép ngườ i dùnglập trình đa luồng, đa lõi và đa tác vụ một cách hết sức dễ dàng (những ai biết sâuvề lậ p trình C, C++, C# có lẽ đều hiểu lập trình đa luồng là một lĩnh vực khôngthực sự đơn giản)Vớ i LabVIEW, bản thân ngôn ngữ ngay từ đầu đã hỗ tr ợ  lập trình đa luồng. Trongmột chương trình, bạn có thể bố trí nhiều vòng lặp để thực hiện nhiều tác vụ khácnhau, ví dụ:• Vòng lặ p Xử lý Giao diện ngườ i dùng (User Interface Loop)• Vòng lặ p xử lý các tác vụ-sự kiện (Event-Task Loop)

    • Vòng lặ p thu thậ p dữ liệu (Data Acquisition)• Vòng lặ p hiển thị/lưu trữ dữ liệu• Vân vân… Và đương nhiên, các vòng lặp này cũng cần đượ c giao tiếp, trao đổi dữ liệu vớ inhau.Local Variable là một công cụ hỗ tr ợ  cho việc trao đổi dữ liệu đó. 

    http://www.dientuvietnam.net/forums/filedata/fetch?id=1384109&d=1377439795http://www.dientuvietnam.net/forums/filedata/fetch?id=1384108&d=1377439758

  • 8/19/2019 [Codientu.org] Labview

    23/54

    Ví dụ tạo 2 vòng lặ p khác nhau, một vòng lặp cho người dùng thay đổi giá tr ị Slide bar, bật tắt các Led, và dừng chương trình, vòng lặ p kia hiển thị giá tr ị Slide Bar vàtr ạng thái các Led. Mỗi vòng lặ p chạy vớ i chu k ỳ khác nhau.Để tạo ra Local Variable của một biến (ví dụ Slide bar), bạn click chuột phải vào

     biến đó, chọn Creat >> Local Variable.Khi khở i tạo 1 Local Variable, có thể mặc định ở  tr ạng thái đầu vào (Write), để chuyển sang tr ạng thái đầu ra (Read), Click chuột phải vào Local Variable đó,chọn Change to Read. Làm tương tự khi muốn chuyển sang Write.Bạn cũng có thể thay đổi biến tham chiếu của Local Variable đó bằng các clickchuột trái, chọn biến khác.Thiết k ế chương trình như sau: 

    Lúc này có thể bạn chưa thể chạy được chương trình (cứ thử chạy xem, sẽ báo lỗi!). Đó là vì Thiết lập Cơ khí của các nút (Mechanical Action) không tương thích để 

    có thể sử dụng Local Variable cho nó.Để sửa đúng, quay tr ở  lại Front Panel chương trình, click phải lên các nút Stop vàOK Button, chọn Mechanical Action >> Switch Until Released (trướ c kia là Latchwhen released).Bây giờ  chương trình đã có thể chạy. Thay đổi các giá tr ị của Slide, ấn nút OK,thay đổi Boolean và quan sát các hiển thị, bạn thấy 2 vòng lặp đã liên lạc đượ c vớ inhau. Ấn Stop để dừng chương trình, 2 vòng lặ p sẽ cùng dừng.Các ví dụ down tại:• Led toggle using feedback node.vi 

    • local variable sample.vì (hết bài 3 )

    http://www.mediafire.com/download/pogo2wesaa5fdcq/Led+toggle+using+feedback+node.vihttp://www.mediafire.com/download/pogo2wesaa5fdcq/Led+toggle+using+feedback+node.vihttp://www.mediafire.com/download/pogo2wesaa5fdcq/Led+toggle+using+feedback+node.vihttp://www.mediafire.com/download/gidj66g8qc1dexk/local+variable+sample.v%C3%AChttp://www.mediafire.com/download/gidj66g8qc1dexk/local+variable+sample.v%C3%AChttp://www.mediafire.com/download/gidj66g8qc1dexk/local+variable+sample.v%C3%AChttp://www.dientuvietnam.net/forums/filedata/fetch?id=1384110&d=1377439836http://www.mediafire.com/download/gidj66g8qc1dexk/local+variable+sample.v%C3%AChttp://www.mediafire.com/download/pogo2wesaa5fdcq/Led+toggle+using+feedback+node.vi

  • 8/19/2019 [Codientu.org] Labview

    24/54

    Bài tiế p theo: Bài 4: Vòng lặp FOR và các thủ thuật vớ i Array 

    Bài 4: Vòng lặ p FOR và các thủ thuật với Array (Đỗ Trung Hiếu - CYBERLABJSC.)

    Trong mục này, chúng ta sẽ tìm hiểu một cấu trúc vòng lặp khác cũng rất thôngdụng: vòng lặ p FOR.1. Vòng lặ p FOR:

    Trong khi vòng lặ p While là cấu trúc lặp có điều kiện, vòng lặ p For là vòng lặ pkhông điều kiện. Vòng lặ p For thực hiện một số lượ ng vòng lặp xác định trướ c khidừng.Để tạo vòng lặ p For, ta chọn Programming >> Strutures >> For loop. Và tạo giống

    như vòng lặ p While.Chú ý trong vòng lặp For, đầu vào N là số vòng lặp đượ c thực hiện. Còn lại cáchthực thi vòng lặ p For giống vớ i vòng lặ p While. Biến đếm i sẽ chạy từ 0 cho đến(N-1).Vòng lặp For cũng có thể tạo điều kiện dừng và điều kiện chạy như vòng lặ pWhile, bằng cách click phải vào 1 cạnh của vòng lặ p, chọn Conditional Terminal.Vớ i cách này ta có thể dừng vòng lặ p ngay cả khi số vòng lặp chưa đạt đến giá tr ị đặt.

  • 8/19/2019 [Codientu.org] Labview

    25/54

     Bạn cũng có thể tạo Shift Register, Feedback node và Local Variable trong vònglặp For tương tự vớ i cách của vòng lặp While. Chương trình dưới đây sử dụngvòng lặp For để tính toán ra giá tr ị thứ N của một dãy Fibonacy, quy luật của dãylà:

    • F(0)=0; • F(1)=1; • F(n+2)=F(n+1)+F(n); 

    2. Vòng lặ p FOR và mảng (Array):

    Sau đây tôi muốn giớ i thiệu một thủ thuật khá thú vị khi làm việc vớ i mảng củavòng lặ p For.

    Ta có thể sử dụng vòng lặp For để duyệt một mảng, trong khi không cần phải biếtsố phần tử trong mảng, bằng cách đơn giản nối mảng đó vào trong vòng lặ p. Vònglặ p sẽ tự động tính ra số vòng lặp để duyệt hết mảng, và mỗi vòng lặ p lần lượ t táchra phần tử thứ (i) trong mảng đó. Khi nối đầu ra từ trong vòng lặp For ra ngoài, ta cũng có thể tạo một mảng vớ i số 

     phần tử bằng số vòng lặ p của For.

  • 8/19/2019 [Codientu.org] Labview

    26/54

     Ví dụ trên tạo ra 1 mảng 20 phần tử (Loop 1), r ồi phân tích mảng đó ra từng phầntử, nhân mỗi phần tử vớ i 2, r ồi tạo ra 1 mảng 20 phần tử khác từ các k ết quả đó. 

    Bạn cũng có thể truyền nguyên vẹn giá tr ị của mảng hay giá tr ị vào trong vòng lặ phoặc từ vòng lặ p ra bằng cách click chuột phải vào vị trí nối ở  trên rìa vòng lặ p,chọn Disable Indexing

    3. Ví dụ Sử dụng vòng lặ p For và mảng để tạo tín hiệu tuần hoàn:Một số bài toán tạo tín hiệu có thể phải sử dụng các phép tính toán học phức tạ p,tốn kém tài nguyên và bộ nhớ  máy tính. Để giảm tải công việc tính toán cho máytính ta thườ ng sử dụng một Mảng ghi nhớ  sẵn các giá tr ị của hàm đó (nếu hàm đótuần hoàn) và công việc tính toán sẽ chỉ cần thực hiện một lần.Ví dụ thực hiện tạo tín hiệu có giá tr ị tuần hoàn theo thờ i gian là hàm sau:Y(t) = sin(2pi*t) + sin(2*2pi*t) + cos (3*3pi*t)Vớ i thời gian tăng mỗi đơn vị là 0.01 s• Ta đã biết hàm trên là một hàm tuần hoàn có chu k ỳ là T = 1s• Vì thế chỉ cần thực hiện tính toán trong 1 chu k ỳ của hàm đó, rồi lặ p lại ở  các chu

  • 8/19/2019 [Codientu.org] Labview

    27/54

    k ỳ sau• Trướ c tiên sử dụng vòng lặp FOR để tạo mảng:• Vớ i thời gian tăng mỗi đơn vị là 0.01s, một chu k ỳ sẽ bao gồm 100 phần tử.• Để tạo mảng như vậy ta lập trình như sau: 

    Trong đó T là mảng lưu trữ giá tr ị thờ i gian, và Y là mảng lưu trữ giá tr ị tín hiệucần tạo.Để hiển thị toàn bộ tín hiệu vừa tạo ta sử dụng XY Graph trong Front Panel: Click

     phải vào Front Panel, chọn Graph Indicators >> XY Graph, Đấu dây như hình trên. Tiế p theo, ta sử dụng vòng lặ p While và vòng lặ p FOR k ết hợp để thực hiện biểudiễn xuất tín hiệu tuần hoàn từ mảng vừa tạo.K ết quả:

  • 8/19/2019 [Codientu.org] Labview

    28/54

     * Chú ý: Thay vì sử dụng vòng lặ p For , ta cũng có thể sử dụng hàm Index Array để tách tín hiệu tử mảng.Down ví dụ signal gen For loop.vi Bài tậ p: Sử dụng vòng lặ p For và XY Graph vừa học để lậ p trình vẽ các đồ thị sau:a) Đồ thị đườ ng tròn từ 1000 điểm trên đường tròn đó, bán kính 1 đơn vị.

     b) Đồ thị hàm số y = 2x^4+3x^3-5x^2+x+1., vớ i x từ [-10 đến 10], lấy 100 giá tr ị.

    4. Bài giảiTrong bài trước, tôi có để lại 2 bài tậ p nho nhỏ, chắc các bạn đều đã giải quyếtđược. Đối vớ i những bạn chưa biết cách giải, tôi xin tóm tắt đáp án như sau: Bài 1: Vẽ đồ thị đườ ng tròn từ 1000 điểm trên đường tròn đó, bán kính 1 đơn vị.Phân tích:Chúng ta đều biết tọa độ các điểm trên đườ ng tròn có thể biểu diễn bằng hàmlượ ng giác sau:X = sin (phi); Y = cos (phi) vớ i phi = [0,2pi].

     Như vậy để vẽ 1000 điểm trên đườ ng tròn, ta dung vòng lặ p For trong 1000 vònglặp, và phi = i*2pi/1000 (vì có 1000 điểm, nên mỗi vòng lặp phi tăng 2pi/1000(rad)Từ đó ta có mảng các tọa độ các điểm (X[i],Y[i])Chương trình như sau: 

    http://www.mediafire.com/download/1k336k3fh73s8mw/signal+gen+For+loop.vihttp://www.mediafire.com/download/1k336k3fh73s8mw/signal+gen+For+loop.vihttp://www.mediafire.com/download/1k336k3fh73s8mw/signal+gen+For+loop.vihttp://www.mediafire.com/download/1k336k3fh73s8mw/signal+gen+For+loop.vi

  • 8/19/2019 [Codientu.org] Labview

    29/54

     K ết quả:

    Vớ i bài còn lại cách làm tương tự, không khó lắm nên tôi nghĩ không cần giải nữa.Các bạn cũng có thể thay đổi chương trình để giải các bài toán vẽ đồ thị phức tạ phơn. Tôi rất mong các bạn đóng góp các ý tưở ng và ví du. Một số đồ thị sau cũngkhá thú vị các bạn có thể thử.5. Vòng lăp For và mảng đa chiều:

    Trong Bài 2: Array và Cluster, tôi đã giớ i thiệu qua về mảng 2 chiều (2D Array),đó là một mảng của các mảng 1 chiều.Sau đây tôi xin nói rõ hơn về loại mảng này và các ứng dụng của nó, cũng nhưthao tác vớ i mảng đa chiều sử dụng For loop.Mảng đa chiều là một tập hơp các phần tử cùng loại, đượ c sắ p xế p theo tọa độ hàng và cột. Có nhiều cách để tạo mảng đa chiều:• Cách 1: Tạo mảng hằng số 

  • 8/19/2019 [Codientu.org] Labview

    30/54

    • Cách 2: Tạo mảng dạng biến điều khiển• Cách 3: Tạo bằng vòng lặ p ForVớ i 2 cách trên r ất đơn giản nhưng diễn giải thì dài dòng, các bạn tự tìm hiểu.Tôi chỉ xin giớ i thiệu cách thứ 3:

    Ví dụ: Tạo mảng 2 chiều vớ i 4 cột, 5 hàng, vớ i số phần tử tăng dần từ phần tử đầutiên cho đến cuối cùng, tăng từ trái sang phải, trên xuống dướ i. K ết quả ra sẽ phảinhư sau: 

    Ta sẽ sử dụng 2 vòng lặ p For lồng trong nhau, vòng lặp trong để tạo từng hàng 4 phần tử, và vòng lặp ngoài để tạo mảng 2 chiều từ 5 mảng 1 chiều vừa tạo (vòngFor có 5 lần lặp). Để ý chú thích.

    Cũng giống như vớ i mảng 1D, bạn cũng có thể sử dụng For loop để tách mảng 2

    chiều ra từng phần tử (phần tử mảng hoặc phần tử số). Bạn phải làm theo trình tự,đầu tiên tách từng mảng 1 chiều ra từ mảng 2 chiều, sau đó tách từng phần tử trongmảng một chiều:

  • 8/19/2019 [Codientu.org] Labview

    31/54

    Trong chương trình như hình, tôi giớ i thiệu 2 cách để cộng từng phần tử trongmảng 2 chiều trong LabVIEW: cách dùng vòng lặ p For tách từng phần tử và thựchiện phép cộng, và cách đơn giản là dùng phép cộng vào mảng

    Ví dụ trên down mang 2 chieu va For loop.vi Sau đây tôi tạm k ết thúc bài giớ i thiệu về vòng lặ p For. Còn nhiều ví dụ và bài tậ p

    thú vị liên quan đến vòng lặp này, nhưng cần thêm kiến thức bổ sung, vì thế ta sẽ tr ở  lại vớ i vòng lặ p này sau.

    Bài 5: Cấu trúc CASE, SEQUENCE, EVENT và FORMULA NODE (Đỗ TrungHiếu - CYBERLAB JSC.)

    Trong bài này ta sẽ tìm hiểu một số cấu trúc còn lại hay đượ c sử dụng trong

    http://www.mediafire.com/download/rz3k6c3bc26ybyg/mang+2+chieu+va+For+loop.vihttp://www.mediafire.com/download/rz3k6c3bc26ybyg/mang+2+chieu+va+For+loop.vihttp://www.mediafire.com/download/rz3k6c3bc26ybyg/mang+2+chieu+va+For+loop.vihttp://www.mediafire.com/download/rz3k6c3bc26ybyg/mang+2+chieu+va+For+loop.vi

  • 8/19/2019 [Codientu.org] Labview

    32/54

    LabVIEW.1. Cấu trúc CASE:

    Cấu trúc CASE trong LabVIEW có tác dụng giống như cấu trúc r ẽ nhanh CASE

    trong lập trình C/C++. Đó là dạng cấu trúc r ẽ nhánh cho phép chương trình cónhiều lựa chọn khác nhau tùy thuộc vào đầu vào.Để tạo cấu trúc CASE, ta click chuột phải chọn Programming >> Structures >>Case structureTa tạo một cấu trúc case trên block diagram như sau: 

    Khi mớ i khở i tạo, điều kiện đầu vào có kiểu dữ liệu Logic (Boolean).Điều kiện đầu vào cũng có thể là chuỗi ký tự, số, enum… 

    Khi muốn chuyển sang Case khác, ví dụ hiện tại là True case, ta ấn vào mũi têntam giác chỉ xuống cạnh chữ True, chọn False, nội dung bên trong case structure sẽ chuyển sang hiển thị False case.

    Ví dụ:Viết chương trình cảnh báo tr ạng thái của biến đầu vào, nếu biến lớn hơn giá trị đặt, đèn Led nhấ p nháy, nếu không đèn Led không sang. 

    Chương trình như sau: 

  • 8/19/2019 [Codientu.org] Labview

    33/54

     Đây là chương trình khi điều kiện đầu vào lớn hơn giá trị đặt (10) thỏa mãn, ta thực

    hiện một phép đảo giá tr ị Led (nhấ p nháy Led Alarm) sau mỗi vòng lặ p.

    Còn đây là chương trình khi điều kiện đầu vào là False:

    Ta cũng có thể thiết lập đầu vào của Case là dạng khác Boolean, ví dụ:• Dạng string: bạn chú ý khi đặt đầu vào là String, ta phải chú ý nhập đúng chínhxác tên của điều kiện trong dấu ngoặc kép, nếu không LabVIEW sẽ coi như đó làmột trườ ng hợ  p khác.• Dạng enum: enum là một kiểu số Integer nhưng được đại diện bở i một tên nhấtđịnh. Sử dụng kiểu Enum ta sẽ ít gặ p phải khả năng bị nhầm tên như khi sử dụngString, hơn nữa, sử dụng Enum cũng sẽ giảm bớt đáng kể dung lượ ng bộ nhớ  đượ csử dụng.Ví dụ sau thực thi phép toán:• Cho đầu vào là 1 số nguyên X và 1 đèn Led 

  • 8/19/2019 [Codientu.org] Labview

    34/54

    • Nếu X=0 thì đèn Led tắt• Nếu X=1 Led nháy vớ i chu k ỳ 100ms• Nếu X=2 Led nháy vớ i chu k ỳ 200ms• Các trườ ng hợ  p khác Led sáng

    Bài toán này là một ví dụ về việc đầu vào của Case là số. Chương trình vớ i từngtrườ ng hợ  p của đầu vào đượ c lậ p trình như sau: 

  • 8/19/2019 [Codientu.org] Labview

    35/54

     

    Chú ý:• Để tạo thêm 1 case mớ i, ta click phải vào cạnh của Case structure, chọn "Addcase after" hoặc "Add case before".• Default Case là trườ ng hợp trong đó X bằng giá tr ị điều kiện, hoặc bằng bất cứ giá tr ị nào chưa đượ c nêu trong điều kiện đó. Ví dụ trong bài toán này, Defaultcase phải là 3 hoặc 4 hoặc bất cứ số nào khác 0,1,2.• Thườ ng mặc định ban đầu X=0 sẽ là "Default case", muốn "default case" là 3, ta

    tạo Case X=3, và click chuột phải vào Case structure, chọn "Make this the defaultcase"Enum:Enum bản chất tậ p hợ  p các số thông thường, nhưng mỗi số được đại diện bằng 1tên riêng.Để tạo Enum trong Front panel, ta chọn: Modern >> Ring & Enum >> EnumBiểu tượ ng trong Block Diagram và Front Panel của 1 Enum như sau 

  • 8/19/2019 [Codientu.org] Labview

    36/54

     Để tạo thêm phần tử trong Enum, ta click phải vào biểu tượ ng, chọn Properties >>

    Edit Items

    Ta thêm các phần tử với các tên tương ứng như sau hình trên.  Như vậy ta đã tạo ra các phần tử với các tên: "So 0" tương ứng với 0; "So 1" tươngứng với 1; "So 2" tương ứng vớ i 2; Ta có thể thêm phần tử cuối là "So con lai"tương ứng vớ i 3.

    Sau đó ta sẽ thay thế Enum vừa tạo cho số X trong ví dụ Case Structure trên, tathấy Case structure tự nhận tậ p hợ  p các số Enum vừa tạo như là tên của từngtrườ ng hợ  p.

  • 8/19/2019 [Codientu.org] Labview

    37/54

     Sau này, ta sẽ thấy Enum đượ c sử dụng r ất thông dụng trong các bài toán sử dụngCase, đặc biệt là các bài toán sử dụng Máy tr ạng thái mà tôi sẽ nói đến trong những

     phần sau của mục này.

    Bài toán: Lậ p trình hiển thị đèn giao thông với đầu vào là các tr ạng thái của đèn. Trong bài toán này ta sẽ sử dụng Enum, case structure để lậ p trình 1 hệ thống đèngiao thông. Vớ i 3 tr ạng thái của đèn: Green, Red, Yellow Bước 1: Trướ c tiên ta tạo 3 đèn Xanh, đỏ, vàng.Ta tạo 3 đèn Led. Hiện cả 3 đèn đều có màu Xanh.Để đổi màu từng đèn, ta kích chuột phải vào Led đã tạo, chọnProperties>>Appearance, kích chuột trái vào màu đèn ON/OFF và chọn màu tùy ý

    K ết quả ta được 3 đèn với 3 màu như sau: 

  • 8/19/2019 [Codientu.org] Labview

    38/54

    Bướ c 2: Tạo Enum với 3 Items: Red, Yellow, Green đại diện cho 3 tr ạng thái củađèn giao thông. Bướ c 3: Tạo 1 Case structure và lậ p trình cho từng đèn. Ở đây để cho gọn chươngtrình ta sẽ sử dụng 1 Constant array để lưu trạng thái của đèn cho từng trườ ng hợ  p.

    Chạy chương trình, thay đổi Enum STATE, ta thấy đèn giao thông đượ c hiển thị đúng như tr ạng thái định trướ c.Bướ c 4: Lậ p trình chuyển đổi tr ạng tháiTrong bướ c này ta sẽ sử dụng một phương pháp gọi là "State Machine" hay máytr ạng thái để biểu diễn chuyển đổi của hệ đèn giao thông theo như dự kiến:Red >> Green >> Yellow >> Red.

    Ở đây, ngoài việc xuất ra tín hiệu cho hệ đèn, ta còn phải quy định cả Tr ạng tháitiế p theo (tức là giá tr ị của Enum) cho đèn đó ở  vòng lặ p sau. Vì thế ta cần sử dụngđến Shift Register.

     Ngoài ra mỗi trườ ng hợp cũng quy định thờ i gian delay của tr ạng thái, ví dụ: ĐènĐỏ chờ  8s, đèn Vàng chờ  3s, đèn Xanh chờ  5sLập trình như sau: 

  • 8/19/2019 [Codientu.org] Labview

    39/54

     

    K ết quả hiển thị:

  • 8/19/2019 [Codientu.org] Labview

    40/54

     Đây là một ví dụ đơn giản của một phương pháp lậ p trình gọi là State Machine.Phương pháp này còn có 1 biến thể ưu việt hơn mà tôi sẽ nói trong một Bài khác.Có thể tóm tắt các bướ c của phương pháp này như sau: • Xác định từng tr ạng thái của hệ thống• Vẽ sơ đồ tr ạng thái (Sơ đồ chuyển tr ạng thái, và các điều kiện chuyển tr ạng thái)

    • Lậ p trình cho từng tr ạng thái, trong đó quy định: Chương trình sẽ hoạt động thế nào, và tr ạng thái tiế p theo là gì.Các ví dụ down tại đây: * case sample.vi * case sample with enum.vi * simple traffic light sample.vi 2. Cấu trúc SEQUENCE:Cấu trúc SEQUENCE đượ c dùng trong những bài toán mà trong đó các tác vụ cầnđượ c thực hiện theo trình tự cho trướ c.

    Ví dụ trong bài toán thu thậ p và xử lý dữ liệu, các bước chương trình cần thực hiệnlà như sau: • Cấu hình chế độ đo (chọn thiết bị đo, tốc độ đo, số mẫu đo về, độ phân giải, chế độ đo…) • Thu thậ p tín hiệu đo • Xử lý tín hiệu (lọc…) 

    http://www.mediafire.com/download/r9ua48yhbg4r5c1/case+sample.vihttp://www.mediafire.com/download/r9ua48yhbg4r5c1/case+sample.vihttp://www.mediafire.com/download/r9ua48yhbg4r5c1/case+sample.vihttp://www.mediafire.com/download/c4ecbynq9o13wub/case+sample+with+enum.vihttp://www.mediafire.com/download/c4ecbynq9o13wub/case+sample+with+enum.vihttp://www.mediafire.com/download/c4ecbynq9o13wub/case+sample+with+enum.vihttp://www.mediafire.com/download/vn479t2lr8112ds/simple+traffic+light+sample.vihttp://www.mediafire.com/download/vn479t2lr8112ds/simple+traffic+light+sample.vihttp://www.mediafire.com/download/vn479t2lr8112ds/simple+traffic+light+sample.vihttp://www.mediafire.com/download/vn479t2lr8112ds/simple+traffic+light+sample.vihttp://www.mediafire.com/download/c4ecbynq9o13wub/case+sample+with+enum.vihttp://www.mediafire.com/download/r9ua48yhbg4r5c1/case+sample.vi

  • 8/19/2019 [Codientu.org] Labview

    41/54

    • Hiển thị tín hiệu• Lưu trữ.Để tạo 1 Sequence, tao chọn Programming >> Flat Sequence, r ồi tạo như vớ i vònglặ p While.

    Flat Sequence đượ c biểu thị giống như một thướ c phim, mang hàm ý các tác vụ thực hiện tuần tự giống như các Frame trong một bộ  phim. Ban đầu Flat Sequencemớ i chỉ có 1 Frame. Để thêm Frame mớ i, ta click chuột phải vào rìa của Sequence,chọn Add Frame Before (nếu click vào rìa trái) hoặc Add Frame After (nếu clickvào rìa phải).Sequence sẽ thực hiện tuần tự các tác vụ trong mỗi Frame theo trình tự từ trái sáng

     phải.Bạn cũng có thể chèn thêm 1 frame vào giữa 2 Frame bằng cách click chuột phảivào giữa 2 frame, chọn Insert Frame. Bạn cũng có thể gộ p 2 Frame bằng cách chọn

    Merge Frames.

    Ví dụ: Chương trình thực hiện tuần tự: xuất tín hiệu, thu thậ p tín hiệu, xử lý vàhiển thị 

  • 8/19/2019 [Codientu.org] Labview

    42/54

    Code chương trình đượ c thực hiện như trên. Frame đầu tiên xuất tín hiệu có kèmtheo nhiễu tr ắng (sử dụng hàm random). Frame thứ 2 xử lý tín hiệu bằng bộ lọcthông thấ p, và Frame cuối cùng hiển thị tín hiệu trướ c và sau khi lọc.K ết quả hiển thị:

    Trong ví dụ trên ta thấy chương trình chỉ có 3 Frame cần thực hiện tuần tự, nếunhư bài toán đòi hỏi có nhiều Frame hơn (có những bài toán cần đến hàng chụcFrame thực hiện tuần tự, ví dụ như các ứng dụng mô tả hoạt động của máy, cácứng dụng xử lý chuỗi ký tự hoặc xử lý giao tiế p) thì Flat Sequence tr ở  nên quácồng k ềnh và khó quản lý.Để thay thế Flat Sequence, ta sử dụng Stacked Sequence. Cách tạo StackedSequence cũng như vớ i Flat Sequence, chọn Programming >> Structures >>

    Stacked SequenceBan đầu Stacked Sequence không khác Flat Sequence, nhưng khi ta thêm cácFrame mớ i vào (bằng lệnh Add Frame Before/After) thì có sự khác biệt. StackedSequence lưu trữ các Frame trong các page khác nhau giống như vớ i cấu trúc Case.Các Frame được đánh số từ 0, 1, 2… Xem ví dụ dưới đây, ta thấy với Stacked Sequence, chương trình đã nhỏ gọn hơnnhiều.

  • 8/19/2019 [Codientu.org] Labview

    43/54

     *Chú ý:• Để truyền các giá tr ị từ Frame này đến Frame khác trong Stacked Sequence, ta sử 

    dụng Sequence local, bằng cách click phải vào rìa Frame, chọn Add SequenceLocal.• Bạn cũng có thể chuyển đổi dễ dàng từ Flat Sequence sang Stacked Sequence vàngượ c lại một cách tự động, sử dụng Replace (các bạn tự tìm hiểu)Để chạy chương trình liên tục, ta cũng có thể đưa toàn bộ Sequence vừa tạo vàotrong 1 vòng lặ p While.3. Cấu trúc EVENTTrong LabVIEW, cấu trúc EVENT hoạt động đóng vai trò giống như ngắt tronglập trình Vi điều khiển (Interrupt). Cấu trúc này cho phép ngườ i lậ p trình tạo ra cácr ẽ nhánh đặc biệt với điều kiện là các sự kiện đặt trướ c.Một ưu điểm của cấu trúc này là cho phép chương trình chuyển lậ p tức sangchương trình ngắt bất k ỳ khi nào điều kiện ngắt đượ c thỏa mãn. Điều này giúpquản lý chương trình hiệu quả hơn, và giảm đáng kể bộ nhớ  và tác vụ sử dụng.Để tạo cấu trúc EVENT, ta chọn Programming >> Structures >> Event structureĐể hiểu và thấy được ưu điểm của cấu trúc EVENT, ta theo dõi ví dụ sau theo 2cách thực hiện: Có sử dụng EVENT và không sử dụng cấu trúc EVENT.Ví dụ: Viết chương trình điều khiển một đại lượ ng X (ví dụ X là lượng nướ c trong

     bình chứa) bằng 3 nút bấm: Increase, Decrease, và Unchange. Nếu ấn Unchangethì X không đổi, ấn Increase thì X tăng, ấn Decrease thì X giảm.Ta có thể sử dụng 2 phương pháp để thực thi bài toán trên, một phương pháp sử dụng EVENT và 1 phương pháp không sử dụng cấu trúc EVENT.

    Bài 5: Cấu trúc CASE, SEQUENCE, EVENT và FORMULA NODE (Đỗ TrungHiếu - CYBERLAB JSC.)

  • 8/19/2019 [Codientu.org] Labview

    44/54

     Tiế p tục bài 5....3. Cấu trúc EVENTTrong LabVIEW, cấu trúc EVENT hoạt động đóng vai trò giống như ngắt trong

    lập trình Vi điều khiển (Interrupt). Cấu trúc này cho phép ngườ i lậ p trình tạo ra cácr ẽ nhánh đặc biệt với điều kiện là các sự kiện đặt trướ c.Một ưu điểm của cấu trúc này là cho phép chương trình chuyển lậ p tức sangchương trình ngắt bất k ỳ khi nào điều kiện ngắt đượ c thỏa mãn. Điều này giúpquản lý chương trình hiệu quả hơn, và giảm đáng kể bộ nhớ  và tác vụ sử dụng.Để tạo cấu trúc EVENT, ta chọn Programming >> Structures >> Event structureĐể hiểu và thấy được ưu điểm của cấu trúc EVENT, ta theo dõi ví dụ sau theo 2cách thực hiện: Có sử dụng EVENT và không sử dụng cấu trúc EVENT.Ví dụ: Viết chương trình điều khiển một đại lượ ng X (ví dụ X là lượng nướ c trong

     bình chứa) bằng 3 nút bấm: Increase, Decrease, và Unchange. Nếu ấn Unchangethì X không đổi, ấn Increase thì X tăng, ấn Decrease thì X giảm.Ta có thể sử dụng 2 phương pháp để thực thi bài toán trên, một phương pháp sử dụng EVENT và 1 phương pháp không sử dụng cấu trúc EVENT.

    Cấu trúc EventTime out: thờ i gian mà cấu trúc Event chờ  (tính bằng mili giây) để một sự kiện xảyra. Nếu quá thờ i gian này mà không có sự kiện nào xảy ra

  • 8/19/2019 [Codientu.org] Labview

    45/54

    Cấu trúc EVENT cũng tương tự như cấu trúc CASE, với các “case” chứa cácchương trình tương ứng vớ i mỗi sự kiện khác nhau.Case mặc định ban đầu là case “time out”, chưa code chương trình trong trườ nghợ  p không có sự kiện nào xảy ra.

    Ta ví dụ tạo 1 chương trình thực hiện một bộ đếm, đếm số lần 1 biến logic thay đổi(ví dụ số lần ấn nút ADD). Mỗi lần ấn nút ADD sẽ kích hoạt 1 Event Case để tănggiá tr ị 1 biến Count lên 1 đơn vị.Để xóa bộ đếm, ta sử dụng nút Clear. Khi nút ấn, một Event Case đượ c kích hoạtđể xóa giá tr ị của biến Count.Cuối cùng, ta sử dụng nút STOP để kích hoạt event case dừng chương trình. Đầu tiên ta tạo vòng lặ p While chứa chương trình chính. Tạo event structure, đưa đầu vào Time out là 10, thể hiện Event structure sẽ thựchiện chờ  10ms cho mỗi sự kiện tiế p theo. Nếu sau 10ms không có sự kiện nào xảy

    ra, sẽ thực hiện 1 vòng lặ p k ế tiế p.

    Để tạo 1 Case mớ i, ta click chuột phải vào rìa của Event structure, chọn Add Event

    Case

  • 8/19/2019 [Codientu.org] Labview

    46/54

     Mở  ra cửa sổ Edit Events. Đầu tiên ta chọn tạo Sự kiện ADD button valuechanged. Chọn như hình dướ i.

    Ấn OK để tạo Event mới, đó là Event case của sự kiện nút ADD đượ c ấn.

  • 8/19/2019 [Codientu.org] Labview

    47/54

     Trong Even Structure bây giờ  xuất hiện 1 case mới, đó là case của sự kiện “valuechang” của nút ADD. Để thực hiện việc thêm 1 giá tr ị vào Count khi sự kiện này

    diễn ra, ta sử dụng 2 Local Variable của biến Count. 1 Local Variable là dạngRead, local Variable còn lại ở  dạng Write.Thực hiện như hình dưới đây, ta có thể coi như đã thực hiện 1 lệnh: Count = Count+1.

  • 8/19/2019 [Codientu.org] Labview

    48/54

     Tương tự như vớ i cách tạo Case trên, ta tạo thêm Case CLEAR: value change.Vớ i Case này, thực hiện lệnh Count = 0 để xóa giá tr ị bộ đếm.

    Cuối cùng ta tạo Case: Stop : Value change. Nếu Case này xảy ra, ta đưa giá trị True vào STOP Condition của vòng lặ p While bên ngoài để dừng chương trình. 

  • 8/19/2019 [Codientu.org] Labview

    49/54

     Chạy chương trình, vớ i giao diện như dưới đây. Khi ấn nút ADD, biến COUNTđếm tăng thêm 1 đơn vị. Khi ấn CLEAR, COUNT nạ p lại giá tr ị 0. Khi ấn STOP,chương trình dừng.

    Cuối cùng, ta thử đưa các biến, nút ấn trên ra khỏi vòng lặ p, chạy chương trình, tavẫn thấy k ết quả như vậy.Việc đưa các nút bấm ra khỏi chương trình chứng tỏ trong vòng lặ p không cần thựchiện việc kiểm tra tr ạng thái của các biến mà thực hiện các Sự kiện trong EVENTStructure như các ngắt trong Vi điều khiển. Điều này cho phép giảm bớ t r ất nhiềutài nguyên của máy tính khi thực hiện chương trình, đồng thời tăng thêm khả năngđáp ứng nhanh của các vòng lặ p.Sử dụng EVENT Structure, bạn cũng có thể quản lý chương trình đơn giản và dễ dàng hơn vớ i các sự kiện khác nhau.

  • 8/19/2019 [Codientu.org] Labview

    50/54

     Đưa các biến ra ngoài vòng lặ p.

    Dưới đây là 1 ví dụ về chương trình đếm tương tự như trên nhưng sử dụng CASEStructure.CASE ngoài cùng check giá tr ị của nút ADD, nếu là True sẽ tăng thêm biến đếm

    COUNT 1 đơn vị. Nếu là FALSE thì check giá tr ị của nút CLEAR. Nếu nútCLEAR là true thì xóa giá tr ị của biến đến COUNT. Nếu không, giữ nguyên giátr ị.Bạn có thể thấy chương trình phức tạp hơn nhiều và cũng tốn tài nguyên hơn nhiềudo phải thườ ng xuyên kiểm tra tr ạng thái của các biến, đồng thờ i trong các CASEcó thể chưa các chương trình phức tạ p, sẽ không đảm bảo đượ c thờ i gian thực thi 1

  • 8/19/2019 [Codientu.org] Labview

    51/54

    Case kéo dài bao lâu.

    Mô phỏng động cơ một chiều không sử dụng Control Design and Simulation

    Toolkit

    (Đỗ Trung Hiếu- Cyberlab JSC.)Đây là một đề tài mà tôi từng giúp đỡ  một bạn Sinh viên năm cuối để làm đồ án tốtnghiệp liên quan đến LabVIEW: Mô phỏng động cơ điện một chiều (không sử dụng Control Design and Simulation Toolkit) và thiết k ế bộ điều khiển PID, Mờ  vàThích nghi cho động cơ đó. Ở đây tôi chỉ đưa ra 2 phần: mô phỏng động cơ và bộ điều khiển PIDĐầu tiên là mô phỏng động cơ, tôi có sử dụng mô hình vật lý của động cơ để mô

     phỏng với đầu vào là Điện áp (Voltage) và Moment quán tính (Torque), đầu ra làVận tốc và Dòng điện. Tất cả gói gọn trong 1 chương trình con "dc_motor_model(SubVI)"Các tham số động cơ đượ c nhậ p ở  Cluster "Motor_para", gồm điện tr ở  trong, hằngsố điện, moment quán tính của tr ục động cơ, không có L (tính gần đúng), và dt làđơn vị thờ i gian mỗi lần tính toán (dt càng nhỏ thì phép mô phỏng càng gần đúng,ở  đây tôi đặt dt=1uS)

  • 8/19/2019 [Codientu.org] Labview

    52/54

     Tôi cũng thiết lậ p một chương trình con khác (dc_motor_body(SubVI)) mô phỏngđộng cơ trong không gian 3 chiều, vớ i vận tốc quay đầu tr ục đúng bằng vận tốcquay của động cơ đượ c tính toán từ "dc_motor_model(SubVI)"

  • 8/19/2019 [Codientu.org] Labview

    53/54

    Thay đổi đầu vào U(điện áp) và T(moment tr ục) để quan sát thay đổi vận tốc, dòngđiện:

    Thiết k ế hệ điều khiển PID:Tôi cũng gửi kèm theo file thiết k ế và mô phỏng bộ điều khiển động cơ sử dụngthuật toán PID:

    Chương trình gồm 2 vòng lặ p For: Vòng lặ p tạo tín hiệu đặt vận tốc, và vòng lặ pmô phỏng gồm bộ điều khiển PID và mô hình động cơ. Kết quả đượ c xuất ra tín 2

  • 8/19/2019 [Codientu.org] Labview

    54/54

    đồ thị vận tốc và dòng điện theo thờ i gian.Đây chỉ là 1 ví dụ đơn giản về việc mô phỏng 3D hệ điều khiển động cơ điện 1chiều dựa trên mô tả vật lý của đối tượ ng. Thiết nghĩ với các bước tương tự, chúngta cũng có thể mô phỏng đượ c nhiều hệ thống phức tạp khác, như hệ điều khiển

    động cơ điện xoay chiều 3 pha, động cơ BLDC, động cơ đồng bộ, cánh tay Robot...Vấn đề cốt lõi là các bạn phải có phương trình vật lý mô tả động lực học hệ thống,sau đo sử dụng LabVIEW để mô phỏng trong miền thờ i gian.

     Nếu như các bạn đã có mô hình đối tượ ng trên Matlab, cụ thể là file Mathscript, thìviệc mô phỏng trên LabVIEW cũng có thể thực hiện đượ c, tôi sẽ trình bày trong 1

     bài riêng.Việc mô phỏng mô hình 3D tr ong LabVIEW cũng sẽ đượ c nói chi tiết sau. Mongcác bạn chú ý theo dõi.Chương trình đượ c down tại đây: 

    dcmotor_model_(3D_and_electromechanical).rar  

    http://www.mediafire.com/download/h21jj72a58anc3a/dcmotor_model_(3D_and_electromechanical).rarhttp://www.mediafire.com/download/h21jj72a58anc3a/dcmotor_model_(3D_and_electromechanical).rarhttp://www.mediafire.com/download/h21jj72a58anc3a/dcmotor_model_(3D_and_electromechanical).rar