ชุมชนคนรักภาษาเบสิค - Visual Basic Community

 ลืมรหัสผ่าน
 ลงทะเบียน
ค้นหา
ดู: 3977|ตอบกลับ: 0

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

[คัดลอกลิงก์]

308

กระทู้

499

โพสต์

6021

เครดิต

ผู้ดูแลระบบ

ทองก้อน ทับทิมกรอบ

Rank: 9Rank: 9Rank: 9

เครดิต
6021



ก่อนที่จะทำการเข้าสู่ภาคปฏิบัติ หากท่านยังไม่เข้าใจในหลักการของ 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)
  1. ' / --------------------------------------------------------------------------------
  2. ' / ตั้งค่าเริ่มต้นให้กับ Port ก่อน
  3. Function InitializePort() As Boolean
  4. ' / ผมทำเป็นฟังค์ชั่น (เสมอ) เพราะบางครั้งก่อนทำงานจริงต้องตรวจสอบความพร้อม ...
  5. ' / ของพอร์ทที่ใช้งานด้วย หาก Return ค่ากลับเป็น False ก็ต้องหยุดการทำงานไว้ก่อน
  6. ' / --------------------------------------------------------------------------------
  7. On Error GoTo ErrHandler
  8.    
  9.     With MSComm1
  10.         ' / ทดสอบก่อนว่า Port เปิดใช้งานหรือไม่ หากเปิดไว้ก็ให้ปิด Port ก่อน
  11.         If .PortOpen Then .PortOpen = False
  12.         
  13.         ' / ตั้งค่า Port ที่ต้องการ
  14.         .CommPort = 1
  15.         
  16.         ' / ตั้งค่า Baud Rate, Parity, Data Bits, Stop Bits (Standard)
  17.         .Settings = "9600,N,8,1"
  18.         
  19.         ' / ตั้งสถานะในการ Hand Shaking ของ DTR and RTS (การตรวจสอบความถูกต้องการรับ - ส่ง)
  20.         '.DTREnable = True
  21.         '.RTSEnable = True
  22.         ' / ========================================
  23.         ' / สั่งให้ Enabled เหตุการณ์ในการรับข้อมูลทุกๆ Character
  24.         .RThreshold = 1
  25.         ' / ========================================
  26.         ' / Disable เมื่อส่ง Characters
  27.         '.SThreshold = 0
  28.         
  29.         ' / เปิด Port
  30.         .PortOpen = True
  31.         InitializePort = True
  32.    
  33.     End With

  34. ExitProc::
  35.     Exit Function
  36.    
  37. ErrHandler:
  38.     MsgBox Err.Number & " : " & Err.Description
  39.     InitializePort = False
  40.    
  41. End Function
คัดลอกไปที่คลิปบอร์ด

การรับข้อมูลเข้ามาตามหมายเลข COM Port
  1. ' / --------------------------------------------------------------------------------
  2. ' / เหตุการณ์เกิดการรับข้อมูลเข้ามาผ่านทาง Serial Port - COM ในลักษณะของ Interrupt
  3. Private Sub MSComm1_OnComm()
  4. ' / --------------------------------------------------------------------------------
  5.    
  6.     With MSComm1
  7.         ' / ทดสอบเกิดเหตุการณ์เข้ามาของข้อมูล (Received)
  8.         Select Case .CommEvent
  9.             Case comEvReceive   ' หรือ มีค่าเท่ากับ 2
  10.                
  11.                 ' / แสดงข้อมูล เมื่อมีการรับข้อมูลเข้ามา
  12.                 txtTagID.Text = txtTagID.Text & MSComm1.Input
  13.    
  14.         End Select
  15.         
  16.     End With

  17. End Sub
คัดลอกไปที่คลิปบอร์ด
  1. ' / --------------------------------------------------------------------------------
  2. ' / การนำมาใช้ใน Timer เพราะจังหวะของการอ่านมันคงที่กว่าครับ
  3. Private Sub Timer1_Timer()
  4. ' / --------------------------------------------------------------------------------
  5.     ' / ตัวแปรรับค่า Tag ID จาก TextBox
  6.     Dim TagID As String
  7.    
  8.     ' / ประกาศตัวแปรสำหรับ ListItem ที่ต้องใช้งานใน ListView
  9.     Dim LV As ListItem
  10.    
  11.    
  12.     ' / ดัก Error กรณีการอ่านผิดพลาด จะทำให้อ่านข้อมูลเข้ามาไม่ครบ
  13.     ' / ความยาวข้อมูลมากกว่า 0 และ ต้องเท่ากับ 16 หลัก เท่านั้น
  14.     If Len(txtTagID.Text) > 0 And Len(txtTagID.Text) = 16 Then
  15.    
  16.         TagID = txtTagID.Text
  17.                     
  18.         ' / เริ่มต้นนำข้อมูลไปแสดงผลลงใน ListView
  19.         ' / ให้เกิดมีลำดับที่ สำหรับหลักแรก (Index = 0)
  20.         Set LV = lvwData.ListItems.Add(, , lvwData.ListItems.Count + 1)
  21.         
  22.         ' รูปแบบที่ปรากฏใน TextBox ===> [1C006082946A[ <===
  23.         ' แต่แท้จริงแล้ว ข้อมูลจะอยู่ในรูปแบบรหัส ASCII ดังนี้
  24.         ' <02>1C006082946A<0D><0A><03>
  25.         ' <02> บ่งบอกจุดเริ่มต้นของข้อมูล (STX - Start of Text)
  26.         ' <0D> หรือ 13 (ฐาน 10) คือ กดปุ่ม Enter (Carriage Return)
  27.         ' <0A> หรือ 10 (ฐาน 10) คือ Line Feed (ขึ้นบรรทัดใหม่)
  28.         ' <03> บ่งบอกจุดสิ้นสุดของข้อมูล (ETX - End of Text)
  29.         
  30.         ' / ผมใช้วิธีการนับเริ่มจากหลักที่ 2 และนับไปตามความยาวของ TagID (16 ตัว) - 4
  31.         LV.SubItems(1) = Mid$(TagID, 2, Len(TagID) - 4)
  32.         
  33.         ' / เก็บค่าวันที่ และ เวลา
  34.         LV.SubItems(2) = Now()
  35.         
  36.         ' ===================== ตำแหน่งนี้ ==================
  37.         ' ====== สามารถบันทึกลงฐานข้อมูลได้ หรือ สั่งให้อุปกรณ์ทำงาน ====
  38.         
  39.     End If
  40.    
  41.     ' เคลียร์ค่าการรับข้อมูล
  42.     txtTagID.Text = ""

  43. End Sub
