?? form1.frm
字號:
Alignment = 1 'Right Justify
AutoSize = -1 'True
Caption = "0"
BeginProperty Font
Name = "宋體"
Size = 21.75
Charset = 134
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
ForeColor = &H000000C0&
Height = 435
Index = 2
Left = -69840
TabIndex = 3
Top = 1800
Width = 240
End
Begin VB.Label LabelName
Alignment = 1 'Right Justify
AutoSize = -1 'True
Caption = "測量值"
BeginProperty Font
Name = "宋體"
Size = 21.75
Charset = 134
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
ForeColor = &H00FF0000&
Height = 435
Index = 0
Left = 2040
TabIndex = 2
Top = 1080
Width = 1350
End
Begin VB.Label Label
Alignment = 1 'Right Justify
AutoSize = -1 'True
Caption = "0"
BeginProperty Font
Name = "宋體"
Size = 21.75
Charset = 134
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
ForeColor = &H000000C0&
Height = 435
Index = 0
Left = 4560
TabIndex = 1
Top = 1080
Width = 240
End
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Private data0(0) As String
Private data1(1) As String
Private data2(5) As String
Private data3(5) As String
Private data4(5) As String
Private strInputData As String '輸入數(shù)據(jù)
Private intN As Integer '循環(huán)變量
Private bytReceive() As Byte '發(fā)送數(shù)據(jù)
Private bytSend() As Byte '接收數(shù)據(jù)
Private lngSendCrc16 As Long '發(fā)送數(shù)據(jù)的Crc_16校驗(yàn)
Private lngReceiveCrc16 As Long '接收數(shù)據(jù)的Crc_16校驗(yàn)
Private bytCrcH As Byte '接收數(shù)據(jù)的校驗(yàn)的高位
Private bytCrcL As Byte '接收數(shù)據(jù)的校驗(yàn)的低位
Private Sub Command0_Click()
Call 寫入數(shù)據(jù)("0204", "0", "0")
End Sub
Private Sub Command1_Click()
Call 寫入數(shù)據(jù)("0204", "1", "0")
End Sub
Private Sub Command2_Click()
Call 寫入數(shù)據(jù)("0204", "2", "0")
End Sub
Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.Settings = "9600,N,8,1"
MSComm1.InputMode = comInputModeBinary
MSComm1.PortOpen = True
Timer1.Interval = 100
End Sub
Private Sub Timer1_Timer()
data0(0) = 讀取數(shù)據(jù)("0000")
data1(0) = 讀取數(shù)據(jù)("0100")
data1(1) = 讀取數(shù)據(jù)("0104")
data2(0) = 讀取數(shù)據(jù)("0200")
data2(1) = 讀取數(shù)據(jù)("0204")
data2(2) = 讀取數(shù)據(jù)("0208")
data2(3) = 讀取數(shù)據(jù)("020C")
data2(4) = 讀取數(shù)據(jù)("0210")
data2(5) = 讀取數(shù)據(jù)("0214")
data3(0) = 讀取數(shù)據(jù)("0300")
data3(1) = 讀取數(shù)據(jù)("0304")
data3(2) = 讀取數(shù)據(jù)("0308")
data3(3) = 讀取數(shù)據(jù)("030C")
data3(4) = 讀取數(shù)據(jù)("0310")
data3(5) = 讀取數(shù)據(jù)("0314")
data4(0) = 讀取數(shù)據(jù)("0400")
data4(1) = 讀取數(shù)據(jù)("0404")
data4(2) = 讀取數(shù)據(jù)("0408")
data4(3) = 讀取數(shù)據(jù)("040C")
data4(4) = 讀取數(shù)據(jù)("0410")
data4(5) = 讀取數(shù)據(jù)("0414")
Label(0).Caption = data0(0)
Label(1).Caption = data1(0)
Label(2).Caption = data1(1)
Label(3).Caption = data2(0)
Label(4).Caption = data2(1)
Label(5).Caption = data2(2)
Label(6).Caption = data2(3)
Label(7).Caption = data2(4)
Label(8).Caption = data2(5)
Label(9).Caption = data3(0)
Label(10).Caption = data3(1)
Label(11).Caption = data3(2)
Label(12).Caption = data3(3)
Label(13).Caption = data3(4)
Label(14).Caption = data3(5)
Label(15).Caption = data4(0)
Label(16).Caption = data4(1)
Label(17).Caption = data4(2)
Label(18).Caption = data4(3)
Label(19).Caption = data4(4)
Label(20).Caption = data4(5)
End Sub
Private Sub Label_Click(Index As Integer)
Select Case Index
Case 1
strInputData = InputBox("符號:" & vbLf & "地址:0100" & vbLf & "說明:" & vbLf & "量程:", "參數(shù)修改")
Call 寫入數(shù)據(jù)("0100", strInputData, data2(1))
Case 2
strInputData = InputBox("符號:" & vbLf & "地址:0104" & vbLf & "說明:" & vbLf & "量程:", "參數(shù)修改")
Call 寫入數(shù)據(jù)("0104", strInputData, data2(1))
Case 3
strInputData = InputBox("符號:" & vbLf & "地址:0200" & vbLf & "說明:" & vbLf & "量程:", "參數(shù)修改")
Call 寫入數(shù)據(jù)("0200", strInputData, "0")
' Case 4
' strInputData = InputBox("符號:" & vbLf & "地址:0204" & vbLf & "說明:" & vbLf & "量程:", "參數(shù)修改")
' Call 寫入數(shù)據(jù)("0204", strInputData)
Case 5
strInputData = InputBox("符號:" & vbLf & "地址:0208" & vbLf & "說明:" & vbLf & "量程:", "參數(shù)修改")
Call 寫入數(shù)據(jù)("0208", strInputData, data2(1))
Case 6
strInputData = InputBox("符號:" & vbLf & "地址:020C" & vbLf & "說明:" & vbLf & "量程:", "參數(shù)修改")
Call 寫入數(shù)據(jù)("020C", strInputData, data2(1))
Case 7
strInputData = InputBox("符號:" & vbLf & "地址:0210" & vbLf & "說明:" & vbLf & "量程:", "參數(shù)修改")
Call 寫入數(shù)據(jù)("0210", strInputData, "0")
Case 8
strInputData = InputBox("符號:" & vbLf & "地址:0214" & vbLf & "說明:" & vbLf & "量程:", "參數(shù)修改")
Call 寫入數(shù)據(jù)("0214", strInputData, "0")
Case 9
strInputData = InputBox("符號:" & vbLf & "地址:0300" & vbLf & "說明:" & vbLf & "量程:", "參數(shù)修改")
Call 寫入數(shù)據(jù)("0300", strInputData, "0")
Case 10
strInputData = InputBox("符號:" & vbLf & "地址:0304" & vbLf & "說明:" & vbLf & "量程:", "參數(shù)修改")
Call 寫入數(shù)據(jù)("0304", strInputData, data2(1))
Case 11
strInputData = InputBox("符號:" & vbLf & "地址:0308" & vbLf & "說明:" & vbLf & "量程:", "參數(shù)修改")
Call 寫入數(shù)據(jù)("0308", strInputData, data2(1))
Case 12
strInputData = InputBox("符號:" & vbLf & "地址:030C" & vbLf & "說明:" & vbLf & "量程:", "參數(shù)修改")
Call 寫入數(shù)據(jù)("030C", strInputData, "0")
Case 13
strInputData = InputBox("符號:" & vbLf & "地址:0310" & vbLf & "說明:" & vbLf & "量程:", "參數(shù)修改")
Call 寫入數(shù)據(jù)("0310", strInputData, data2(1))
Case 14
strInputData = InputBox("符號:" & vbLf & "地址:0314" & vbLf & "說明:" & vbLf & "量程:", "參數(shù)修改")
Call 寫入數(shù)據(jù)("0314", strInputData, data2(1))
' Case 15
' strInputData = InputBox("符號:" & vbLf & "地址:0300" & vbLf & "說明:" & vbLf & "量程:", "參數(shù)修改")
' Call 寫入數(shù)據(jù)("0300", strInputData, "0")
' Case 16
' strInputData = InputBox("符號:" & vbLf & "地址:0304" & vbLf & "說明:" & vbLf & "量程:", "參數(shù)修改")
' Call 寫入數(shù)據(jù)("0304", strInputData, "3")
' Case 17
' strInputData = InputBox("符號:" & vbLf & "地址:0308" & vbLf & "說明:" & vbLf & "量程:", "參數(shù)修改")
' Call 寫入數(shù)據(jù)("0308", strInputData, data2(1))
' Case 18
' strInputData = InputBox("符號:" & vbLf & "地址:030C" & vbLf & "說明:" & vbLf & "量程:", "參數(shù)修改")
' Call 寫入數(shù)據(jù)("030C", strInputData, data2(1))
' Case 19
' strInputData = InputBox("符號:" & vbLf & "地址:0310" & vbLf & "說明:" & vbLf & "量程:", "參數(shù)修改")
' Call 寫入數(shù)據(jù)("0310", strInputData, "0")
' Case 20
' strInputData = InputBox("符號:" & vbLf & "地址:0314" & vbLf & "說明:" & vbLf & "量程:", "參數(shù)修改")
' Call 寫入數(shù)據(jù)("0314", strInputData, "0")
End Select
End Sub
Private Function 讀取數(shù)據(jù)(Adress As String) As String
ReDim bytSend(7)
bytSend(0) = 1 '儀表地址
bytSend(1) = 3 '讀取命令
Adress = Right("0000" & Adress, 4)
bytSend(2) = "&H" & Left(Adress, 2) '地址高位
bytSend(3) = "&H" & Right(Adress, 2) '地址低位
bytSend(4) = 0
bytSend(5) = 2
lngSendCrc16 = &HFFFF&
For intN = 0 To 5
lngSendCrc16 = Crc_16(CLng(bytSend(intN)), &HA001&, lngSendCrc16)
Next intN
bytSend(6) = CByte(lngSendCrc16 And &HFF&) '校驗(yàn)的高位
bytSend(7) = CByte(Fix(lngSendCrc16 / 256) And &HFF&) '校驗(yàn)的低位
MSComm1.Output = bytSend
Sleep 100
ReDim bytReceive(8)
Dim 小數(shù)系數(shù) As Double
Dim 小數(shù)格式 As String
bytReceive = MSComm1.Input
If UBound(bytReceive) = 8 Then
lngReceiveCrc16 = &HFFFF& '接收數(shù)據(jù)的Crc_16校驗(yàn)
For intN = 0 To (UBound(bytReceive) - 2)
lngReceiveCrc16 = Crc_16(CLng(bytReceive(intN)), &HA001&, lngReceiveCrc16)
Next intN
bytCrcH = CByte(lngReceiveCrc16 And &HFF&) '校驗(yàn)的高位
bytCrcL = CByte(Fix(lngReceiveCrc16 / 256) And &HFF&) '校驗(yàn)的低位
If bytCrcL = bytReceive(UBound(bytReceive) - 1) And bytCrcH = bytReceive(UBound(bytReceive)) Then '判斷接收數(shù)據(jù)的Crc_16校驗(yàn)的正確性
小數(shù)系數(shù) = 10 ^ (-1 * bytReceive(6))
Select Case bytReceive(6)
Case 0
小數(shù)格式 = "0"
Case 1
小數(shù)格式 = "0.0"
Case 2
小數(shù)格式 = "0.00"
Case 3
小數(shù)格式 = "0.000"
End Select
If bytReceive(3) >= 128 Then
讀取數(shù)據(jù) = Format(((bytReceive(3) - 128) * 256 + bytReceive(4) - 32768) * 小數(shù)系數(shù), 小數(shù)格式)
Else
讀取數(shù)據(jù) = Format((bytReceive(3) * 256 + bytReceive(4)) * 小數(shù)系數(shù), 小數(shù)格式)
End If
End If
End If
End Function
Private Sub 寫入數(shù)據(jù)(Adress As String, NewData As String, Dot As String)
If NewData <> "" Then
ReDim bytSend(12)
bytSend(0) = 1 '儀表地址
bytSend(1) = 16 '寫入命令
Adress = Right("0000" & Adress, 4)
bytSend(2) = "&H" & Left(Adress, 2) '地址高位
bytSend(3) = "&H" & Right(Adress, 2) '地址低位
bytSend(4) = 0
bytSend(5) = 2
bytSend(6) = 4
If bytSend(2) = 2 And bytSend(3) = 4 Then
Else
NewData = NewData * (10 ^ Dot)
End If
If NewData < 0 Then
bytSend(7) = CLng("&H" & Left(Right("0000" & Hex(65536 + NewData), 4), 2)) '數(shù)值高位
bytSend(8) = CLng("&H" & Right(Right("0000" & Hex(65536 + NewData), 4), 2)) '數(shù)值低位
Else
bytSend(7) = CLng("&H" & Left(Right("0000" & Hex(NewData), 4), 2)) '數(shù)值高位
bytSend(8) = CLng("&H" & Right(Right("0000" & Hex(NewData), 4), 2)) '數(shù)值低位
End If
bytSend(9) = 0 '小數(shù)高位
bytSend(10) = Dot '小數(shù)低位
lngSendCrc16 = &HFFFF&
For intN = 0 To 10
lngSendCrc16 = Crc_16(CLng(bytSend(intN)), &HA001&, lngSendCrc16)
Next intN
bytSend(11) = CByte(lngSendCrc16 And &HFF&) '校驗(yàn)高位
bytSend(12) = CByte(Fix(lngSendCrc16 / 256) And &HFF&) '校驗(yàn)低位
MSComm1.Output = bytSend
Sleep 100
ReDim bytReceive(8)
bytReceive = MSComm1.Input
End If
End Sub
''Crc_16校驗(yàn)函數(shù)
'Private Function Crc_16(ByVal Data As Long, ByVal Genpoly As Long, ByVal CrcData As Long) As Long
' Dim TmpI As Integer
' Data = Data * 2
' For TmpI = 8 To 1 Step -1
' Data = Fix(Data / 2)
' If ((Data Xor CrcData) And 1) Then
' CrcData = Fix(CrcData / 2) Xor Genpoly
' Else
' CrcData = Fix(CrcData / 2)
' End If
' Next TmpI
' Crc_16 = CrcData
'End Function
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -