Slider[Style1]

Style2

Style3[OneLeft]

Style3[OneRight]

Style4

Style5[ImagesOnly]

Style6

Know2pro RFID Project ตอนที่ 19 : RFID Reader หน้าตาเหมือนกัน แต่การเอาไปใช้งานจริงไม่เหมือนกัน


Know2pro RFID Project ตอนที่ 19 : RFID Reader หน้าตาเหมือนกัน แต่การเอาไปใช้งานจริงไม่เหมือนกัน

เป้นเรื่องที่ผมคากคั้นเอามานานกับการทำให้ RFID Reader ราคาถูกแบบในภาพ อ่าน Tag ให้ได้หลายๆ TAG
หลักการคร่าวๆ คือ ใน VB จะมีคำสั่ง Request ซึ่งมีการกำหนดค่าไว้ว่าจะให้อ่าน Tag แบบอ่านทั้งหทดเลยหรือว่าอ่านเฉพาะ Tag ที่ไม่ได้ Halt ไว้

วิธีในการทำให้อ่านได้หลายๆ Tag จากที่ลองมาคือ กำหนดการ Request ให้เป้นอ่านเฉพาะ Tag ที่ไม่ได้ Halt แล้วหลังจากการอ่านค่าเสร้จเราก้ใส่คำสั่ง Halt ลงไป คราวนี้ถ้ามี Tag หลายๆ อัน มันก้จะอ่านทีละ Tag และทำการ Halt หลังทำงานจนเสร็จ ผลคือ  Tag ก้จะถูก Halt ไปทีละอันๆ อย่างนี้เรื่อยๆ จนครบ

คราวนี้พอถึงการทดลองกับ RFID Reader จริงๆ มันได้ผลที่น่าแปลกใจคือ ผมลองเขียนดค้ดขึ้น 1 โปรแกรม เอามาทดสอบกับ RFID Reader ทั้งสองตัว ปรากฎว่าผลที่ได้ไม่เหมือนกันเลย

RFID Reader ที่ยืมจากอาจารย์ รุ่น SL500L-0802 (Mar’ 07)

Know2pro RFID Project ตอนที่ 19 : RFID Reader หน้าตาเหมือนกัน แต่การเอาไปใช้งานจริงไม่เหมือนกัน

Know2pro RFID Project ตอนที่ 19 : RFID Reader หน้าตาเหมือนกัน แต่การเอาไปใช้งานจริงไม่เหมือนกัน

===========================================================

RFID Reader ที่ซื้อจากเว็ย Acentech เมื่อปีก่อน รุ่น CR500LR-I061230 (Dec’ 06)

Know2pro RFID Project ตอนที่ 19 : RFID Reader หน้าตาเหมือนกัน แต่การเอาไปใช้งานจริงไม่เหมือนกัน
Know2pro RFID Project ตอนที่ 19 : RFID Reader หน้าตาเหมือนกัน แต่การเอาไปใช้งานจริงไม่เหมือนกัน
เท่าที่ดูรุ่นก็พอจะเดาได้ว่าตัวไหนเก่า ตัวไหนใหม่
และผลจากการรันด้วยโปรแกรมเดียวกันคือ RFID Reader รุ่น SL500L อ่าน Tag ได้มากกว่า 3 Tag แบบสบายๆ จะวาง Tag Card ซ้อนกันทีเดียวมันก้ยังอ่านได้(ค่อนข้างแปลกใจ) แต่ในรุ่น CR500LR อ่าน 2 Tag ก็แทบจะไม่ไหว ถ้าวาง Tag ซ้อนกันก้จบเลย อ่านไม่ออกสักตัว

จริงๆแล้ว ผมก็นึกว่า RFID Reader ที่ใช้มาตรฐานเดียวกัน ภาาาเดียวกัน มันก้น่าจะเหมือนๆกันหมด แต่งานนี้ผมคงต้องมาคิดใหม่ซะแล้ว

ดูยังไงก็เหมือนกันจริงๆ ถ้าไม่นับเรื่อง Port USBKnow2pro RFID Project ตอนที่ 19 : RFID Reader หน้าตาเหมือนกัน แต่การเอาไปใช้งานจริงไม่เหมือนกัน

