⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mdlcom.bas

📁 FLA-502控制、标定、分析用
💻 BAS
📖 第 1 页 / 共 2 页
字号:
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 + -