欢迎来到天天文库
浏览记录
ID:41032666
大小:32.50 KB
页数:8页
时间:2019-08-14
《VB串口编程的几个问题》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、串口数据接收方式1、在OnComm事件中接收数据:这种方式能充分MSCOMM控件的特性。OnComm事件还可以检查和处理通讯错误;可以通过检查CommEvent属性的值来查询事件和错误;对于不定长数据以及对数据进行处理比较复杂的情况,此法不是很方便。PrivateSubMSComm_OnComm()SelectCaseMSComm1.CommEvent'错误CasecomEventBreak'收到Break。CasecomEventCDTO'CD(RLSD)超时。CasecomEventCTSTO'CTSTimeout。CasecomEventDSRTO'DSRTimeou
2、t。CasecomEventFrame'FramingErrorCasecomEventOverrun'数据丢失。CasecomEventRxOver'接收缓冲区溢出。CasecomEventRxParity'Parity错误。CasecomEventTxFull'传输缓冲区已满。CasecomEventDCB'获取DCB]时意外错误'事件CasecomEvCD'CD线状态变化。CasecomEvCTS'CTS线状态变化。CasecomEvDSR'DSR线状态变化。CasecomEvRing'RingIndicator变化。CasecomEvReceive'收到RThres
3、hold#ofchars.CasecomEvSend'传输缓冲区有Sthreshold个字符'CasecomEvEof'输入数据流中发现EOF字符EndSelectEndSub2.轮循法采集数据:A、定时器轮循法对于数据包方式收发数据以及不需即时响应情况,用轮循法更好些。实际上轮循法最大的好处在于集中处理数据而且不太占用CPU。轮循法要注意定时采集的时间片段大小;这里用二进制收发模式;使属性RThreshold、SThreshold为0,屏蔽ONCOMM事件。InputMode=comInputModeBinaryRThreshold=0SThreshold=0Privat
4、eSubTmrComm_Timer()'采用轮循法采集数据 DimRx_buff()AsByteDimokstringAsStringDimReceivedLenAsIntegerOnErrorGoToErrorHandlerTmrComm.Enabled=False'关闭定时器Ifcommport.InBufferCount>0ThenReceivedLen=commport.InBufferCountRx_buff=commport.Inputokstring=StrConv(tempbyte,vbUnicode)IfReceivedLen=6Then IfChr(te
5、mpbyte(0))=":"Andtempbyte(3)=&h0aThen....EndIfIfInstr(okstring,":@END*",vbBinaryCompare)Then....EndIf EndIfTmrComm.Enabled=True'打开定时器EndSubB、直接轮循法此法用于接收少量控制命令字;'保存输入子串的缓冲区 DimInstringAsString '使用COM1。 MSComm1.CommPort=1'9600波特,无奇偶校验,8位数据,一个停止位。MSComm1.Settings="9600,N,8,1" '当输入占用时,'告诉控件读入整
6、个缓冲区。 MSComm1.InputLen=0 '打开端口。 MSComm1.PortOpen=True'将attention命令送到调制解调器。 MSComm1.Output="ATV1Q0"&Chr$(13)'确保'调制解调器以"OK"响应。 '等待数据返回到串行端口。 Do DoEventsBuffer$=Buffer$&MSComm1.Input LoopUntilInStr(Buffer$,"OK"&vbCRLF)'从串行端口读"OK"响应。 '关闭串行端口。 MSComm1.PortOpen=False如何处理不定长数据的接收在处理串口通讯时,经常会遇到不定长
7、数据的接收。由于通讯任务不同及编程要求的差异所以采用的方法也有所不同。本文就此问题进行探讨。不定长数据从数据格式上分,可分为有格式和无格式。一、无格式不定长数据的接收这种格式在实际串口通讯中用得不多,一般只用传送字符串数据。问题在于怎么判断接收结束。一般用时间延迟的方法解决。A、对于非握手式通讯,可用一个定时器定时轮循接收,并假定每个轮循接收完成。用ONCOMM事件接收也可,只是不如定时器定时轮循接收简便。B、对于握手方式通讯,可用直接轮循法提高接收的准确性。下面是实现此法的函数:FunctionsComm(sCo
此文档下载收益归作者所有