Friday, December 3, 2010

Inverted pendulum control

หลังจากที่ออกแบบและสร้าง Inverted pendulum ตัวใหม่ออกมา(อันนี้ คือ ตัวเก่า)แล้วและทำการควบคุมมัน ซึ่งผลที่ได้เป็นที่น่าพอใจอย่างมาก ซึ่งตอนนี้มันก็สามารถควบคุมได้แล้ว การควบคุมแบบนี้เรียกว่า State feedback คือ Control law u=-kx โดยที่ x คือ state variable ซึ่งใน Inverted pendulum system x ก็จะมีทั้งหมดสี่ตัว คือ cart position,cart velocity,pendulum angle และ angular velocity ซึ่งเมื่อเราสามารถวัดมาได้ครบ เราก็ทำการออกแบบหาค่า K ด้วยวิธี Pole placement/LQ เมื่อออกแบบหาค่า Kแล้วก็นำมาเขียนลงใน Digital signal processing PIC18F4431


รูปที่.1 อุปกรณ์สำหรับการทดลองทั้งหมด


รูปที่.2 STATE FEEDBACK CONTROL DIAGRAM







สถานที่ถ่ายทำ ภาควิชาวิศวกรรมเครื่องกล มหาวิทยาลัยเทคโนโลยีพระจอมเกล้าธนบุรี


รูปที่.3 กราฟวัดการตอบสนองของระบบ เมื่อมีการรบกวน Rod จะเห็นได้ว่า Cart จะต้องวิ่งเพื่อกำจัด    error ที่เกิดขึ้นกับ Rod หลังจากนั้น Cart ก็จะกลับมาที่ตำแหน่งที่ออกแบบ

สนใจติดต่อ:  sarayuthassa@gmail.com 
                    083-4391356

Saturday, October 23, 2010

Inverted pendulum state feedback control

พอดีทาง FIBO ได้มอบหมายงานชิ้นแรกให้ผม คือ ออกแบบ Control low เพื่อ ควบคุม Inverted pendulum หลังจากทำได้สองอาทิตย์ก็ทำสามารถให้มันตั้งได้แล้วแต่ state ของ cart ยังคง oscillate อยู่เพราะการปรับค่า gain ของระบบที่มีความเป็น Nonlinear และ Unstable มันไม่ใช่เรื่องง่าย และ Mechanic ก็ยังไม่ค่อยดีเท่าไหร่ แต่นี้เป็นแค่การทดสอบ Algorithm ว่า Micro controller รุ่น PIC18f4431 สามารถเขียน Control law u=-k1*(x1-reference)-k2*x2-k3*(x3-reference)-k4*x4-k5*z-k6*z1 ได้หรือเปล่าวโดยที่ x1 คือ Angle ของ pendulum x2 คือ Angular velocity ของ pendulum โดยติดตั้ง Potentiometer ไว้ที่จุดหมุนของ pendulum ส่วน x3 คือ Cart position และ x4 คือ linear velocity ของ cart มี Encoder ติดไว้ที่ motor z1 และ z2 คือ Integral error ของ Pendulum และ Cart x1 to x4 เราเรียกมันว่า State variable จะเห็นว่า x1 และ x3 สามารถวัดได้โดยตรง ส่วน x2 และ x4 ผมนำมันมา Derivative เทียบกับเวลาซึ่งไม่ใช่วิธีการที่ดีเท่าไหร่ แต่คิดไว้แล้วว่าจะใช้ Reduce order observer  หรือ อาจจะใช้ Kalman filter มาประมาณหาความเร็วแต่ทั้งสองวิธีนี้จะต้องมีแบบจำลองทางคณิตศาสตร์ของระบบก่อนวันนี้พอเท่านี้ก่อนแล้วกันครับ ครั้งหน้าจะมาดูว่า
1. หาแบบจำลองอย่างไร
2.หาสัมประสิทธิ์คงที่ ของ Model
3.ออกแบบ Observer 
4.หา Gain K โดยวิธี Lqr  
5.เขียน Code ลงใน PIC18F

อันนี้เป็น VDO ลองดูเล่นๆก่อน มันยังไม่สมบูรณ์เท่าที่ควรเพราะยังขาด Algorithm บางตัวอยู่ 





Sunday, October 3, 2010

Convert Thermistor Reading

บทความนี้จะพูดถึงการแปรงแรงดันไฟฟ้าไปเป็นอุณหภูมิ ก่อนอื่นมาทำความรู้จักกับเจ้า thermistor ก่อน Thermistor เป็นอุปกรณ์ตรวจรู้ชนิดหนึ่งที่มีคุณสมบัติ คือ เมื่อตัวมันได้รับความร้อนจะทำให้ความต้านทานภายในตัวมันมีการเปลี่ยนแปลง ซึ่งเราจะอาศัยการเปลี่ยนแปลงเหล่านี้ไปหาความสัมพันธ์ระหว่างอุณหภูมิกับความต้านทาน Thermistor เป็นอุปกรณ์แบบ passive คือ มันจะต้องได้รับการกระตุ้นเสียก่อน ซึ่งในที่นี้สิ่งที่มากระตุ้นมันก็คือแรงดันไฟฟ้ากระแสตรง ซึ่งสามารถเขียนวงจรได้ดังรูปด้านล่างนี้




เมื่อใช้กฎของโอห์มแล้วจะได้ความสัมพันธ์ดังนี้

โดยที่ A, B, C คือค่าคงที่ของ Thermistor หาได้จาก data sheet ของ Thermistor เอง
Tk คือ อุณหภูมิที่วัด มีหน่วย (K)
 ขั้นตอนการเขียนโปรแกรม Labview เมื่อเราเปิดโปรแกรม Labview ขึ้นมาแล้วให้ไปที่ Numeric-->Scaling--> Convert Temperature Reading.vi ดังรูปด้านล่าง
จากนั้นเราก็อ่าน ค่า  Voltage เข้ามาในโปรแกรม Labview ถ้ามี DAQ เราก็สามารถวัดได้โดยตรงแต่ถ้าเราไม่มี DAQ เราก็สามารถใช้ RS-232 ก็ได้





หวังว่าบทความนี้จะเป็นประโยชน์กับผู้ที่สนใจเกี่ยวกับ โปรแกรม Labview ไม่มากก็น้อยนะครับ







 

Saturday, October 2, 2010

Labview write To Measurement File

บทความนี้ เราจะมาศึกษาการ Save ข้อมูลของโปรแกรม Labview วิธีก็คือเราต้องการบันทึกข้อมูลที่มีรูปแบบเป็น waveform โดยที่หลัก(column)แรกของข้อมูลจะเป็นเวลา และหลัก(column)ต่อมาจะเป็นข้อมูลที่เราต้องการ และจะให้มันบันทึก ก็ต่อเมื่อเรากดปุ่ม save มันจะบันทึกเพียงครั้งเดียว เพราะถ้าเราไม่เขียนแบบนี้แล้วมันจะบันทึกเองทุกรอบการทำงาน หมายความว่าถ้ามันวน loop 100 ครั้งมันก็บันทึกข้อมูล 100 ครั้งซึ่งนั้นคงไม่ใช่สิ่งที่เราต้องแน่นอน ก่อนอื่นเมื่อเปิดโปรแกรมขึ้นมาแล้วไปที่ file i/o write To Measurement File แล้วจะได้ดังนี้
รูปที่.1
จากนั้นก็ให้เราคลิกช่อง Use next available file name ที่เลือกตัวนี้ก็เพราะมันจะเปลี่ยนชื่อเองโดยอัตโนมัติซึ่งจะสะดวกในการใช้งานเพราะการเก็บข้อมูลอาจจะต้องมีการเก็บหลายครั้ง ต่อจากนั้นให้ดูที่ X Value Column ให้เลือก One column only หมายความว่าเราต้องการข้อมูลเกี่ยวกับเวลาแค่หลักเดียว เมื่อดำเนินตามขั้นต้นเสร็จ ก็คลิก ok
ต่อมาก็เขียนตามรูปด้านล่างนี้
 รูปที่.2
ที่ Button ที่ชื่อว่า save ที่ผมตั้งชื่อขึ้นเองนี้ให้เราปรับมันนิดหน่อยโดยไปที่ front panel แล้วคลิกขวาที่ปุ่มกด (button) mechanical action แล้วเลือก Latch when released หรือ Latch when pressed ก็ได้ คือ มันจะทำงานเมื่อเรากด หรือ เราปล่อย button ดูตัวอย่างที่รูปด้านล่าง
รูปที่.3
สุดท้ายเมื่อเรากด Save แล้วเราก็จะได้ text file ที่มีหน้าตาดังรูปด้านล่างนี้

Labview Local variable

