=1)>PublicStructureOVERLAPPED
PublicInternalAsInt32
PublicInternalHighAsInt32
PublicOffsetAsInt32
PublicOffsetHighAsInt32
PublichEventAsIntPtr
EndStructure
#EndRegion
#Region"常数"
PrivateConstPURGE_RXABORTAsInteger=&H2
PrivateConstPURGE_RXCLEARAsInteger=&H8
PrivateConstPURGE_TXABORTAsInteger=&H1
PrivateConstPURGE_TXCLEARAsInteger=&H4
PrivateConstGENERIC_READAsInteger=&H80000000'打开通信端口时的参数
PrivateConstGENERIC_WRITEAsInteger=&H40000000'打开通信端口时的参数
PrivateConstOPEN_EXISTINGAsInteger=3'打开通信端口时的参数
PrivateConstINVALID_HANDLEAsInteger=-1'通信端口关闭时的Handle值
PrivateConstIO_BUFFER_SIZEAsInteger=1024
PrivateConstFILE_FLAG_OVERLAPPEDAsInt32=&H40000000
PrivateConstERROR_IO_PENDINGAsInt32=997
PrivateConstWAIT_OBJECT_0AsInt32=0
PrivateConstERROR_IO_INCOMPLETEAsInt32=996
PrivateConstWAIT_TIMEOUTAsInt32=&H102&
PrivateConstINFINITEAsInt32=&HFFFFFFFF
PrivateConstTIMER_INTERVALAsInt16=10'定时器所使用的时间隔
#EndRegion
#Region"局部变量"
PrivatemabtRxBufAsByte()
'PrivatemeModeAseMode
PrivatemoThreadTxAsThread
PrivatemoThreadRxAsThread
PrivatemoEventsAsThread
PrivatemiTmpBytes2ReadAsInt32
PrivatemeMaskAseEventMasks
PrivatembDisposedAsBoolean
PrivatembUseXonXoffAsBoolean
PrivatembEnableEventsAsBoolean
PrivatemiBufThresholdAsInt32=1
PrivatemuOvlEAsOVERLAPPED
PrivatemuOvlWAsOVERLAPPED
PrivatemuOvlRAsOVERLAPPED
PrivatemhRSAsIntPtr=INVALID_HANDLE '//串口的handle
PrivatemiPortAsInteger=1 '//默认通信端口为COM1
PrivatemfPortOpenAsBoolean'通信端口打开状态
PrivatemeBaudrateAseBaudrates=eBaudrates.BR_9600'9600bps
PrivatemiTimeoutAsInt32=70 '//
PrivatemiBaudRateAsInt32=9600
PrivatemeParityAseDataParity=eDataParity.Parity_None'无同位校验
PrivatemstopBitAseDataStopBit=eDataStopBit.StopBit_1'停止校验位为1
PrivatemeDataBitAseDataBit=eDataBit.Bit_8'数据长度为8
PrivatemeHwHandshakeAseHwHandShake=eHwHandShake.hhNone'默认为无硬件握手
PrivatemeSwHandshakeAseSwHandShake=eSwHandShake.shNone'默认为无软件握手
PrivatemeCommEventAseEventMasks'通信事件号码
PrivatemeCommErrorAseCommError'错误号码
PrivatemDCBBitAseBitDef'控制区块变量
PrivatemReadLenAsInteger'每次READ命令的读取字节数
PrivatemRThresholdAsInteger=1'触发ondatareceived事件阈值
PrivatemCDHoldingAsBoolean'CD的针脚状态
PrivatemDSRHoldingAsBoolean'DSR的针脚状态
PrivatemCTSHoldingAsBoolean'CTS的针脚状态
PrivatemRIHoldingAsBoolean'RI的针脚状态
PrivatemeStopBitAseDataStopBit=0
PrivatemiDataBitAsInt32=8
PrivatemHEAsGCHandle
PrivatemHRAsGCHandle
PrivatemHWAsGCHandle
PrivatemDTRAsBoolean'DTR状态
PrivatemRTSAsBoolean'RTS状态
PrivatemfTimerAsBoolean'记录定时器的状态
PrivatemiBufferSizeAsInteger=512'默认缓冲区512bytes
PublicmiReceivedAsInteger=0'已收到数据
#EndRegion
#Region"属性"
'通信端口号码属性设置
PublicPropertyCommPort()AsInteger
Get
ReturnmiPort
EndGet
Set(ByValvalueAsInteger)
miPort=value
EndSet
EndProperty
'''设置端口开关
'''设置会调用OpenCom及CloseCom
PublicPropertyPortOpen()AsBoolean
Get
ReturnmfPortOpen
EndGet
Set(ByValvalueAsBoolean)
IfvalueThen'打开
IfmfPortOpenThen'已经打开
ThrowNewException("通信端口已打开")
ExitProperty
EndIf
IfNotOpenCOM()Then
ThrowNewException("通信端口打开错误(端口被其它程序占用或不存在此端口)!
")
ExitProperty
EndIf
mfPortOpen=True
mfTimer=True
IfNotTimer1.EnabledThen
Timer1.Start()
EndIf
Else'关闭通信端口
IfNotCloseCOM()Then'调用关闭端口
ThrowNewException("通信端口关闭错误")
ExitProperty
EndIf
mfPortOpen=False
EndIf
EndSet
EndProperty
'设置通信速度,利用枚举比较方便
PublicPropertyBaudRate()AseBaudrates
Get
ReturnmeBaudrate
EndGet
Set(ByValvalueAseBaudrates)
meBaudrate=value
EndSet
EndProperty
'************************************************************
'硬件握手设置
'************************************************************
PublicPropertyhwhandShaking()AseHwHandShake
Get
ReturnmeHwHandshake
EndGet
Set(ByValvalueAseHwHandShake)
meHwHandshake=value
EndSet
EndProperty
'************************************************************
'软件握手设置
'************************************************************
PublicPropertyswhandShaking()AseSwHandShake
Get
ReturnmeSwHandshake
EndGet
Set(ByValvalueAseSwHandShake)
meSwHandshake=value
EndSet
EndProperty
'数据位设置
PublicPropertyDataBit()AseDataBit
Get
ReturnmeDataBit
EndGet
Set(ByValValueAseDataBit)
meDataBit=Value
EndSet
EndProperty
'停止位设置
PublicPropertyStopBit()AseDataStopBit
Get
ReturnmeStopBit
EndGet
Set(ByValValueAseDataStopBit)
meStopBit=Value
EndSet
EndProperty
'同位校验设置
PublicPropertyParity()AseDataParity
Get
ReturnmeParity
EndGet
Set(ByValValueAseDataParity)
meParity=Value
EndSet
EndProperty
'通信事件(只读)
PublicReadOnlyPropertyCommEvent()AseEventMasks
Get
ReturnmeCommEvent
EndGet
EndProperty
'通信错误(只读)
PublicReadOnlyPropertyCommError()AseCommError
Get
ReturnmeCommError
EndGet
EndProperty
'每次读取操作的字节数,使用read命令时可以指定
PublicPropertyReadLen()AsInteger
Get
ReturnmReadLen
EndGet
Set(ByValvalueAsInteger)
mReadLen=value
EndSet
EndProperty
';触发ondatareceived事件的阈值,可以设置启动事件的阈值
PublicPropertyRThreshold()AsInteger
Get
ReturnmRThreshold
EndGet
Set(ByValvalueAsInteger)
mRThreshold=value
EndSet
EndProperty
'DSR线路状态,TRUE、FALSE高电