我用spcomm控件做的串口发送程序,请问如何侦测到电脑是否与读卡器已经连接成功? ( 积分: 100 )

  • 主题发起人 主题发起人 doby_li
  • 开始时间 开始时间
D

doby_li

Unregistered / Unconfirmed
GUEST, unregistred user!
如题,
我是想发送一条指令给读卡器,然后根据读卡器返回的指令来判断是否已正确连接上,问题是,现在如果读卡器没有和电脑进行连接,或者读卡器的电源关掉了,这时我可以先打开串口,发送指令给读卡器,但根本就不触发spcomm控件的onrecievedata事件,更谈不上接到指令了。

请问有什么好办法可以判断电脑与读卡器是否已经连接上?

谢谢。
 
1、发送测试指令,N秒后还没有收到回覆,视为指令超时,重新发送指令,M次超时后,可认为设备没有连接,此时程序继续发送指令,直到收到设备的回覆。
2、连接成功后,如果X秒没有收到设备信息,执行1。
 
楼上的思路是对的。
你使用一个公共变量,把spcomm控件的onrecievedata事件返回的数据总是放在公共变量处理,你可以使用循环,或者定时器,才发送命令后计时,如果超过规定时间认为超时 。
 
现在的一个问题是如果读卡器没与电脑连接时,发送指令时spcomm控件的onrecievedata事件根本就不触发,所以也就收不到任何的反馈信号,哪怕是收到空字符串也好呀。

现在的主要问题是如何判断电脑没有收到反馈信号?

谢谢。
 
你需要用一个timer或者是一个线程来进行上面的检查。设置以下几个公共变量,一个是设备状态(int),一个超时计数(int),一个指令发送时间(datetime),一个最后回覆时间(datetime)。
每发次发送指令后设置指令发送时间。收到

case 状态 of
-1://未连接
if 当前时间-发送时间>超时时间 then 发送测试指令;
1;//连接测试
if 当前时间-发送时间>超时时间 then
begin
超时计数加一;
发送测试指令;
if 超时计数 > 最大超时计数 then 修改设备状态为未连接;
end;
0://已连接
if 当前时间-最后回覆时间>超时时间 then 修改设备状态为连接测试,并复位超时计数、发送测试指令;;
end;
 
同一台电脑主机能不能用串口读取数据
 
个人认为这种情况应该用一个定时器,发送指令后启动定时器,当定时器到时间还没有数据来就认为没有连接好
 
请教doby_li,spcomm控件在那里下载。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部