Know2pro RFID Project ตอนที่ 19 : RFID Reader หน้าตาเหมือนกัน แต่การเอาไปใช้งานจริงไม่เหมือนกัน

แกะมาดูก็คล้ายๆกัน แต่วงจรจะมีแตกต่างไปบ้าง
Know2pro RFID Project ตอนที่ 19 : RFID Reader หน้าตาเหมือนกัน แต่การเอาไปใช้งานจริงไม่เหมือนกันKnow2pro RFID Project ตอนที่ 19 : RFID Reader หน้าตาเหมือนกัน แต่การเอาไปใช้งานจริงไม่เหมือนกัน

เช้คสเปคดูก็รองรับมาตรฐานเดียวกัน

Know2pro RFID Project ตอนที่ 19 : RFID Reader หน้าตาเหมือนกัน แต่การเอาไปใช้งานจริงไม่เหมือนกัน

Know2pro RFID Project ตอนที่ 19 : RFID Reader หน้าตาเหมือนกัน แต่การเอาไปใช้งานจริงไม่เหมือนกัน

Know2pro RFID Project ตอนที่ 18 : บันทึกการทำงานกับ RFID ประจำเดือนมิถุนายน 2011


Know2pro RFID Project ตอนที่ 18 : บันทึกการทำงานกับ RFID ประจำเดือนมิถุนายน 2011

วันที่ 15

เอาโค้ดเดิมจาก KTG_VB03 มาลองปรับแต่ง function ต่างๆ ที่เห็นใน Datasheet พบว่าไม่ work เลย แก้ไป 2 ตัวคือ KTG_VB04 และ KTG_VB05

ลองมาแก้ใหม่ได้เป้น KTG_VB06 แต่ยังติดปัญหาว่าพอเอา RFID Reader สองตัวมาวางใกล้ๆกันแล้ววาง Tag ลงไป มันจะอ่านไม่ได้ แต่พอแยกกัน ก้ดันอ่านได้ซะงั้น

Know2pro RFID Project ตอนที่ 18 : บันทึกการทำงานกับ RFID ประจำเดือนมิถุนายน 2011

วันที่ 15 ช่วงบ่ายๆ

แก้ดค้ดงมอีกรอบ ได้เป็น KTG_VB07

จากไปเดียเดิมที่ว่าใช้ RFID ทำงานทีละชุดสลับกันไป ในโปรแกรมเราสั่งให้ Reader ทำงานสลับกันไปมาก้จริง แต่ว่าในการใช้คำสั่ง rf_ClosePort เป้นแค่การหยุดการติดต่อกับ Reader เท่านั้น แต่ตัว Reader ยังส่งคลื่น RF ออกมาจากตัวเครื่องอยู่

ทำให้เวลา Reader วางใกล้กันสองเครื่อง มันเลยอ่าน Tag ไม่ได้ เพราะคลื่นซ้อนกัน(น่าจะ) ดังนั้นก่อนจะใช้ rf_closeport เราก็ควรปิดหรือหยุดการส่งคลื่นของ Reader ตัวนั้นๆ ซะก่อน

คำสั่งคือ rf_antenna_sta(0,1) เปิดการทำงานของเสา Reader (Enable)
            rf_antenna_sta(0,0) ปิดการทำงานของเสา Reader (Disable)

พอใส่คำสั่งนี้แทรกลงไป ก้สามารถอ่าน Tag ได้ แม้ว่า Reader จะอยู่ใกล้กันก้ตาม

วันที่ 15 ช่วงดึก

ไฟล์ล่าสุดคือ KTG_VB08 ปรับปรุงจาก KTG_VB07 คือ เปลี่ยนการตั้งค่า Port จากเดิมที่ใส่เองในโค้ด  มาเป้นการใส่ผ่านเมนูการตั้งค่า คล้ายๆ เมนู Tool > Setup อะไรทำนองนั้น(ตอนนี้คิดได้แค่นี้)

