|
ก่อนที่จะทำการเข้าสู่ภาคปฏิบัติ หากท่านยังไม่เข้าใจในหลักการของ RFID (Radio Frequency Identification) ควรจะต้องไปศึกษาจากตอนแรก การเชื่อมต่อคอมพิวเตอร์กับ RFID ภาค 1 (ทฤษฎี และ รูปแบบข้อมูล) ก่อนด้วยล่ะครับ บทความสำหรับตอนนี้แอดมินจะว่าถึงภาคปฏิบัติ และปฏิบัติโดยที่ไม่จำเป็นต้องมีการเชื่อมต่ออุปกรณ์ RFID ใดๆเลยก็ได้ เพราะจะอาศัยการอ่านค่าจากความยาวของข้อมูลอินพุทที่เราสมมุติมันขึ้นมา ในตัวอย่างนี้จะใช้ขนาด 16 ไบต์ โดยที่จะมี Start Of Text (STX) ขนาด 1 ไบต์ ตามด้วยข้อมูลขนาด 12 ไบต์ (ไม่มีการตรวจสอบความถูกต้อง หรือ Check Sum) และปิดท้ายด้วยรหัส <0D><0A><03> อีกจำนวน 3 ไบต์ ...
ข้อมูลตัวอย่างที่ดูจาก Data Sheet ของ ID20 ...
การทำสอบ ให้ลองคีย์ค่าข้อมูลจำนวน 16 หลัก (ไบต์) เช่น x1234567890ABxxx หรือ 0123456789123456 เอาไว้ใน Notepad ซ่ะก่อน จากนั้นให้คัดลอกไปวางแปะในช่อง TextBox ในตัวโปรแกรม ...
เริ่มต้น ...
หน้าจอ Design Time จากเมนู Project --> Components ... เลือก Tool เข้ามาตามภาพ
การเริ่มต้นการทำงาน (Initialized Port)
- ' / --------------------------------------------------------------------------------
- ' / ตั้งค่าเริ่มต้นให้กับ Port ก่อน
- Function InitializePort() As Boolean
- ' / ผมทำเป็นฟังค์ชั่น (เสมอ) เพราะบางครั้งก่อนทำงานจริงต้องตรวจสอบความพร้อม ...
- ' / ของพอร์ทที่ใช้งานด้วย หาก Return ค่ากลับเป็น False ก็ต้องหยุดการทำงานไว้ก่อน
- ' / --------------------------------------------------------------------------------
- On Error GoTo ErrHandler
-
- With MSComm1
- ' / ทดสอบก่อนว่า Port เปิดใช้งานหรือไม่ หากเปิดไว้ก็ให้ปิด Port ก่อน
- If .PortOpen Then .PortOpen = False
-
- ' / ตั้งค่า Port ที่ต้องการ
- .CommPort = 1
-
- ' / ตั้งค่า Baud Rate, Parity, Data Bits, Stop Bits (Standard)
- .Settings = "9600,N,8,1"
-
- ' / ตั้งสถานะในการ Hand Shaking ของ DTR and RTS (การตรวจสอบความถูกต้องการรับ - ส่ง)
- '.DTREnable = True
- '.RTSEnable = True
- ' / ========================================
- ' / สั่งให้ Enabled เหตุการณ์ในการรับข้อมูลทุกๆ Character
- .RThreshold = 1
- ' / ========================================
- ' / Disable เมื่อส่ง Characters
- '.SThreshold = 0
-
- ' / เปิด Port
- .PortOpen = True
- InitializePort = True
-
- End With
- ExitProc::
- Exit Function
-
- ErrHandler:
- MsgBox Err.Number & " : " & Err.Description
- InitializePort = False
-
- End Function
คัดลอกไปที่คลิปบอร์ด
การรับข้อมูลเข้ามาตามหมายเลข COM Port
- ' / --------------------------------------------------------------------------------
- ' / เหตุการณ์เกิดการรับข้อมูลเข้ามาผ่านทาง Serial Port - COM ในลักษณะของ Interrupt
- Private Sub MSComm1_OnComm()
- ' / --------------------------------------------------------------------------------
-
- With MSComm1
- ' / ทดสอบเกิดเหตุการณ์เข้ามาของข้อมูล (Received)
- Select Case .CommEvent
- Case comEvReceive ' หรือ มีค่าเท่ากับ 2
-
- ' / แสดงข้อมูล เมื่อมีการรับข้อมูลเข้ามา
- txtTagID.Text = txtTagID.Text & MSComm1.Input
-
- End Select
-
- End With
- End Sub
คัดลอกไปที่คลิปบอร์ด- ' / --------------------------------------------------------------------------------
- ' / การนำมาใช้ใน Timer เพราะจังหวะของการอ่านมันคงที่กว่าครับ
- Private Sub Timer1_Timer()
- ' / --------------------------------------------------------------------------------
- ' / ตัวแปรรับค่า Tag ID จาก TextBox
- Dim TagID As String
-
- ' / ประกาศตัวแปรสำหรับ ListItem ที่ต้องใช้งานใน ListView
- Dim LV As ListItem
-
-
- ' / ดัก Error กรณีการอ่านผิดพลาด จะทำให้อ่านข้อมูลเข้ามาไม่ครบ
- ' / ความยาวข้อมูลมากกว่า 0 และ ต้องเท่ากับ 16 หลัก เท่านั้น
- If Len(txtTagID.Text) > 0 And Len(txtTagID.Text) = 16 Then
-
- TagID = txtTagID.Text
-
- ' / เริ่มต้นนำข้อมูลไปแสดงผลลงใน ListView
- ' / ให้เกิดมีลำดับที่ สำหรับหลักแรก (Index = 0)
- Set LV = lvwData.ListItems.Add(, , lvwData.ListItems.Count + 1)
-
- ' รูปแบบที่ปรากฏใน TextBox ===> [1C006082946A[ <===
- ' แต่แท้จริงแล้ว ข้อมูลจะอยู่ในรูปแบบรหัส ASCII ดังนี้
- ' <02>1C006082946A<0D><0A><03>
- ' <02> บ่งบอกจุดเริ่มต้นของข้อมูล (STX - Start of Text)
- ' <0D> หรือ 13 (ฐาน 10) คือ กดปุ่ม Enter (Carriage Return)
- ' <0A> หรือ 10 (ฐาน 10) คือ Line Feed (ขึ้นบรรทัดใหม่)
- ' <03> บ่งบอกจุดสิ้นสุดของข้อมูล (ETX - End of Text)
-
- ' / ผมใช้วิธีการนับเริ่มจากหลักที่ 2 และนับไปตามความยาวของ TagID (16 ตัว) - 4
- LV.SubItems(1) = Mid$(TagID, 2, Len(TagID) - 4)
-
- ' / เก็บค่าวันที่ และ เวลา
- LV.SubItems(2) = Now()
-
- ' ===================== ตำแหน่งนี้ ==================
- ' ====== สามารถบันทึกลงฐานข้อมูลได้ หรือ สั่งให้อุปกรณ์ทำงาน ====
-
- End If
-
- ' เคลียร์ค่าการรับข้อมูล
- txtTagID.Text = ""
- End Sub
คัดลอกไปที่คลิปบอร์ด
โค้ดในส่วนที่เหลือ ...
- Private Sub Form_Load()
-
- Me.Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2
-
- ' / ตั้งค่าเพื่อทดสอบ ID ขนาดข้อมูลความยาว 16 หลัก กรณีที่ไม่มีชุด RFID ทดสอบ
- ' / หรือ พิมพ์ชุดข้อมูลใน Notepad ก่อน แล้ว Copy ไปวางใส่ในช่อง TextBox ก็ได้ครับ
- txtTagID.Text = "x1234567890ABxxx"
-
- ' / กรณีมีชุดทดสอบ ต้องเคลียร์ค่าว่างเปล่าน่ะครับ
- ' / txtTagID.Text = ""
-
- ' / เริ่มต้นตั้งค่าพอร์ทก่อน หากผิดพลาดให้ออกไปจากโปรแกรม
- If Not InitializePort Then End
- ' /หรือ
- 'Call InitializePort
-
- ' / เมื่อ 1000 millisecond = 1 second
- ' / ตั้งเวลา Timer ให้กระตุ้นการทำงานทุกๆ 100 millisecond.
- ' / นั่นก็คือ ทุกๆ 100 ms. จะมีการกระตุ้นการทำงานในส่วนการรับข้อมูล MSComm1_OnComm
- Timer1.Interval = 100
-
- ' / ตั้งรูปแบบ ListView
- With lvwData
- .ListItems.Clear
- .View = lvwReport
- ' / ตั้งค่า ListView แสดงผล
- .ColumnHeaders.Add 1, , "Item", 800
- .ColumnHeaders.Add 2, , "Tag ID", .Width \ 2 - 630
- .ColumnHeaders.Add 3, , "วันที่ - เวลา การอ่านข้อมูล", .Width \ 2 - 500
- End With
-
- End Sub
- Private Sub cmdClear_Click()
- lvwData.ListItems.Clear
- txtTagID.Text = ""
- txtTagID.SetFocus
- End Sub
- Private Sub cmdExit_Click()
- If MSComm1.PortOpen Then MSComm1.PortOpen = False
- Set frmRFIDBasic = Nothing
- End
- End Sub
- Private Sub Form_Resize()
- '/ Protect Run Time Error 5
- On Error Resume Next
- If Me.WindowState = vbMinimized Then Exit Sub
- ' ความกว้าง
- If Me.Width < 7020 Then
- Me.Width = 7020
- Exit Sub
- End If
- ' ความสูง
- If Me.Height < 5685 Then
- Me.Height = 5685
- Exit Sub
- End If
- ' การคำนวณหาระยะการย่อ ขยายของฟอร์ม
- fraData.Move 0, 0, Me.ScaleWidth - cmdExit.Width - 120, Me.ScaleHeight
- cmdClear.Move Me.ScaleWidth - cmdClear.Width - 30, 90
- cmdExit.Move Me.ScaleWidth - cmdExit.Width - 30, 870
- lvwData.Move 30, 870, fraData.Width - 60, fraData.Height - 930
- End Sub
คัดลอกไปที่คลิปบอร์ด
ดาวน์โหลดโค้ดต้นฉบับ VB6 แบบเต็มได้ที่นี่ ...
|
ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง
คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน
x
|