📄 mdlcom.bas
字号:
Dim BufferLen As Integer
Dim ReceivedBytes As Long
Dim buffer() As Byte
Dim i As Long
Dim Count As Integer
BufferLen = bytesNeed
ReDim buffer(1 To BufferLen) As Byte
SUCCESS = ReadFile(commHandle, buffer(1), BufferLen, ReceivedBytes, ByVal 0)
If (SUCCESS <> 0) Then
If ReceivedBytes > 0 Then
ReDim returnBytes(1 To bytesNeed)
For i = 1 To ReceivedBytes
returnBytes(i) = buffer(i)
Next i
Count = ReceivedBytes
If ReceivedBytes < bytesNeed Then
Call Delay01(2)
BufferLen = bytesNeed - ReceivedBytes
ReceivedBytes = BufferLen
SUCCESS = ReadFile(commHandle, buffer(1), BufferLen, ReceivedBytes, ByVal 0)
If SUCCESS <> 0 And BufferLen = ReceivedBytes Then
For i = 1 To ReceivedBytes
returnBytes(Count + i) = buffer(i)
Next
getCommLongBytes = OP_SUCCESSED
Else
getCommLongBytes = OP_FAILED
End If
ElseIf ReceivedBytes = bytesNeed Then
getCommLongBytes = OP_SUCCESSED
Else
getCommLongBytes = OP_FAILED
End If
Else
getCommLongBytes = OP_FAILED
End If
Else
getCommLongBytes = OP_FAILED
End If
Call ClearCommError(commHandle, lpErrors, lpStat)
End Function
Public Function getCommData(commHandle As Long, bytesNeed As Integer) As Long
Dim BufferLen As Integer
Dim ReceivedBytes As Long
Dim buffer() As Byte
Dim i As Long
Dim Count As Integer
BufferLen = bytesNeed
ReDim buffer(1 To BufferLen) As Byte
SUCCESS = ReadFile(commHandle, buffer(1), BufferLen, ReceivedBytes, ByVal 0)
If (SUCCESS <> 0) Then
If ReceivedBytes > 0 Then
ReDim returnBytes(1 To bytesNeed)
For i = 1 To ReceivedBytes
returnBytes(i) = buffer(i)
Next i
Count = ReceivedBytes
If ReceivedBytes = bytesNeed Then
getCommData = OP_SUCCESSED
Else
getCommData = OP_FAILED
End If
Else
getCommData = OP_FAILED
End If
Else
getCommData = OP_FAILED
End If
Call ClearCommError(commHandle, lpErrors, lpStat)
End Function
Public Sub Delay(PauseTime As Integer)
Call HYEvents
Call Sleep(PauseTime * 1000)
End Sub
Public Sub Delay01(PauseTime01 As Integer)
Call HYEvents
Call Sleep(PauseTime01 * 100)
End Sub
'*************************************************0.01秒延时***************************************************************
Public Sub Delay001(PauseTime001 As Integer)
Call HYEvents
Call Sleep(PauseTime001 * 10)
End Sub
'*************************************************0.001秒延时***************************************************************
Public Sub Delay0001(PauseTime0001 As Integer)
Call HYEvents
Call Sleep(PauseTime0001)
End Sub
Function GetTrueValue(hightByte As Byte, lowByte As Byte) As Long
'getTrueValue = CInt("&H" & Format(Hex(hightByte), "00") & Format(Hex(lowByte), "00"))
Dim Str1 As String
Dim Str2 As String
Str1 = Hex(hightByte)
If Len(Str1) = 1 Then Str1 = "0" & Str1
Str2 = Hex(lowByte)
If Len(Str2) = 1 Then Str2 = "0" & Str2
GetTrueValue = CInt("&H" & Str1 & Str2)
End Function
Function getBit(inputByte As Byte, bit As Byte) As Boolean
getBit = False
If (bit >= 0 And bit <= 7) Then
If (inputByte And (2 ^ bit)) Then
getBit = True
End If
Else
getBit = False
End If
End Function
Public Sub HYEvents()
DoEvents
End Sub
Public Function SendCommBytes1(commHandle As Long, cmd() As Byte, BytesToBeSent As Byte) As Long
Dim SentBytes As Long
Dim buffer() As Byte
Dim i As Long
Call PurgeComm(commHandle, PURGE_TXCLEAR Or PURGE_RXCLEAR)
ReDim buffer(1 To BytesToBeSent) As Byte
For i = 1 To BytesToBeSent
buffer(i) = cmd(i)
Next
SUCCESS = WriteFile(commHandle, buffer(1), BytesToBeSent, SentBytes, ByVal 0)
If (SUCCESS <> 0) And (SentBytes = BytesToBeSent) Then
FlushFileBuffers (commHandle)
SendCommBytes1 = OP_SUCCESSED
Else
SendCommBytes1 = OP_FAILED
End If
Call ClearCommError(commHandle, lpErrors, lpStat)
End Function
Public Function getCommBytesWithReturn(commHandle As Long, bytesNeed As Byte) As Long
Dim BufferLen As Byte
Dim ReceivedBytes As Long
Dim buffer() As Byte
Dim i As Long
Dim Count As Integer
BufferLen = bytesNeed
ReDim buffer(1 To BufferLen) As Byte
SUCCESS = ReadFile(commHandle, buffer(1), BufferLen, ReceivedBytes, ByVal 0)
If (SUCCESS <> 0) Then
If ReceivedBytes > 0 And ReceivedBytes = bytesNeed Then
ReDim returnBytes(1 To ReceivedBytes)
For i = 1 To ReceivedBytes
returnBytes(i) = buffer(i)
Next i
getCommBytesWithReturn = OP_SUCCESSED
Else
getCommBytesWithReturn = OP_FAILED
End If
Else
getCommBytesWithReturn = OP_FAILED
End If
Call ClearCommError(commHandle, lpErrors, lpStat)
End Function
Function getBigBit(inputByte As Single, bit As Byte) As Boolean
getBigBit = False
If (bit >= 0 And bit <= 7) Then
If (inputByte And (2 ^ bit)) Then
getBigBit = True
End If
Else
getBigBit = False
End If
End Function
Public Sub ClearPort()
Call PurgeComm(rpmEngineer.RpmHandle, PURGE_TXCLEAR Or PURGE_RXCLEAR)
End Sub
Public Function getCommBytesCount(commHandle As Long, bytesNeed As Byte) As Long
Dim BufferLen As Byte
Dim ReceivedBytes As Long
Dim buffer() As Byte
Dim i As Long
Dim Count As Integer
Dim T1 As Single
T1 = Timer
BufferLen = bytesNeed
ReDim buffer(1 To BufferLen) As Byte
SUCCESS = ReadFile(commHandle, buffer(1), BufferLen, ReceivedBytes, ByVal 0)
If (SUCCESS <> 0) Then
If ReceivedBytes > 0 Then
ReDim returnBytes(1 To bytesNeed)
For i = 1 To ReceivedBytes
returnBytes(i) = buffer(i)
Next i
'第一次Read字节数
Count = ReceivedBytes
'当真正收到的字节数< 想要收到的字节数时,再一次Read第一次没有Read出来的那部份
If ReceivedBytes < bytesNeed Then
BufferLen = bytesNeed - ReceivedBytes
ReceivedBytes = BufferLen
SUCCESS = ReadFile(commHandle, buffer(1), BufferLen, ReceivedBytes, ByVal 0)
If SUCCESS <> 0 And ReceivedBytes >= 1 Then
For i = 1 To ReceivedBytes
returnBytes(Count + i) = buffer(i)
Next
' '第一次Read字节数+ '第二次Read字节数
Count = Count + ReceivedBytes
End If
End If
getCommBytesCount = Count
Else
getCommBytesCount = OP_FAILED
End If
Else
'SUCCESS=0,通讯失败
getCommBytesCount = OP_FAILED
End If
Call ClearCommError(commHandle, lpErrors, lpStat)
End Function
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -