หากมีคำถาม ขอให้ไปโพสต์ลง เว็บบอร์ดจีทูจีเน็ตดอตคอม ตัวใหม่แทนน่ะครับ

หรือติดต่อเข้ามาทาง Inbox ที่ เฟซบุ๊ค ผมครับ

หน้าหลัก
ข่าวสาร - บทความ ทั้งหมด
VB 6/VB.Net
ASP/ASP.Net
จับฉ่ายคอมพิวเตอร์
เรียนรู้ผ่าน Flash Movie
บทความที่มีผู้ตอบล่าสุด  
 RSS Feeds
 ดาวน์โหลดโปรแกรม RSS Reader ได้ที่นี่ ...   Download โปรแกรม RSS Reader

Forum - www.g2gnet.com
Webmaster - www.g2gnet.com
Visitors - Session views
 5 5 9 1 7 5 7

7 ธันวาคม พ.ศ.2549
117 Users On-Line.
Visitors - Page views
 8 9 4 6 8 0 7
1 กุมภาพันธ์ พ.ศ.2551

Google   
เว็บ g2gnet.com
ขนาดตัวอักษร:  

แจกฟรีโค้ดโปรแกรม VB6 เปิดลิ้นชักเก็บเงิน (Cash Drawer) ผ่านพอร์ทอนุกรม

Category »  VB 6/VB.Net
โดย : Webmaster เมื่อ 7/1/2554   เวลา: 18:50
(อ่าน : 41138) 
คือว่าผมแบบโปรแกรมเมอร์สายยากจนครับ ไม่มีเงินที่จะซื้อตัวลิ้นชักเก็บเงิน (Cash Drawer) มาทดสอบ (ดักคอก่อนเดี๋ยวโดนแซว ... ทีเงินค่าเหล้าน่ะกลับมี อิอิอิอิอิ) ก็เลยไม่รู้จะเขียนโค้ดออกมายังไง พอดีมีลูกค้าท่านนึงมีความรู้ทางด้านคอมพิวเตอร์อยู่ ผมก็เลยลองเขียนแบบ ดู เดา ดำน้ำ ส่งไปให้ทดสอบดู ผลปรากฏว่าลิ้นชักมันเด้งออกได้จริงๆแฮะ มะแหล่มเลย ... ในบทความนี้จะเป็นการเชื่อมต่อเข้าโดยตรง ระหว่างลิ้นชักเก็บเงินกับคอมพิวเตอร์ ผ่านทางพอร์ทอนุกรม หรือที่มักเรียกกันว่า COM Port นั่นเอง ... หากว่าต่อลิ้นชักเก็บเงินเข้ากับเครื่องพิมพ์สลิปด้วยหัว RJ11 (แจ็คโทรศัพท์นั่นแหละ) อันนี้ไม่ต้องใช้โค้ดใดๆเลย แต่อาจจะต้องไปปรับที่ Preference ของเครื่องพิมพ์ด้วย ... สำหรับทฤษฎีเรื่องของการเชื่อมต่อ (Interface) ผ่านพอร์ทอนุกรม ผมจะไม่ขอกล่าวถึงน่ะครับ สามารถหาข้อมูลได้ไม่ยากนักหรอก หรือ คลิ๊กอ่านเรื่องของ RFID ก็ได้ครับ ...
    ขอขอบคุณ (Special Thank)
  • คุณชัยเชษฐ์ ชมใจ ผู้ที่ทำการทดสอบให้ครับ (รอบหน้าผมจะขอให้ทดสอบการอ่านน้ำหนักจากเครื่องชั่งแบบดิจิตอลครับ ... หากผ่านฉลุยก็จะมาแจกโค้ดฟรีๆกันอีกต่อไป 55555+)
  • บริษัท พรีเมียร์ เครื่องชั่ง จำกัด
    หลักการทำงานของโปรแกรม (ที่ภาษาอื่นๆก็นำไปใช้ได้)
  • ค้นหา และ ทดสอบ COM Port ที่มีอยู่ในเครื่องคอมพิวเตอร์
  • เลือก COM Port พร้อมกับตั้งค่ามาตรฐานของการรับส่งข้อมูล (Protocol)
  • ส่งรหัส ASCII Code ออกไปยัง COM Port ที่ต้องการ ... มันเสมือนกับการจ่ายกระแสไฟฟ้า โดยการกดปุ่มสวิทช์ เพื่อให้หลอดไฟติดสว่างได้นั่นเอง ... ไม่คิดมาก่อนเลยว่าการเรียนช่างอิเล็กทรอนิกส์ จะนำความรู้มาใช้ประโยชน์ได้มากมายขนาดนี้
  • แค่นี้เองลิ้นชักเก็บเงิน ก็เด้งออกได้แล้ว ... จบ
ดาวน์โหลด
ดาวน์โหลด Source Code สำหรับ MS Visual Basic 6.0 - Service Pack 6
 ดาวน์โหลด Visual Basic 6.0 SP5: Run-Time Redistribution Pack
 ดาวน์โหลด Microsoft Data Access Object (MDAC) และ Jet 4.0 Update
 ดาวน์โหลด Microsoft Visual Basic Service Pack 6
ข้อมูลเพิ่มเติม
RFID และ การติดต่อฐานข้อมูล ด้วย VB6 ภาค 1 (ทฤษฎี และ รูปแบบข้อมูล)
RFID และ การติดต่อฐานข้อมูล ด้วย VB6 ภาค 2 (การอ่านข้อมูล)
อันดับแรกต้องเพิ่ม Microsoft Comm Control เข้ามาใช้งานด้วย

Project --> Components ... Microsoft Comm Control (Comm ย่อมาจาก Communication)


การออกแบบหน้าจอ - Design Time


สั่งให้โปรแกรมทำงาน - Run Time
มาดูโค้ดกันเถอะ ...

Option Explicit

' #####################################################
' เริ่มต้นการทำงาน
' #####################################################
Private Sub Form_Load()

    Me.Move (Screen.Width - Me.Width) \ 2, (Screen.Height - Me.Height) \ 2
    
    ' อันนี้แค่ปรับระยะตำแหน่งของ CommandButton แบบ Run Time เท่านั้นครับ
    cmdOpenCashDrawer.Move Me.ScaleWidth - (cmdOpenCashDrawer.Width * 2) - 430, 750
    cmdExit.Move cmdOpenCashDrawer.Left + cmdOpenCashDrawer.Width + 60, 750
    
    ' ค้นหา และ ทดสอบ COM Port ที่ติดตั้งในเครื่องคอมพิวเตอร์
    Call ScanCommPort

End Sub

' #####################################################
' โปรแกรมย่อยใช้ในการค้นหา COM Port ที่ติดตั้งไว้ในเครื่องคอมพิวเตอร์
' #####################################################
Sub ScanCommPort()
' ไม่ต้องสนใจ Error ครับ ...
On Error Resume Next

' ตัวแปรเพื่อทดสอบ COM Port ไหนบ้างใช้งานได้ (1 - 4)
Dim PortNumber As Byte

' ตัวแปรสร้างไฟล์ชั่วคราวขึ้นมา เพื่อทำการทดสอบการส่งข้อมูลออกจาก Port
Dim iFileNum As Integer
    
    ' ทดสอบจำนวน 4 Port มาตรฐาน คือ COM1, COM2, COM3 และ COM4
    For PortNumber = 1 To 4
        
        ' สร้างไฟล์ทดสอบชั่วคราวขึ้นมาก่อน เพื่อจะลองส่งข้อมูลออก Port นี้
        iFileNum = FreeFile
        
        ' พยายามเปิด COM Port ดู (ส่ง Binary ออกไปยังช่องทางการติดต่อสื่อสาร)
        Open "COM" & CStr(PortNumber) For Binary Shared As #iFileNum
        ' เอาไว้ลองดูผลหมายเลข Err.Number ได้เลยครับ ... พี่น้อง
        ' Debug.Print Err.Number
        
        ' หาก Port สามารถใช้งานได้ ค่า Err.Number = 0
        ' หากค่า Err.Number <> 0 (ตัวอย่างนี้ คือ Err.Number = 53 หรือ File not found)
        If Err.Number = 0 Then
        
            ' ปิดไฟล์ไปเลย
            Close #iFileNum
            
            ' หาก Port ใช้งานได้ก็ให้เพิ่มรายการเข้าสู่ ComboBox เช่น COM1
            cmbCommPort.AddItem "COM" & PortNumber
            
        End If
        
    Next
   
   ' หากมี COM Port อย่างน้อย 1 Port ก็ตั้งค่าให้อยู่ที่ COM1 เป็น Default เอาไว้ก่อน
    If cmbCommPort.ListCount > 0 Then cmbCommPort.ListIndex = 0

