|
|
 |
|
| |

เขียนโปรแกรมควบคุม
LPT Port ด้วย Labview และควบคุมผ่านอินเตอร์เน็ตสำหรับผู้เริ่มต้น
เขียนโดย อ.จักรกฤษณ์ แสงแก้ว สาขาสารสนเทศศาสตร์ คณะวิทยาการสารสนเทศ มหาวิทยาลัยมหาสารคาม
Labview เป็นโปรแกรมซึ่งถูกออกแบบให้นักพัฒนาสามารถพัฒนาแอพลิเคชั่นด้วยไมโครคอมพิวเตอร์
โดยเพิ่มขีดความสามารถในด้านต่าง ๆ โดยเฉพาะเรื่องอิมเมจโปรเซสซิ่ง ซึ่งไม่สามารถอิมพลิเมนต์ได้อย่างง่ายดายหากยังคงใช้ไมโครคอนโทรลเลอร์ระดับล่าง
เช่น MCS-51, PIC16Fxxx เป็นต้น
จุดประสงค์ของบทความนี้
ผู้เขียนต้องการให้ท่านสามารถสร้างแอพลิเคชั่นซึ่งควบคุม LPT Port ได้
เมื่อท่านพิจารณาจากภาพด้านล่างซึ่งเป็นกราฟิกอินเตอร์เฟสที่เราจะอิมพลิเมนต์
(สร้าง) ท่านจะพบกว่ามีส่วนรับข้อมูลตัวเลขสองค่า คือ ส่วนของการกำหนดหมายเลขพอร์ต
ซึ่งหมายเลขพอร์ตของ LPT คือ 0x378 (อยู่ในรูปฐานสิบหก) หรือตรงกับเลข 888
(ในระบบเลขฐานสิบ)
ในขณะที่ตัวเลขอันที่สองคือ "ค่าที่ต้องการส่ง" หมายถึงตัวเลขที่ผู้ใช้ต้องการส่งไปยังพอร์ตที่กำหนดไว้ในตอนต้น
ซึ่งในตัวอย่างนี้กำหนดไว้ที่พอร์ต 0x378 เราสามารถเปลี่ยนแปลงค่าที่ต้องการส่งไปยังพอร์ตได้โดยค่าดังกล่าวอยู่ในช่วง
0-255

ผู้เขียนตั้งจุดประสงค์เชิงพฤติกรรมว่า.. เมื่อท่านศึกษาจบบทความชุดนี้จะสามารถสร้างแอพลิเคชั่นควบคุมพอร์ตปริ้นเตอร์ด้วย
Labview ได้
เข้าสู่โปรแกรม Labview
ผู้เขียนอนุมานว่าท่านได้ติดตั้งโปรแกรม Labview เอาไว้เรียบร้อยแล้ว ขอให้ท่านเข้าสู่โปรแกรม
Labview ด้วยการเลือกไอคอน ดังภาพต่อไปนี้

ผลลัพธ์จากการเลือกไอคอนด้านบนแสดงได้ดังภาพต่อไปนี้
สร้างโปรเจ็คใหม่
บทความนี้เราจะสร้างโปรเจ็คใหม่ ให้ท่านเลือก New จากภาพด้านบน
เมื่อเลือกหัวข้อดังกล่าวแล้ว จะปรากฎผลลัพธ์ดังภาพต่อไปนี้

ขอให้ท่านเลือก Blank VI เพื่อบอก Labview ว่าเป็นการสร้างโปรเจ็คว่างเปล่า
เมื่อพร้อมแล้วให้ท่านคลิ๊กปุ่ม OK
หน้าจอหลักของ Labview
ถ้าท่านเคยเขียนโปรแกรมประเภท RAD (Rapid Application Development) เช่นโปรแกรมวิชวลเบสิก,
Visual C/C++, Delphi, Borland ท่านจะพบว่าโปรแกรมเหล่านั้นใช้ภาพกราฟิกร่วมกับการเขียนโปรแกรม
ซึ่ง Labview เป็นแอพลิเคชั่นที่อยู่ในกลุ่มเดียวกันนี้ด้วย !!
ภาพต่อไปนี้แสดงหน้าจอหลักของโปรแกรม Labview ในการพัฒนาแอพลิเคชั่นทั้งหมด
ท่านจะต้องทำการวาดอ็อบเจ็คต่าง ๆ ลงบนกรอบสี่เหลี่ยมด้านล่างนี้เพื่อทำให้เกิดแอพลิเคชั่นของท่าน

