当spcomm控件无返回值,ReceiveData(),不触发执行,那如何判断设备是"离线状态"呢? ( 积分: 100 )

  • 主题发起人 主题发起人 QXCOMM
  • 开始时间 开始时间
Q

QXCOMM

Unregistered / Unconfirmed
GUEST, unregistred user!
我有10台设备,串联在一起,10个设备的地址是分别:1-10
通过上位机发送查询命令,设备如果检测到是自己的地址,就返回一串数据,
如果设备正在关机状态,就没有返回数据
SPCOMM,的ReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word),就不能触发执行
所以无法判断设备的状态,

如何判断设备是"离线状态"请帮助分析一下,非常感谢!!!
 
我有10台设备,串联在一起,10个设备的地址是分别:1-10
通过上位机发送查询命令,设备如果检测到是自己的地址,就返回一串数据,
如果设备正在关机状态,就没有返回数据
SPCOMM,的ReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word),就不能触发执行
所以无法判断设备的状态,

如何判断设备是"离线状态"请帮助分析一下,非常感谢!!!
 
竟然没有看一看,我自己顶吧,否则沉的太快
 
沉的太快了..........
 
你可以在发送完一个设备查询命令后,
启动一对应的定时器,
例如可以设该定时器时间为3秒,
那么如果在三秒内你收到返回命令,那么将该定时器置为false,
如果三秒内没有收到,定时器触发,在定时器里就可以认为该设备
是离线状态。
 
楼上说的对,定时查询的方式很管。
 
yuron,的办法是很好的解决问题的办法
我想了跟yuron,差不多的方法,
设置一个全局变量a,a:=0,为莫认"离线状态",在ReceiveData()接受的时候设置a:=1,判断为"在线状态"
在发送后进行判断,先延迟1000,然后判断这个变量a的值,,如果没有变化为a=1,就判断为"在线状态",如果没有变化a=0就判断为"离线状态",
经常测试,可行,
,
 
延时或标志判断都可行的
 
我觉得有些电子称就是这样的
不能够说发个信息给它,然后它返回数据,而是一旦电子称的重量有变化就返回
弄的很难捕捉到信息
 
可以结束了
 
后退
顶部