การใช้ LabVIEW เพื่องานด้านวัดคุม

Supachai Vorapojpisut
2 min readNov 12, 2020

--

LabVIEW เป็นหนึ่งในซอฟต์แวร์สำหรับใช้สร้างระบบอัตโนมัติที่ได้รับความนิยมมากในอุตสาหกรรม เนื่องจากมีข้อดีหลายอย่างที่สอดคล้องกับวิศวกร เช่น มี GUI ที่สวยงาม ใช้งานง่าย และมีฟังก์ชันที่ครอบคลุมทั้งนำเข้า/ประมวลผล/บันทึกข้อมูล นอกจากนี้บริษัท National Instruments ที่เป็นผู้พัฒนาซอฟต์แวร์ LabVIEW ยังเป็นเจ้าใหญ่ในการขายฮาร์ดแวร์สำหรับระบบอัตโนมัติและอุปกรณ์ที่เชื่อมต่อกับคอมพิวเตอร์ จึงเป็น solution แบบครบวงจรในแง่ของการวัดคุมทางอุตสาหกรรมแม้ว่าราคาจะสูงไปบ้าง (อาจารย์ในมหาวิทยาลัยไทยนี่โคตรจนเลย) การตื่นตัวของมุมมองอุตสาหกรรม 4.0 ในประเทศไทยที่จะต้องก้าวออกจากอุตสาหกรรม 2.0 (เครื่องมือ/เครื่องจักรยังต้องสั่งการด้วยคน) รวมทั้งการรับรู้เกี่ยวกับ Industrial Internet of Things จึงทำให้การรู้เกี่ยวกับ LabVIEW ไว้บ้าง น่าจะเป็นประโยชน์กับคนในสายเทคโนโลยี แนวคิดสำคัญของ LabVIEW ได้แก่ dataflow programming และ data acquisition เป็นจุดแตกต่างจากการเขียนซอฟต์แวร์คอมพิวเตอร์ทั่วไป

การใช้งาน LabVIEW เบื้องต้น

โปรแกรมที่ถูกพัฒนาขึ้นด้วย LabVIEW จะเรียกว่า Virtual Instrument (ภาษาไทย เครื่องมือเสมือน) หรือ VI การพัฒนา VI จะแบ่งออกเป็น 2 เฟสหลักคือ

  1. การลากองค์ประกอบ (control = อินพุต, indicator = เอาต์พุต) มาสร้างเป็นส่วนติดต่อผู้ใช้ในหน้าต่าง Front Panel องค์ประกอบที่ลากเข้าสู่หน้าต่างนี้จะปรากฏเป็น block ในหน้าต่าง Block Diagram
  2. การลาก block สำหรับหน้าที่ต่างๆ (คำนวณ/ตรรกะ/ประมวลผล) มาเชื่อมจาก block ที่เป็นอินพุตไปยังเอาต์พุต เพื่อทำให้เกิดการทำงานต่างๆที่ต้องการ การเชื่อมต่อ block ในหน้าต่าง Block Diagram นี้มักจะลากจากซ้าย (นำเข้า) ไปทางขวา (ส่งออก)

การประมวลผลข้อมูลใน LabVIEW จะเป็น graphical programming ทั้งหมด โดยใช้รูปแบบการประมวลผลแบบ synchronous dataflow กล่าวคือ เมื่อข้อมูลอินพุตครบ ส่วน block นั้นจะทำงานและสร้างเอาต์พุตส่งต่อไปยัง block ถัดไป การมีลำดับของการประมวลผลที่อิงตามการไหลของข้อมูลทำให้ LabVIEW รองรับการประมวลผลแบบ concurrent ได้ โดยหากภายใน VI มีกลุ่มของ block ที่ไม่เชื่อมข้อมูลจะทำงานแยกจากกันทันที ซึ่งรายละเอียดว่ากลุ่ม block ไหนจะทำงานก่อนหรือหลังจะถูกซ่อนไว้ ในขณะที่การเขียนโปรแกรมแบบคอมพิวเตอร์ทั่วไป นักพัฒนาต้องไปทำความเข้าใจเกี่ยวกับการจัดลำดับงานของ OS และ API ที่เกี่ยวข้องก่อน จึงจะสามารถพัฒนาซอฟต์แวร์ที่ทำงานแยกออกจากกันได้ (multitasking)

VI ที่พัฒนาด้วย LabVIEW มักจะทำงานบนคอมพิวเตอร์หรือผลิตภัณฑ์ส่วนควบคุมที่บริษัท National Instruments ขาย เช่น MyRio, PXI โดยจะมีการเชื่อมต่อกับสัญญาณทางกายภาพผ่านอุปกรณ์ที่เรียกว่า Data Acquisition หรือ DAQ แนวคิดหลักของการพัฒนา VI คือ Acquire-Analysis-Present

  1. Acquire = การนำเข้าข้อมูลจาก DAQ ที่ทำหน้าที่แปลงมาจากสัญญาณไฟฟ้า
  2. Analysis = การประมวลผลข้อมูลตามลำดับของการไหลข้อมูล
  3. Present = การแสดงผลให้กับผู้ใช้ด้วยรูปแบบแผงหน้าปัทม์ รวมถึงการบันทึกไฟล์/ฐานข้อมูลและสื่อสารกับคอมพิวเตอร์ระบบอื่น

การทำงานตามกรอบแนวคิดนี้จึงแตกต่างจากการพัฒนาซอฟต์แวร์ทั่วไปที่เน้นการตอบโต้กับผู้ใช้ ซึ่งเน้นเขียนโค้ดให้ทำงานเพื่อตอบสนองต่อการสั่งการของผู้ใช้ ตัวอย่างเช่น เขียนโค้ด callback สำหรับปุ่มกด ซึ่งเมื่อผู้ใช้กดปุ่มก็จะไปเรียกใช้โค้ด callback โดยอัตโนมัติ ในขณะที่ส่วนโค้ด (block และการเชื่อมต่อ) ของ VI มักจะถูกสร้างในรูปแบบของ loop ซึ่งจะไปอ่านค่าจากปุ่มกดเมื่อทุกอย่างใน loop ทำงานเสร็จแล้ว