การใช้งาน Controls Palette
ก่อนอื่นผู้เขียนขอให้ท่านเลือกเมนู Show Controls Palette จากเมนู Window
ดังภาพต่อไปนี้

ผลลัพธ์จากการเลือกเมนูดังกล่าวจะปรากฎไดอะล็อกดังภาพต่อไปนี้
เครื่องมือต่าง ๆ เหล่านี้จะถูกแบ่งเป็นกลุ่ม ๆ ได้แก่
- Num Ctrls สร้างคอนโทรลเกี่ยวกับระบบตัวเลข
- Buttons สร้างปุ่ม
- Text Ctrls สร้างเท็กซ์
- User Ctrls คอนโทรลซึ่งสร้างจากผู้ใช้เอง
- Num Inds แสดงผลตัวเลขในรูปต่าง ๆ
- LEDs แสดงผลเป็นหลอดไฟ LED
- Text Inds แสดงผลเป็นข้อความเท็กซ์
- Graph Inds แสดงผลเป็นกราฟ
- All Controls แสดงคอนโทรลทั้งหมด
วางอุปกรณ์ต่าง ๆ ลงบนพื้นที่ทำงาน
ตอนนี้เรากำลังจะสร้างส่วนรับข้อมูลตัวเลข ขอให้ท่านเลือกที่ Num Ctrls ดังภาพต่อไปนี้

ภายในกลุ่มของ Num Ctrls ประกอบด้วยคอนโทรลต่าง ๆ ดังต่อไปนี้

รายละเอียดคอนโทรลแต่ละตัวผู้เขียนขอละไว้ ขอให้ท่านศึกษาเพิ่มเติม
ในตัวอย่างนี้ขอให้ท่านลากเลือกไอคอน Num Ctrl ไปไว้ยังกรอบพื้นที่ทำงาน

ผลลัพธ์จากการลาดไอคอนแสดงได้ดังนี้

จากภาพนี้เป็นการกำหนดส่วนรับข้อมูลตัวเลข สองชุด ซึ่งชุดด้านบนจะกำหนดเป็นหมายเลขพอร์ตพรินเตอร์
และส่วนที่สองด้านล่างเป็นตัวเลขที่จะป้อนเข้าสู่พอร์ตดังกล่าว
แก้ไขข้อความของ Numeric Control (Num Ctrl)
ลำดับต่อไปเราจะทำการแก้ไขข้อความคำว่า Numeric1 และ Numeric 2 ให้เป็นคำว่า
"หมายเลขพอร์ต" และ "ค่าที่ต้องการส่ง" เราต้องเลือกเท็กซ์ไอคอน
ซึ่งอยู่ภายใต้เมนู Window -> show Tools Palette

เมื่อเลือกหัวข้อดังกล่าวแล้วจะปรากฎ Tools สำหรับใช้แก้ไขอ็อบเจ็คต่าง ๆ
ได้ดังภาพต่อไปนี้

ให้ท่านเลือกเท็กซ์ไอคอน (รูปตัว A)

จากนั้นคลิ๊กเข้าไปแก้ไขข้อความต่าง ๆ ให้ได้ดังภาพต่อไปนี้

ภาพด้านบนแสดงการแก้ไขข้อความให้ตรงตามที่ต้องการ
ตอนนี้คอนโทรลของเราอยู่ในหมวด Numeric Controls ขอให้ท่านคลิ๊ก ที่ลูกศรชี้ขึ้นเพื่ออัพขึ้นไปหนึ่งระดับ

จากนั้นเลือกไอคอน All Controls ดังภาพต่อไปนี้

การกำหนด Port I/O ลงบน Block Diagram
ขั้นตอนต่อไปเราจะทำการเชื่อมโยงอุปกรณ์ IO เชื่อมเข้ากับคอนโทรลทั้งสองที่ได้สร้างเอาไว้ในตอนต้น
ขอให้ท่านเลือก Window -> Show Block Diagram ดังภาพต่อไปนี้

ในขั้นตอนนี้ท่านจะพบกว่าในมุมมองของ Block Diagram ประกอบด้วยอ็อบเจ็คสองชิ้น
คือ "หมายเลขพอร์ต" และ "ค่าที่ต้องการส่ง" ซึ่งทั้งสองแยกจากกันเป็นอิสระ
เราจะทำการนำอ็อบเจ็คอีกตัวหนึ่งใส่ลงไปใน Block Diagram นั่นคือ Port I/O

