ข้ามไปยังเนื้อหา

Barcode Scanner Emulator

เครื่องสแกนบาร์โค้ดทำงานอย่างไร

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

สี่ขั้นตอนของการสแกนบาร์โค้ด

1. การส่องสว่างและการจับภาพ

เครื่องสแกนเลเซอร์กวาดลำแสงไปบนบาร์โค้ดและวัดความเข้มของแสงที่สะท้อน เครื่องสแกนแบบภาพ (เครื่องสแกนมือถือสมัยใหม่ส่วนใหญ่และเครื่องสแกนด้วยกล้องโทรศัพท์) จับภาพ 2 มิติของบาร์โค้ดด้วยเซนเซอร์ CMOS ขนาดเล็ก คล้ายกล้องความละเอียดต่ำ

2. การถอดรหัส

เฟิร์มแวร์ในตัววิเคราะห์ความกว้างของแถบ (หรือภาพ 2 มิติสำหรับรหัส QR และ Data Matrix) แล้วถอดรหัสเป็นข้อมูลดิจิทัลเดิมด้วยอัลกอริทึมของสัญลักษณ์นั้น ๆ เช่น Code 128, Code 39, EAN-13, QR และอื่น ๆ ทั้งหมดนี้เกิดขึ้นภายในเครื่องสแกนก่อนที่ข้อมูลใดจะถึงคอมพิวเตอร์

3. การสื่อสาร

ข้อมูลที่ถอดรหัสแล้วถูกส่งไปยังคอมพิวเตอร์โฮสต์ การส่งมักเป็น USB และเครื่องสแกนสำหรับผู้บริโภคและอุตสาหกรรมส่วนใหญ่แสดงตัวต่อระบบปฏิบัติการเป็นแป้นพิมพ์ USB HID ไม่ใช่คลาส USB เฉพาะ เครื่องสแกนบางรุ่นรองรับโหมดอื่น เช่น USB serial (การจำลองพอร์ต COM) หรือ Bluetooth HID แต่โหมดจำลองแป้นพิมพ์เป็นค่าเริ่มต้นของเครื่องสแกนเกือบทุกรุ่นที่ขายในปัจจุบัน

4. อินพุตของแอปพลิเคชัน

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

เหตุใดเครื่องสแกนส่วนใหญ่จึงทำงานเหมือนแป้นพิมพ์

โหมดแป้นพิมพ์ HID เป็นการตั้งค่าเริ่มต้นของเครื่องสแกนบาร์โค้ดเชิงพาณิชย์เกือบทั้งหมด เพราะไม่ต้องติดตั้งไดรเวอร์ ระบบปฏิบัติการที่รองรับแป้นพิมพ์ USB จะรองรับเครื่องสแกนได้ทันทีที่เสียบ

การจำลองแป้นพิมพ์ USB หมายความว่าเฟิร์มแวร์ของเครื่องสแกนจับคู่อักขระที่ถอดรหัสแล้วกับรหัสแป้น USB HID ที่แป้นพิมพ์จะส่งสำหรับอักขระนั้น แล้วส่งรายงานแป้นพิมพ์ HID มาตรฐานผ่านเอนด์พอยต์อินเทอร์รัปต์ของ USB

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

ส่วนต่อท้าย ENTER และ TAB

เครื่องสแกนส่วนใหญ่ถูกตั้งให้ต่อท้ายข้อมูลที่ถอดรหัสแล้วด้วยการกดแป้น มักเป็น ENTER (carriage return, 0x0D) บางครั้งเป็น TAB (0x09) หรือลำดับที่กำหนดเอง เพื่อให้แอปพลิเคชันที่รับรู้ว่าค่าที่สแกนจบตรงไหนโดยไม่ต้องใช้หมดเวลา ส่วนต่อท้ายทำหน้าที่เป็นสัญญาณส่ง คล้ายการกด Enter หลังจากพิมพ์ในช่องข้อความ

จังหวะเวลาของเครื่องสแกน

เครื่องสแกนส่งข้อมูลบาร์โค้ดทั้งชุดภายในเวลาน้อยกว่าหนึ่งวินาทีมาก มักมีช่องว่างเพียงไม่กี่มิลลิวินาทีระหว่างอักขระ คนที่พิมพ์สตริงเดียวกันมักมีช่องว่าง 100–300 มิลลิวินาทีขึ้นไประหว่างการกดแป้น ความต่างของเวลานี้เป็นพื้นฐานของตรรกะ “ตรวจจับเครื่องสแกน” ในแอปพลิเคชัน POS และคลังสินค้าจำนวนมาก ซึ่งคอยดูการป้อนข้อมูลที่เร็วผิดปกติตามด้วยแป้นส่วนต่อท้ายทันที

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

ลองด้วยตัวเอง

ใช้ ตัวทดสอบอินพุตบาร์โค้ด สแกนบาร์โค้ดจริงแล้วดูค่าที่จับได้ จังหวะเวลา และการตรวจจับส่วนต่อท้ายแบบเรียลไทม์ หากต้องการเจาะลึกพฤติกรรม keyboard wedge ให้อ่าน คำอธิบาย HID keyboard wedge