Modbus协议 报文间隔3.5个字符计算设置

news/2024/11/23 10:15:23/



Modbus 协议报文间隔需要大于3.5个字符。

Freemodbus需要配合一个定时器使用,这是因为它是通过定时器超时来判断Modbus传输过程结束的,在Modbus协议中,以RTU模式为例,报文帧由时长至少为3.5个字符的空闲间隔区分,这个区间被称为t3.5,注意,这里是“至少”不是至多,也就是通信之间也不希望对方发的过快,所以在Freemodbus中对定时器就采用了类似于四舍五入的办法,比3.5个字符略微多一点的溢出时间。

Modbus 协议报文间隔需要大于3.5个字符计算:

1.1、有检验位

1个字符=1(起始位)+8(数据位)+1(奇偶校验位)+1(停止位)=11位

3.5个字符=3.5*11=38.5位

如果波特率=9600bps,则3.5个字符间隔时间为38.5/9.6=4.0104167毫秒

1.2、无校验位

1个字符=1(起始位)+8(数据位)+0(无校验位)+1(停止位)=10位

3.5个字符=3.5*10=35位

如果波特率=9600bps,则3.5个字符间隔时间为35/9.6=3.6458毫秒

2、通常可以将传输45位的时间四舍五入后做为报文时间间隔。

如果波特率=9600bps,则45位传输时间为45/9.6=4.6875≈5毫秒

所以Freemodus的作者做了一个 特别巧妙的公式变量:

usTimerT35_50us = ( 7UL * 220000UL ) / ( 2UL * ulBaudRate )

这里,usTimerT35_50us表示 3.5个字符,对应 50us的倍数,以波特率9600计算,刚刚理论计算为4ms左右,4000us/50us = 80

那么这个公式的计算结果是:usTimerT35_50us = ( 7UL * 220000UL ) / ( 2UL * ulBaudRate ) = 7*220000/(2*9600) = 80.2,这个值是无符号整型,所以就是80。

那么算出 80 以后怎么用呢,80代表的是80个 50us,这是作者为了移植方便,所以都用 50us作为基准,在具体使用的时候,刚说到要比t3.5稍微大点,大太多,反应慢,容易出错,作者给了一种方法:

usTimeoutMS = ( usTim1Timerout50us + 10 ) / 20;

其中 usTimeoutMS 就是要延时的ms数,还是以9600为例,那么定时器溢出时间为  (80+10)/20 = 4ms,然后移植者再根据自己的处理器,设置4ms的定时器溢出即可。

针对F460的设置:

		stcTimerCfg.Tim0_CounterMode = Tim0_Sync;//同步计数模式stcTimerCfg.Tim0_SyncClockSource = Tim0_Pclk1;//选择时钟(时钟配置的是100M)stcTimerCfg.Tim0_ClockDivision = Tim0_ClkDiv1024;//分频 (97656.25Hz)

//波特率大于19200,统一设置1750us

//波特率大于19200,统一设置1750us
stcTimerCfg.Tim0_CmpValue = (uint16_t) 171;//19200以上,统一配置1750us:171=97656.25/1000000*1750        

//波特率小于19200, 设置t35

stcTimerCfg.Tim0_CmpValue = (uint16_t) 5 * (usTimerT35_50us+10);//19200以下, 97656.25/1000000 * (usTimerT35_50us+10) * 50 = 97656.25/20000 * (usTimerT35_50us+10) = 5 * (usTimerT35_50us+10)


http://www.ppmy.cn/news/553611.html

相关文章

中兴F460光猫破解超级管理员

中兴F460光猫破解超级管理员 转自 http://www.myxzy.com/post-337.html ZXA10 F460中兴光猫(E8-C),在第一次安装的时候,超级管理员帐号:telecomadmin 密码:nE7jA%5m 这个是默认的,由安装人员设置好相关设置…

手把手教程12: F460 PWC(电源控制)

手把手教程12: F460 PWC(电源控制) 目录 手把手教程12: F460 PWC 1. 电源控制( PWC) 1.1 简介 1.2 电源分布 1.3 电源电压检测单元(PVD)说明 1.3.1 可编程电压检测 1(PVD1)、可编程电压检测 2(PVD2) 1.3.2 PVD1、 PVD2 中断/复位框图 1.3.3 PVD1…

成功破解F460路由功能

吐槽一下无聊的情人节,在家宅着发霉,把光猫拿出来折腾了,F460默认被关闭了路由功能,搜网找到了破解方法,具体不说了,只记录一下要点,备用 telnet---用工具或者系统自带的都行,telnet 192.168.1.1 登录到路由器,因为是linux系统做的,所以默认密码账号都是root 登陆成功后&…

手把手教程7: F460 串口(485)调试

手把手教程7: F460串口调试 目录 手把手教程7: F460串口调试 1. USART架构框图 1.1STM32 USART架构框图 2. F460 USART架构框图

手把手教程1: 华大单片机HC32F460如何新建工程(ddl库版本)

华大单片机HC32F460如何新建工程(ddl库版本) 目录 华大单片机HC32F460如何新建工程(ddl库版本) 准备工作 正式工作 开发板请点击: https://item.taobao.com/item.htm?spma2oq0.12575281.0.0.50111debhMzSwz&ftt&id660179379335https://item.taobao.com…

中兴ZXHN F412/F460/F660等破解超级密码、破解用户限制、关闭远程控制、恢复路由器拨号

试一下万能密码,用户名 telecomadmin 密码 nE7jA%5m 看是否管用。不过基本都已经在第一次注册的时候通被修改了。 当然你可以先将光猫回复默认,超级密码就会恢复默认。然后再对光猫进行操作,比如修改为桥接模式,使用路由器拨号。…

[技术问答]华大HC32F460与STM32F407对比

使用华大半导体替代ST体验 (HC32F460KETA替代STM32F407ZGT) 芯片持续缺货涨价,让我所在的初创小公司真的是处于生死的边缘,各种芯片一直在告急,没有供货商,我们公司产品也生产不出来,32的芯片价格还在一直…

中兴ZXHN F412/F460/F660 23端口被关闭 无法telnet 无法访问web_shell_cmd.gch的解决方案

23端口被关闭 无法telnet 无法访问http://192.168.1.1/web_shell_cmd.gch 的解决方案 http://192.168.1.1/ 用户名 telecomadmin 密码 nE7jA%5m 运营商中国电信设备型号F660硬件版本号V5.0软件版本号V5.0.0P1T3 允许用户最大数:4 解决23端口被关闭 中兴F412/F460…