当前位置:网站首页>关于MODBUS RTU的T3.5 、T1.5的时序问题
关于MODBUS RTU的T3.5 、T1.5的时序问题
2022-08-09 00:00:00 【无锡的老白】
先看一下MODBUS协议里面关于这两个重要的时序是怎么写的:
在RTU模式,报文由时长至少3.5个字符时间的空间间隔区分。如下图:
整个报文帧必须以连续的字符流发送,如果两个字符之间的空闲大于1.5个字符时间,则报文帧认为不完整,应该被接收点丢弃。
注意:RTU接收驱动程序的实现,由于T1.5和T3.5的定时,隐含着大量对中断的管理。在高通信速率下,这导致CPU负担家中,因此,在<=19200bps时,这两个定时必须严格遵守;对于>19200bps的情形,应该使用2个定时的固定值,建议字符间的超时时间t1.5为750us;帧间超时时间为1.75ms。
在实际使用的时候,我觉得T1.5都没有必要关注。据我用示波器观察,在一个帧之内,字节和字节之间也就是停止位和起始位,字节和字节是紧密连接在一起的。所以我在程序里面就没有对T1.5进行处理。
而在帧与帧之间的T3.5则需要程序处理。因为RTU模式没有起始符和结束符,两个数据包之间只能靠时间间隔来区分。但是仪表在工厂实际的使用过程中,一般都是间隔40ms、50ms,甚至更长时间读一次数据,这之间的间隔完全超过了T3.5。
下面是一些代码及解释
假设现在波特率是9600bps,要发送读取数据的请求:01 03 00 1e 00 01 e4 0c
每个字节包含一个起始位和一个停止位,这样发送这串命令要花费时间8*10/9600 = 8.3ms
即第一帧发送时间是8.3ms
而T3.5的时间是 3.5*10/9600 = 3.65ms
所以第二帧数据开始发送的时间至少是第12ms开始(8.3+3.65 = 11.95ms)
下面是这段程序的时间线。如果ModbusInterval在串口中断里面赋值为1的话,那么从10ms就要开始处理数据,那么处理完后,可能还没到12ms就可以接收下一帧数据。这在时间间隔上不满足T3.5的要求;所以还是赋值为2最为合适。
在实际使用时,上位机串口软件设为30ms定时发送数据的话,会收到误码;设为40ms以上定时发送的话就都正常。
边栏推荐
猜你喜欢
随机推荐
Laravel框架之文件上传
第四章 SQL与关系数据库基本操作(上)
根據百度地图返回的地址,截取省,市,区
HCIP2--HCIA复习
ImportError: cannot import name downsample
获取半年前当月的开始时间及当天结束时间
HCIP2---第一天实验
风控建模一:好坏标签定义
穿越派·派盘V3.14发版啦!
并发编程第4篇,锁的分类
关于在core中使用minio对象存储
基于单片机测量空气粘滞系数方案
Common problems in installing mysql in linux environment and using it
TensorFlow learning path deep learning 】 【 3: gradient disappear \ explosion and solution
如何下载安装穿越派V3.14版本?
C#WPF简述
Jupyter代码补全、修改路径、增添解释器
浏览器插件:插件推荐
C#未将对象引用设置到对象的实例
【深度学习】TensorFlow学习之路二:ANN简介及TensorFlow实现