ลองแล้วใช้ได้ แต่จะไม่มีการจำค่าเดิม เพราะไม่รุ้ว่าทำยังไง ตอนนี้ก็ลองใช้ไปก่อน

ใน KTG_VB07, KTG_VB08 ดูเหมือนจะมีปัญหาในการอ่าน Tag หลายๆ ตัวพร้อมกัน ตอนนี้เลยลองกลับมาแก้ KTG_VB03 ใหม่่ แล้วอัพเดตเป็น KTG_VB03.1 แทน (ตัวเก่า 3.0)
ปรับโค้ดให่อ่าน TAG ทีละ TAG แบบจับ TAG วางเอง

Know2pro RFID Project ตอนที่ 16 : บันทึกเรื่องคำสั่งการเขียนข้อมูลของ RFID Reader


301

บันทึกไว้เผื่อลืม เพราะตอนนี้ก้ยังงงๆ อยู่

การเขียนข้อมูลลง Tag Card (Mifare 1K 13.56MHz HF)

คำสั่งแรก ทำการตรวจเช็ค Key A และ Key B ก่อนการเขียนข้อมูลจริง

i = rf_M1_authentication2(0,b1,b3,buf1(0))

[IN] 0 คือ เลข icdev ของอุปกรณ์ปัจจุบันที่ติดต่ออยู่ใช้ค่า 0 (ศูนย์)
[IN] b1 คือ Cipher Key Validation Model (เลือกค่า Key ที่ใช้)
มี 0x60 คือ key A (ใช้ &H60)
   0x61 คือ key B (ใช้ &H61)
[IN] b3 คือ ตำแหน่ง Block ที่ต้องการเขียนมี 0-63 (จำนวนทั้งหมด 64 Block) เลือกเขียนได้ทีละ BLock เช่น 4 เป็นต้น

รูปประกอบถ่ายจากสมุดบันทึก

302

[IN] *pkey คือ Cipher Key Content ขนาด 6 byte น่าจะเอาไว้เข้ารหัสอะไรสักอย่าง

ต่อมาก็เริ่มเชียนข้อมุลลง Tag Card ด้วยคำสั่งนี้

i = rf_M1_write(0,b3,buf2(0))

0 คือ เลข icdev ของอุปกรณ์ปัจจุบันที่ติดต่ออยู่ใช้ค่า 0 (ศูนย์)
b3 คือ Block ที่ต้องการเขียนข้อมุล มีค่า 0-63 แต่ควรใช้ค่าตั้งแต่ 4 เป้นต้นไป เพราะจะได้ไม่ไปทับกับค่าที่มาจากโรงงาน
buf2(0) คือ ข้อมุลที่ต้องการเขียน *pData ทีค่า 16 byte ตรงนี้ก้ยังไม่รู้ที่มาว่ามาได้ยังไง

Know2pro RFID Project ตอนที่ 17 : ลืมนึกเรื่องขนาดของ RFID Tag ไปซะสนิท


Know2pro RFID Project ตอนที่ 17 : ลืมนึกเรื่องขนาดของ RFID Tag ไปซะสนิท

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

ก้คือ RFID มันใช้คลื่น RF ในการทำงานนั่นก้คือ ต้องมีการเหนี่ยวนำสัญญ่ณที่ส่งออกมาจาก Reader และ Tag ก็เหมือนกับเสาอากาศ ถ้าขนาดใหญ่มันก้รับสัญญาณได้ดี แต่ถ้าเสาเล็กก็รับไม่ได้ดี

Tag ที่ผมซื้อมาก้เหมือนกัน ดันลืมคิดเรื่องนี้ พอส่งของมาถึง แกะกล่ิงออกก็นึกขึ้นมาได้ แต่กสายไปซะแล้ว งานนี้จัดไป 800 กว่ายาท เพราะ Tag จาก thaieastelec ตอนนั้นราคามันประมาณ 60 บาทแพงเอาการ

พอเอามาลอง ก้เป้นไปตามที่คิด ระยะการอ่านสั้นลงแทบจะเอาตัว Tag ติดกับ Reader เลยทีเดียว งานนี้เสียดายนิดหน่อย แต่ก็ได้บทเรียนที่ดีมา คราวหน้าจะได้ตั้งสติดีๆก่อนซื้อของ

