thongkorn โพสต์ 2018-1-11 02:10:12

[VB6] การเชื่อมต่อคอมพิวเตอร์กับ RFID ภาค 2 (ปฏิบัติแบบไม่ต้องมีอุปกรณ์ก็ได้)

http://www.g2gnet.com/webboard/images/vb6/RFID-ID20.png

ก่อนที่จะทำการเข้าสู่ภาคปฏิบัติ หากท่านยังไม่เข้าใจในหลักการของ RFID (Radio Frequency Identification) ควรจะต้องไปศึกษาจากตอนแรก การเชื่อมต่อคอมพิวเตอร์กับ RFID ภาค 1 (ทฤษฎี และ รูปแบบข้อมูล) ก่อนด้วยล่ะครับ บทความสำหรับตอนนี้แอดมินจะว่าถึงภาคปฏิบัติ และปฏิบัติโดยที่ไม่จำเป็นต้องมีการเชื่อมต่ออุปกรณ์ RFID ใดๆเลยก็ได้ เพราะจะอาศัยการอ่านค่าจากความยาวของข้อมูลอินพุทที่เราสมมุติมันขึ้นมา ในตัวอย่างนี้จะใช้ขนาด 16 ไบต์ โดยที่จะมี Start Of Text (STX) ขนาด 1 ไบต์ ตามด้วยข้อมูลขนาด 12 ไบต์ (ไม่มีการตรวจสอบความถูกต้อง หรือ Check Sum) และปิดท้ายด้วยรหัส <0D><0A><03> อีกจำนวน 3 ไบต์ ...

http://www.g2gnet.com/webboard/images/vb6/RFID-TagData.gif
ข้อมูลตัวอย่างที่ดูจาก Data Sheet ของ ID20 ...

การทำสอบ ให้ลองคีย์ค่าข้อมูลจำนวน 16 หลัก (ไบต์) เช่น x1234567890ABxxx หรือ 0123456789123456 เอาไว้ใน Notepad ซ่ะก่อน จากนั้นให้คัดลอกไปวางแปะในช่อง TextBox ในตัวโปรแกรม ...   

เริ่มต้น ...
http://www.g2gnet.com/webboard/images/vb6/RFID-Design.png
หน้าจอ 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 แบบเต็มได้ที่นี่ ...

qaz1122 โพสต์ 2018-3-28 16:04:05

ข้อคิดดีๆในการใช้ชีวิต อ่านแล้วมีความสุข และเตือนสติตัวเอง
1. อย่าทำลายความหวังของใครเพราะเขาอาจเหลืออยู่แค่นั้นก็ได้
2. เมื่อมีคนเล่าว่าตัวเขามีส่วนในเหตุการณ์สำคัญอะไรก็ตามเราไม่ต้องไปคุยทับปล่อยเขาฟุ้งไปตามสบาย
3. รู้จักฟังให้ดี โอกาสทองบางทีมันก็มาถึงแบบแว่ว ๆเท่านั้น
4. หยุดอ่านคำอธิบายสถานที่ทางประวัติศาสตร์ซึ่งอยู่ตามริมทางเสียบ้าง
5. จะคิดการใดจงคิดการให้ใหญ่ๆเข้าไว้แต่เติมความสุขสนุกสนานลงไปด้วยเล็กน้อย
6. หัดทำสิ่งดี ๆให้กับผู้อื่นจนเป็นนิสัยโดยไม่จำเป็นต้องให้เขารับรู้
7. จำไว้ว่าข่าวทุกชนิดล้วนถูกบิดเบือนมาแล้วทั้งนั้น
8. เวลาเล่นเกมกับเด็ก ๆ ก็ปล่อยให้แกชนะไปเถิด
9. ใครจะวิจารณ์เรายังไงก็ช่าง ไม่ต้องไปเสียเวลาตอบโต้
10. ให้โอกาสผู้อื่นเป็นครั้งที่ “สอง”แต่อย่าให้ถึง”สาม”
11. อย่าวิจารณ์นายจ้างถ้าทำงานกับเขาแล้วไม่มีความสุขก็ลาออกซะ
12. ทำตัวให้สบาย อย่าคิดมาก ถ้าไม่ใช่เรื่องคอขาดบาดตายแล้วอะไร ๆ มันก็ไม่ได้สำคัญอย่างที่คิดไว้ทีแรกหรอก
13. ใช้เวลาน้อย ๆ ในการคิดว่า “ใคร” เป็นคนถูกแต่ใช้เวลาให้มากในการคิดว่า “อะไร” คือสิ่งที่ถูก
14. เราไม่ได้ต่อสู้กับ “คนโหดร้าย” แต่เราต่อสู้กับ “ความโหดร้าย” ในตัวคน
15. คิดให้รอบคอบก่อนจะให้เพื่อนต้องมีภาระในการรักษาความลับ

รักเริ่มต้นด้วยรอยยิ้ม เติบโตด้วยการจุมพิต และจบลงด้วยน้ำตา
อย่าเสียน้ำตา ให้กับคนท่ไม่เคยเสียน้ำตาให้คุณ
เพื่อนที่ดีนั้นหายาก แต่ยากกว่าในการจะลาจาก และเป็นไปไม่ได้ที่จะลืมเลือน
สิ่งที่ทำยากสุด คือ การมองดูคนที่คุณรัก ไปรักคนอื่น
อย่าให้อดีตยึดคุณไว้ คุณจะพลาดสิ่งดีๆที่จะผ่านมา
คนบางคนทำให้โลกนี้ เป็นโลกที่แสนพิเศษ เพียงแค่มีเค้าอยู่ในโลกใบนี้เท่านั้น
อย่าขมวดคิ้วเลย เธอไม่รู้หรอกว่า มีใครบางคนหลงรักรอยยิ้มของเธอ
ไม่มีใครสมบูรณ์แบบ จนกระทั่งคุณตกหลุมรักเค้าแล้ว
ข้อมูลจาก : http://www.s4p4.com/usobet/] usobet
หน้า: [1]
ดูในรูปแบบกติ: [VB6] การเชื่อมต่อคอมพิวเตอร์กับ RFID ภาค 2 (ปฏิบัติแบบไม่ต้องมีอุปกรณ์ก็ได้)