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