不是超时了。是有收到返回的,但个数明显不对。奇怪的是。为什么第一次收到没达到个数,也会触发。会提示:
variant or safe array index out of bounds

解决方案 »

  1.   

    是不是设置了时间限制的,在给定的时间内没有接收完全,就断开连接了。在mscomm1.rthread:=20;进行接收。
      

  2.   

      MSComm.RThreshold :=self.OutLen;// RecvCount[add];       //设置接收多少字节开产生oncomm事件
      MSComm.InBufferCount:=0;//清空数据
       mscomm.output:=senddata;1、每一次发送之前都有清空,并设置为接收到多少人字节时,为触发。
    2、是PC和DSP的通讯
    3、发送之后,都有设置延时时间。延时的时间足够发送并回收
    4、缓冲区:返回的字节数,不会超过50个字节。所以缓冲区应该是足够的。
      

  3.   

    我用的是cnpack的VCL控件里面带RS232串口通信的
      

  4.   

    MScomm不怎么好控制,我也用过,嫌麻烦,现在用SPCOMM,你那个提示貌似接收数据超过数组定义长度。
    20个字节数据分两包返回,可能是线上有干扰,或者通讯线质量有问题,以前也遇到过,或者可以把停止位改了看看会不会好一点。
      

  5.   

    基於掌握度...串口通訊不建議使用現成的控件...最佳的串口通訊方式為多線程+API...說來簡單實作不易...建議塿主花點時間研究一下串口 API 之特性......關於 Windows RS-232C 串列通訊經驗談
    http://blog.csdn.net/start8588/article/details/10045287
      

  6.   

    用CPORT控件吧,有些控件会把某些字节数据当成特殊控制字符。还有,延时长点,缓冲区大点,可能的话,降低速率试试
      

  7.   

    设置每接受到1个字节时,触发oncomm事件。oncomm事件中写:
    1、把接到到的数据转换为字符用个全局变量字符串存起来(如0A 0B 1C 这样子存起来)。
    2、通过协议的结束标志字符判断此帧有没有结束,没结束就退出。结束了,就置位一个接受完成标志位。发送数据函数:
    1、发送数据.
    2、是全局变量接受字符串=‘’ 、接受完成标志位=false.
    3、延时3s(如果接受完成标志位置位就退出延时) 注:此处的延时相当于超时时间。//这里很关键
    4、判断全局变量接受字符串等,然后处理接收到的数据。
      

  8.   

    以前搞BCB的时候,用的是 API写的,后来有一天发现,其实这个是网上经典的一个串口的 简单裁剪版本!
    现在用delphi, 还搞串口,用的SPComm控件,很好用,也没有出过问题!