บทความนี้เราจะศึกษาการเขียนโปรแกรม Labview เรื่อง Labview Local variable กันนะครับก่อนที่จะดูว่ามันสร้างอย่างไรเรามาดูมันก่อนว่ามันมีประโยชน์ อะไรบ้าง Labview Local variable มีไว้สำหรับใช้งานใน vi เดียวกัน แต่สามารถรับส่งข้อมูลกันไปมาระหว่าง loop หนึ่งไปยัง loop อื่นได้ เช่น เราอ่าน visa เข้ามาใน loop แรกแต่คราวนี้เราต้องการนำค่าที่ได้จาก Visaไปใช้งานใน loop อื่นต่อเรา ก็สามารถสร้างLabview Local variable ขึ้นมาเพื่อที่จะนำค่าไปใช้ใน loop อื่นต่อไป ดูได้จากตัวอย่างด้านล่างนี้
รูปที่.1
ตัวอย่างจากรูปที่.1 สมมุติถ้าเราต้องการที่จะนำค่าจาก loop-A มาบวกกับ 10 ในรูป loop B ถ้าเขียนอย่านี้แล้วค่าที่ loop-A จะไม่สามารถส่งข้ามมายัง loop-B ได้จนกว่าเราจะกดปุ่ม stop มันถึงจะส่งข้อมูลตัสุดท้ายออกจาก loop- A ได้ แต่ถ้าเราสร้าง Labview Local variable ขึ้นมามันถึงสามารถส่งข้อมูระหว่าง loop ได้ทุกๆรอบการทำงานของ while loop ดังตัวอย่างด้านล่าง

รูปที่.2 
วิธีการสร้าง Labview Local variable ให้คลิกขวาตัวที่เราต้องการจะสร้าง Labview Local variable

รูปที่.3
แล้วไปที่ Createlocal variable

รูปที่.4

แล้วเราก็จะได้ Labview Local variable ดังนี้

 
เพียงเท่านี้เราก็สามารถสร้าง Labview Local variable ได้แล้วนะครับ

Tuesday, September 28, 2010

Labview Data Analysis program

วันนี้ผมก็มานั่งเปิด Comp ของตัวเองเล่นๆแล้วก็เปิดโปรแกรม Labview ของตัวเองก็ไปเจอโปรแกรมที่ตัวเองเขียนไว้นานแล้ว ก็มานั่งดูก็คิดว่าก็น่าจะเป็นประโยชน์กับผู้ที่สนใจเกี่ยวกับเรื่องนี้ผมก็เลยอยากจะเอามาแบ่งปันกัน โปรแกรมตัวนี้มีไว้สำหรับวิเคราะห์สัญญาณซึ่งการใช้งานนั้นก็ไม่ซับซ้อนอะไรแค่ Import data ที่มีนามสกุล .txt เข้ามาโดยที่ หลักแรกของขู้อมูลจะต้องเป็นเวลา time และหลักถัดจากนั้นก็คือข้อมูลที่เราเก็บมา เราสามารถวัดความถี่ของสัญญาณง่ายๆด้วยการเลื่อน cursor เพื่อเลือกช่วงสัญญาณที่เราต้องการดูมัน จากนั้นมันก็จะแสดงข้อมูลของความถี่มีค่าเท่าไหร่ และ แสดง Amplitude ของสัญญาณด้วยในเวลาเดียวกัน และเรายังสามารถ fit curve ข้อมูลได้ถึง order 6 ถ้าเพื่อนๆ คนไหนสนใจก็ลอง download ไปเล่นได้นะครับโดยต้องลงโปรแกรม Labview 8.2 ก่อนนะครับ

>>DOWNLOAD PROGRAM<<
>>DOWNLOAD DRIVER<< 


Labview Share variable

ก่อนที่จะดูขั้นตอนการทำ Share variable ว่ามีขั้นตอนการทำอย่างไร เรามาพูดถึงประโยชน์ของมันก่อนแล้วกันนะครับ ท่านเคยพัฒนา sub vi หลายๆอันแล้วเราก็ใช้ตัวแปรตัวเดียวร่วมกันในหลายๆ sub vi รึเปล่าครับสมมุติเราอ่าน AI มาหนึ่งช่องแล้วเราต้องการนำข้อมูลนี้ไปประมวลผลหลายๆ รูปแบบ เช่นไปแสดงเป็นกราฟ หรือนำไปเข้าสมการ โดยที่ในแต่ละการคำนวณเราก็มี sub vi ของมันอยู่แล้ว คราวนี้จะทำอย่างไรล่ะ ถ้าเราเขียนให้มันรับ AI ทุก Sub vi คงไม่สะดวกแน่ ดังนั้นเราก็เลยสร้าง share variable ขึ้นมา หลักการของมันก็คือเมื่อเราสร้างมันขึ้นมาแล้วเราจะสามารถเรียกใช้มันได้ทุกๆ sub vi เลย โดยที่เราไม่ต้องสร้างมันขึ้นมาใหม่ทุกครั้งไป เช่น share variable ตัวนี้วัด อุณหภูมิมา เราก็สามารถนำค่าที่อ่านได้นี้ไปแสดงผล ในที่ใดๆก็ได้ตามใจชอบ ซึ่งมันจะมีหน้าตาเป็นอย่างนี้ 
เรามาดูขั้นตอนการสร้างเลยแล้วกันนะครับ เมื่อเราเปิดโปรแกรม  Labview ขึ้นมาแล้วเราก็สร้าง Labview Project ขึ้นมาแล้วก็ Save ดังรูปด้านล่าง สังเกตว่าในProject เรายังไม่มี vi และ/หรือ variable ใดๆเลย

 
ขั้นต่อมาให้คลิกขวาที่ My computer ในเมนูของ Project แล้ว เลือก new-->variable ดังรูปด้านล่าง
 
จะได้ หน้าต่างใหม่ขึ้นมาดังรูปด้านล่าง
 
ให้สังเกตรูปดานบน ที่ Data type ให้เราเลือกได้ว่าข้อมูลของเรานั้นมันเป็นชนิดไหน เช่น double, waveform และอื่นๆ หลังจากนั้นก็ เลือก Variable Type ให้ เป็น single process แล้วคลิก ok เราก็จะได้ variable ขึ้นมาแล้วหนึ่งตัวดังรูปด้านล่าง
 
เราสามารถตั้งชื่อมันได้ตามใจชอบเลยนะครับ 
ต่อจากนั้นเรามาดูวิธีการเรียกใช้มัน ครับ เราสร้าง vi ขึ้นมาสักอัน ในProject เราก่อนแล้วคลิกขวาที่ block diagram-->structures--> share variable ดังรูปด้นล่าง
 
แล้วจะได้ดังรูด้านล่างซึ่งตอนนี้มันยังไม่สามารถทำงานได้
 
ให้คลิกขวาที่ Share variable แล้วเลือก select variable
 
เราก็จะได้ Window ใหม่ขึ้นมาดังรูปด้านล่าง
 
แล้วก็คลิก Ok จะได้
 
จากนั้นให้คลิกขวาที่ Variable แล้วเลือก change to write เพื่อที่จะให้มันอ่านสัญญาณที่เป็น waveform เราก็จะได้ดังนี้
 
แล้วมันก็จะอ่านข้อมูลนี้เก็บไว้ในตัวแปร Temp ถ้าเราต้องการนำตัวแปรนี้ไปใช้ใน vi อื่นเราก็ทำตามขั้นตอนที่ได้กล่าวมาข้างต้น
บทความนี้ขอจบเพียงเท่านี้ก่อนแล้วกันนะครับ

Monday, September 27, 2010

Find VI labview on disk


หลายท่านคงเคยเกิดปัญหาในเวลาที่เราพัฒนา Labview Project เมื่อเราเขียน Sub vi ขึ้นมาเยอะๆแล้วไม่รู้ว่าเราไป Save ที่ไหนบ้างในบทความนี้เราจะพูดถึงขั้นตอนการหา sub vi ที่เราไมรู้ว่ามันอยู่ที่ไหนใน Computer กันขั้นตอนแรก เมื่อเราเปิดโปรแกรม Labview ขึ้นมาแล้ว ที่ Getting start window ให้เราเลือกที่ Tool หลังจากนั้นให้เลือก Find VIs on disk…ดังรูปด้านล่าง
 
หลังจากนั้นเมื่อเราเลือก Find VIs on disk แล้ว เราก็จะได้ window ใหม่ขึ้นมา ดังรูปด้านล่าง
 
แล้วให้เราเลือกว่าเราต้องการที่จะค้นหาที่ Drive ไหนก่อนได้ตามใจชอบแล้วให้เลือก Current Folder จากนั้นคลิ้ก Find เมื่อเราให้มันค้นหาโปรแกรมก็Run หาเฉพาะ File ที่มีนามสกุล .vi เท่านั้น แล้วให้เราทำไปเรื่อยๆทุก Drive จนกว่าจะเจอ ซึ่งจะใช้เวลาในการค้นหาไม่นานเท่าใดนัก

Creating Labview time-engine

ต่อจากบทความที่แล้ว(LabVIEW Run-Time Engine)  คราวนี้เราจะพูดถึงขั้นตอนการสร้าง Labview time-engine ขั้นตอนแรกให้สร้าง Labview Project แล้วทำการบันทึก จากนั้นให้ คลิกขวาที่ Build Specification-->new-->Installer เราก็จะได้ Window ใหม่ขึ้นมาจากนั้นให้เลือก Additional Installers แล้วให้เราเลือกได้ตามใจเลยครับ แต่มีหลักการเลือก ดังนี้ คือเราต้องดูว่า Labview ที่เราเขียนขึ้นมานั้นมีเครื่องมือไรบ้างเช่นที่ผมทำคือมันประกอบด้วย NI-VIZA ผมก็ต้องเลือกมันเข้าไปด้วย เมื่อเราเลือกเรียบร้อยแล้วก็ให้เรา Build โปรแกรมได้เลย สุดท้ายแล้วเราก็จะได้ File Install มาหนึ่ง file ซึ่งเอาไว้ไป Install ในเครื่องอื่นๆ ตัวอย่างที่ผมนำไปประยุกต์ใช้ ก็มี  Build Oscilloscope By Labview ,เครื่องวัดอุณหภูมิ