อ็อบเจ็ค Port I/O อยู่ในหมวด All Functions ให้ท่านคลิ๊กเลือกไอคอนดังกล่าวซึ่งแสดงดังนี้

เมื่อเข้ามายัง All Functions ท่านจะพบอ็อบเจ็คอีกจำนวนมาก ดังภาพต่อไปนี้
ผู้เขียนยังไม่ต้องการให้ท่านสนใจอ็อบเจ็คต่าง ๆ เหล่านี้ เพราะอาจทำให้ท่านเกิดการเรียนรู้ที่ไม่เป็นระบบระเบียบและอาจทำให้เกิดความสับสนได้
ดังนั้น ขอให้เลือกไอคอนดังต่อไปนี้

เมื่อท่านเข้าสู่ไอคอน Advaned จะพบกับอ็อบเจ็คอีกหลายดังภาพต่อไปนี้

ขอให้ท่านเลือกอ็อบเจ็ค IC (Integrated Circuit) ดังภาพต่อไปนี้

ภายในอ็อบเจ็ค IC ท่านจะพบไอซีสีเขียวสองตัว คือไอซีสำหรับทำหน้าที่เป็น
Input และ Output ตามลำดับ

ขอให้ท่านเลือกไอซี Output ซึ่งมีลูกศรชี้เข้าไปในไอซีดังภาพต่อไปนี้

// ท่านอาจสับสนว่าทำไม Output ไม่เป็นลูกศรชี้ออก IC แต่กลับเป็นชี้เข้าไปยังตัว
IC ถ้าตามความคิดของผู้เขียน หมายความว่า เรากำลังส่งข้อมูลไปให้กับคอนโทรลเลอร์ซึ่งแสดงได้ด้วยไอซี
ซึ่งไอซีที่ใช้ในการอินเตอร์เฟสจึงถูกมองว่าเป็นไอซีจากระบบภายนอกคอมพิวเตอร์
ขอให้ท่านลากไอซีดังกล่าวลงใน Block Diagram ดังภาพต่อไปนี้

เชื่อมโยงความสัมพันธ์ระหว่างอ็อบเจ็คต่าง ๆ
ขอให้ท่านเลือกไอคอน สำหรับเชื่อมโยงความสัมพันธ์ระหว่างอ็อบเจ็คต่าง
ๆ เข้าด้วยกัน และลากจากไอคอน "หมายเลขพอร์ต" ไปยังไอซี Port I/O
และอีกเส้นหนึ่งคือ ลากจาก "ค่าที่ต้องการส่ง" ไปยัง Port I/O
เช่นกัน ผลลัพธ์จากการลากเส้นเชื่อมเข้าด้วยกันแสดงได้ดังภาพต่อไปนี้

การกำหนดคุณสมบัติต่าง ๆ ให้กับอ็อบเจ็ค
ขั้นตอนนี้เป็นการกำหนดคุณสมบัติให้กับ "หมายเลขพอร์ต" ให้ท่านคลิ๊กขวาเลือก
Properties ดังภาพต่อไปนี้

เลือกแท็บ Data Range จากนั้นคลิ๊ก Representation และเลือก I16 ดังภาพต่อไปนี้

ในขณะที่ Devault Value ให้กำหนดเป็น 888 (เลขฐานสิบ) ซึ่งตรงกับ 0x378 เลขฐานสิบหก
นอกจากนั้นให้ท่านกรอกรายละเอียดค่า Minimum และ Mazimum ลงไปด้วย ซึ่งตอนนี้เราป้อนเป็น
888 เพราะไม่ต้องการให้ผู้ใช้เปลี่ยนหมายเลขพอร์ตของเรา เนื่องจากต้องการควบคุมเฉพาะ
LPT Port เท่านั้น

เลือกแท็บ Format and Precision เป็น hexadecimal (แสดงเลขฐานสิบหก)

ในทำนองเดียวกัน ให้ท่านคลิ๊กขวา ที่อ็อบเจ็ค "ค่าที่ต้องการส่ง"
เลือก Properties และกำหนดค่า ดังภาพต่อไปนี้

ภาพด้านบนนี้เรากำหนด Default value เป็น 0 เนื่องจากต้องการให้รันโปรแกรมในครั้งแรกให้มีค่า
0 แสดงไปยัง LPT Port ในขณะที่ Minimum และ Maximum เรากำหนดให้อยู่ในช่วง
0 ถึง 255 นอกจากนั้นระดับการเพิ่มจำนวน (Increment) เรากำหนดเป็น 1 คือให้เพิ่มขึ้นทีละหนึ่ง
ในทำนองเดียวกัน ให้ท่านเลือกแท็บ Format and Precision ของไอคอน "ค่าที่ต้องการส่ง"
ตามภาพต่อไปนี้

