thongkorn โพสต์ 2018-2-19 15:27:25

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

http://www.g2gnet.com/webboard/images/vb6/OPenCashDrawer.png


สำหรับหลักการในเรื่องการสื่อสารผ่านพอร์ทอนุกรม แอดมินจะไม่ขอกล่าวซ้ำอีก สามารถหาอ่านได้จากเรื่อง การเชื่อมต่อคอมพิวเตอร์กับ RFID ภาค 1 (ทฤษฎี และ รูปแบบข้อมูล) ได้ตามสะดวกันเลยครับ ...
หลักการทำงานของโปรแกรม (ที่ภาษาอื่นๆก็นำไปใช้ได้)
- ค้นหา และ ทดสอบ COM Port ที่มีอยู่ในเครื่องคอมพิวเตอร์
- เลือก COM Port พร้อมกับตั้งค่ามาตรฐานของการรับส่งข้อมูล (Protocol)
- ส่งรหัส ASCII Code ออกไปยัง COM Port ที่ต้องการ ... มันเสมือนกับการจ่ายกระแสไฟฟ้า โดยการกดปุ่มสวิทช์ เพื่อให้หลอดไฟติดสว่างได้นั่นเอง ... ไม่คิดมาก่อนเลยว่าการเรียนช่างอิเล็กทรอนิกส์ จะนำความรู้มาใช้ประโยชน์ได้มากมายขนาดนี้
- แค่นี้เองลิ้นชักเก็บเงิน ก็เด้งออกได้แล้ว ... จบ


มาดูโค้ดกันเถอะ ...
' / -------------------------------------------------------------------------------------------------------------
' / Developer : Mr.Surapon Yodsanga (Thongkorn Tubtimkrob)
' / eMail : thongkorn@hotmail.com
' / URL: http://www.g2gnet.com (Khon Kaen - Thailand)
' / Facebook: https://www.facebook.com/g2gnet (Thailand only)
' / Facebook: https://www.facebook.com/commonindy (World Wide)
' / Purpose: Open cash drawer via RS-232 Serial Port.
' / Microsoft Visual Basic 6.0 Service Pack 6
' / -------------------------------------------------------------------------------------------------------------

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

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

MrDen โพสต์ 2018-2-28 17:15:59

ขอบพระคุณอย่างสูงครับอาจารย์
หน้า: [1]
ดูในรูปแบบกติ: [VB6] แจกฟรีโค้ดโปรแกรม VB6 เปิดลิ้นชักเก็บเงิน (Cash Drawer) ผ่านพอร์ทอนุกรม