Friday, September 24, 2010

LabVIEW Run-Time Engine

บทความนี้เราจะมาพูดถึงเครื่องมือสำคัญเครื่องมือหนึ่งของโปรแกรม Labview นั้นคือ Runtime Engine  ประโยชน์ของ Runtime Engine นี้คือ มันสามารถ Run ใน Computer ทุกตัวด้วยตัวมันเองโดยที่เราไม่ต้องลงโปรแกรม Install Labview ซึ่งสามารถนำไปประยุกต์ใช้ในงานต่างๆมากมาย เช่น เราต้องการเขียนโปรแกรม Labview แบบนามสกุล .exe สิ่งแรกที่ต้องมีในการลงโปรแกรมทั่วๆไปนั้นก็คือ Driver เพื่อที่จะให้ Computer เรารู้จักกับ Software นั้นๆ ซึ่ง Runtime Engine ก็จะเป็นในลักษณะเดียวกันกับ Driver ตัวหนึ่งเหมือนกัน เช่นเราเขียนโปรแกรม Labview ขึ้นมาโปรเจคหนึ่งซึ่งในโปรเจคนั้นอาจจะมี serial communication อยู่ ดังนั้นใน driver เราจะต้องมี เครื่องมือ serial communication ด้วยโปรแกรมเราถึงจะสามารถ Run ได้ ดังนั้นถ้าเราเอา serial communication เข้าไปใน Runtime Engine เมื่อเรานำไป Install ลงเครื่องอื่นๆแล้วเราก็สามารถ Run โปรแกรม .exe ได้เลยโดยไม่ต้องลงโปรแกรม Install Labview เลยเพราะโปรแกรม Labview นั้นมันเป็น file ที่ถือว่าใหญ่พอสมควร ดังนั้นคงจะเห็นประโยชน์ของ Runtime Engine กันแล้วนะครับ คราวต่อไปเราจะพูดถึงขั้นตอนการสร้างกันครับ หวังว่าบทความนี้คงจะเป็นประโยชน์กับผู้ที่สนใจในเรื่องนี้ไม่มากก็น้อยนะครับ วันนี้ขอจบเรื่องเพียงเท่านี้ก่อนนะครับ

Thursday, September 23, 2010

คลายเครียด Physic

ถ้าเราดูให้ตลกมันก็สุดฮาเลยครับท่าน แต่ถ้าเราลองคิดสักหน่อยถ้าเกิดว่าความสูงที่เริ่มปล่อยตัวลงจากภูเขาและมุมที่เริ่มลอยตัวในอากาศไม่เท่ากับในที่ทดลองจะเกิดอะไรขึ้นไม่อยากจะคิดเลย เพราะการเคลื่อนที่แบบ projectile motion ในทิศทางแกน x มันจะขึ้นอยู่กับความเร็วต้นและมุมที่ปล่อยตัวเท่านั้นโดยที่ความเร็วต้นนั้นขึ้นอยู่กับความสูงที่ปล่อยลงจากเขาเพราะมันจะเปลี่ยนจาก พลังงานศักย์ มาเป็นพลังงานจลน์ u=sqrt(2gh)

 


Saturday, September 18, 2010

Continuous Data Acquisition

           วิธีการที่เรานิยมเรียกว่า Circular Buffering หรืออาจเรียกได้อีกชื่อหนึ่งว่า Continuous Data Acquisition หรือ real-time Data Acquisition จะเป็นการให้ใช้ข้อมูลในระหว่างกระบวนการเก็บข้อมูลโดยไม่มีการขัดจังหวะการ เก็บข้อมูล วิธีการนี้จะเริ่มจากการกำหนดขนาดของ Buffer ที่แน่นอนล่วงหน้าไว้ก่อน จากนั้นจะเก็บข้อมูลชนิดวนไปเรื่อยๆ คือเริ่มเก็บข้อมูลไปจนกระทั่งเต็ม Buffer จากนั้นจะย้อนเริ่มกับมาเก็บที่จุดเริ่มต้นใหม่ โดยเขียนทับข้อมูลที่ใส่ไว้ในรอบที่ผ่านมาโดยไม่สนใขว่าจะมีการอ่านข้อมูล เหล่านั้นหรือยัง ดังนั้นโดยหลักการเราก็จะต้องอ่านข้อมูลที่เก็บไว้ใน Buffer ให้เสร็จสิ้นก่อนที่จะมีการเขียนข้อมูลทับของเก่าลงไป วิธีการนี้จะเกี่ยวข้องกับการใช้ Circular Buffer ดังที่แสดงในรูปต่อไปนี้



เริ่มจากเรากำหนดขนาดของ Circular Buffer จากนั้น DAQ Board จะเก็บข้อมูลและนำไปเก็บไว้ใน Buffer เมื่อ Buffer เต็ม Board ก็จะเริ่มเขียนข้อมูลใหม่จากจุดเริ่มต้นโดยเขียนทับข้อมูลเก่าที่เก็บไว้ในรอบก่อนหน้านี้ ไม่ว่าข้อมูลนี้จะถูกอ่านไปใช้หรือยัง กระบวนการนี้จะดำเนินต่อไป จนกระทั่งระบบเก็บข้อมูลได้ตามต้องการ หรือ LabVIEW ยกเลิกการทำงาน หรือเกิดความผิดพลาดขึ้น การทำ Continuous Data Acquisition นี้มีประโยชน์มากในการเขียนข้อมูลลงไปใน Disk เรื่อยๆ หรือแสดงผลข้อมูลตามเวลาจริง

Triggering LABVIEW

Triggering หมายถึงวิธีการใดๆ ซึ่งทำให้เราสามารถ เริ่ม,หยุด หรือประสานการเก็บข้อมูลได้ Triggering โดยปกติจะเป็นสัญญาณ Analog หรือ Digital ที่ส่งให้เกิดการวิเคราะห์ว่าจะให้กระบวนการเก็บข้อมูลดำเนินการไปอย่างไร การใช้ Software ทำการ Trigger เป็นวิธีการง่ายและสะดวกที่สุด โดยเราจะเขียนโปรแกรมเพื่อให้เกิดกระบวนการเก็บข้อมูล ยกตัวอย่าง เช่น สร้าง Boolean ขึ้นบน Front Panel เพื่อควบคุมการเริ่ม-หยุดการเก็บข้อมูล ส่วน Hardware Triggering จะให้วงจรบนอุปกรณ์ DAQ เป็นตัวกำหนดกระบวนการ สำหรับ Hardware Trigger นั้นสามารถแบ่งย่อยออกเป็น 2 ประเภทคือ External Triggering และ Internal Triggering ตัวอย่างของ Internal Triggering เช่น การโปรแกรมให้อุปกรณ์ DAQ ส่งสัญญาณ digital ออกไปเมื่อค่าที่ได้จากบางช่องสัญญาณมีปริมาณตามที่กำหนด ส่วนตัวอย่างของ External Triggering ก็เช่น รอให้ได้รับสัญญาณ digital เข้ามาทางช่องสัญญาณหนึ่งก่อนที่จะเริ่มทำการเก็บข้อมูล

Friday, September 17, 2010

DAQ Board LABVIEW

โดยปกติแล้ว DAQ Board เป็น อุปกรณ์พิเศษ คือไม่ได้เป็นมาตรฐานที่ติดตั้งมากับคอมพิวเตอร์ สำหรับบอร์ดประเภทนี้จะมีผู้ผลิตหลายบริษัท ซึ่งลักษณะการทำงานก็อาจจะแตกต่างกันบ้างตามแต่ผู้ผลิตแต่ละแห่งออกแบบมา ข้อสำคัญที่เราต้องเข้าใจในเบื้องต้นนี้ก็คือไม่ใช่ว่า DAQ Board ทุกแบบ จะเหมาะสมกับการทำงานร่วมกับ LabVIEW ทั้งหมด อย่างไรก็ตาม ที่มหาวิทยาลัยเทคโนโลยีสุรนารีเราได้ใช้ DAQ Board ที่ผลิตโดยบริษัท National Instrument ดังนั้น DAQ Board ทุกแบบที่เรามีอยู่จะสามารถทำงานร่วมกับ LabVIEW ได้อย่างแน่นอน
สำหรับ DAQ Board ที่ผลิตโดยผู้ผลิตไม่ใช่ว่าจะไม่สามารถทำงานร่วมกับ LabVIEW ได้ แต่ว่าการที่ DAQ Board ที่ผลิตโดยผู้ผลิตรายอื่นนั้นจะสามารถทำงานร่วมกับ LabVIEW ได้ก็ต่อเมื่อมี Driver ของอุปกรณ์นั้น เพื่อให้ใช้งานร่วมกับ LabVIEW ได้เท่านั้นเท่านั้น ดังนั้นหากว่าทางบริษัทผู้ผลิต DAQ Board นั้นไม่มี Driver ที่ใช้งานร่วมกับ LabVIEW มาให้ เราอาจจำเป็นที่จะต้องเขียน Driver ขึ้นมาเอง ซึ่งวิธีการนี้ค่อนข้างจะยุ่งยากและเสียเวลามาก
การเลือกใช้ DAQ Board ที่ เหมาะสมกับตนที่จะใช้ถือว่าเป็นเรื่องที่สำคัญมากประการหนึ่ง เพราะราคาของเครื่องมือนี้จะเปลี่ยนแปลงไปอย่างมากหากเรากำหนดข้อจำกัดแตก ต่างกันออกไป เช่น อัตราการเรียกสุ่มตัวอย่าง (sampling rate) จำนวนช่องรับ-ส่งสัญญาณ (I/O channel) หรืออื่นๆ โดยปกติราคาของ DAQ Board ที่ผลิตโดยบริษัท National Instrument จะมีราคาอยู่ระหว่าง $700-2000 ขึ้นอยู่กับความต้องการ ซึ่งเป็นราคาที่นับว่าสูงมาก เราอาจจะได้ board ที่ราคาถูกกว่านี้จากผู้ผลิตรายอื่น แต่อาจจะมีปัญหาเรื่องการใช้งานร่วมกับ LabVIEW
หน้าที่ของ DAQ Board นี้จะทำการติดต่อโดยตรงกับ Transducer ซึ่งอาจจะผ่านอุปกรณ์ Signal Conditioner หรือ ไม่ก็ได้ตามความจำเป็น นอกเหนือจากนั้นแล้วเราไม่จำเป็นต้องมีอุปกรณ์อื่นเข้ามาร่วมในการสร้าง เครื่องมือวัดเสมือนจริง ซึ่งจุดนี้เป็นจุดได้เปรียบของ DAQ Board นั่นคือแม้ว่าจะมีราคาแพง แต่สามารถจะทดแทนการซื้อเครื่องมือวัดอื่นๆ ได้มากมาย เราจะกล่าวถึง DAQ board อย่างละเอียดอีกครั้งหนึ่งในบทที่กล่าวถึง Data Acquisition Hardware

