给你一个串口类的框架,实现的代码由你自已根据情况完成。其中的蓝色代码为你的实现函数,可以另写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 = 256000End Enum Public Enum EnuParityCheck enuParityCheck_No = 0 enuParityCheck_Odd = 1 enuParityCheck_Even = 2 enuParityCheck_Mark = 3 enuParityCheck_Space = 4End Enum Public Enum EnuByteSize enuByteSize_Four = 4 enuByteSize_Five = 5 enuByteSize_Six = 6 enuByteSize_Serven = 7 enuByteSize_Eight = 8End Enum Public Enum EnuStopBits enuStopBits_One = 0 enuStopBits_One5 = 1 enuStopBits_Two = 2End Enum Private mlngPortID As LongPrivate mblnLockPortID As Boolean Public Property Let PortID(ByVal vlngPortID As Long) If Not mblnLockPortID Then mlngPortID = vlngPortID End IfEnd Property Public Property Get PortID() As Long PortID = mlngPortIDEnd 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 IfEnd Function Public Function IsOpened() As Boolean IsOpened = mblnLockPortIDEnd 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 IfEnd 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 IfEnd 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 IfEnd 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 IfEnd Function Public Function GetPortBufDataLen(ByRef rlngBufSize As Long) As Long GetPortBufDataLen = 0 If mblnLockPortID Then GetPortBufDataLen = YourPortGetPortBufDataLen(PortID, rlngBufSize) End IfEnd Function Public Sub SetShareMode(ByVal vblnSharePort As Boolean) If mblnLockPortID Then Call YourPortSetShareMode(PortID, vblnSharePort) End IfEnd Sub Public Sub SetAddrMode(ByVal vblnDataFrameAddr As Boolean) If mblnLockPortID Then Call YourPortSetAddrMode(PortID, vblnDataFrameAddr) End IfEnd Sub Public Sub SetAddrByteLen(ByVal vlngAddrByteLen As Long) If mblnLockPortID Then Call YourPortSetAddByteLen(PortID, vlngAddrByteLen) End IfEnd 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 IfEnd Function Public Sub ClearRxBuf() If mblnLockPortID Then YourPortClearRxBuf (PortID) End IfEnd Sub Public Function GetRxBufDataLen() As Long GetRxBufDataLen = 0 If mblnLockPortID Then GetRxBufDataLen = YourPortGetRxBufDataLen(PortID) End IfEnd Function Public Function GetByteInterval() As Long GetByteInterval = 0 If mblnLockPortID Then GetByteInterval = YourPortGetByteInterval(PortID) End IfEnd Function Public Sub SetByteInterval(ByVal vlngByteInterval As Long) If mblnLockPortID Then Call YourPortSetByteInterval(PortID, vlngByteInterval) End IfEnd Sub Public Function GetRxBufSize() As Long GetRxBufSize = 0 If mblnLockPortID Then GetRxBufSize = YourPortGetRxBufSize(PortID) End IfEnd Function Public Sub SetRxBufSize(ByVal vlngRxBufSize As Long) If mblnLockPortID Then Call YourPortSetRxBufSize(PortID, vlngRxBufSize) End IfEnd Sub Private Sub Class_Initialize() PortID = 0 mblnLockPortID = FalseEnd Sub

评论