给你个协议文本,仔细看看ASCII模式,的确是两种方式的起始停止标志。我正在研究一个modbus例程,而且有win32的移植,我刚刚编译成功,好好研究研究。可以继续讨论 ...
wzf3151 发表于 2011-8-4 16:05 
:dizzy: ,晕倒,俺用MODBUS很多年了,还要你发一份协议学习?:L ,俺自己的电脑里面中英文的MODBUS协议都有。
俺虽然没有用过ASCII模式,但仔细想想,如果用所谓的0x3A做开始接受判断,以0X0d0a做结束接受判断的话,那么数据报文中显然不能出现任何的0X3A或者0X0D,0X0A的数据,否则接受将会出现异常。而且,根据通常的通信处理,一般是接受完一帧数据才会对该帧数据进行解析,接受一个字符就立即解析一个字符显然不是太好,这对稍大容量的数据通信速度将会产生阻塞作用,显然是有很多弊端的。
综上所述,个人认为即使在ASCII模式下,接收方也应以判断间隔时间超过一定阀值作为发送结束的标准,你所说的0X3A,0X0D0A应该在接受方根据间隔时间结束完一帧数据的接受后,用以对该帧数据进行功能解析时辅助所用,作用类似CRC校验码,如果接收方发现数据头不是0X3A,数据尾不是0X0D0A则视为收发错误,此时因为头尾地址确定,所以数据段内容即使出现这些字符也不会产生影响。
|