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
|