Tuesday, September 14, 2010

Icon และ Connector Labview

ถ้าเราคุ้นเคยกับการเขียนโปรแกรมเป็นตัวอักษร เราคงทราบว่าเราสามารถเขียนโปรแกรมย่อยขึ้นมาเพื่อใช้ร่วมกับโปรแกรมหลัก โดยการเขียนโปรแกรมย่อยหรือ Subroutine นี้จะมีประโยชน์มากในกรณีที่จะต้องทำการประมวลผลบ่อย ในภาษารูปภาพก็เช่นกันเราสามารถที่จะสร้าง Subroutine ขึ้นมาได้ ซึ่งเราจะเรียกว่า subVI โดย สำหรับข้อดีของการเขียนด้วยภาษารูปภาพนี้ก็คือ ทุก VI ที่เราเขียนขึ้นมาสามารถทำหน้าที่เป็น subVI ได้ แต่เนื่องจากเราจำเป็นจะต้องกำหนดลักษณะของ subVI ให้เป็นรูปภาพ และมีช่องที่จะต้องส่งเข้าสู่ subVI นั้น เราจึงได้กำหนด Icon และ Connector ขึ้น
หากเราจะกล่าวคร่าวๆ icon นี้ก็อาจจะมองว่าเป็น node ในอีกรูปแบบหนึ่งก็ได้ โดย Icon จะหมายถึง Node ของ subVI ในทุกครั้งที่เราเขียน VI เราจะพบว่า LabVIEW จะให้ VI นั้นสามารถทำงานเป็น subVI ได้ถ้าหากเราต้องการ โดยที่ LabVIEW จะกำหนด icon ให้กับทุก VI ที่เขียนขึ้น ซึ่งเราสามารถเปลี่ยนแปลงรูปแบบของ Icon ที่ LabVIEW เขียนขึ้นได้

  หากเราเปิด LabVIEW ใหม่ขึ้นมาเราจะสามารถสังเกตรูปของ Icon ที่ LabVIEW กำหนดขึ้นมาได้ โดยรูปของ icon จะปรากฏอยู่ที่มุมบนด้านซ้ายใต้ Tittle Bar ของทั้งหน้าต่าง Block Diagram และ Front Panel
เมื่อเรานำ VI นี้ ไปใช้เพื่อเป็น subVI เราสามารถที่จะกำหนดให้มี Input และ Output ที่จะเข้าและออกจาก VI ของเราได้ ซึ่งการเข้าและออกของข้อมูลสู่ subVI นั้นจะผ่านทาง Connector ซึ่งหากจะเปรียบเทียบกับภาษาตัวอักษรที่เราคุ้นเคยแล้ว การใช้ Connector ก็เหมือนกับการใช้คำสั่ง parameter ในภาษา C หรือการใช้คำสั่ง Function ในภาษา FORTRAN นั่นคือการกำหนดว่าข้อมูลใดเป็นข้อมูลที่ส่งไปสู่ Subroutine และข้อมูลใดเป็นข้อมูลที่จะรับกลับออกมาจาก Subroutine ทำนองเดียวกันกับในLabVIEW คือเราจะส่งข้อมูลเข้าสู่ Icon หรือ subVI โดยผ่านทาง Input connector เมื่อข้อมูลได้รับการประมวลใน subVI แล้วก็ส่งกลับมาทาง Output Connector Terminal
โดยปกติแล้ว Connector จะถูกบังอยู่ด้านหลังของรูป Icon เราสามารถแสดงให้เห็น Connector ได้โดยการใช้คำสั่ง Show Connector ซึ่งรายละเอียดเหล่านี้จะกล่าวในภายหลัง
ในรูปต่อไปนี้เป็นการแสดง Icon และ Connector ของ VI หนึ่งซึ่งเป็นส่วนที่มาพร้อมกับ LabVIEW ส่วนที่เป็นรูปตรงกลางเราเรียก Icon และส่วนที่เป็นสายต่อต่างๆ เราเรียก Conector


สำหรับรายละเอียดเกี่ยวกับการสร้าง Icon และการกำหนด Connector นี้จะกล่าวถึงในบทต่อไป หลังจากที่เราได้ทำความคุ้นเคยกับการเขียนโปรแกรมด้วย LabVIEW แล้ว

Labview Block Diagrams



ที่ผ่านมาเราจะพบว่าเราสามารถสร้าง Front Panel ได้ให้เป็นไปตามต้องการของเรา ซึ่งไม่ใช่สิ่งที่ยากมากนักสำหรับ LabVIEW แต่สิ่งที่จะยุ่งยากมากกว่าคือการกำหนดให้สิ่งต่างๆ หรือที่เราเรียกว่า Object นั้นให้มีขั้นตอนหรือมีกระบวนการของการวิเคราะห์ต่างๆ ตามที่เราต้องการ เพราะเราจะต้องกำหนดการทำงานที่เกิดขึ้นหลังฉาก Front Panel เหล่านั้น นั่นคือหลังจากการที่เราออกแบบ GUI เรียบร้อยแล้วขั้นต่อไปก็คือการกำหนดการทำงานของ GUI เหล่านั้นนั่นเอง และส่วนที่มีหน้าที่นั้นคือ Block Diagram ในเบื้องต้นนี้เราอาจมอง Block Diagram ว่าเป็น Data Flow Chart และตัวโปรแกรมหรือ code ของ LabVIEW ก็ได้ การเขียน Block Diagram ก็คือการเขียน code ในภาษา G นั่นเอง ซึ่งก็เหมือนกับการเขียน code ในภาษา C หรือ FORTRAN นั่นเอง ความแตกต่างที่สำคัญระหว่าง code ในภาษา C หรือ FORTRAN กับ Block Diagram ใน LabVIEW ก็คือ Block Diagram นั้นพร้อมที่จะ execute หรือทำการประมวลผลตลอดเวลา นั่นคือในระหว่างที่เราสร้าง Block Diagram อยู่ LabVIEW จะตรวจสอบการทำงานของ VI อยู่ตลอดเวลา ตัวอย่างของ Block Diagram เป็นไปตามรูป
ถ้าหากเราพิจารณาองค์ประกอบใน Block Diagram เราจะพบว่าในส่วนของ Block Diagram จะมีส่วนประกอบที่สำคัญ 3 ส่วน คือ
Terminal
Node
Wire
ทั้งสามส่วนจะมีหน้าที่หลักคือการควบคุมการส่งผ่านหรือเราอาจเรียกว่าการไหลของข้อมูล (Data Flow) และกำหนดถึงวิธีการประมวลผลข้อมูล

Terminal
    ทุกครั้งที่เราสร้าง Control หรือ Indicator บน Front Panel ใน Window ของ Block Diagram จะปรากฏ Terminal ขึ้น Terminal ก็คล้ายกับสถานีของข้อมูลคือจะเป็นทั้งสถานีต้นทางของข้อมูลถ้า Terminal นั้นเป็น Terminal ของ Controls และขณะเดียวกันจะเป็นทั้งสถานีปลายทางของข้อมูลถ้า Terminal นั้นเป็น Terminal ของ Indicator
    ข้อที่ควรเข้าใจอย่างหนึ่งก็คือ Object นี้เกิดขึ้นจากการเขียนขึ้นบน Front Panel ดังนั้นเมื่อเราจะไม่สามารถลบ Terminal ออกจาก Block Diagram ได้ และถ้าหากเราจะลบ Control หรือ Indicator นั้นออกไปจาก Front Panel แล้ว Terminal เหล่านี้ก็จะหายไปจาก Block Diagram เช่นกัน สำหรับลักษณะของตัวแปรต่างๆเราจะกล่าวในบทต่อไป