คลิปต่อไปนี้อธิบายการใช้ LabVIEW เพื่อสร้าง VI แบบง่ายเพื่อวัดและแสดงสัญญาณ โดยใช้ร่วมกับอุปกรณ์ USB-6008 ซึ่งเป็นฮาร์ดแวร์ DAQ ที่เชื่อมต่อกับคอมพิวเตอร์ทางพอร์ต USB โครงสร้างของ VI จะเป็น loop แบบง่าย โดยควบคุมจังหวะเวลาในการทำงานด้วย block Delay ที่จะหน่วงเวลาตามที่กำหนด

คลิปแรก การสร้าง VI

front panel และ block diagram — YouTube

คลิปที่สอง การสร้าง app loop

app loop — YouTube

คลิปที่สาม การใช้ NI myRIO

myRIO — YouTube

คลิปที่สี่ การใช้ LabVIEW ร่วมกับบอร์ดไมโครคอนโทรลเลอร์

การเชื่อมต่อบอร์ดไมโครคอนโทรลเลอร์ — YouTube

การประมวลผลข้อมูลด้วย LabVIEW

คนที่มีพื้นการเขียนโปรแกรมคอมพิวเตอร์บ้าง อาจจะงงหน่อยกับโครงสร้างของ VI ใน LabVIEW เพราะแนวคิดของ dataflow programming ที่แตกต่างจากการเขียนโค้ดในภาษาคอมพิวเตอร์อื่นๆ เช่น

  • ไม่ได้เขียนให้ทำงานทีละขั้น (sequential operation)
  • ไม่มีการประกาศตัวแปร
  • เขียน condition และ loop ด้วยการล้อมบล็อกที่เกี่ยวข้อง

ดังนั้นพอจะสร้าง VI ที่มีการประมวลผลแบบสมการ เช่น การทำ moving average ซึ่งจะต้องจำค่าในอดีตมาสะสมแล้วหารด้วยจำนวนข้อมูล อาจจะงงว่าแล้วจะสะสมค่าอย่างไร การเขียนโค้ดในรูปแบบนี้จะต้องเข้าใจ 2 ประเด็น

  1. การทำงานของบล็อกจะส่งค่าข้อมูลไปยังบล็อกถัดไป โดยหากอยู่ใน condition หรือ loop จะต้องต่อสายไปที่ขอบเพื่อส่งค่าออกมา
  2. การส่งค่าจาก loop ปัจจุบันไป loop ที่จะทำงานถัดไป จะต้องใช้ shift register ซึ่งเมื่อต่อสายเข้ากับ shift register ที่อยู่ขอบ loop ทางขวา จะทำให้ค่าข้อมูลส่งไปปรากฏที่ shift register ทางฝั่งซ้ายที่จะถูกประมวลผลรอบถัดไป

ดังนั้นเราจึงเขียนโค้ดที่คำนวณค่าในอดีตใน LabVIEW ได้ โดยไม่ต้องใช้การประกาศตัวแปร global หรือ static ที่พบกันในกรณีของภาษาคอมพิวเตอร์ทั่วไป ตัวอย่างที่ 4 จะเป็นการสาธิตการใช้ shift register เพื่อคำนวณ moving average ซึ่งเป็นเทคนิคประมวลผลสัญญาณขั้นพื้นฐานเพื่อลดทอนสัญญาณรบกวน นอกจากนี้ ตัวอย่างที่ 5 จะสาธิตการสร้าง array โดยการสะสมข้อมูลในส่วน shift register เพื่อบันทึกข้อมูลลงในไฟล์ ซึ่งเป็นอีกรูปแบบที่พบได้ในการทำงานทั่วไป

คลิปที่ 5 ตัวอย่างใช้ shift register

shift register — YouTube

ในอีกมุมมองหนึ่ง LabVIEW เองจะมีบล็อกสำหรับการคำนวณหลายรูปแบบ ซึ่งการประมวลผลสัญญาณเป็นส่วนหนึ่งของไลบรารีของ LabVIEW อยู่แล้ว เราจึงสามารถใช้บล็อกในกลุ่มนี้ได้โดยไม่ต้องไปสร้างการเชื่อมต่อบล็อกที่ซับซ้อนเพื่อคำนวณทางคณิตศาสตร์ ตัวอย่างที่ 6 จะเป็นการสาธิตวิธีนำ filter มากรองสัญญาณรบกวน ซึ่งเราสามารถปรับแต่งการทำงานของ filter ได้จาก GUI เลย

คลิปที่ 6 การใช้บล็อกในกลุ่ม signal processing

signal processing — YouTube

ตัวอย่างอื่นๆ สามารถเช็คได้จาก playlist บน YouTube

終わりに (ในตอนท้าย)

โพสต์นี้เดิมเผยแพร่ใน FB Page TENSAILAB.at.TU เมื่อปี 2017 แล้วมาปรับเป็นบล็อก เพราะผมค่อนข้าง ok กับการพิมพ์ story ใน medium มากกว่า ผมวางแผนจะอัพเดทเนื้อหาเป็น LabVIEW Community Edition ซึ่งจะมีสไตล์การเขียน VI ที่ปรับเปลี่ยนไปพอสมควร

--

--

Supachai Vorapojpisut
Supachai Vorapojpisut

Written by Supachai Vorapojpisut

Assistant Professor at Thammasat University

No responses yet