เพิ่มเติมกับลายวงจรข้างใน Tag ที่ซื้อมา ส่องผ่านแสงไฟ จะเห็นเสาและตัว Chip IC เล็กๆ ด้วย

ส่วนขนาดก็ประมาณยางลบตราม้าก่อนนึง

Know2pro RFID Project ตอนที่ 17 : ลืมนึกเรื่องขนาดของ RFID Tag ไปซะสนิท

Know2pro RFID Project ตอนที่ 17 : ลืมนึกเรื่องขนาดของ RFID Tag ไปซะสนิท

Know2pro RFID Project ตอนที่ 15 : บันทึกสรุปความแตกต่างระหว่างมาตรฐาน Mifare และ I.Code ของ RFID


Know2pro RFID Project ตอนที่ 15 : บันทึกสรุปความแตกต่างระหว่างมาตรฐาน Mifare และ I.Code ของ RFID

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

บันทึกสรุปความแตกต่างระหว่างมาตรฐาน Mifare และ I.Code ของ RFID

Mifare ตามาตรฐาน ISO 14443A
- หน่วยความจำมีหลายแบบ คือ Ultralight 512 Bits, Classic (แบบ Standard ทั่วไป) 1 K และ 4K หากเลือกแบบ 512 bits จะมีรูปแบบการจัดการหน่วยความจำแบบเดียวกับ I.Code
- Mifare Classic จะมีระบบรักษาความปลอดภัยของข้อมุลสุงกว่า I.Code และแบบ UltraLight โดยการใช้รหัส Key A/Key B และกำหนดการเข้าใช้งานด้วยการเข้ารหัสที่ AccessBit
- แยกหน่วยความจำออกเป็น Sector และ Block ทำให้แยกเก้บข้อมูลได้หลาย Application ในบัตรเดียวกันได้ ซึ่งแต่ละ Sector จะมีรหัส Key A/B ของตัวเอง
- ระยะการอ่านจะค่อนข้างใกล้(ขึ้นอยุ่กับขนาดของ RFID Reader ด้วย) คือ 0-5 cm แต่เสถียรกว่า I.Code ที่อ่านได้ไกลกว่า 0-100 cm
- ราคาถูกกว่ามาก เพราะนิยมใช้กันมาก
- อัตราการรับส่งข้อมูล 106 KBuad

I.Code ตามมาตรฐาน ISO15693
- มีหน่วยความจำให้เลือกใช้งานหลายแบบ 512, 1024, 2048 Bits และ Tags ที่ใช้ Chip ของ Infeneon จะมี 10K Bits แต่ราคาจะแพงกว่ามาก
- ระบบรักษาความปลอดภัยของข้อมูลจะใช้การป้องกันเพียงอ่านอย่างเดียว(Read Only) และ อ่าน/เขียน (Read/Write) ได้ ในแต่ละ Block เท่านั้น  หากกำหนดให้เป็น Read Only แล้วจะไม่สามารถกลับค่ามาเป็น Read/Write ได้อีก
- แยกหน่วยความจำออกเป็น Block ละ 4 Byte ซึ่งแต่ละ Block จะมีรหัส Lock ของแต่ละ Block
- ระยะการอ่าน 0-100 cm
- ราคราแพงเพราะใช้งานกันน้อยกว่า MiFare
- อัตราการส่งข้อมูล 53Kbit/Sec

คำศัพท์เฉพาะ
Bit Rate คือ จำนวน Bit ที่ช่องทางสามารถผ่านไปได้ภายใน 1 วินาที มีหน่วยเป้น bps (bit per second) หรืออัตราความเร็วการส่งผ่านข้อมูล

Data Rate คือ จำนวน Bit ของข้อมุลจริงที่ผ่านไปในช่องทาง Digital ปกติจะน้อยกว่า Bit Rate เนื่องจากจำนวน Bit ส่วนหนึ่งจะใช้ไปในส่วนหัว (Overhead) ของข่าวสารสำหรับการติดต่อระหว่างผู้ส่งและผู้รับ