Node
    Node เป็นคำที่ใช้เรียก object ที่ทำกรรมวิธีใดๆ เพื่อประมวลข้อมูลใน Block Diagram เช่นเดียวกับที่เราเขียน Flow Chart แล้วใช้สัญลักษณ์ต่างๆแทนวิธีการวิเคราะห์ข้อมูล เมื่อมีข้อมูลเข้าสู่ node สิ่งที่เกิดขึ้นภายใน node ก็จะขึ้นอยู่กับว่าจะกำหนดให้ข้อมูลที่ส่งเข้าไปนั้น จะมีการประมวลผลอย่างไร ซึ่งอาจจะเป็นการบวก ลบ คูณ หาร หาราก ยกกำลัง หรือเป็นประเภทการเปรียบเทียบข้อมูล ว่ามากหรือน้อยกว่า หรืออื่นๆ ซึ่งจะเป็นการประมวลผลทางคณิตศาสตร์ทั่วไป นอกเหนือจากนั้น node นี้จะมีส่วนที่เรียกว่า Function แบบต่างๆ ซึ่งจะเหมือนกับ Function สำเร็จรูปเช่น sine, cosine, log เป็นต้น ซึ่งก็จะเหมือนกับในภาษาที่เป็นตัวอักษรทั่วๆ ไป
    รูปต่อไปนี้แสดงถึงลักษณะของ Node และ Terminal ที่บรรจุอยู่ภายใน Block Diagram ของ LabVIEW
นอกเหนือจากการประมวลผลทางคณิตศาสตร์แล้ว เรายังมี node ประเภท Structure หรือ Control Flow อีกด้วย (ในภาษาตัวอักษร Structure Command จะเป็น คำสั่งจำพวก IF...THEN, FOR..., WHILE... เป็นต้น)

Wires
ขณะที่เรามีที่มาของข้อมูล ส่วนประมวลหรือปรับแต่งข้อมูล และส่วนแสดงผลข้อมูลเรียบร้อยแล้ว ขั้นต่อไปคือเราจะต้องสามารถควบคุมการส่งผ่านข้อมูลให้เป็นไปตามที่เราต้องการ อุปกรณ์ที่ใช้ใน LabVIEW ก็คือ การต่อสาย หรือ Wires ซึ่งจะเป็นการเชื่อมการส่งข้อมูลระหว่าง terminal หรือ node ต่างๆที่มีใน Block Diagram นี้เข้าด้วยกัน โดย wires นี้จะเป็นการกำหนดเส้นทางของข้อมูลว่าเมื่อออกจาก terminal หนึ่งแล้ว จะกำหนดการไหลไปที่ node ใดบ้าง มีลำดับเป็นอย่างไร และสุดท้ายจะให้แสดงผลที่ terminal ใดนั่นเอง ซึ่งการเชื่อมต่อสายนี้จะทำให้เราเข้าใจถึงหลักการของ Data Flow Programming ได้ดีขึ้น
    เนื่องจากข้อมูลนั้นมีหลายแบบไม่ว่าจะเป็นเลขทศนิยม, เลขจำนวนจริง, ตัวอักษร หรือค่าจริง-เท็จ (Boolean) ดังนั้นเพื่อแสดงถึงความแตกต่างของข้อมูลแต่ละแบบ LabVIEW จึงได้กำหนดให้ลักษณะของ wires สำหรับข้อมูลแต่ละแบบมีลักษณะของเส้นและสีที่แตกต่างกัน นอกจากนั้นข้อมูลแต่ละแบบดังกล่าวยังอาจมีลักษณะเป็น scalars, 1-D array, 2-D array ได้ซึ่งลักษณะของเส้นของข้อมูลแต่ละแบบก็จะแตกต่างออกไปอีก

เราจะเข้าใจหลักการของ Data Flow Programming ได้ในขณะที่เราต่อสายระหว่าง terminal และ Node ต่างๆ เข้าด้วยกัน ซึ่งหลักการทำงานของ Data Flow Programming จะต่างจากการเขียนโปรแกรมโดยใช้ตัวอักษร เพราะในโปรแกรมตัวอักษรคำสั่งจะถูกส่งเข้าสู่ส่วนประมวลผลทีละบรรทัด เพื่อการคำนวณตามลำดับบรรทัด แต่ใน Data Flow นั้น โปรแกรมจะคำนวณเมื่อมีข้อมูลส่งเข้ามาถึง Input ของ Node นั้นๆ ครบ และเมื่อข้อมูลส่งครบเข้าถึง Node นั้นแล้ว จะมีการประมวลผลและส่งค่าที่ได้ออกไปตามการต่อเชื่อมสาย การคำนวณจะเสร็จสิ้นในแต่ละรอบเมื่อข้อมูลส่งข้ามไปถึง Terminal สุดท้าย การประมวลผลไม่ได้เป็นไปตามลำดับการจัดวางคือไม่ได้ทำจากซ้ายไปขวาหรือบนลงล่าง แต่เป็นไปตามขั้นตอนการเดินทางของข้อมูลซึ่งในการเขียนโปรแกรมในเบื้องต้นผู้ที่คุ้นเคยกับภาษาตัวหนังสือโดยทั่วไปอาจจะต้องใช้เวลาสักระยะเพื่อที่จะทำความเข้าใจการทำงานของ LabVIEW

ส่วนประกอบของ LabVIEW

       ส่วนประกอบของ LabVIEW
ในบทนี้เราจะกล่าวถึงส่วนประกอบต่างๆของ LabVIEW เพื่อให้เข้าใจถึงส่วนประกอบต่างๆ ที่ใช้งานการเขียนโปรแกรม หรือ VI พื้นฐานการการต่อสายเชื่อมใน Block Diagram ลักษณะของตัวแปร และอื่นๆ อีกหลายอย่างแม้ว่าเราไม่ได้คาดหวังว่าคุณจะสามารถเริ่มเขียน VI ได้ในบทนี้แต่ก็จะเป็นพื้นฐานในการเขียน VI ในบทต่อไป และเมื่อจบการศึกษาในบทนี้แล้วเราจะมีความรู้ในเรื่องส่วนประกอบต่างๆ ของ LabVIEWFront Panel และ Block Diagramคำสั่งใน Menu ต่างๆ เช่น Menu Bar, Tool Bar และ Pop-up Menu.การกำหนด Controls และ Indicators และชนิดของตัวแปรที่ใช้ใน LabVIEW Node, Terminal, Icon และ Connector รวมถึงการเชื่อมต่อสายระหว่าง Object ต่างๆใน Block Diagramทำความรู้จักกับอุปกรณ์บางแบบบน Palette แบบต่างๆสำหรับกิจกรรมที่จัดให้ในบทนี้จะเป็นกิจกรรมเพื่อให้เราเกิดความคุ้นเคยกับส่วนประกอบต่างๆของ LabVIEW และให้รู้จักหลักการทำงานพื้นฐานของ LabVIEW อย่างไรก็ตามเรายังจะไม่เน้นหนักด้านการเขียนโปรแกรมหรือ VI ในบทนี้ กิจกรรมต่างๆ มีจุดประสงค์เพื่อให้เกิดความเข้าใจพื้นฐานเท่านั้น

1. Front Panels and Block Diagrams.

อันดับแรกเราจะแนะนำให้คุณได้รู้จักกับองค์ประกอบพื้นฐานของ LabVIEW สองส่วนคือส่วนที่ผู้ใช้จะติดต่อกับโปรแกรมหรือ Front Panel และส่วนที่ผู้เขียนจะต้องกำหนดการทำงานของโปรแกรม หรือ Block DiagramFront Panel

Front Panel 
       หรือ หน้าปัทม์คือส่วนที่ผู้ใช้จะใช้ติดต่อกับโปรแกรม ในขณะที่เราให้ VI ทำงานอยู่นั้นหน้าปัทม์นี้จะต้องทำงานร่วมอยู่ด้วย เพื่อให้ผู้ใช้หรือผู้ควบคุมสามารถให้ข้อมูลเข้าสู่โปรแกรม และเมื่อข้อมูลได้รับการประมวลผลแล้วก็จะแสดงออกมาทาง Front Panel นี้ ดังนั้นหากจะเปรียบกับโปรแกรมสำเร็จรูปอื่นๆและ Front Panel นี้ก็คือ Graphic User Interface (GUI) ของ LabVIEW นั่นเอง ตัวอย่างของลักษณะของ Front Panel ใน LabVIEW เป็นไปตามรูป ซึ่งในขั้นแรกนี้ผู้ที่ยังไม่มีความคุ้นเคยกับโปรแกรมนี้อาจมองดูว่าการ สร้างองค์ประกอบต่างๆคงจะมีความยุ่งยาก แต่ถ้าหากเราเริ่มทำความเข้าใจกับ LabVIEW แล้วเราจะพบว่าการเขียน Front Panel ในลักษณะในรูปนี้ไม่ใช่สิ่งที่ยุ่งยากหรือสิ้นเปลืองเวลาในการเขียนเลย


  หากเราสังเกตจากรูปนี้เราจะพบว่าบนหน้าปัทม์ Front Panel ของ LabVIEW จะมีส่วนประกอบที่สำคัญ 2 แบบ คือ ตัวควบคุม (Controlled) และ ตัวแสดงผล (Indicator) ซึ่งส่วนประกอบทั้ง 2 จะมีการทำงานต่างกันและหน้าที่ตรงกันข้ามกัน ดังมีรายละเอียดต่อไปนี้

