Tuesday, September 14, 2010

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
การเขียนตามขั้นตอนของที่แต่ละโปรแกรมกำหนดขึ้น

Sunday, September 12, 2010

What is labview

           หลายท่านคงจะสงสัยว่า LabVIEW คืออะไร เป็นโปรแกรมที่ผลิตขึ้นมาเพื่อใช้ประโยชน์ในด้านใด เหมาะสมที่จะใช้ในงานด้านใดมากที่สุด ต้องมีอุปกรณ์
อื่นใดร่วมใช้กับโปรแกรมนี้บ้าง และความแตกต่างของโปรแกรมนี้กับโปรแกรมอื่นๆ อย่างไร

อันดับแรก LabVIEW เป็นโปรแกรมคอมพิวเตอร์ที่สร้างเพื่อนำมาใช้ในด้านการวัดและเครื่องมือวัดสำหรับงานทางวิศวกรรม LabVIEW ย่อมาจาก Laboratory Virtual Instrument Engineering Workbench ซึ่งหมายความว่าเป็นโปรแกรมที่สร้าง เครื่องมือวัดเสมือนจริงในห้องปฏิบัติการทางวิศวกรรม ดังนั้นจุดประสงค์หลักของการทำงานของโปรแกรมนี้ก็คือการจัดการในด้านการวัดและเครื่องมือวัด อย่างมีประสิทธิภาพ และในตัวของโปรแกรมจะประกอบไปด้วยฟังก์ชันที่ใช้ช่วยในการวัดมากมายและแน่นอนที่สุด โปรแกรมนี้จะมีประโยชน์อย่างสูงเมื่อใช้ร่วมกับเครื่องมือวัดทางวิศวกรรมต่างๆ
สิ่งที่ LabVIEW แตกต่างจากโปรแกรมอื่นอย่างเห็นได้ชัดที่สุดก็คือ LabVIEW นี้เป็นโปรแกรมประเภท GUI (Graphic User Interface) โดยสมบูรณ์ นั่นคือเราไม่จำเป็นต้องเขียน code หรือคำสั่งใดๆ ทั้งสิ้น และที่สำคัญลักษณะภาษาที่ใช้ในโปรแกรมนี้เราจะเรียกว่าเป็น ภาษารูปภาพ หรือเรียกอีกอย่างว่าภาษา G (Graphical Language) ซึ่งจะแทนการเขียนโปรแกรมเป็นบรรทัดอย่างที่เราคุ้นเคยกับภาษาพื้นฐาน เช่น C, BASIC หรือ FORTRAN ด้วยรูปภาพหรือสัญลักษณ์ทั้งหมด ซึ่งแม้ว่าในเบื้องต้นเราอาจจะสับสนกับการจัดเรียบหรือเขียนโปรแกรมบ้าง แต่เมื่อเราคุ้นเคยกับการใช้โปรแกรมนี้แล้วเราจะพบว่า LabVIEW นี้มีความสะดวกและสามารถลดเวลาในการเขียนโปรแกรมลงไปได้มาก โดยเฉพาะในงานเขียนโปรแกรมคอมพิวเตอร์เพื่อเชื่อมต่อกับอุปกรณ์อื่นๆ เพื่อใช้ในการวัดและการควบคุม
สำหรับผู้ที่เคยใช้โปรแกรมประเภทที่ใช้ตัวหนังสือ หรือที่เรียกว่า Text Base ทั้งหลาย คงจะทราบถึงความยุ่งยากในการจัดการกับตำแหน่งการส่งผ่านข้อมูลตามอุปกรณ์เชื่อมต่อเช่น Port หรือ Card ต่างๆ รวมถึงการจัดวางตำแหน่งในหน่วยความจำเพื่อที่จะสามารถรวบรวมข้อมูลมาใช้ในการคำนวณและเก็บข้อมูลให้ได้ประโยชน์สูงสุด ปัญหาเหล่านี้ได้รับการแก้ไขใน LabVIEW โดยได้มีการบรรจุโปรแกรมจำนวนมาก หรือ Libraries ไว้สำหรับจัดการกับปัญหาเหล่านั้น ไม่ว่าอุปกรณ์การเชื่อมต่อจะเป็น DAQ (Data Acquisition), GPIB (General Purpose Interface Bus หรือก่อนหน้านี้รู้จักกันในชื่อ Hewlett Packard Interface Bus, HP-IB), พอร์ตอนุกรม หรือ Serial Port เพื่อใช้ติดต่อกับอุปกรณ์ที่ส่งผ่านข้อมูลแบบอนุกรม (Serial Instrument) รวมถึงการวิเคราะห์ข้อมูลที่ได้ด้วยวิธีการต่างๆ นอกจากนี้ใน Libraries เหล่านั้นยังได้บรรจุฟังก์ชันการทำงานที่สำคัญอีกหลายประการเช่น signal generation, signal processing, filters, สถิติ, พีชคณิต และคณิตศาสตร์อื่นๆ ดังนั้น LabVIEW จึงทำให้การวัดและการใช้เครื่องมือวัดกลายเป็นเรื่องง่ายลงไปมาก และทำให้คอมพิวเตอร์ส่วนบุคคลของเรากลายเป็นเครื่องมือทางด้านการวัดหลายชนิดอยู่ในเครื่องเดียว
เราหวังว่าคงจะสามารถตอบคำถามโดยพื้นฐานได้บ้างว่า LabVIEW นี้คืออะไร