Baud Rate คือ จำนวนสัญญาณ Digital หรือ Analog(ที่ถูกเปลี่ยนเป็น Digital แล้ว) ส่งผ่านไปใน Channel ภายใน 1 วินาทีมีหน่วยเป็น Buad per Second

Bit Rate = Baud Rate x Bit ใน 1 Baud 

Know2pro RFID Project ตอนที่ 14 : ได้เวลาลอง RFID Reader 2 ตัว


Know2pro RFID Project ตอนที่ 14 : ได้เวลาลอง RFID Reader 2 ตัว

กว่าจะหาช่วงเวลาทดลองได้ก้นานโข ตอนนี้พอมีเวลาแล้ว ก็จัดไปสักหน่อย

[บันทึกวันที่ 23-November-2010]
ทดลองวิธีการใช้ RFID Reader ต่อกัน 2 ตัว USB แล้วปรับโค้ดจากที่ได้มา ผลที่ได้คือ ใช้งานได้ แต่ยังไม่ได้ทดลองเรื่องระยะทางที่แน่นอนว่าได้เท่าไหร่ (ขอบเขตที่กำหนดไว้คือ 10 CM) และยังต้องออกแบบกล่อง การจัดวางตำแหน่งด้วย

ใช้ Timer ใน VB ทั้งหมด สามตัว

เขียนโค้ดติดต่อให้เป็น Function ชื่อ Connect_RFID_Reader ในโมดูลชื่อ mo_declare
และใช้ Timer ชื่อ Toker_Time เป็นตัวสลับ Port การติดต่อ Reader คล้ายๆกับการ Toggle ยกตัวอย่างเช่น สั่งให้ Toker_Time ทำงานทุกๆ 100 ms พอครบ 100 ms ก็จะทำงานเรียกให้ Reader Port 4 ทำงาน พอครบอีก 100 ms ก็สั่งให้ Reader Port 5 ทำงานสลับกันไปมาอย่างนี้เรื่อยๆ

วิธีนี้ได้มาจากโปรเจค RFID เก่า ของอาจารย์

และมี Timer ชื่อ Auto_Read เป้นตัวติดต่อกับ Tag แล้วเอาข้อมูลมาแสดงใน Data_Grid

ภาพที่ร่างเองคร่าวๆ ใช้เป้นไอเดียในครั้งต่อไป

Know2pro RFID Project ตอนที่ 14 : ได้เวลาลอง RFID Reader 2 ตัว

Know2pro RFID Project ตอนที่ 14 : ได้เวลาลอง RFID Reader 2 ตัว

Know2pro RFID Project ตอนที่ 14 : ได้เวลาลอง RFID Reader 2 ตัว

ภาพปัญหาเรื่องสัญญาณ

Know2pro RFID Project ตอนที่ 14 : ได้เวลาลอง RFID Reader 2 ตัว

Know2pro RFID Project ตอนที่ 14 : ได้เวลาลอง RFID Reader 2 ตัว

Know2pro RFID Project ตอนที่ 13 : ความท้าทายใหม่กับการเปลี่ยนมาใช้ RFID Reader 2 ตัว


Know2pro RFID Project ตอนที่ 13 : ความท้าทายใหม่กับการเปลี่ยนมาใช้ RFID Reader 2 ตัว
     หลังจากที่ทำให้เครื่องพอจะอ่าน เขียนได้บ้างแล้ว ปัญหาต่อไปคือ ระยะการอ่านที่ตอนเสนอโปรเจคแบบมึนๆ ในครั้งนั้นผมและเพื่อนจินตนาการเอาไว้ว่าน่าจะอ่านได้ในระยะตะกร้าร้าน 7-11 แต่พอคิดไปคิดมา เอาเป็นว่าทำเท่าที่ทำได้ไปก่อนละกัน

รายละเอียดเพิ่มเติม
- ทดสอบใช้งานโปรแกรม VB ติดต่อ RFID Reader 2 ตัวให้ทำงานร่วมกัน
- ใช้ Time Sharing ติดต่อพอร์ท USB
- คล้ายๆกับการเขียนโปรแกรม N ชุดตามจำนวน N เครื่อง

