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 แล้ว