Thursday, September 9, 2010

เพิ่ม speed firefox

โปรแกรมนี้มีไว้สำหรับ เพิ่ม speed firefox มันเป็นประสบการณ์โดยตรง เกิดจากตอนแรกผู้ใช้เองเสียเวลาในการรอในการโหลดเวบแต่ละหน้าค่อนข้างจะช้าก็เลยไปพบ โปรแกรม เพิ่ม speed firefox ที่ชื่อ ว่า speedyfox นี้แหละเลยลองเอามาติดตั้งดู พบว่าการโหลดเวบเพท แต่ละหน้านี้เล้วขึ้นอย่างเห็นได้ชัดเลยอยากแนะนำเพื่อนๆลองใช้ดู แต่ก่อนที่จะลงโปรแกรม เพิ่ม speed firefox นี้กรุณาปิด firefox ก่อนนะครับถึงจะลงได้
ซึ่งเป็น File เล็กๆ ลอง Download ไปเล่นดูครับ ขั้นตอนไม่ซับซ้อน อะไรแค่คลิกที่ตัวโปรแกรม เพิ่ม speed firefox แล้วให้เลือกที่ speed up My Firefox แล้วก็รอสักพักเพื่อให้โปรแกรมทงาน เมื่อมันบอกว่า success ก็เป็นอันเรียบร้อย

Wednesday, September 8, 2010

Reduce order observer

                 ในการควบคุมแบบ full-state feedback นั้นเราจะสมมุติให้ปริถูมิสถานะ(State space) ทุกตัวสามารถวัดได้ตลอดเวลาการทำงาน ซึ่งนี้เป็นข้อสมมุติที่ดีในการออกแบบระบบควบคุม แต่อย่างไรก็ตามในความเป็นจริงแล้ว เราไม่สามารถวัดปริภูมิสถานะได้หมดทุกตัว ซึ่งอาจจะเกิดจากค่าใช้จ่ายในการซื้อตัวตรวจรู้ (sensor) หรือ ความมีความซับซ้อนในการติดตั้งตัวตรวจรู้ ดังนั้นถ้าเราสามารถตรวจสอบระบบได้ว่า ระบบสามารถสังเกตได้หรือไม่ Observable เป็นไปได้ว่าเราสามารถประมาณ ปริภูมิสถานะ ที่เหลือของระบบได้ โดยวิธี Reduce order observer
  ขั้นตอน คือ เริ่มจากการหาแบบจำลองทางคณิตศาสตร์ของระบบ แล้วนำมาเขียนอยู่ในรูปปริภูมิิสถานะ แล้วหาค่า K โดยใช้วิธีการ Pole Placement แล้วจากนั้น เราก็จะทำการประมาณสถานะที่เราไม่ได้วัดมา

Saturday, September 4, 2010

เช็คเน็ตหลุด?

ขั้นตอนการ เช็คว่าเน็ตหลุด?

หลายท่านคงเคยพบปัญหาในขณะเล่น  Internet อยู่ดีๆมันก็ช้าหรืออาจจะโหลดหน้าไม่ได้เลย  เราจะทราบได้อย่างไรว่าเน็ทเรามีปัญหาอะไรหรือเปล่าวเรามีวิธีการตรวจสอบง่ายๆ ดังนี้
ให้เข้าไปที่ start-->Run แล้วพิมพ์คำว่า cmd เราก็จะได้หน้าต่าง dos ขึ้นมา ดังรูปที่ 1


จากนั้นให้เราไปหา Default gateway โดยให้เข้าไปที่ Control panel-->Network connections แล้วDoubleClick ที่ Wireless Network  แล้วเลื่อกแทบ ด้านบนคำว่า support ดังรูปที่ 2


แล้วให้เราเลือกที่มีชื่อว่า Default gateway ซึ่งในที่นี้ของเรามีค่าเท่ากับ 172.16.1.1 แต่ความจริงแล้วแต่ระเครื่องไม่จำเป็นต้องเหมือนกัน หลังจากนั้นเราก็นำระหัส Default gateway ไปพิมพ์ลงในหน้าต่าง DOS ดังนี้

จากนั้นให้กด Enter
หมายเหตุ: หลังตัวเลขที่มี่เครื่องหมาย - ให้เรากด space bar หนึ่งครั้ง ห้ามติดกับหลังตัวเลข แล้วจได้ดังรูปด้านล่าง

รูปนี้บอกอะไรเรา
 จากรูถ้ามันขึ้นแสดงว่าเน็ตไม่หลุด เพราะมันมีการส่งและรับข้อมูลกันตลอดเวลา จะเห็นว่าเวลาในการรับส่งข้อมูลในแต่ละคำประมาณ 2-3 ms

แต่ถ้าเน็ตหลุด หรือมีปัญหาของสัญญาณ มันจะขึ้นว่า Request time out

Friday, September 3, 2010

Kalman Filter

              ตอนแรกเริ่มหัดใช้ Kalman filter นั้นไม่สามารถทำได้ เริ่มแรกผมใช้แบบจำลองทางคณิตศาสตร์ที่ได้จาก System identification ซึ่งอยู่ในรูปของระบบแบบต่อเนื่อง (Continuous system) แล้วก็ใช้แบบจำลองนี้นำไปหาค่าเกนและหา Plant ของ Kalman filter หลังจากนั้นก็นำไปทดลองจริงพบว่าผลที่ได้นั้นคนละเรื่องกันเลย

คือ เราสามารถวัดตำแหน่งได้ แต่เราต้องการประมาณความเร็วของมอเตอร์ ซึ่งมันไม่ได้อย่างที่เราคิดเลย แต่เมื่อเราค่อยๆคิด และลองนำแบบจำลองแปลงเป็น Discrete แล้ว ค่อยนำไปหา Kalman gain และ plant ของ Kalman พบว่าผลที่ได้นั้นเกือบเกือบจะเท่ากับของจริงที่วัดได้เลย จากการที่เราศึกษาเรื่อง Kalman filter จากที่ไม่เข้าใจเลยว่ามันทำงานอย่างไร จากการทดลองและศึกษา โดยใช้เวลาประมาณหนึ่งอาทิตย์ ผมก็ได้พบทางออกแล้วว่า Kalman filter นั้นสามารถทำงานได้ และทำงานได้อย่างมีประสิทธิภาพเป็นอย่างมาก โดยที่ไม่เปลือง memory ของเราเลย และผลที่ได้ก็เกือบเท่าของจริงที่วัดมาเลย
                ซึ่งสามารถเขียนขั้นตอนได้ดังนี้ เรามี Transfer function ของระบบเราก็แปลงให้เป็น State-space  โดยใช้คำสั่ง Gc=ss(A,B,C,D) ในโปรแกรม Matlab เมื่อเราได้แบบจำลองแบบ Continuous แล้วจากนั้นก็ใช้คำสั่ง Gd=c2d(Gc,Ts) ,Ts คือ Sampling time ของระบบ เราก็จะได้ปริภูมิสถานะของระบบที่เป็นแบบ discrete แล้วหลังจากนั้นแล้วก็หาค่าเกนของ Kalman filter โดยใช้คำสั่ง [kal,L,P,M]=kal(Gd,Q,R) ก็จะได้ Kalman gain M จากนั้นก็นำไปเขียน measurement update equation            
x[n|n]=x[n|n-1]+M(y[n]-x[n|n-1])
x[n|n-1] อ่านว่า ประมาณสเตท x ที่เวลา n โดยใช้ข้อมูลจากเวลา n-1
ซึ่งเรามีตัวแปรครบหมดและสามารถแทนเข้าไปสมการด้านบนครบหมด และต่อจากนั้นเราก็เขียนสมการ Time update
x[n+1|n]=Ax[n]+Bu[n]
 แล้วก็นำสมการนี้ไปเขียนในโปรแกรมต่างๆต่อไป เช่น Labview/Micro controller เป็นอันเสร็จสิ้นขบวนการประมาณสเตทโดยใช้ discrete Kalman Filter แบบ Linear

Inverted pendulum state feedback control