S
sxwy
Unregistered / Unconfirmed
GUEST, unregistred user!
其实你说的ONCOMM.说白了,主动权都是撑握在你手里.也就是说你要什么时侯ONCOMM就会ONCOMM,除非设备坏了或者你发的命令不对.
道理还是一样,你不发符合协议的命令到仪表,仪表是不是响应的,也就不会ONCOMM.比如说发一个"FF"+仪表地址后,你与单片机的约定是300MS里接收完单片机所有的上传数据,那么一般的做法是发完这个命令后,等待300MS后,再去检测公共变量,是否收到上传的数据,如果没有收到,是再次请求数据,还是跳过处理(超时判断),这就要看你自已的定义了.
这个300MS怎么进行呢,当然不能用SLEEP.自已写一个延时调用程序,也不要用定时器,这样不好.
另一种情况,不知你是不是这样想的,我猜的,你不想等待这300MS延时.......
如果你想不等待这300MS,那就不好办了.你发完一个表的请求命令,再发第二个,第三个....这样,两个命令中间的延时很少,而对于这么短的时间来说,两个仪表可能在同一时间内响应命令,然后同是发数据上来,这样处理就不好办了.一般这种情况很少.因为串口只能在同一时刻内响应一个电平信号.485总线没有这样的竞争仲裁处理.
道理还是一样,你不发符合协议的命令到仪表,仪表是不是响应的,也就不会ONCOMM.比如说发一个"FF"+仪表地址后,你与单片机的约定是300MS里接收完单片机所有的上传数据,那么一般的做法是发完这个命令后,等待300MS后,再去检测公共变量,是否收到上传的数据,如果没有收到,是再次请求数据,还是跳过处理(超时判断),这就要看你自已的定义了.
这个300MS怎么进行呢,当然不能用SLEEP.自已写一个延时调用程序,也不要用定时器,这样不好.
另一种情况,不知你是不是这样想的,我猜的,你不想等待这300MS延时.......
如果你想不等待这300MS,那就不好办了.你发完一个表的请求命令,再发第二个,第三个....这样,两个命令中间的延时很少,而对于这么短的时间来说,两个仪表可能在同一时间内响应命令,然后同是发数据上来,这样处理就不好办了.一般这种情况很少.因为串口只能在同一时刻内响应一个电平信号.485总线没有这样的竞争仲裁处理.