通讯控件comport如何判断接收完毕? ( 积分: 50 )

  • 主题发起人 主题发起人 zcjohnson
  • 开始时间 开始时间
Z

zcjohnson

Unregistered / Unconfirmed
GUEST, unregistred user!
最近写的通讯程序参考了网络上也是用comport写的的调试助手,调试助手中只是将接收到的数据送memo显示,而现在我是添加到stringgrid表格中显示,使用的办法是
SendString(HexStrToStr(RZEdtSend.Text));
Delay(200); {发完命令延时0.2s等待接收}
if FRXNum<>0 then
Add2Grid; {有收到数才送显}
感觉这边延时200ms是个很大的BUG,我采用延时的目的为了判断接收完毕,然后送显。
网络版本的助手程序,是在comport.rxchar中做对数据的操作,而由于我这边对数据操作比较多,所以不敢放在这个过程中做,担心放在这个过程中的话,会拖延时间,这样接收时候可能丢失一部分数据。不知道这个想法是否正确,大侠指点一下
是否comport有个方法或者过程可以判断接收完毕,像mscomm的
MSComm1.CommEvent = ComEvReceive语句一样。
 
GSM短信远程抄表系统管理端源代码(pc控制手机模块收发GSM短信)
http://www.pgz8.cn/Software/Catalog93/4151.html

串口操作等,都是自己写的代码.不用现成控件的.你可以下载来看看,还有实现了pc控制手机模块收发gsm短信,函数都是自己写的。线程方式操作,提高效率。短信模块用的是西门子的。

可能对你有帮助.

下面是他的说明:

系统说明:GSM短信远程抄表系统管理端(原理:pc控制手机模块收发GSM短信)
作者:Cooling
QQ: 21156410
Email: 21156410@qq.com
主页:http://www.pgz8.cn
可以任意传播,但请保留以上信息,有任何问题,欢迎交流。谢谢
这是一个商业软件的demo部分,收发短信的部分函数,全部是站长2002年写的,不用现成控件,线程操作.或许对短信系统开发有帮助.当时没有实现中文短信的收发,这个系统中也不需要.所以如果哪位朋友有兴趣,可以完善下,如果你写好了,也希望能给我发来一个哦.谢谢

用户名密码都是admin,在界面上右键操作.
 
你的思路不对,首先不应该假定所谓的“延时”多久,因为报文何时结束应该由发送者决定(这是协议上的事情),通常简单的上下位机(PC-MCU)方式通讯,应该采用状态机的模式去实现,也就是说,在PC的程序里并不假定一次收进来的数据是否已经完整,而是每次都按照协议一个个字节去解释,当解释未完成的时候,应保留下次解释的入口(可以使用一个全局的过程类型变量去实现)
 
后退
顶部