การนำเกจแสดงระดับข้อมูลลงบนพื้นที่ทำงาน (Front Panel)
เมื่อท่านเลือกกลับมายัง Front Panel จะพบว่ามีอ็อบเจ็คสองตัวเช่นเดิม แต่ภายใน
Block Diagram ประกอบด้วยอ็อบเจ็คสามตัว กล่าวคือเพิ่ม Port I/O เ้ข้ามาอีกหนึ่งอัน

ในลำดับต่อไปเราจะทำการวางเกจเพื่อแสดงระดับเลขจำนวนเต็มที่ป้อนไปยัง พอร์ตพริ้นเตอร์
ขอให้ท่านเลือก Num Inds

ท่านจะพบเกจแสดงระดับต่าง ๆ หลายแบบ ดังภาพต่อไปนี้
ให้ท่านเลือกเกจตามภาพด้านล่างนี้ (ถ้าท่านศึกษาบทความนี้จบแล้ว ท่านสามารถเลือกเกจที่ท่านพึงพอใจได้
โดยไม่ต้องทำตามบทความชุดนี้ แต่ในตอนนี้ขอให้ท่านทำตามลำดับที่ผู้เขียนได้เรียบเรียงไว้
เพื่อให้เกิดการเรียนรู้ที่รวดเร็ว)

การกำหนดคุณสมบัติให้กับเกจแสดงข้อมูล
เมื่อท่านนำเกจดังภาพด้านบนลากลงไปยังกรอบพื้นที่ทำงานเรียบร้อยแล้ว ลำดับถัดไปเราต้องการตั้งค่าต่าง
ๆ ให้กับเกจ ขอให้ท่านคลิ๊กขวาที่เกจเลือก Properties ดังภาพต่อไปนี้

ขอให้ท่านเลือกแท็บ Data Range จากนั้นคลิ๊ก Representation และเลือก I16
ดังภาพต่อไปนี้

ในขณะที่ค่าอื่น ๆ ให้กำหนดตามภาพต่อไปนี้

จากภาพด้านบนเรากำหนดค่า Default Value เป็น 0 เพื่อให้เกจเริ่มต้นตั้งไว้ที่
0 เมื่อแอพพลิเคชั่นที่สร้างขึ้นเริ่มต้นทำงาน
ในขณะที่ค่าต่ำและสูงสุดอยู่ในช่วง 0-255 ลำดับการเพิ่มกำหนดเป็น 1 คือเพิ่มได้ทีละหนึ่ง
ในขณะที่แท็บ Scale ให้ท่านกำหนดค่าสูงสุดและต่ำสุดไว้ที่ 0 และ 255 ตามลำดับ

เชื่อมโยงความสัมพันธ์ระหว่างอ็อบเจ็คทั้งหมดใน Block Diagram
ขั้นตอนถัดมาเป็นการเชื่อมต่อสายสัญญาณเข้าด้วยกัน ขอให้ท่านกลับมาที่ Block
Diagram
จากนั้นใช้ไอคอน
เพื่อทำการเชื่อมโยงความสัมพันธ์ระหว่างอุปกรณ์เข้าด้วยกัน ดังภาพต่อไปนี้

โปรแกรมเสร็จเรียบร้อย ขั้นต่อไปทำการเอ็กซีคิวส์ (Execute)
การเอ็กซีคิวส์ คือการที่ระบบเริ่มทำงาน ขั้นตอนนี้อาจเรียกว่าการรันแอพลิเคชั่นได้เช่นกัน
(run) ขอให้ท่านคลิ๊กไอคอน
เพื่อรันแอพลิเคชั่นที่ได้ออกแบบไว้ในตอนต้นแล้วสังเกตการทำงานของแอพลิเคชั่นของท่าน
ผลลัพธ์จากการเอ็กซีคิวส์
ผลลัพท์ที่ได้จากการเอ็กซีคิวส์ แสดงได้ดังภาพต่อไปนี้