คัดลอกไปที่คลิปบอร์ด

โค้ดในส่วนที่เหลือ ...
  1. Private Sub Form_Load()
  2.    
  3.     Me.Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2
  4.    
  5.     ' / ตั้งค่าเพื่อทดสอบ ID ขนาดข้อมูลความยาว 16 หลัก กรณีที่ไม่มีชุด RFID ทดสอบ
  6.     ' / หรือ พิมพ์ชุดข้อมูลใน Notepad ก่อน แล้ว Copy ไปวางใส่ในช่อง TextBox ก็ได้ครับ
  7.     txtTagID.Text = "x1234567890ABxxx"
  8.    
  9.     ' / กรณีมีชุดทดสอบ ต้องเคลียร์ค่าว่างเปล่าน่ะครับ
  10.     ' / txtTagID.Text = ""
  11.    
  12.     ' / เริ่มต้นตั้งค่าพอร์ทก่อน หากผิดพลาดให้ออกไปจากโปรแกรม
  13.     If Not InitializePort Then End
  14.     ' /หรือ
  15.     'Call InitializePort
  16.    
  17.     ' / เมื่อ 1000 millisecond = 1 second
  18.     ' / ตั้งเวลา Timer ให้กระตุ้นการทำงานทุกๆ 100 millisecond.
  19.     ' / นั่นก็คือ ทุกๆ 100 ms. จะมีการกระตุ้นการทำงานในส่วนการรับข้อมูล MSComm1_OnComm
  20.     Timer1.Interval = 100
  21.    
  22.     ' / ตั้งรูปแบบ ListView
  23.     With lvwData
  24.         .ListItems.Clear
  25.         .View = lvwReport
  26.         ' / ตั้งค่า ListView แสดงผล
  27.         .ColumnHeaders.Add 1, , "Item", 800
  28.         .ColumnHeaders.Add 2, , "Tag ID", .Width \ 2 - 630
  29.         .ColumnHeaders.Add 3, , "วันที่ - เวลา การอ่านข้อมูล", .Width \ 2 - 500
  30.     End With
  31.    
  32. End Sub

  33. Private Sub cmdClear_Click()
  34.     lvwData.ListItems.Clear
  35.     txtTagID.Text = ""
  36.     txtTagID.SetFocus
  37. End Sub

  38. Private Sub cmdExit_Click()
  39.     If MSComm1.PortOpen Then MSComm1.PortOpen = False
  40.     Set frmRFIDBasic = Nothing
  41.     End
  42. End Sub

  43. Private Sub Form_Resize()
  44.     '/ Protect Run Time Error 5
  45.     On Error Resume Next
  46.     If Me.WindowState = vbMinimized Then Exit Sub
  47.     ' ความกว้าง
  48.     If Me.Width < 7020 Then
  49.         Me.Width = 7020
  50.        Exit Sub
  51.     End If
  52.     ' ความสูง
  53.     If Me.Height < 5685 Then
  54.         Me.Height = 5685
  55.         Exit Sub
  56.     End If
  57.     ' การคำนวณหาระยะการย่อ ขยายของฟอร์ม
  58.     fraData.Move 0, 0, Me.ScaleWidth - cmdExit.Width - 120, Me.ScaleHeight
  59.     cmdClear.Move Me.ScaleWidth - cmdClear.Width - 30, 90
  60.     cmdExit.Move Me.ScaleWidth - cmdExit.Width - 30, 870
  61.     lvwData.Move 30, 870, fraData.Width - 60, fraData.Height - 930
  62. End Sub
คัดลอกไปที่คลิปบอร์ด

ดาวน์โหลดโค้ดต้นฉบับ VB6 แบบเต็มได้ที่นี่ ...

ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

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

x
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด

0

กระทู้

1

โพสต์

5

เครดิต

Newbie

Rank: 1

เครดิต
5
โพสต์ 2018-3-28 16:04:05 | ดูโพสต์ทั้งหมด

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

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

รายละเอียดเครดิต

ข้อความล้วน|อุปกรณ์พกพา|ประวัติการแบน|G2GNet.com  

GMT+7, 2024-4-16 20:45 , Processed in 0.105040 second(s), 4 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้