Controls
    Controls มีหน้าที่เป็นตัวควบคุมคือให้ค่าหรือ Input จากผู้ใช้ ลักษณะของ Controls เช่น ปุ่มปรับค่า, สะพานปิด – เปิดไฟ, แท่งเลื่อนเพื่อปรับค่า, การให้ค่าด้วยตัวเลข Digital หรืออื่นๆ ดังนั้นจากหลักการของ Controls ก็หมายความว่าเป็นการกำหนดค่าหรือแหล่ง (source) ของข้อมูล โดยปกติเราจะไม่สามารถนำข้อมูลมาแสดงผลที่ Controls ได้ และถ้าหากเราพยายามที่จะให้ Control แสดงผลข้อมูลก็จะเกิดความผิดพลาดขึ้นใน VI ของเราทันที
ตัวอย่างของ Object ที่ปกติแล้วจะทำหน้าที่เป็น Controls บน Front Panel บางประเภท จะแสดงในรูปต่อไปนี้ เราจะสังเกตเห็นว่าหากเปรียบเทียบกับในอุปกรณ์เครื่องมือวัดจริงแล้ว อุปกรณ์เหล่านี้จะได้รับการกำหนดค่าจากผู้ใช้ ดังนั้นจะเห็นว่า LabVIEW พยามทำให้เราได้รู้สึกว่าใช้งานกับเครื่องมือจริงๆอยู่

Indicators
     Indicator มีหน้าที่เป็นตัวแสดงผลเพียงอย่างเดียวโดยจะรับค่าที่ได้จากแหล่งข้อมูลมาแสดงผลซึ่งอาจปรากฏในรูปของกราฟ, เข็มชี้, ระดับของเหลว หรืออื่นๆ Indicator นี้เปรียบเสมือน output เพื่อให้ผู้ใช้ได้ทราบค่าสิ่งที่เรากำลังวิเคราะห์อยู่ และผู้ใช้ไม่สามารถปรับค่าบน indicator ได้โดยตรงแต่จะต้องมีแหล่งข้อมูลที่ส่งให้กับ Indicators เหล่านี้ ดังนั้นเราอาจมอง Indicator ว่าเป็นเหมือน Sink ของข้อมูล ตัวอย่างของ object ที่ปกติแล้วจะมีเป็น Indicator บางชนิดได้แสดงในรูปต่อไปนี้
ในการเขียน VI อันดับแรกคือการเขียนหน้าปัทม์ซึ่งผู้ใช้จะต้องออกแบบส่วนนี้จะจัดวางให้เหมาะสม ซึ่งจะกล่าวถึงในบทต่อไป สำหรับในขั้นนี้เราเพียงแต่เน้นว่าบนหน้าปัทม์ Front Panel จะประกอบด้วยสองส่วนและการที่เราจะเลือก Controls และ Indicators เป็นเรื่องสำคัญเพราะทั้งสองนี้ไม่สามารถแทนกันได้ นั่นคือเราไม่สามารถกำหนดค่าให้ Controls แสดงค่าได้และไม่สามารถนำค่าจาก Indicators ออกไปเป็นข้อมูลของระบบได้

Monday, September 13, 2010

DAQ, GPIB and Serial Communication

           
ในงานด้านการวัดและเครื่องมือวัดทางวิศวกรรม จะประกอบด้วยขึ้นตอนหรือกระบวนการวัด
            หลักๆ ตามลำดับดังนี้
1.         Sensor - Transducer ทำหน้าที่เปลี่ยนปรากฏการณ์ทางธรรมชาติหรือปริมาณต่างๆ ทางฟิสิกส์ให้เป็นปริมาณทางไฟฟ้าที่สามารถตรวจจับได้ ไม่ว่าจะเป็น กระแส ความต่างศักดิ์ แรงเคลื่อนไฟฟ้า หรือความต้านทานไฟฟ้า
2.         Signal  Conditioner ทำหน้าที่ปรับแต่งปริมาณสัญญาณที่ได้จากขั้นที่ 1 ให้มีขนาดปริมาณหรือลักษณะที่เหมาะสม เพราะสัญญาณที่ได้จากขั้นตอนที่ 1 นั้น อาจมีขนาดไม่เหมาะสมหรือมีสัญญาณรบกวนมากเกินกว่าที่จะนำไปวิเคราะห์ในทันทีได้
3.         Data Acquisition ทำหน้าที่ประมวลแปลความหมายหรือเปลี่ยนสัญญาณในลักษณะ Analog ให้มาอยู่ในรูปของ digital signal เพื่อประโยชน์ในการตีความหมายและใช้ในการควบคุมหน้าที่ของ DAQ boards อาจจะเป็นการอ่านสัญญาณ analog (A/D Conversion) การสร้างสัญญาณอันนาลอก (D/A conversion) เขียนและอ่านสัญญาณ เพื่อเชื่อมต่อกับ Transducer
ในเอกสารบางเล่มอาจเรียกขั้นตอนที่ 2 และ 3 อาจเรียกรวมกันว่า Signal Processing และในบางกรณีที่สัญญาณที่ได้มาจากการวัดนั้น หากมีขนาดที่เหมาะสมเราอาจจะไม่ต้องการขั้นตอนการปรับสภาพสัญญาณหรือ Signal Conditioner ก็เป็นได้
การติดต่อระหว่างคอมพิวเตอร์และ transducer จึงเป็นเรื่องสำคัญสำหรับคอมพิวเตอร์โดยปกติแล้ว สามารถที่จะติดต่อสื่อสารกับอุปกรณ์ภายนอกได้โดยการผ่าน Input/Output Board (I/O Board) ซึ่ง I/O board นี้จะมีหลายแบบแต่แบบที่สำคัญและสามารถเชื่อมต่อโดยผ่านคำสั่งของ LabVIEW ได้ทันทีจะประกอบด้วยอุปกรณ์ดังต่อไปนี้
      1.         DAQ Board 
      2.         GPIB Board 
      3.         Serial Interface

DAQ Board
โดยปกติแล้ว DAQ Board เป็นอุปกรณ์พิเศษ คือไม่ได้เป็นมาตรฐานที่ติดตั้งมากับคอมพิวเตอร์ สำหรับบอร์ดประเภทนี้จะมีผู้ผลิตหลายบริษัท ซึ่งลักษณะการทำงานก็อาจจะแตกต่างกันบ้างตามแต่ผู้ผลิตแต่ละแห่งออกแบบมา ข้อสำคัญที่เราต้องเข้าใจในเบื้องต้นนี้ก็คือไม่ใช่ว่า DAQ Board ทุกแบบ จะเหมาะสมกับการทำงานร่วมกับ LabVIEW ทั้งหมด อย่างไรก็ตาม ที่มหาวิทยาลัยเทคโนโลยีสุรนารีเราได้ใช้ DAQ Board ที่ผลิตโดยบริษัท National Instrument ดังนั้น DAQ Board ทุกแบบที่เรามีอยู่จะสามารถทำงานร่วมกับ LabVIEW ได้อย่างแน่นอน
สำหรับ DAQ Board ที่ผลิตโดยผู้ผลิตไม่ใช่ว่าจะไม่สามารถทำงานร่วมกับ LabVIEW ได้ แต่ว่าการที่ DAQ Board ที่ผลิตโดยผู้ผลิตรายอื่นนั้นจะสามารถทำงานร่วมกับ LabVIEW ได้ก็ต่อเมื่อมี Driver ของอุปกรณ์นั้น เพื่อให้ใช้งานร่วมกับ LabVIEW ได้เท่านั้นเท่านั้น ดังนั้นหากว่าทางบริษัทผู้ผลิต DAQ Board นั้นไม่มี Driver ที่ใช้งานร่วมกับ LabVIEW มาให้ เราอาจจำเป็นที่จะต้องเขียน Driver ขึ้นมาเอง ซึ่งวิธีการนี้ค่อนข้างจะยุ่งยากและเสียเวลามาก
                การเลือกใช้ DAQ Board ที่เหมาะสมกับตนที่จะใช้ถือว่าเป็นเรื่องที่สำคัญมากประการหนึ่ง เพราะราคาของเครื่องมือนี้จะเปลี่ยนแปลงไปอย่างมากหากเรากำหนดข้อจำกัดแตกต่างกันออกไป เช่น อัตราการเรียกสุ่มตัวอย่าง (sampling rate) จำนวนช่องรับ-ส่งสัญญาณ (I/O channel) หรืออื่นๆ โดยปกติราคาของ DAQ Board ที่ผลิตโดยบริษัท National Instrument จะมีราคาอยู่ระหว่าง $700-2000 ขึ้นอยู่กับความต้องการ ซึ่งเป็นราคาที่นับว่าสูงมาก เราอาจจะได้ board ที่ราคาถูกกว่านี้จากผู้ผลิตรายอื่น แต่อาจจะมีปัญหาเรื่องการใช้งานร่วมกับ LabVIEW
                หน้าที่ของ DAQ Board นี้จะทำการติดต่อโดยตรงกับ Transducer ซึ่งอาจจะผ่านอุปกรณ์ Signal Conditioner หรือไม่ก็ได้ตามความจำเป็น นอกเหนือจากนั้นแล้วเราไม่จำเป็นต้องมีอุปกรณ์อื่นเข้ามาร่วมในการสร้างเครื่องมือวัดเสมือนจริง ซึ่งจุดนี้เป็นจุดได้เปรียบของ DAQ Board นั่นคือแม้ว่าจะมีราคาแพง แต่สามารถจะทดแทนการซื้อเครื่องมือวัดอื่นๆ ได้มากมาย เราจะกล่าวถึง DAQ board อย่างละเอียดอีกครั้งหนึ่งในบทที่กล่าวถึง Data Acquisition Hardware

   GPIB
                General Purpose Interface Bus เป็นการขนถ่ายข้อมูลระบบใหม่ที่พึ่งได้รับความนิยม แม้ว่าจะได้รับการพัฒนาโดยบริษัท Hewlett-Packard ตั้งแต่ปลายทศวรรษ 1960 และได้พัฒนาจนกระทั่งได้รับมาตรฐานจาก Institute of Electrical and Electronic Engineer (IEEE) ในปี 1975 ซึ่งต่อมารู้จักกันในชื่อ IEEE 488 standard
                จุดประสงค์แรกของ GPIB คือใช้ในการควบคุมเครื่องมือวัดโดยคอมพิวเตอร์ อย่างไรก็ตามจุดประสงค์ได้เปลี่ยนแปลงไปบ้างแล้ว โดยการนำ GPIB มาใช้ควบคุมและติดต่อระหว่างคอมพิวเตอร์ด้วยกันหรือระหว่างคอมพิวเตอร์ กับ scanner หรือเครื่องมือวัดอื่นๆ ในระยะ 1-2 ปี ที่ผ่านมาเราจะพบว่าเครื่องคอมพิวเตอร์บางรุ่นเริ่มมี GPIB ติดมาเป็นอุปกรณ์มาตรฐานของเครื่องแล้ว
                GPIB เป็นการติดต่อแบบใหม่ที่สามารถเชื่อมต่ออุปกรณ์หลายชิ้นเข้ากับ GPIB Port ตัวเดียวได้ โดยสามารถต่ออุปกรณ์ได้สูงถึง 15 ชั้น โดยใช้ bus เพียงตัวเดียว ทำให้ประหยัด (และป้องกันเรื่องปวดหัวในการ set อุปกรณ์) ส่วนข้อดีอื่นๆ มีดังนี้

        ส่งผ่านข้อมูลด้วยวิธีแบบขนาน ครั้งละ 1 byte (8-bits)
        Hardware จะเป็นผู้จัดการเรื่อง Handshaking, timing และอื่นๆ
       อัตราการส่งผ่านข้อมูล 800 Kbytes/sec หรือมากกว่า ซึ่งนับว่าเร็วมากเมื่อเทียบกับ port แบบเก่า
       ใช้คำสั่ง ASCII ในการติดต่อ

