js如何判断时间是否是整点_RS-485经典好文,如何利用时间判断的方式来接收报文?(系列5)...

上一篇文章向大家介绍了通过起始字符和结束字符判断一段报文的开始和结束,本文我们向大家介绍如何利用时间判断的方式来接收报文。

为什么要使用时间的方式来对报文进行判断呢?其实大家可以设想这样一种情况,当我们使用起始字符和结束字符的方式来判断一段报文的开始与结束,如果在报文中间出现了起始字符或者结束字符,将会发生什么情况能?相信看过上一篇文章的朋友肯定可以发现其中的缺点,那么解决这些缺点的方法就是通过时间来判断报文的起始与停止。

首先我们要明确报文一般分为固定长度和不固定长度两种形式。

1 、报文长度固定

5753420b724e79b2f3e36d52bfaa67a1.png

图1‑1

当有些通讯协议中报文长度固定的情况下PLC接收每段报文所需的时间都是一样的,这样我们就可以根据报文的长度算出来接收报文所需的时间,然后PLC就可以从接收到第一个字符开始计时,计时达到设定时间就算一段报文接收完成。

这里我们打个比方,如果是通讯速率是9600bps,每个字符10个位(1个起始位、1个停止位、8个数据位、无效验位)那么我们接收一个字符就需要(1000/9600)*10≈1.04ms。如果每个报文6个字符那么PLC接收这段报文就需要6*1.04 = 6.24ms,这时我们就可以在PLC中设定从开始接收报文起6.24ms后停止接收报文,然后从新进入等待接收报文的状态。

2 、报文长度不固定

54d3d0be207627e6e39161d5d8b028ce.png

在有的协议中报文的长度是不固定的,那这种情况下我们应该如何判断一段报文起始和停止呢?其实这个也是比较简单的当报文中字符的数量是不固定的时候,我们可以通过字符与字符之间的时间间隔来进行判断,通常情况是3.5个字符时间。那么在9600bps的通讯速率,每个字符10个位的情况下就是3.5*1.04 = 3.64ms的时间中如果PLC没有接收到数据,就认为一段报文已经接收完成,下面再接收到的数据就算一段新报文的开始。

这里可能有的朋友会有疑问,如果两段报文的间隔小于3.5个字符时长那不就出问题了么?其实有这种担心的朋友主要是对485通讯收发数据的方式不够了解。由于485通讯是半双工通讯方式,所以一般都是A站点接收一个B站点发送的报文,然后给B站点发送一个报文,B站点接收到A站点发送的数据后再返给A站点一个报文。如图2‑2

f69e151f1d739305f1edba7882307a9a.png

图2‑2

因此当PLC接收到一个报文后不是立刻接收下一个报文,而是先发送一个报文出去,由于发送一组报文的时间肯定大于3.5个字符时长,所以不会存在被接收的两个报文之间的时长小于3.5个字符长度的情况。

本文就先给大家普及一下基本概念,下一篇文章我们来具体研究一下程序的编写。

作者:马乐

版权为技成所有,未经同意盗取必究!

——END——

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值