欢迎来到天天文库
浏览记录
ID:21435127
大小:222.00 KB
页数:3页
时间:2018-10-21
《【玩转485】5.数据的接收3【连载5】》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、【玩转485】5.数据的接收3【连载5】上一篇文章向大家介绍了通过起始字符和结束字符判断一段报文的开始和结束,本文我们向大家介绍如何利用时间判断的方式来接收报文。 为什么要使用时间的方式来对报文进行判断呢?其实大家可以设想这样一种情况,当我们使用起始字符和结束字符的方式来判断一段报文的开始与结束,如果在报文中间出现了起始字符或者结束字符,将会发生什么情况能?相信看过上一篇文章的朋友肯定可以发现其中的缺点,那么解决这些缺点的方法就是通过时间来判断报文的起始与停止。 首先我们要明确报文一般分为固定长度和不固定长度两种形式。 1报文长度固定 图1-1 当有些通讯协议中报文长度
2、固定的情况下PLC接收每段报文所需的时间都是一样的,这样我们就可以根据报文的长度算出来接收报文所需的时间,然后PLC就可以从接收到第一个字符开始计时,计时达到设定时间就算一段报文接收完成。这里我们打个比方,如果是通讯速率是9600bps,每个字符10个位(1个起始位、1个停止位、8个数据位、无效验位)那么我们接收一个字符就需要(1000/9600)*10≈1.04ms。如果每个报文6个字符那么PLC接收这段报文就需要6*1.04=6.24ms,这时我们就可以在PLC中设定从开始接收报文起6.24ms后停止接收报文,然后从新进入等待接收报文的状态。 2报文长度不固定 图2-1在
3、有的协议中报文的长度是不固定的,那这种情况下我们应该如何判断一段报文起始和停止呢?其实这个也是比较简单的当报文中字符的数量是不固定的时候,我们可以通过字符与字符之间的时间间隔来进行判断,通常情况是3.5个字符时间。那么在9600bps的通讯速率,每个字符10个位的情况下就是3.5*1.04=3.64ms的时间中如果PLC没有接收到数据,就认为一段报文已经接收完成,下面再接收到的数据就算一段新报文的开始。 这里可能有的朋友会有疑问,如果两段报文的间隔小于3.5个字符时长那不就出问题了么?其实有这种担心的朋友主要是对485通讯收发数据的方式不够了解。由于485通讯是半双工通讯方式,所以
4、一般都是A站点接收一个B站点发送的报文,然后给B站点发送一个报文,B站点接收到A站点发送的数据后再返给A站点一个报文。如图2-2 图2-2 因此当PLC接收到一个报文后不是立刻接收下一个报文,而是先发送一个报文出去,由于发送一组报文的时间肯定大于3.5个字符时长,所以不会存在被接收的两个报文之间的时长小于3.5个字符长度的情况。 本文就先给大家普及一下基本概念,下一篇文章我们来具体研究一下程序的编写。 作者:马乐 版权为技成所有,未经同意,盗取必究!
此文档下载收益归作者所有