และอื่นๆ อีกหลายประการ

ถึงจุดนี้คุณอาจสงสัยว่า ถ้าหากว่าเรามี GPIB Port ซึ่งมีประสิทธิภาพตามที่กล่าวมาแล้วและมีราคาถูกมากหรืออาจติดตั้งมาพร้อมกับคอมพิวเตอร์แล้ว ทำไมเราจะต้องซื้อ DAQ Card มาใช้อีก สิ่งที่เราต้องเข้าใจในอันดับแรกคือ GPIB Port ไม่สามารถทำให้คอมพิวเตอร์ติดต่อโดยตรงกับ Transducer ได้ GPIB Port จะเป็นการติดต่อระหว่างคอมพิวเตอร์กับอุปกรณ์ที่มี GPIB Port เท่านั้น ซึ่งอุปกรณ์ที่มี GPIB Port ติดตั้งอยู่ก็มักจะเป็นอุปกรณ์ประเภทเครื่องมือวัดเช่น Oscilloscope, Multimeter ซึ่งเป็น Actual Instrument อยู่แล้ว ดังนั้นการส่งผ่านข้อมูลจึงเป็นข้อมูลที่อ่านค่าได้เรียบร้อยแล้ว เพราะบนเครื่องมือเหล่านั้นจะมีระบบ Signal Processing อยู่ในตัวเองเรียบร้อยแล้ว
                อย่างไรก็ตามการที่ LabVIEW ติดต่อกับอุปกรณ์อื่นโดยผ่านทาง GPIB Port ได้ สามารถทำให้เราสามารถเพิ่มศักย์ภาพของเครื่องมือจริง และสามารถนำค่าที่ได้จากเครื่องมือไปใช้ควบคุมอุปกรณ์อื่นๆ ด้วยคอมพิวเตอร์ได้อีกด้วย

  Serial Communication

                ข้อดีของ serial communication ผ่านทาง Serial Port หรือพอร์ตอนุกรมก็คือราคาถูก และเครื่องมือมากมายได้ใช้อุปกรณ์นี้เป็นมาตรฐาน ลักษณะการทำงานของพอร์ตก็จะคล้ายกับ GPIB Port เพียงแต่ส่งผ่านข้อมูลแบบอนุกรม และมีอัตราการส่งข้อมูลที่ช้ากว่า ซึ่งพอร์ตนี้จะใช้มาตรฐาน RS-232 หรือ RS-485 และการติดต่อข้อมูลจะต้องทำระหว่างคอมพิวเตอร์กับอุปกรณ์ที่มีพอร์ทนี้อยู่ด้วย
                LabVIEW มี subVI ที่ใช้ในการติดต่อระหว่างอุปกรณ์ต่างๆ กับคอมพิวเตอร์ที่สามารถเรียกมาใช้งานได้ทันทีและการ Set Up เครื่องมือจะมีความยุ่งยากน้อยกว่าอุปกรณ์แบบอื่นๆ ข้อสำคัญเราต้องมีความเข้าใจกับ Baud Speed, Parity, Stop Bits และอื่นๆ เป็นต้น อย่างไรก็ตามมีแนวโน้มว่า GPIB Port จะเข้ามาเป็นมาตรฐานและเข้าแทนที่พอร์ตขนานได้ในอีกไม่นานนัก
               
                กล่าวโดยรวมแล้วการทำงานของ LabVIEW จะมีประสิทธิภาพสูงสุดหากว่าเราใช้เพื่อการติดต่อกับเครื่องมือวัดโดยตรง แม้ว่าในการเขียนโปรแกรมขั้นพื้นฐานเราจะไม่ได้กล่าวถึงการร่วมใช้กับอุปกรณ์อื่นๆ ก็ตาม การเขียน VI ในเบื้องต้น ผู้ใช้อาจมีความรู้สึกว่ายุ่งยาก ต้องจดจำ icon และระบบควบคุมต่างๆ มากมายแต่ก็จะเหมือนกับโปรแกรมหลายๆ แบบ หลังจากที่เราได้ทำความคุ้นเคยกับตัวโปรแกรมและการเขียนโปรแกรมพื้นฐานแล้ว เราจะพบว่าการนำ LabVIEW ไปใช้งานไม่ได้มีความยุ่งยากอย่างที่เราคิดเลย

What Task is for LabVIEW

ถ้าหากว่าเรามีโปรแกรมสำเร็จรูปโปรแกรมหนึ่ง แล้วบอกว่าโปรแกรมนั้นเหมาะกับการใช้งานทุกรูปแบบ คงจะเป็นคำพูดที่เกินความเหมาะสมไป เพราะโปรแกรมแต่ละโปรแกรมนั้นผู้สร้างมีวัตถุประสงค์ในการจัดทำขึ้นอย่างแน่นอน และมีขอบข่ายของงานที่แน่ชัด ดังนั้นหากเรานำโปรแกรมดังกล่าวไม่ตรงกับวัตถุประสงค์ หรืออยู่นอกขอบข่ายการทำงาน เราก็คงจะไม่สามารถใช้ประโยชน์อย่างสูงสุดจากโปรแกรมนั้นได้
                LabVIEW ก็เช่นเดียวกัน โดยจุดประสงค์หลักแล้ว บริษัท National Instrument ได้เริ่มพัฒนาโปรแกรมที่จะนำมาใช้กับระบบเครื่องมือวัดที่มีความง่ายในการเขียนโปรแกรมและมีฟังก์ชันเพื่อจะช่วยในการวัดทางวิศวกรรมให้มากที่สุด เพราะด้วยความเป็นมาบริษัท National Instrument เริ่มจากการผลิตอุปกรณ์ที่ใช้กับการวัดทางวิศวกรรม ไม่ใช่บริษัทที่เริ่มต้นมาจากการผลิต Software เป็นหลัก ดังนั้นคงไม่ผิดนักสำหรับผู้ที่ต้องการจะใช้ประโยชน์สูงสุดจากโปรแกรม LabVIEW คือผู้ที่ต้องการจะนำข้อมูลจากภายนอกเครื่องคอมพิวเตอร์ เข้ามาในเครื่องเพื่อทำการการวิเคราะห์ข้อมูล ประมวลค่า แสดงผลและในหลายกรณีใช้ในระบบควบคุมอัตโนมัติด้วยคอมพิวเตอร์
