抛砖引玉:解决问题后送300~500分 (1分)

M

moodboy

Unregistered / Unconfirmed
GUEST, unregistred user!
要求:
能发送和接收十六进制数据,发送的初始数据为一不定长字符串,接收的数据也不定长,最
大有64K,接收后在Memo上显示。用spcomm、Comport、MScomm或API函数皆可。
注意:
1.要能达到我的要求,部分达到要求对我来说无用,不给分:)
2.用MScomm、Spcomm的注意,当接收大数据量时可能有问题(也可能是我的问题),若发过来的例子
无问题,那是最好的。
3.关键处请适当注释。
不是我懒,是我能力有限,时间有限。越快越好!
E_mail:mumuhai@sohu.com
 
若食言,请斑竹把我加入黑名单。
 
高手都到哪了?留点痕迹吧。600分如何?
 
帮你up~~~~~~~~~~
 
你要求太高了,UP下吧!
 
要求是高了点,但应该不算太高吧。我想各位做项目的时候总有调试的例子在的。
 
非常简单,不过你首先需要一个GAP的概念(我可不管你用什么控件)
由于你的数据是不定长度的,那么你应该以线路空闲时间大于某一指定值作为报文的结束,
然后对已接收的报文进行解释,当然,也可以边接收边解释,但总之在程序中能确定报文
结束就行。
送MEMO上显示是简单的:下面是基于TComport的程序,具体的控件设置你自己决定,但必须
引出 OnRxChar 和 OnTxEmpty 事件
取一个 TTimer,Interval 为你的 GAP 时间,通常大于 1.5 个字节的通讯时间,你自己

procedure Form1.Comport1RxChar(Sender: TObject);
begin
Timer1.Enabled:= False;
Timer1.Enabled:= True; // 复位 GAP 计时器
... // 你需要读数据的部分
end;
...
很难写得清楚,我可以给你MAIL个我的串行口测试程序的源代码的
我的MAIL:treemanwww@sina.com
 
SupermanTm:
我已经发邮件给你。
 
补充一点:发送的数据最好转换成字节数组再发送,好与我的CRC生成函数搭配。
哪位有兴趣的请继续,分一定给。
 
邮件已发出,请查收后给分!
 
SupermanTm:
请发一份可以用的。
 
你得把你的要求写得更清楚一点,例如,你要传输的数据写在哪里,接收的数据写在哪里,
最好把你的界面先画出来送给我
 
用串口控件时,如果发送数据超过了发送缓冲区的长度,则报错,
解决方案是把大包数据拆开传送,比如设定数据长度最大为 1K,
当待送数据长度大于1K时,计算发送总包数(/1024),向上取整,

发送报头,打开会话,即要传多少包,
然后对数据打包,加上包序列,差错控制,分别传送,发送包尾,
结束会话。

接收时,
收到报头,建立缓冲区,
收到报文,写入缓冲区,校验错误时要求重传,
收到报尾,完成一次传送,写入MEMO

更具体的可以参考ZMODEM协议,带断点续穿功能
我可以给你MAIL个例子, mail to: qsilence@sina.com
 
SupermanTm:
等下我发个界面给你。
qsilence:
你是用什么做的?能达到我的要求吗?你的例子同时有CRC-CCITT校验吗?不知道与我的
方法是否相同。我要接收的数据是单片机发过来的,怎样拆包?能做到吗?
只要你能做到以字节数组形式发送数据,下位机发送完就接收完的话,我就有兴趣!
 
没界面,是个YMODEM文件传输的控制台程序,DELPHI,它封装成单独的YMODEM类,有校验。
DPR是个测试文件。
你的EMAIL,可以给你发过去
 
qsilence:
是什么校验?我需要的是CRC-CCITT,不过其它也行,学习学习。
请仔细阅读我的要求,如果能达到我的所有要求就可以享受一级待遇,否则降三级 :)
E_mail:mumuhai@sohu.com
 
给你发过去了,完全不改,不可能,按你自己的需求去做吧,空间是现成的了
 
多谢!我也不是要现成的,只是调试用。
 
还是没达到目的,请大家继续。
真是急死我了!
 
http://www.delphibbs.com/delphibbs/dispq.asp?LID=1041063上面有一段发送大文件
超过2M的,采用api的方式!
 
顶部