给你一个串口类的框架,实现的代码由你自已根据情况完成。
其中的蓝色代码为你的实现函数,可以另写API的函数库或封装了MSCOMM控件的函数库。
Option Explicit
Public Enum EnuBaudRate
enuBaudRate_110 = 110
enuBaudRate_300 = 300
enuBaudRate_600 = 600
enuBaudRate_1200 = 1200
enuBaudRate_2400 = 2400
enuBaudRate_4800 = 4800
enuBaudRate_5208 = 5208
enuBaudRate_9600 = 9600
enuBaudRate_14400 = 14400
enuBaudRate_19200 = 19200
enuBaudRate_38400 = 38400
enuBaudRate_56000 = 56000
enuBaudRate_57600 = 57600
enuBaudRate_115200 = 115200
enuBaudRate_128000 = 128000
enuBaudRate_256000 = 256000
End Enum
Public Enum EnuParityCheck
enuParityCheck_No = 0
enuParityCheck_Odd = 1
enuParityCheck_Even = 2
enuParityCheck_Mark = 3
enuParityCheck_Space = 4
End Enum
Public Enum EnuByteSize
enuByteSize_Four = 4
enuByteSize_Five = 5
enuByteSize_Six = 6
enuByteSize_Serven = 7
enuByteSize_Eight = 8
End Enum
Public Enum EnuStopBits
enuStopBits_One = 0
enuStopBits_One5 = 1
enuStopBits_Two = 2
End Enum
Private mlngPortID As Long
Private mblnLockPortID As Boolean
Public Property Let PortID(ByVal vlngPortID As Long)
If Not mblnLockPortID Then
mlngPortID = vlngPortID
End If
End Property
Public Property Get PortID() As Long
PortID = mlngPortID
End Property
Public Function OpenPort(ByVal venuBaudRate As EnuBaudRate, ByVal venuParityCheck As EnuParityCheck, _
ByVal venuByteSize As EnuByteSize, ByVal venuStopBits As EnuStopBits) As Boolean
Dim lngReturn As Long
OpenPort = False
If PortID > 0 And PortID <= 32 Then
If Not mblnLockPortID Then
lngReturn = YourPortOpen(PortID, venuBaudRate, venuParityCheck, venuByteSize, venuStopBits)
If CBool(lngReturn) Then
OpenPort = True
mblnLockPortID = True
End If
Else
OpenPort = True
End If
End If
End Function
Public Function IsOpened() As Boolean
IsOpened = mblnLockPortID
End Function
Public Function ClosePort() As Boolean
Dim lngReturn As Long
ClosePort = True
If mblnLockPortID Then
lngReturn = YourPortClose(PortID)
If CBool(lngReturn) Then
ClosePort = True
mblnLockPortID = False
End If
End If
End Function
Public Function ReadData(ByRef rarrbytDataBuf() As Byte, ByVal vlngBufSize As Long) As Long
Dim intReadLBound As Integer
ReadData = 0
If mblnLockPortID Then
intReadLBound = LBound(rarrbytDataBuf)
ReadData = YourPortReadData(PortID, rarrbytDataBuf(intReadLBound), vlngBufSize)
End If
End Function
Public Function SendData(ByRef rarrbytDataBuf() As Byte, ByVal vlngBufSize As Long) As Long
Dim intSendLBound As Integer
SendData = 0
If mblnLockPortID Then
intSendLBound = LBound(rarrbytDataBuf)
SendData = YourPortSendData(PortID, rarrbytDataBuf(intSendLBound), vlngBufSize)
End If
End Function
Public Function ChangeParity(ByVal venuParityCheck As EnuParityCheck) As Boolean
Dim lngReturn As Long
ChangeParity = False
If mblnLockPortID Then
lngReturn = YourPortChangeParity(PortID, venuParityCheck)
If CBool(lngReturn) Then
ChangeParity = True
End If
End If
End Function
Public Function GetPortBufDataLen(ByRef rlngBufSize As Long) As Long
GetPortBufDataLen = 0
If mblnLockPortID Then
GetPortBufDataLen = YourPortGetPortBufDataLen(PortID, rlngBufSize)
End If
End Function
Public Sub SetShareMode(ByVal vblnSharePort As Boolean)
If mblnLockPortID Then
Call YourPortSetShareMode(PortID, vblnSharePort)
End If
End Sub
Public Sub SetAddrMode(ByVal vblnDataFrameAddr As Boolean)
If mblnLockPortID Then
Call YourPortSetAddrMode(PortID, vblnDataFrameAddr)
End If
End Sub
Public Sub SetAddrByteLen(ByVal vlngAddrByteLen As Long)
If mblnLockPortID Then
Call YourPortSetAddByteLen(PortID, vlngAddrByteLen)
End If
End Sub
Public Function SendAndWaitReply(ByRef rarrbytWriteBuf() As Byte, ByVal vlngWriteBufLen As Long, _
ByRef rarrbytReadBuf() As Byte, ByVal vlngReadBufLen As Long, _
ByRef rlngReturnBufLen As Long, ByVal vlngWaitFirstByteTime As Long) As Boolean
Dim lngReturnBufLen As Long
Dim intWriteLBound As Integer
Dim intReadLBound As Integer
Dim lngReturn As Long
SendAndWaitReply = False
If mblnLockPortID Then
intWriteLBound = LBound(rarrbytWriteBuf)
intReadLBound = LBound(rarrbytReadBuf)
lngReturn = YourPortSendAndWaitReply(PortID, rarrbytWriteBuf(intWriteLBound), vlngWriteBufLen, rarrbytReadBuf(intReadLBound), _
vlngReadBufLen, lngReturnBufLen, vlngWaitFirstByteTime)
rlngReturnBufLen = lngReturnBufLen
If CBool(lngReturn) Then
SendAndWaitReply = True
End If
End If
End Function
Public Sub ClearRxBuf()
If mblnLockPortID Then
YourPortClearRxBuf (PortID)
End If
End Sub
Public Function GetRxBufDataLen() As Long
GetRxBufDataLen = 0
If mblnLockPortID Then
GetRxBufDataLen = YourPortGetRxBufDataLen(PortID)
End If
End Function
Public Function GetByteInterval() As Long
GetByteInterval = 0
If mblnLockPortID Then
GetByteInterval = YourPortGetByteInterval(PortID)
End If
End Function
Public Sub SetByteInterval(ByVal vlngByteInterval As Long)
If mblnLockPortID Then
Call YourPortSetByteInterval(PortID, vlngByteInterval)
End If
End Sub
Public Function GetRxBufSize() As Long
GetRxBufSize = 0
If mblnLockPortID Then
GetRxBufSize = YourPortGetRxBufSize(PortID)
End If
End Function
Public Sub SetRxBufSize(ByVal vlngRxBufSize As Long)
If mblnLockPortID Then
Call YourPortSetRxBufSize(PortID, vlngRxBufSize)
End If
End Sub
Private Sub Class_Initialize()
PortID = 0
mblnLockPortID = False
End Sub
评论