📄 mdlcom.bas
字号:
Attribute VB_Name = "mdlCom"
Option Explicit
'*************************************************************************
'此模块只适用变品频器,和温度巡检仪,发动机转速计,并且尽量不要使用全局变量
'*************************************************************************
Public Const OP_SUCCESSED = -2
Public Const OP_FAILED = -1
Public Const OP_DOING = 0
Public Const Response_BUSY = 5
Public Const Response_OK = 6
Public Const Response_NACK = 21
Public returnBytes() As Byte
Public commFailed As Boolean
Public com1Timeouts As COMMTIMEOUTS
Public VVVFTimeous As COMMTIMEOUTS
Public temperatureHandle As Long
Public DCBVFD As dcb
Public DCBTemperature As dcb
Public BCDComm As dcb
Public comamdByte As Byte
Dim lpErrors As Long
Dim lpStat As COMSTAT
Dim SUCCESS As Long
Dim errNum As Long
Public Sub PureComm(commHandle As Long)
Dim SUCCESS As Long
SUCCESS = PurgeComm(commHandle, PURGE_TXCLEAR Or PURGE_TXABORT Or PURGE_RXCLEAR Or PURGE_RXABORT)
End Sub
Public Function ComPortInit(comport As String, Optional m_nBaudrate As Integer = 9600) As Long 'OK-commhandle, failed=-1
Dim commHandle As Long
commHandle = CreateFile(comport, GENERIC_READ Or GENERIC_WRITE, 0, ByVal 0, OPEN_EXISTING, 0, ByVal 0)
If commHandle = -1 Then
ComPortInit = OP_FAILED
Exit Function
End If
SUCCESS = GetCommState(commHandle, BCDComm)
BCDComm.BaudRate = m_nBaudrate
BCDComm.StopBits = 0 'one stop bits
BCDComm.Parity = 0
BCDComm.ByteSize = 8
SUCCESS = SetCommState(commHandle, BCDComm)
If SUCCESS = 0 Then
ComPortInit = OP_FAILED
Exit Function
End If
SUCCESS = GetCommTimeouts(commHandle, com1Timeouts)
If SUCCESS <> 0 Then
'com1Timeouts.ReadIntervalTimeout = 10
'com1Timeouts.ReadTotalTimeoutMultiplier = 500
com1Timeouts.ReadIntervalTimeout = &HFFFFFFFF
com1Timeouts.ReadTotalTimeoutMultiplier = 0
com1Timeouts.ReadTotalTimeoutConstant = 0
SUCCESS = SetCommTimeouts(commHandle, com1Timeouts)
End If
ComPortInit = commHandle
End Function
Public Function SendCommand(ByVal cmd As Byte, Optional iSendTime As Long = 5) As Long
Dim KK As Long
KK = 0
Do
KK = KK + 1
If KK > iSendTime Then Exit Do
If SendCommByte(Analyzer.AnalyzerHandle, cmd) = OP_SUCCESSED Then
Call Delay01(2)
If getCommByte(Analyzer.AnalyzerHandle) = OP_FAILED Then
Call Delay01(2)
If getCommByte(Analyzer.AnalyzerHandle) = OP_FAILED Then ReDim returnBytes(1 To 1): returnBytes(1) = &HFF&
End If
Else
If KK >= iSendTime - 1 Then
Analyzer.分析仪通讯端口检测
End If
ReDim returnBytes(1 To 1)
returnBytes(1) = &HFF&
End If
Loop Until returnBytes(1) = 6 Or returnBytes(1) = 0 Or returnBytes(1) = 1 Or returnBytes(1) = 2 Or returnBytes(1) = 5 Or returnBytes(1) = &H15&
If returnBytes(1) = 6 Then
SendCommand = OP_SUCCESSED
Else
SendCommand = OP_FAILED
End If
End Function
Public Function SendCommByte(commHandle As Long, cmd As Byte) As Long
Dim SentBytes As Long
Dim buffer(1 To 1) As Byte
Dim i As Long
Call PurgeComm(commHandle, PURGE_TXCLEAR Or PURGE_RXCLEAR)
buffer(1) = cmd
comamdByte = cmd
SUCCESS = WriteFile(commHandle, buffer(1), 1, SentBytes, ByVal 0)
If (SUCCESS <> 0) And (SentBytes = 1) Then
FlushFileBuffers (commHandle)
SendCommByte = OP_SUCCESSED
Else
SendCommByte = OP_FAILED
End If
Call ClearCommError(commHandle, lpErrors, lpStat)
End Function
Public Function SendCommBytes(commHandle As Long, cmd() As Byte, BytesToBeSent As Byte) As Long
Dim SentBytes As Long
Dim buffer() As Byte
Dim i As Integer
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)
SendCommBytes = OP_SUCCESSED
Else
SendCommBytes = OP_FAILED
End If
Call ClearCommError(commHandle, lpErrors, lpStat)
End Function
Public Function getCommByte(commHandle As Long) As Long
Dim BufferLen As Byte
Dim ReceivedBytes As Long
Dim buffer(1 To 1) As Byte
Dim i As Long
BufferLen = 1
SUCCESS = ReadFile(commHandle, buffer(1), BufferLen, ReceivedBytes, ByVal 0)
If SUCCESS = 1 Then
If (SUCCESS <> 0) Then
ReDim returnBytes(1 To 1)
If ReceivedBytes = 1 Then
returnBytes(1) = buffer(1)
getCommByte = OP_SUCCESSED
Else
getCommByte = OP_FAILED
End If
Else
getCommByte = OP_FAILED
End If
Else
getCommByte = OP_FAILED
End If
Call ClearCommError(commHandle, lpErrors, lpStat)
End Function
Public Function getCommBytes(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
getCommBytes = OP_SUCCESSED
Else
getCommBytes = OP_FAILED
End If
Else
getCommBytes = OP_FAILED
End If
Call ClearCommError(commHandle, lpErrors, lpStat)
End Function
Public Function getCommBytesNew(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 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(1)
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
getCommBytesNew = OP_SUCCESSED
Else
getCommBytesNew = OP_FAILED
End If
ElseIf ReceivedBytes = bytesNeed Then
getCommBytesNew = OP_SUCCESSED
Else
getCommBytesNew = OP_FAILED
End If
Else
getCommBytesNew = OP_FAILED
End If
Else
getCommBytesNew = OP_FAILED
End If
Call ClearCommError(commHandle, lpErrors, lpStat)
End Function
Public Function getCommLongBytes(commHandle As Long, bytesNeed As Integer) As Long
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -