各位大虾,我的问题是:
   当有数据发向串口时,在该控件的onReceiveData事件里,可以接受数据。问题是,如果每次从其它设备发来的数据包大小是10000个字节,那么触发几次onReceiveData事件,能否让它只触发一次就能全部接受10000个字节。怎么设置。
   如果分几次才把一个数据包接受完,处理起来很麻烦

解决方案 »

  1.   

    str:='';
      setlength(ch,BufferLength);
      Copymemory(ch,Buffer,BufferLength);
      for i:=0 to Bufferlength-1 do
        str:=str+inttohex(byte(ch[i]),2)+' ';
      memo1.Lines.Add('接收:'+str);
      

  2.   

    我们当用这个控件的时间也是这样子的,
    而且是发续发送方式。这个主要取决于你对应硬件设备是如何发送数据的,
    找找硬件的有没有可能设置吧。
    应该与SPCOMM无关的。
      

  3.   

    http://218.56.11.178:8009/Browers.aspx?FID=437
      

  4.   

    多谢各位,但还是不明白。
    to wangkun007(大坤) :用您的方式可以获取数据,但能否保证这次接收事件接收了别处发送的一个完整数据包。
    to zhoutian618(秦失其鹿,天下共逐,唯胜者得鹿而割之):
    to jpyc(九品御厨-进军嵌入式) :网页怎么进不去啊。
    to  tulippopo(学习者):如果不加大缓存,是不是肯定要分组接收才能搞定一个完整的数据包。
    恳请各位继续赐教。刚学串口编程,这里实在不明白
      

  5.   

    重新表达一下我的问题
    当有数据发向串口时,在该控件的onReceiveData事件里,可以接受数据。问题是,如果每次从其它设备发来的数据包大小是10000个字节,那么触发几次onReceiveData事件才能把这些字节数据接收完,能否让它只触发一次就能全部接受10000个字节。怎么设置。
      

  6.   

    你的问题我以前帮别人解决过: 串口通讯应用程序的解决方案:   http://218.56.11.178:8020/web/technology/chuangkou.htm   例程源码及控件:   http://218.56.11.178:8020/web/index.aspx->下载基地   ->例程-精品例程->九品御厨作品-串口通讯控制器   ->例程-硬件控制->串口通讯控制器   ->控件-硬件控制->TurboPower  Async  Professional/spcom   ////////////////////////////////////////////////////////其中这段你好好领会一下: 
    -------------------------------------------------- 
    接收数据的分析技巧: 
    通讯协议制定好后,一切将以通讯协议为中心。一套协议中的所有指令可能长度都是统一的,也有可能是长短不同的,并且在OnTrigger事件中实际反应速度及快,可能一条指令数据还没有完全收齐就已经触发了此事件,即收到了半截指令,并且有可能继续收取的数据中除了下半截指令外,还有下一条指令的前半截,如何处理? 
    我在做这种处理时是利用全局变量,将串口收到的所有数据都收到该串中,然后按指令格式进行截取,发现不合法指令做一下特殊处理(如要求重发)或抛弃。 
    如收到的数据串为: 
    #**0000012000**%#**0000000343#**000000540560**%#**0002200000**% 
    分段截为: 
    #**0000012000**% 
    #**0000000343 
    #**000000540560**% 
    #**0002200000**% 
    四条指令,其中:#**0000000343不完整,检测到后进行抛弃处理。 
    ------------------------------------------------------------------ 
    我觉得,你在做这个程序的时候:我的做法是将所有数据都接收到一个串中,然后对串进行截取,判断,错误的丢弃,有用的数据进行分析处理。这样,肯定不会有数据遗失情况。我的几个系统都是这样做的,很稳定。
      

  7.   

    >>如果分几次才把一个数据包接受完,处理起来很麻烦
    可以修改接收緩衝區, 改大點, 但這樣并無法保證, 對方如果定義的包長度不夠, 還是可能發生如上的情況, 另外, 改大緩衝區, 也可能讓程序反應過慢!!!
      

  8.   

    感谢所有大虾,特别是jpyc(九品御厨-进军嵌入式)
      

  9.   

    还是jpyc(九品御厨-进军嵌入式)的方法正典,不容易遗失数据。