各位大侠,我是一个大三学生,现正在做一个基于PIC单片机和USB100芯片的数据采集系统,上位机程序是在VB环境下用MSComm控件,采用事件触发方式进行数据接收,但总是出现数据堵塞的情况,本来想20几个数据接收一次,但经常是1000多个数据时才触发,请各位大侠指点一下。在此先行谢过!
又:虽然我看到过有前辈在此发帖问过,但好像没有留下联系方式,我也无法联系,只好请各位高手再次热心相助了!再次表示感谢!

解决方案 »

  1.   

    linamu(林中一木) 你好!我已经设置RThreshold属性为20。此外,我也采取了将其设为1,然后在OnComm事件中循环等待InbufferCount=20的方法,但仍出现这种情况。不知如何解决?
      

  2.   

    不需要循环等待InbufferCount的,你可以下载一个串口调试助手看看,是不是硬件的问题.
      

  3.   

    linamu(林中一木)你好,首先非常感谢你的回复!我所用的USB100芯片是由单片机依靠电平升降写入数据的,一般串口调试助手无法向其中写入数据。另外我用一个串口监视程序观察过数据收发,单片机发送数据程序单步执行时没发现过什么问题,但连续执行时便堵塞。
    由于我所用的USB100是一个师兄剩下的,手头没有多的芯片,加上对其内部结构不了解,无法判断它的好坏。
    另外我看到一些资料,说用API可能能解决问题。由于我对这种方式不熟悉,好像很麻烦,所以暂时不想用这种方式。不知用MSComm控件方式还有什么方案?
      

  4.   

    最好不要用VB了, 直接用VC,采用一个线程不挺的监听端口, 或者用OnTimer事件也行.
      

  5.   

    xiaoliuzi(小六子)你好!我对这些语言不太了解,只是看资料上说VB比较简单,所以采用VB进行开发。不知现在从头学习VC会不会有点麻烦?
    此外,我在VB中也试过用按时查询方式进行过接收,也会出现这种情况。我想知道用USB100芯片进行数据收发时,采用MSComm控件方式是不是不能保证数据的实时性?对你们的帮助再次表示感谢!
      

  6.   

    api和mscomm控件是一样的,只不过灵活一点.很可能是你的芯片问题.
      

  7.   

    USB100芯片应该设置一下,它不会按你的控件设置发数的,应该看看它的说明文档
      

  8.   

    to  whiteclouds(寻找幸福中)       按USB100芯片的说明文档,它封装了所有内部操作,下位机只能依靠电平升降读写数据,对上位机,USB端口为虚拟串口,通行速率始终为8Mbit/s,除了各种串口参数外,不能设置USB100芯片的有关参数。 此外,当数据堵塞时,我令Inbuffercount属性为0,但没效果,USB100芯片仍然显示内部缓冲区为满,单片机不能写入数据。to  linamu(林中一木)     在USB100驱动安装说明文档中,有这样一句话“如果需要较高的通信效率,建议采用 VC调用 API 的方式”,不知在VB环境下调用 API能否达到同样效果?对你们的帮助再次表示感谢!
      

  9.   

    USB100这个芯片我用过,虽然比较方便,但它使用虚拟串口驱动,非常笨拙,你需要制定带握手的通讯协议来防止通讯设备被淹没的情况。我知道有一种芯片CH372,这个芯片比较灵活,而且API是针对VC制作的,速度很快而且控制灵活。
      

  10.   

    whiteclouds(寻找幸福中)你好! 因为我是第一次接触计算机通信问题,对其不了解。所以基本没有制定通信协议,单片机只是一次将采集到2、30个数据原样发给上位机,上位机接受数据后绘制出图形,再进行一点简单分析。不知你所说的带握手的通讯协议如何制定?是不是需要上位机接收一个数据包后发出一个命令,单片机接到这个命令后才能再次采样、发送?还是需要在每个数据包前加某个标志字?
    好像一般通信协议中都是用的后一种,但这好像也解决不了数据堵塞的问题。另外我也尝试过减少数据包长度(一次发1个字节的数据),但没有解决问题。因为经费和时间所限,基本不太可能换芯片,所以我想大概还是只能用这块芯片做试验。至于改用VC开发,恐怕时间不够。VB中API应该也比MSComm快吧? 我先用API试试吧! 
    对你的帮助表示诚挚的谢意!
      

  11.   

    重新看了你的问题,又回忆一下,我以前用这个芯片是用多线程+串口API来工作的,开一个线程监听串口,不要用控件,那会带来很大问题,而且因为封装原因,出问题都无从下手。用多线程+API来控制USB100也可以的。
      

  12.   

    whiteclouds(寻找幸福中)你好!非常感谢你的建议!现在的问题是由于时间原因,恐怕不能改用VC开发(未用过VC)。因此想问一下VB下是不是也可以采用这种方式进行?另外还有个不情之请,不知你能不能将相关的程序发到我邮箱 [email protected],因为我对这些东西不熟悉,所以希望这能给我一些帮助。定当重分相谢!
      

  13.   

    我很少使用VB,VB可以使用API,但能否使用多线程就不清楚了,我以前做的程序是用BCB做的,而且不方便拿到公司来(是在以前的公司开发的)
      

  14.   

    只要是串口,都能用串口调试助手收发数据,不知你的怎么不行,它就是用api写的.
      

  15.   

    to linamu(林中一木),USB100芯片好像实质是将USB接口虚拟成串口。我在其它资料上看到USB接口不是时性的,不知道是不是这个原因造成的数据堵塞? 所以我想现在问题变成了对虚拟串口的读写。为了方便起见,我想在一台机子上用软件模拟两个串口,对这两个串口进行操作。不知道这样做跟由硬件虚拟的串口有没有大的差别?又:由于对线程、API不熟悉,我想暂时还是用控件方式,但接收数据后发握手信号,有时间时再采用多线程+API方式,不知各位大侠认为怎样?对whiteclouds(寻找幸福中)、linamu(林中一木)你们的热情帮助再次表示感谢!
      

  16.   

    我用serial null虚拟过串口,用串口调试助手收发数据是没有问题的.