小弟遇到一个奇怪问题,请求大虾帮助。
程序通过RS485虚拟串口 对30台下位机进行实时采集数据(轮询)。。
在采集过程中,发现有时会出错。原因是在改MARK 和 SPACE 效验位后在接收数据。
数据会多1一个BYTE出来。也就是会出现错误数据。比如:我改SPACE后接收1个BYTE,但确出现2个BYTE
多了一个错误的BYTE。请问有遇此现象麽?
(这个问题在实时采集数据(轮询)时,不是经常出现而是有时会出现,导致无法继续轮询。小弟万般无奈,只有求助于此。)
(开发环境:用虚拟机繁体版WINXP系统,波特率为:9600每次接收数据需用MARK 和 SPACE做效验。)
程序通过RS485虚拟串口 对30台下位机进行实时采集数据(轮询)。。
在采集过程中,发现有时会出错。原因是在改MARK 和 SPACE 效验位后在接收数据。
数据会多1一个BYTE出来。也就是会出现错误数据。比如:我改SPACE后接收1个BYTE,但确出现2个BYTE
多了一个错误的BYTE。请问有遇此现象麽?
(这个问题在实时采集数据(轮询)时,不是经常出现而是有时会出现,导致无法继续轮询。小弟万般无奈,只有求助于此。)
(开发环境:用虚拟机繁体版WINXP系统,波特率为:9600每次接收数据需用MARK 和 SPACE做效验。)
1、一般的和校验一字节
2、CRC校验两字节要仔细看下位机说明书,不可瞎改。如果不是以上问题,而是下位机有时乱数,可以先自已做一个长度校验,先判断长度,
如果长不对,直接丢弃,继续轮询下一个,最后再补招一下没收到正确数据的点。
你好,我是按下位机要求来做的,这点你可放心。
至于丢弃数据,在我这程序里并不是解决问题的方法。
因为下位机传数据时会停止工作,必须要穿完全部数据后才会继续工作。
所以这种情况实在令人费解。不知是否有更好的方法?
(我用COM口调试器来接收数据并不会出现这种错误数据的情况。
但真正用我程序跑起来确收到这错误数据。
但这种问题有时会出现有时确十分正常。)
通讯协议:
1.开始下位机和PC以MARK为效验位,PC为主发送机号与下位机通信.
2.下位机收到PC发过来的机号,则相对应的机号的下位机回应机号给PC后改效验位为: SPACE
3.PC收到机号,也同时改效验位为: SPACE.之后PC发接收数据的指令给下位机.
4.下位机开始发数据给PC
5.PC开始接受数据.