การเขียนโปรแกรมรับค่าจากเครื่องมือวัด #2
ส่วนนี้ก็จะเป็นคำสั่งในการเชื่อมต่อกับ PC นะครับ โดยจะใช้
ActiveX XMCommCRC แทนตัว Common control จากทาง Microsoft นะครับ
เนื่องจากติดเรื่อง ลิขสิทธิ์ในการใช้งาน จึงไม่สามารถใช้ Common control จากทาง Microsoft
ได้ครับ
โดยเจ้าตัว ActiveX XMCommCRC เขาก็ปล่อยให้ใช้ฟรีนะครับ ไปดูรายละเอียดได้ที่ http://www.hardandsoftware.net/xmcomm.htm
ข้อดีอีกอย่างของตัว ActiveX ตัวนี้คือ ลักษณะการใช้งานจะเหมือนกับตัว Common
control ของทาง Microsoft เลย
ต่อไปเรามาดูลักษณะข้อมูลที่ Mini-Processor ส่งมาให้ผ่านทาง
Com port กันครับ
จากรูปจะเห็นได้ว่าข้อมูลตำแหน่งที่ 5 – 12 คือ ผลการวัดนะครับ
เราก็จะดักเอาข้อมูลช่วงนี้มาใช้งาน
ก่อนอื่นก็ให้สร้างฟอร์มเพิ่มอีก ฟอร์มหนึ่งคือ FmMain แล้ววาง Control
และตั้งชื่อตามนี้เลย
จากนั้นเรามาดู Code กันครับ
Private Sub CmAbout_Click()
MsgBox "RS-232 Communication [Freeware version]" & vbCrLf
& "Develop by Jiranuwat Maitawin" & vbCrLf &
"Contact / Information " & _
vbCrLf & "
jiranuwat.mai@gmail.com", vbInformation + vbOKOnly,
"Software information :"
End Sub
Private Sub CmOnline_Click()
‘ดัก Error ว่ามีการตั้งค่า Port หรือยัง
If PortStatus = False Then MsgBox "ต้องตั้งค่า Port ให้เรียบร้อยก่อน": Call
CommandButton2_Click: Exit Sub
If XMCommCRC1.PortOpen = True Then
‘ถ้า Port เปิดอยู่ให้ปิด
XMCommCRC1.PortOpen = False
CmOnline.Caption = "Connect"
CommandButton2.Enabled = True
CmTools.Enabled = True
Call txtNormal
Else
‘ถ้า Port ปิดอยู่ให้เปิด
XMCommCRC1.CommPort = activePort.cPortNo
XMCommCRC1.Settings = activePort.cRate & "," &
Left(activePort.cParity, 1) & "," & _
activePort.cLenght & "," & activePort.cBits
XMCommCRC1.PortOpen = True
CmOnline.Caption = "Disconnect"
CommandButton2.Enabled = False
CmTools.Enabled = False
‘กำหนดค่า Parameter อ้างอิงในการเพิ่มค่าลง Excel ไฟล์ครับ
RowRec = 1
ColRec = 0
CountPnl = 10
ColMax = 5
'ตั้งค่ารูปแบบ ตัวอักษร
Call txtReady
End If
End Sub
Private Sub CmTools_Change()
If CmTools.ListIndex = 0 Then
dtPath = "ThicknessTester"
Else
dtPath = "WeightScale"
End If
dtPath = "D:\Data\" & dtPath
activePort = Read_Text(dtPath)
End Sub
Private Sub CommandButton2_Click()
‘เรียกฟอร์มการตั้งค่า Port ขึ้นมา
FmSetting.Show vbModal
End Sub
Private Sub UserForm_Activate()
With CmTools
.Clear
.AddItem "Thickness tester"
.AddItem "Weight scale"
.ListIndex = 0
End With
Dim dtPath As String
If CmTools.ListIndex = 0 Then
dtPath = "ThicknessTester"
Else
dtPath = "WeightScale"
End If
'ตำแหน่งเก็บไฟล์ข้อมูลของการตั้งค่า
Port
dtPath = "D:\Data\" & dtPath
activePort = Read_Text(dtPath)
'acPort คือค่าที่จะใช้ Connect ณ ตอนนั้น ๆ
End Sub
Sub txtReady() 'text show when ready
With LaOnline
.Caption = "Port Open" '"Ready"
.BackColor = RGB(0, 255, 0)
End With
End Sub
Sub txtNormal() 'text show in normal form
With LaOnline
.Caption = "Port Close"
.BackColor = RGB(240, 240, 240)
End With
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As
Integer)
‘ดักเหตุการณ์กรณีกดปิด Excel แต่ไม่ได้ปิด Port
If XMCommCRC1.PortOpen Then XMCommCRC1.PortOpen = False
End
End Sub
Private Sub XMCommCRC1_OnComm()
Dim buffer
'รับค่าที่ส่งมาจาก Com port
buffer = XMCommCRC1.InputData
'<< แสดงผลการวัดที่ Label LaOnline
‘จะเห็นว่าใช้คำสั่ง MID ในการดักเอา ส่วนที่ต้องการ คือตำแหน่งที่ 5-12
LaOnline.Caption = Mid(buffer, 5, 8)
Call EnterValue(LaOnline.Caption)
'<< ป้อนผลการวัดที่ได้ลงใน
Excel
End Sub
|
ก็เป็นอันเสร็จสินในส่วนของ Code การทำงานทั้งหมด
บทความต่อไปมาดูผลลัพธ์การทำงานของโปรแกรมกันครับ
บทความต่อไปมาดูผลลัพธ์การทำงานของโปรแกรมกันครับ
ความคิดเห็น
แสดงความคิดเห็น