[บันทึกวันที่ 23-November-2010]
ทำระบบเพิ่มเติมในไฟล์ KTG_VB03/vbdemo2.vbp ที่ form ชื่อ frm_KTG001

ลองใช้งาน RFID Reader 2 ชุดแล้วเจอปัญหา Driver ใน XP และ Win7 รัน VB ไม่ได้
คือ เสียบ Reader ตัวใดตัวหนึ่งจะได้ Driver ชื่อ
“CP210X USB Composite Device”
แต่ถ้าเสียบ 2 ตัวจะได้
”CP2102 USB to UART Bridge Controller”

ปัญหาตอนนี้คือ Com Port หายไปไหนหว่า
พอมาลองใน Windows 7 ดันใช้ได้มี COm Port ออกมา
ก็เลยลองลง VB6 ใน Windows 7 ดู ลงเสร็จแล้ว Restart 1 ครั้ง

ลองใน Windows 7 ติดปัญหาเรื่อง Port เพราะลองรันโปรแกรมไปแล้ว ดันไม่เจอ Port เลยลองไปปรับค่า Bits per Second ใน Device Manager แล้วมาลองอีกที คราวนี้เจอพอร์ตแล้ว ได้เป็น COM4

โปรแกรมทดลองแล้วใช้ได้กับทั้ง 2 ตัว ลองเปลี่ยน COM ก็ยังใช้ได้

[บันทึกวันที่ 10-December-2010]
ลองติดต่อกับพี่เจมส์ที่รับทำโปรเจคที่กรุงเทพ
คุยกันแล้ว พี่เค้าบอกว่าใช้ RFID Reader 2 ตัวมาต่อด้วยกันไม่ได้ ต้องใช้แบบตัวเดียว แต่ราคาแพงมาก 30000 ขึ้นไป แพงโคตรๆ ถ้าจ้างให้ทำก็คิดไปอีก 30000 รวมแล้ว 60000 บาท ในใจคิดว่า พอเหอะ อย่าเลย
คอนเซปเดิมใช้ Reader 2 ตัว ทำงานด้วยกัน เพราะระยะทางในการอ่านเขียนแต่ละตัวไม่เท่ากัน แถมสั้นมากประมาณ 5 CM เลยกะว่าจะประกบคู่วางเอาไว้ขนานกัน

Know2pro RFID Project ตอนที่ 13 : ความท้าทายใหม่กับการเปลี่ยนมาใช้ RFID Reader 2 ตัว

[บันทึกวันที่ 11-December-2010]
ลองติดต่อกับพี่เจมส์ที่รับทำโปรเจคที่กรุงเทพ
ลองดูโค้ดอีกรอบ เจอส่วนที่น่าจะเป็นการติดต่อกับ Reader คือ icdev ที่เป็น parameter ของทุก function แต่ในโปรแกรมใส่ 0 เข้าไป ลองดูค่าอื่นแล้วไม่มีผลเลย

ใช้โปรแกรมที่แถมมากับแผ่น CD แล้วลองกดดู icdev ก็ได้ค่าเป็น 1112 ขึ้นไป เลยสงสัยว่าค่า icdev ที่ได้จากตรงนี้เอาไปใช้ในโปรแกรมได้หรือเปล่า ลองทดสอบดูก็ใช้ไม่ได้

ไฟล์ที่ทดลองอยุ่ใน KTG_VB04

สรุปคือ โค้ดที่เขียนเอง ใช้งานอะไรได้บ้าง
- หา Port เองอัตโนมัติ (ใช้การวนลูปง่ายๆ)
- อ่าน Tag แบบ Auto อันนี้ใช้ Timer ควบคุม
- ในการอ่าน 1 ครั้ง สามารถอ่าน TAG ได้มากกว่า 2 ชิ้น แต่อยู่กับการจัดวาง TAG ด้วย ถ้าทับกันมากๆ ก็อ่านไม่ได้
- ในการอ่าน 1 ครั้งจะอ่าน TAG แต่ละคัวแค่ครั้งเดียว ไม่มีการอ่านซ้ำ