vba中使用api串口通信serialport.docx
- 文档编号:28242049
- 上传时间:2023-07-09
- 格式:DOCX
- 页数:33
- 大小:20.31KB
vba中使用api串口通信serialport.docx
《vba中使用api串口通信serialport.docx》由会员分享,可在线阅读,更多相关《vba中使用api串口通信serialport.docx(33页珍藏版)》请在冰豆网上搜索。
vba中使用api串口通信serialport
'
'ThisVBmoduleisacollectionofroutinestoperformserialportI/Owithout
'usingtheMicrosoftCommControlcomponent.ThismoduleusestheWindowsAPI
'toperformtheoverlappedI/Ooperationsnecessaryforserialcommunications.
'
'Theroutinecanhandleupto4serialportswhichareidentifiedwitha
'PortID.
'
'Allroutines(withtheexceptionofCommReadandCommWrite)returnanerror
'codeor0ifnoerroroccurs.TheroutineCommGetErrorcanbeusedtoget
'thecompleteerrormessage.
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'PublicConstants
'-------------------------------------------------------------------------------
'OutputControlLines(CommSetLine)
ConstLINE_BREAK=1
ConstLINE_DTR=2
ConstLINE_RTS=3
'InputControlLines(CommGetLine)
ConstLINE_CTS=&H10&
ConstLINE_DSR=&H20&
ConstLINE_RING=&H40&
ConstLINE_RLSD=&H80&
ConstLINE_CD=&H80&
'-------------------------------------------------------------------------------
'SystemConstants
'-------------------------------------------------------------------------------
PrivateConstERROR_IO_INCOMPLETE=996&
PrivateConstERROR_IO_PENDING=997
PrivateConstGENERIC_READ=&H
PrivateConstGENERIC_WRITE=&H
PrivateConstFILE_ATTRIBUTE_NORMAL=&H80
PrivateConstFILE_FLAG_OVERLAPPED=&H
PrivateConstFORMAT_MESSAGE_FROM_SYSTEM=&H1000
PrivateConstOPEN_EXISTING=3
'COMMFunctions
PrivateConstMS_CTS_ON=&H10&
PrivateConstMS_DSR_ON=&H20&
PrivateConstMS_RING_ON=&H40&
PrivateConstMS_RLSD_ON=&H80&
PrivateConstPURGE_RXABORT=&H2
PrivateConstPURGE_RXCLEAR=&H8
PrivateConstPURGE_TXABORT=&H1
PrivateConstPURGE_TXCLEAR=&H4
'COMMEscapeFunctions
PrivateConstCLRBREAK=9
PrivateConstCLRDTR=6
PrivateConstCLRRTS=4
PrivateConstSETBREAK=8
PrivateConstSETDTR=5
PrivateConstSETRTS=3
'-------------------------------------------------------------------------------
'SystemStructures
'-------------------------------------------------------------------------------
PrivateTypeCOMSTAT
fBitFieldsAsLong'SeeCommentin
cbInQueAsLong
cbOutQueAsLong
EndType
PrivateTypeCOMMTIMEOUTS
ReadIntervalTimeoutAsLong
ReadTotalTimeoutMultiplierAsLong
ReadTotalTimeoutConstantAsLong
WriteTotalTimeoutMultiplierAsLong
WriteTotalTimeoutConstantAsLong
EndType
'
'TheDCBstructuredefinesthecontrolsettingforaserial
'communicationsdevice.
'
PrivateTypeDCB
DCBlengthAsLong
BaudRateAsLong
fBitFieldsAsLong'SeeCommentsin
wReservedAsInteger
XonLimAsInteger
XoffLimAsInteger
ByteSizeAsByte
ParityAsByte
StopBitsAsByte
XonCharAsByte
XoffCharAsByte
ErrorCharAsByte
EofCharAsByte
EvtCharAsByte
wReserved1AsInteger'Reserved;DoNotUse
EndType
PrivateTypeOVERLAPPED
InternalAsLong
InternalHighAsLong
offsetAsLong
OffsetHighAsLong
hEventAsLong
EndType
PrivateTypeSECURITY_ATTRIBUTES
nLengthAsLong
lpSecurityDescriptorAsLong
bInheritHandleAsLong
EndType
'-------------------------------------------------------------------------------
'SystemFunctions
'-------------------------------------------------------------------------------
'
'FillsaspecifiedDCBstructurewithvaluesspecifiedin
'adevice-controlstring.
'
PrivateDeclareFunctionBuildCommDCBLib"kernel32"Alias"BuildCommDCBA"_
(ByVallpDefAsString,lpDCBAsDCB)AsLong
'
'Retrievesinformationaboutacommunicationserrorandreports
'thecurrentstatusofacommunicationsdevice.Thefunctionis
'calledwhenacommunicationserroroccurs,anditclearsthe
'device'serrorflagtoenableadditionalinputandoutput
'(I/O)operations.
'
PrivateDeclareFunctionClearCommErrorLib"kernel32"_
(ByValhFileAsLong,lpErrorsAsLong,lpStatAsCOMSTAT)AsLong
'
'Closesanopencommunicationsdeviceorfilehandle.
'
PrivateDeclareFunctionCloseHandleLib"kernel32"(ByValhObjectAsLong)AsLong
'
'Createsoropensacommunicationsresourceandreturnsahandle
'thatcanbeusedtoaccesstheresource.
'
PrivateDeclareFunctionCreateFileLib"kernel32"Alias"CreateFileA"_
(ByVallpFileNameAsString,ByValdwDesiredAccessAsLong,_
ByValdwShareModeAsLong,lpSecurityAttributesAsAny,_
ByValdwCreationDispositionAsLong,ByValdwFlagsAndAttributesAsLong,_
ByValhTemplateFileAsLong)AsLong
'
'Directsaspecifiedcommunicationsdevicetoperformafunction.
'
PrivateDeclareFunctionEscapeCommFunctionLib"kernel32"_
(ByValnCidAsLong,ByValnFuncAsLong)AsLong
'
'Formatsamessagestringsuchasanerrorstringreturned
'byanoherfunction.
'
PrivateDeclareFunctionFormatMessageLib"kernel32"Alias"FormatMessageA"_
(ByValdwFlagsAsLong,lpSourceAsAny,ByValdwMessageIdAsLong,_
ByValdwLanguageIdAsLong,ByVallpBufferAsString,ByValnSizeAsLong,_
ArgumentsAsLong)AsLong
'
'Retrievesmodemcontrol-registervalues.
'
PrivateDeclareFunctionGetCommModemStatusLib"kernel32"_
(ByValhFileAsLong,lpModemStatAsLong)AsLong
'
'Retrievesthecurrentcontrolsettingsforaspecified
'communicationsdevice.
'
PrivateDeclareFunctionGetCommStateLib"kernel32"_
(ByValnCidAsLong,lpDCBAsDCB)AsLong
'
'Retrievesthecallingthread'slast-errorcodevalue.
'
PrivateDeclareFunctionGetLastErrorLib"kernel32"()AsLong
'
'Retrievestheresultsofanoverlappedoperationonthe
'specifiedfile,namedpipe,orcommunicationsdevice.
'
PrivateDeclareFunctionGetOverlappedResultLib"kernel32"_
(ByValhFileAsLong,lpOverlappedAsOVERLAPPED,_
lpNumberOfBytesTransferredAsLong,ByValbWaitAsLong)AsLong
'
'Discardsallcharactersfromtheoutputorinputbufferofa
'specifiedcommunicationsresource.Itcanalsoterminate
'pendingreadorwriteoperationsontheresource.
'
PrivateDeclareFunctionPurgeCommLib"kernel32"_
(ByValhFileAsLong,ByValdwFlagsAsLong)AsLong
'
'Readsdatafromafile,startingatthepositionindicatedbythe
'filepointer.Afterthereadoperationhasbeencompleted,the
'filepointerisadjustedbythenumberofbytesactuallyread,
'unlessthefilehandleiscreatedwiththeoverlappedattribute.
'Ifthefilehandleiscreatedforoverlappedinputandoutput
'(I/O),theapplicationmustadjustthepositionofthefilepointer
'afterthereadoperation.
'
PrivateDeclareFunctionReadFileLib"kernel32"_
(ByValhFileAsLong,ByVallpBufferAsString,_
ByValnNumberOfBytesToReadAsLong,ByReflpNumberOfBytesReadAsLong,_
lpOverlappedAsOVERLAPPED)AsLong
'
'Configuresacommunicationsdeviceaccordingtothespecifications
'inadevice-controlblock(aDCBstructure).Thefunction
'reinitializesallhardwareandcontrolsettings,butitdoesnot
'emptyoutputorinputqueues.
'
PrivateDeclareFunctionSetCommStateLib"kernel32"_
(ByValhCommDevAsLong,lpDCBAsDCB)AsLong
'
'Setsthetime-outparametersforallreadandwriteoperationsona
'specifiedcommunicationsdevice.
'
PrivateDeclareFunctionSetCommTimeoutsLib"kernel32"_
(ByValhFileAsLong,lpCommTimeoutsAsCOMMTIMEOUTS)AsLong
'
'Initializesthecommunicationsparametersforaspecified
'communicationsdevice.
'
PrivateDeclareFunctionSetupCommLib"kernel32"_
(ByValhFileAsLong,ByValdwInQueueAsLong,ByValdwOutQueueAsLong)AsLong
'
'Writesdatatoafileandisdesignedforbothsynchronousanda
'synchronousoperation.Thefunctionstartswritingdatatothefile
'atthepositionindicatedbythefilepointer.Afterthewrite
'operationhasbeencompleted,thefilepointerisadjustedbythe
'numberofbytesactuallywritten,exceptwhenthefileisopenedwith
'FILE_FLAG_OVERLAPPED.Ifthefilehandlewascreatedforoverlapped
'inputandoutput(I/O),theapplicationmustadjustthepositionof
'thefilepointerafterthewriteoperationisfinished.
'
PrivateDeclareFunctionWriteFileLib"kernel32"_
(ByValhFileAsLong,ByVallpBufferAsString,_
ByValnNumberOfBytesToWriteAsLong,lpNumberOfBytesWrittenAsLong,_
lpOverlappedAsOVERLAPPED)AsLong
PrivateDeclareSubAppSleepLib"kernel32"Alias"Sleep"(ByValdwMillisecondsAsLong)
'-------------------------------------------------------------------------------
'ProgramConstants
'-------------------------------------------------------------------------------
PrivateConstMAX_PORTS=4
'-------------------------------------------------------------------------------
'ProgramStructures
'-------------------------------------------------------------------------------
PrivateTypeCOMM_ERROR
lngErrorCodeAsLong
strFunctionAsString
strErrorMessageAsString
EndType
PrivateTypeCOMM_PORT
lngHandleAsLong
blnPortOpenAsBoolean
udtDCBAsDCB
EndType
'-------------------------------------------------------------------------------
'ProgramStorage
'-------------------------------------------------------------------------------
PrivateudtCommOverlapAsOVERLAPPED
PrivateudtCommErrorAsCOMM_ERROR
PrivateudtPorts(1ToMAX_PORTS)AsCOMM_PORT
'-------------------------------------------------------------------------------
'GetSystemMessage-Getssystemerrortextforthespecifiederrorcode.
'-------------------------------------------------------------------------------
PublicFunctionGetSystemMessage(lngErrorCodeAsLong)AsString
DimintPosAsInteger
DimstrMessageAsString,strMsgBuffAsString*256
CallFormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,0,lngErrorCode,0,strMsgBuff,255,0)
intPos=I
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- vba 使用 api 串口 通信 serialport