各位大虾,我的问题是:
当有数据发向串口时,在该控件的onReceiveData事件里,可以接受数据。问题是,如果每次从其它设备发来的数据包大小是10000个字节,那么触发几次onReceiveData事件,能否让它只触发一次就能全部接受10000个字节。怎么设置。
如果分几次才把一个数据包接受完,处理起来很麻烦
当有数据发向串口时,在该控件的onReceiveData事件里,可以接受数据。问题是,如果每次从其它设备发来的数据包大小是10000个字节,那么触发几次onReceiveData事件,能否让它只触发一次就能全部接受10000个字节。怎么设置。
如果分几次才把一个数据包接受完,处理起来很麻烦
解决方案 »
- 散分
- 关于label的双击
- 我在使用TClientSocket控件的时候,发现...................
- 高分求菜问题(100)
- 简单问题100分相送在线等待!!1
- 关于DBGrid单元格值的问题
- 为什么LAN中其他机器不能访问我的APPSERVER?
- 如何,在DELPHI里直接调用记事本(NOTEPAD)打开文本文件?哥们们帮忙!真给分的!
- 菜鸟问题: Access Violation at address in module 'Test.exe' read of address FFFFFFFF
- 请问如何使treeview的内容随着鼠标的移动上下滚动(当然不是拖动scrollbar了)。?
- dll 声明问题.....
- 这是什么错误,求解
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);
而且是发续发送方式。这个主要取决于你对应硬件设备是如何发送数据的,
找找硬件的有没有可能设置吧。
应该与SPCOMM无关的。
to wangkun007(大坤) :用您的方式可以获取数据,但能否保证这次接收事件接收了别处发送的一个完整数据包。
to zhoutian618(秦失其鹿,天下共逐,唯胜者得鹿而割之):
to jpyc(九品御厨-进军嵌入式) :网页怎么进不去啊。
to tulippopo(学习者):如果不加大缓存,是不是肯定要分组接收才能搞定一个完整的数据包。
恳请各位继续赐教。刚学串口编程,这里实在不明白
当有数据发向串口时,在该控件的onReceiveData事件里,可以接受数据。问题是,如果每次从其它设备发来的数据包大小是10000个字节,那么触发几次onReceiveData事件才能把这些字节数据接收完,能否让它只触发一次就能全部接受10000个字节。怎么设置。
--------------------------------------------------
接收数据的分析技巧:
通讯协议制定好后,一切将以通讯协议为中心。一套协议中的所有指令可能长度都是统一的,也有可能是长短不同的,并且在OnTrigger事件中实际反应速度及快,可能一条指令数据还没有完全收齐就已经触发了此事件,即收到了半截指令,并且有可能继续收取的数据中除了下半截指令外,还有下一条指令的前半截,如何处理?
我在做这种处理时是利用全局变量,将串口收到的所有数据都收到该串中,然后按指令格式进行截取,发现不合法指令做一下特殊处理(如要求重发)或抛弃。
如收到的数据串为:
#**0000012000**%#**0000000343#**000000540560**%#**0002200000**%
分段截为:
#**0000012000**%
#**0000000343
#**000000540560**%
#**0002200000**%
四条指令,其中:#**0000000343不完整,检测到后进行抛弃处理。
------------------------------------------------------------------
我觉得,你在做这个程序的时候:我的做法是将所有数据都接收到一个串中,然后对串进行截取,判断,错误的丢弃,有用的数据进行分析处理。这样,肯定不会有数据遗失情况。我的几个系统都是这样做的,很稳定。
可以修改接收緩衝區, 改大點, 但這樣并無法保證, 對方如果定義的包長度不夠, 還是可能發生如上的情況, 另外, 改大緩衝區, 也可能讓程序反應過慢!!!