ข้อได้เปรียบสูงสุดของ LabVIEW คือการพยายามทำให้เครื่องคอมพิวเตอร์ของเราเมื่อรวมกับ LabVIEW และ อุปกรณ์เชื่อมต่อเพื่อการเก็บข้อมูล (Data Acquisition Card) แล้วสามารถเปลี่ยนเครื่องคอมพิวเตอร์ส่วนบุคคลของเราให้กลายเป็นเครื่องมือวัดในหลายรูปแบบ ไม่ว่าจะเป็น Oscilloscope, Multi-meter, Function Generator, Strain Meter Thermometer หรือเครื่องมือวัดอื่นๆ ตามที่เราต้องการ ทำให้เราสามารถใช้คอมพิวเตอร์ในการทำการวัดและเครื่องมือวัดได้อย่างกว้างขวาง ซึ่งจุดนี้เองที่เป็นที่มาของชื่อ เครื่องมือวัดเสมือนจริง (Virtual Instrument) และข้อได้เปรียบเหนือการใช้อุปกรณ์จริงเหล่านั้นคือ Virtual Instrument สามารถปรับเปลี่ยนให้เหมาะสมกับการใช้งานของผู้ใช้แต่ละกลุ่มได้ โดยการเปลี่ยน VI ให้เป็นไปตามต้องการเป็นเรื่องที่ไม่ยุ่งยากนัก
ข้อดีอีกประการหนึ่งในการหนึ่งของการใช้คอมพิวเตอร์เป็นเครื่องมือวัดก็คือ สามารถใช้ทำเป็น Data Logger และ PLC (Programmable Logical Controlled) ได้พร้อมกัน ซึ่งโดยปกติแล้วระบบควบคุมมักจะไม่มีในเครื่องมือวัดจริงขั้นพื้นฐาน หรือ Data Logger แม้จะเก็บข้อมูลได้ แต่การสั่งการทำงานกับอุปกรณ์ตัวอื่น จะมีความยุ่งยากในการสั่งการมาก
กล่าวโดยสรุปก็คือหากเรามี LabVIEW, คอมพิวเตอร์และ DAQ Card (หรือระบบการติดต่อสื่อสารอื่นเช่น GPIB หรือ Serial Port ซึ่งรายละเอียดและความแตกต่างจะกล่าวต่อไปภายหลัง เราสามารถสร้างเครื่องมือวัดเสมือนจริงได้มากมาย หากเราต้องมี Transducer ที่เหมาะสมประกอบอยู่ด้วย ซึ่งจุดนี้เองคือข้อดีของโปรแกรมนี้
ส่วนท่านที่มีความคิดที่จะใช้ LabVIEW เพื่อใช้ในการคำนวณและแสดงผลในงานทางวิศวกรรมที่ไม่มีการวัดค่าจากเครื่องมืออื่นใดเลย หรือไม่ได้มีการนำข้อมูลจากภายนอกเข้ามาสู่เครื่องคอมพิวเตอร์เลย LabVIEW อาจจะไม่ใช่โปรแกรมที่เหมาะสม คุณอาจจะมองหาโปรแกรมอื่นๆลองเปรียบเทียบดูเพื่อตัดสินใจก็ได้ เพราะการเรียน LabVIEW จะเป็นการเริ่มเรียนในแนวความคิดใหม่อีกรูปแบบหนึ่ง

Function of LabVIEW

โปรแกรมที่เขียนขึ้นมาโดย LabVIEW เราจะเรียกว่า Virtual Instrument (VI) เพราะลักษณะที่ปรากฏทางจอภาพเมื่อผู้ใช้ใช้

งานจะเหมือนกับเครื่องมือหรืออุปกรณ์ทางวิศวกรรม ในขณะเดียวกันหลังฉากของอุปกรณ์เสมือนจริงเหล่านั้นจะเป็นการทำงานของ ฟังก์ชัน, Subroutines และโปรแกรมหลักเหมือนกับภาษาทั่วไป สำหรับ VI หนึ่งๆ จะประกอบด้วยส่วนประกอบที่สำคัญสามส่วนคือ
1.     Front Panel
2.     Block Diagram
3.     Icon และ Connector

ทั้งสามส่วนหนี้จะประกอบกันขึ้นมาเป็นอุปกรณ์เสมือนจริง ลักษณะและหน้าที่ของส่วนประกอบทั้งสามมีดังต่อไปนี้
1.  Front Panel หรือหน้าปัทม์ จะเป็นส่วนที่ใช้สื่อความกันระหว่างผู้ใช้กับโปรแกรม (หรือที่นิยมเรียก user interface) โดยทั่วไปจะมีลักษณะเหมือนกับหน้าปัทม์ของของเครื่องมือหรืออุปกรณ์ที่ใช้งานด้านการวัดทั่วๆ ไป โดยทั่วไปจะประกอบด้วย สวิตซ์ปิดเปิด, ปุ่มบิด, ปุ่มกด จอแสดงผลหรือแม้แต่ค่าที่ผู้ใช้สามารถกำหนด ดังนั้นสำหรับผู้ที่คุ้นเคยกับการเขียนโปรแกรมประเภท Visual ทั้งหลายคงจะเข้าใจถ้าหากบอกว่า Front Panel นี้จะเปรียบเสมือนเป็น GUI ของโปรแกรมหรือ VI นั่นเอง ลักษณะของ Front Panel แสดงในรูปต่อไปนี้
 
2.  Block Diagram เพื่อให้เกิดความเข้าใจง่ายขึ้น เราอาจมอง Block Diagram นี้เป็นเสมือนกับ Source Code หรือโปรแกรมของ LabVIEW ซึ่งปรากฏว่าอยู่ในรูปของภาษา G ซึ่ง Block Diagram นี้ ถือว่าเป็น Executable Program คือสามารถที่จะทำงานได้ทันที และข้อดีอีกประการหนึ่งก็คือ LabVIEW จะมีการตรวจสอบความผิดพลาดของโปรแกรมตลอดเวลา ทำให้โปรแกรมจะทำงานได้ก็ต่อเมื่อไม่มีข้อผิดพลาดในโปรแกรมเท่านั้นโดยผู้ใช้สามารถที่จะดูรายละเอียดของความผิดพลาดแสดงให้เห็นได้ตลอดเวลา ทำให้การเขียนโปรแกรมนั้นง่ายขึ้นมาก ส่วนประกอบภายใน Block Diagram นี้จะประกอบด้วย ฟังก์ชัน ค่าคงที่ โปรแกรมควบคุมการทำงานหรือโครงสร้าง จากนั้นในแต่ละส่วนเหล่านี้ ซึ่งจะปรากฏในรูปของ Block เราจะได้รับการต่อสาย (wire) สำหรับ Block ที่เหมาะสมเข้าด้วยกัน เพื่อกำหนดลักษณะการไหลของข้อมูลระหว่าง block เหล่านั้น ทำให้ข้อมูลได้รับการประมวลผลตามที่ต้องการ และแสดงผลออกมาให้แก่ผู้ใช้ต่อไป
3. Icon และ Connector เปรียบเสมือนโปรแกรมย่อย Subroutine ในโปรแกรมปกติทั่วๆ ไปโดย icon จะหมายถึง block diagram ตัวหนึ่งที่มีการส่งข้อมูลเข้าและออกผ่านทาง Connector ซึ่งใน LabVIEW เราจะเรียก Subroutine นี้ว่า subVI ข้อดีของการเขียนโปรแกรมด้วยภาษา G นี้ก็คือเราสามารถสร้าง VI ทีละส่วนขึ้นมาให้ทำงานด้วยตัวเองได้อย่างอิสระ จากนั้นในภายหลักหากเราต้องการเราก็สามารถเขียนโปรแกรมอื่นขึ้นมาเพื่อเรียกใช้งาน VI ที่เราเคยสร้างขึ้นก่อนหน้านี้ทีละตัว ซึ่งทำให้ VI ที่เราเขียนขึ้นก่อนกลายเป็น subVI ไป การเขียนในลักษณะนี้เราเรียกว่า เขียนเป็น module
                สำหรับลักษณะทั่วไปของ Icon และ Connector จะแสดงในรูปต่อไปนี้ เราจะเห็นว่าเมื่อเราแสดงในรูปของ Connector เราจะพบว่ามีช่องต่อข้อมูลหรือที่เรียกว่า Terminal ปรากฏให้เห็น
 คำศัพท์ต่างๆที่ใช้กันใน LabVIEW นี้ออกจะแตกต่างจากที่เราใช้กันในภาษาการเขียนโปรแกรมตัวหนังสือทั่วๆไปในหลายๆด้าน ดังนั้นเพื่อให้ผู้ที่เริ่มใช้ LabVIEW เข้าใจถึงศัพท์ต่างๆ ที่ใช้ในโปรแกรม เราจึงขอเปรียบเทียบศัพท์ใช้ใน LabVIEW กับโปรแกรมพื้นฐานทั่วๆ ไปตามตารางที่ได้แสดงต่อไปนี้

LabVIEW
โปรแกรมพื้นฐาน
หน้าที่
VI
Program
ตัวโปรแกรมหลัก
Function
function
ฟังก์ชันสำเร็จรูปที่สร้างขึ้นมากับโปรแกรมนั้นเช่น sin, log เป็นต้น
SubVI
Subroutine
โปรแกรมย่อยที่ถูกเรียกใช้โดยโปรแกรมหลัก
Front Panel
user interface
ส่วนที่ติดต่อกับผู้ใช้
Block Diagram
Program code
การเขียนตามขั้นตอนของที่แต่ละโปรแกรมกำหนดขึ้น