ท่านสามารถเลือกปรับค่าที่ช่อง "ค่าที่ต้องการส่ง" ตามที่ท่านต้องการแต่ทั้งนี้ค่าดังกล่าวต้องอยู่ในช่วง
0-255 เท่านั้น หากท่านป้อนค่านอกเหนือข้อกำหนด โปรแกรมจะกำหนดให้เป็นค่า
0 หรือ 255 ไม่เกินนั้น
ผลลัพธ์ในรูปฮาร์ดแวร์
ผลลัพธ์จากการควบคุมโปรแกรมซึ่งสร้างขึ้นด้วย Labview สามารถแสดงสถานะของพอร์ต
LPT ได้ดังภาพต่อไปนี้

ภาพด้านหน้าและด้านบนของพอร์ต LPT ซึ่งควบคุมโดยโปรแกรม Labview
การเปิดให้บริการเว็บเซอร์วิสเพื่อควบคุม LPT Port
ในการให้บริการควบคุม Labview ผ่านอินเตอร์เน็ต ถ้าหากเครื่องของท่านติดตั้งโปรแกรมประเภทเว็บเซิรฟ์เวอร์
ท่านต้องหยุดการให้บริการเซอร์วิสเหล่านั้นก่อน จากนั้นให้ท่านเลือกเมนู
Tools -> Web Publishing Tools.. ดังภาพต่อไปนี้

หลังจากที่เลือกเมนูดังกล่าวจะปรากฎหน้าจอวินโดวส์ดังนี้

ในวินโดวส์นี้ประกอบด้วยค่าต่าง ๆ ดังต่อไปนี้
Document Title : กำหนด title ของเอกสาร HTML
Header : กำหนด Header ของเอกสาร HTML
VI Name : ชื่อไฟล์โปรเจ็คที่รันโดย Labview
Viewing Options : ตัวเลือกที่อนุญาตให้ผู้ใช้ควบคุม
ประกอบด้วย
- Embedded : ให้ผู้ใช้ควบคุมโปรแกรมผ่านเว็บบราวเซอร์
- Snapshot : ให้ผู้ใช้เห็นเพียงภาพเท่านั้น
แต่ไม่สามารถควบคุมการใช้งานได้
Footer :
หลังจากนั้นให้ท่านเลือก Save To Disk และตั้งชื่อเอกสาร HTML ในตัวอย่างนี้ตั้งชื่อว่า
"Outport" ดังภาพด้านล่าง
ภายหลังจากบันทึกไฟล์ HTML แล้วให้ท่านเลือก Connect ดังภาพต่อไปนี้
ผลลัพธ์จากการควบคุมผ่านเว็บบราวเซอร์ (web browser)
ให้ท่านเปิดบราวเซอร์และพิมพ์ URL และตามด้วยชื่อไฟล์ HTML ที่ได้บันทึกไว้แล้วในตอนต้น
โดยชื่อเซิรฟ์เวอร์ขึ้นอยู่กับคอมพิวเตอร์ท่าน ตัวอย่างนี้ชื่อคอมพิวเตอร์
คือ ccs.mshome.net ซึ่งเมื่อแอพลิเคชั่นทำงานจะปรากฎผลลัพธ์ดังภาพต่อไปนี้
เมื่อมีการเปลี่ยนแปลงข้อมูลภายในช่อง "ค่าที่ต้องการส่ง" จะส่งผลให้เกิดการเปลี่ยนแปลงที่เกจแสดงระดับของค่าข้อมูล
ในขณะที่พอร์ต LPT ของเครื่อง Server จะเปลี่ยนแปลงดังภาพต่อไปนี้

ภาพข้อมูลจากพอร์ตพรินเตอร์ซึ่งเชื่อมต่ออยู่กับเครื่องพรินเตอร์ขึ้นอยู่กับข้อมูลที่ผู้ใช้ป้อนผ่านหน้าเว็บเพจ
!!
สรุป
บทความนี้ทำให้ท่านเข้าใจการเขียนโปรแกรมแนวใหม่เพื่อควบคุมระบบการผลิตโดยใช้
Labview ท่านสามารถควบคุมอุปกรณ์ต่าง ๆ เหล่านั้นได้อย่างสะดวกและง่ายดาย
นอกจากนั้น ภายในโปรแกรม Labview ยังมีโมดูลต่าง ๆ อีกมากมายให้ท่านศึกษาและใช้งาน
ผู้เขียนหวังว่าบทความนี้จะช่วยกระตุ้นให้เกิดการเรียนรู้ของเยาวชนในชาติไทยได้บ้าง
ขอขอบพระคุณเว็บมาสเตอร์ที่เอื้อเฟื้อพื้นที่ในการจัดเก็บบทความ และขอบคุณทุก
ๆ ท่านในเว็บ Electoday.com ครับ !!
|
|
|

|
|