首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

关于用VB MSCOOM串口控件与单片机通讯的有关问题

2012-01-01 
关于用VB MSCOOM串口控件与单片机通讯的问题最近在调试仪器的过程中,总是不能完全接受下位机(单片机)发来

关于用VB MSCOOM串口控件与单片机通讯的问题
最近在调试仪器的过程中,总是不能完全接受下位机(单片机)发来全部数据(十六进制),总有那么几十个数据遗漏掉,请问各位是什么问题?头痛至极,期待赐教!!!
一切参数设置都正确。电脑与单片机波特率均采用115200,每次通讯数据量大约10万以下,vb mscoom控件的InBufferSize属性值最大为32767,我设置的是InBufferSize=30000,是不是数据溢出了?但有时数据量在30000以下时也会丢数据,到底怎么回事?下面是上位机(电脑测试软件)的部分代码:

Private Sub Comm_OnComm()
  Dim IntR as integer
  Static Resv As Variant '接收数据
  Static DataC As Long '串口数据字节数
  Static CTestData() As Byte'用于存放接受的字符
  Static FactCount As Long '累计实际接收的数据
  static TestFlag Boolean'实验结束标志
  TestFlag = false
  Comm.RThreshold = 0 
  FactCount = 0
  DataC = Comm.InBufferCount: Resv = Comm.Input  
  ReDim CTestData(100000)
  For IntR = 0 To DataC - 1
  CTestData(IntR) = Resv(IntR)
  FactCount = FactCount + 1
  Next IntR
   
  Static CurrTime As Long '等待时间
  CurrTime = GetTickCount
  '一直接受数据,直到接受完成为止 
  do  
  If Comm.InBufferCount >= 1000 Or Abs(GetTickCount - CurrTime) >= 100 Then
  CurrTime = GetTickCount 
  DataC = Comm.InBufferCount: Resv = Comm.Input
  For IntR = 0 To DataC - 1
  CTestData(FactCount) = Resv(IntR)
  FactCount = FactCount + 1  
  DoEvents
  Next IntR
  End If
  DoEvents
  Endif
  Do While Comm.InBufferCount = 0 '无数据则测试结束
  debug.print "实验结束"
  TestFlag = ture
  Exit Do
  Loop
  if TestFlag then Exit do
   
Exit Sub


[解决办法]
楼主别重复发帖了
[解决办法]
http://download.csdn.net/source/1262066
[解决办法]
建议楼主使用上面的那个串口调试器调试一下,看看是否会出现用你自己程序所出的问题?
[解决办法]
建议看看猴哥的缓冲池代码.

热点排行