End Sub

' #####################################################
' คลิ๊กที่ปุ่มนี้เพื่อกำหนดมาตรฐาน และ ส่งข้อมูลออกไป สั่งให้ลิ้นชักเด้งออกได้
' #####################################################
Private Sub cmdOpenCashDrawer_Click()
     
     ' เลือก Com Port ที่ต้องการ ก็คือ MSComm1.CommPort = ตัวเลขจำนวนเต็ม (เริ่มต้นจาก 1)
     ' แต่ ListIndex ของ ComboBox ตัวแรกเริ่มต้นด้วยค่า 0 ดังนั้นเราเลยต้องบวก 1 เข้าไปด้วย
     ' นั่นหมายความว่า MSComm1.CommPort = 1 <-- COM1 (ListIndex = 0)
     ' หรือ MSComm1.CommPort = 2 <-- COM2 (ListIndex = 1)
    MSComm1.CommPort = cmbCommPort.ListIndex + 1
    
    ' ทดสอบว่ามีการเปิด Port ค้างไว้หรือไม่ หากเงื่อนไขเป็นจริง สั่งให้ปิดช่องการสื่อสารหมายเลข Port นี้ก่อน
    If MSComm1.PortOpen = True Then MSComm1.PortOpen = False
    
    With MSComm1
        ' กำหนดมาตรฐาน (Protocol) ในการติดต่อสื่อสารผ่าน COM Port ระหว่างผู้รับและผู้ส่ง
        ' 9600 = อัตราการรับส่งข้อมูล (Baud Rate)
        ' N = None Parity คือ ไม่มีการตรวจสอบความถูกต้องของข้อมูล
        ' 8 = ขนาดข้อมูลจำนวน 8 บิต
        ' 1 = มี Stop Bit ปิดท้ายอีก 1 บิต
        .Settings = "9600,N,8,1"
        
        ' สั่งเปิด Port
        .PortOpen = True
        
        ' ส่งข้อมูลออกจาก COM Port โดยผมส่งค่า NULL หรือ Chr(0) ออกไปจำนวน 10 ตัว (ที่ผมทดสอบผ่าน)
        ' ไม่ได้ลองให้ละเอียดว่ามันต้องส่งข้อมูลออกไปกี่ไบต์กันแน่  เอาเป็นว่ามันทำงานได้ก็แล้วกัน ... 55555+
        .Output = String$(10, Chr(0))
        ' ลองส่ง ASCII Code ตัวอื่นๆก็ทำงานได้น่ะครับ
        
        ' ปิดการใช้งาน Port
        .PortOpen = False
        
    End With

End Sub

Private Sub cmdExit_Click()
    Set frmOpenCashDrawer = Nothing
    End
End Sub
Conclusion:
บอกแล้วครับ มะแหล่มจริงๆ เพราะมันก็ไม่ได้มีหลักการอะไรที่สลับซับซ้อนแต่อย่างใดเลย ... หากนักพัฒนาซอฟท์แวร์ท่านใดที่มีลิ้นชักเก็บเงินเพื่อไว้ใช้งาน หรือ ทดสอบอยู่แล้ว สิ่งที่ผมอยากให้ไปเพิ่มเติมด้วยก็คือ สามารถตรวจสอบได้ว่าลิ้นชักเก็บเงิน มันอยู่ในสถานะเปิด หรือ ปิดเอาไว้ครับ และอื่นๆ ซึ่งหากได้ผลเป็นประการใด ก็จงช่วยได้โปรดนำมาแจกจ่ายโค้ดให้กับพี่น้องคนไทยด้วยกันเถิดน่ะครับ ... รอบคอบ รู้คิด มีจิตสาธารณะ
จี ทู จี เน็ต ดอต คอม - g2gNet Dot Com
เลขทะเบียนพาณิชย์อิเล็กทรอนิกส์ 0407314800231
CopyLeft © 2004 - 2099 g2gNet.Com All rights reserved.
Email: [email protected] หรือ โทร. 08-6862-6560