波特率:每秒钟通过信道传输的信息量称为位传输速率,也就是每秒钟传送的二进制位数,简称比特率。比特率表示有效数据的传输速率,用b/s 、bit/s、比特/秒,读作:比特每秒。

如9600b/s:指总线上每秒可以传输9600个bit;

通常的串口桢格式为:开始位1bit + 数据位8bit + 停止位1bit

也就是说:在9600的波特率下,每秒可以传输出的桢数为:9600 / (1 + 8 + 1) = 960桢/秒,即960字节/秒;

反推:一桢或一字节所需要的时间是多少呢?

1秒 / 960 = 1.4ms

而ModBus协议中超时时间定为:3.5个桢长度为超时时间;

超时时间 = 3.5 * 1 / BaudRate / 10              秒

= 3.5 * 10 / BaudRate                   秒

= 3.5 * 10  * 2 / BaudRate  *2        秒

=  70 / BaudRate  *2                     秒

FreeModBus是这个样实现的:

 1 /* If baudrate > 19200 then we should use the fixed timer values
 2  * t35 = 1750us. Otherwise t35 must be 3.5 times the character time.
 3  */
 4 if( ulBaudRate > 19200 )
 5 {
 6     usTimerT35_50us = 35;       /* 1800us. */
 7 }
 8 else
 9 {
10     /* The timer reload value for a character is given by:
11     *
12     * ChTimeValue = Ticks_per_1s / ( Baudrate / 11 )
13     *             = 11 * Ticks_per_1s / Baudrate
14     *             = 220000 / Baudrate
15     * The reload for t3.5 is 1.5 times this value and similary
16     * for t3.5.
17     */
18     usTimerT35_50us = ( 7UL * 220000UL ) / ( 2UL * ulBaudRate );
19 }

波特率大于19200使用定值:1750us

波特率小于19200使用定值:usTimerT35_50us = ( 7UL * 220000UL ) / ( 2UL * ulBaudRate ); 这usTimerT35_50us 一个单位为50uS,将这个计算结果写到定时器。每中断一次为50us * usTimerT35_50us   微秒;

转载于:https://www.cnblogs.com/mrsandstorm/p/5701867.html

如何计算ModBus超时时间?相关推荐

  1. Modbus 超时时间设置

    原文链接:https://blog.csdn.net/sunxboy/java/article/details/84499791 Modbus通讯时,需要连续读取多个现场设备的数据,虽然也编写了Mod ...

  2. 基于MThings配置MODBUS数据中常见的几种时间概念介绍(超时时间、间隔时间、轮询时间)

    超时时间: 主机使用,主机请求发出后,依据该时间判定从机回复的最大时间范围,超出该时间后,主机判定请求超时.如果超时时间设置过小,从机可能会在超时时间范围外才能回复请求,此时可能会导致总线中持续的报文 ...

  3. c#程序设定使用期限_C# 给某个方法设定执行超时时间

    在某些情况下(例如通过网络访问数据),常常不希望程序卡住而占用太多时间以至于造成界面假死. 在这时.我们可以通过Thread.Thread + Invoke(UI)或者是 delegate.Begin ...

  4. ajax默认超时时间多久,请问chrome浏览器的默认超时时间是多久?

    测试时间:2019/02/26 MacOS 环境下,timeout在各浏览器默认值为(以下浏览器都为当前时间最新版本) chrome 72.x 为4min safari 12 为8min firefo ...

  5. Feign Client的各种超时时间设置

    在Spring Cloud微服务架构中,大部分公司都是利用Open Feign进行服务间的调用,而比较简单的业务使用默认配置是不会有多大问题的,但是如果是业务比较复杂,服务要进行比较繁杂的业务计算,那 ...

  6. C# 的tcp Socket设置自定义超时时间

    简单的c# TCP通讯(TcpListener) C# 的TCP Socket (同步方式) C# 的TCP Socket (异步方式) C# 的tcp Socket设置自定义超时时间 C# TCP ...

  7. ribbon设置url级别的超时时间

    为什么80%的码农都做不了架构师?>>>    ##序 ribbon的超时设置,只能按转发的serviceId来分的,无法像nginx那样直接在每个转发的链接里头设置超时时间.这里h ...

  8. sudo 密码超时时间

    Centos 没有默认超时时间,所以用一次sudo就需要输入密码. vi /etc/sudoers 添加下面的内容,2表示分钟数(看自己需求更改). Defaults timestamp_timeou ...

  9. nginx+FastCGI到底是谁影响超时时间

    需求: 一个php程序要跑一段时间,但是时间不确定. 问题: 当该php程序运行超过一段时间被强制断开连接. PHP本身超时处理 在 php.ini 中,有一个参数 max_execution_tim ...

最新文章

  1. 调用dubbo接口出现多次
  2. springboot 单例_如何实现一个单例及优化
  3. cpu序列号唯一吗_怎么看电脑硬件是不是新的 有什么软件能检测吗?
  4. 图像相似度(信息学奥赛一本通-T1123)
  5. android 小游戏源码_Python入门太难?不如从玩塔防小游戏开始,玩通关就能学会编程...
  6. 使用 SourceTree 操作时弹出 password required
  7. python南开大学王凯_王凯:长大后我也成了你
  8. PAT甲级1115 DFS和BST
  9. googlemap 两点间平滑移动_Salomon萨洛蒙徒步登山鞋实测,一双在山林与城市间探索的户外鞋...
  10. PHP设计模式——代理模式
  11. XP经典壁纸,多少人曾爱慕你年轻时的容颜
  12. linux用tar打包文件,linux tar打包、解包命令
  13. 常见js针对浏览器之间的兼容问题
  14. Tomcat后台管理
  15. WPS翻译公式之谷歌翻译公式
  16. 日行一善的100种方式
  17. 计算机编程课是学什么的,编程是什么课程
  18. 【网络】Padavan固件获取运营商ipv6设置
  19. 分享一些Python导图与速查表
  20. python关于函数作用的描述_Python函数的概念和使用

热门文章

  1. Cookie编程入门篇
  2. 《父亲家书》选:父亲的忙碌和欣喜
  3. [OpenGL]未来视觉1-Android摄像头采集基础
  4. 【iOS Tips】002-实现“简单单例模式”的几种方法?
  5. C++程序设计(第二版)谭浩强----程序题课后习题答案第二章
  6. [afterCode] docker 速成班 3: 使用 container 中的功能
  7. FSM之SMC使用总结
  8. 面向对象分析和设计(OOA/D)
  9. Windows系统 配置Java的JDK环境变量
  10. 编译Cocos2dx程序 (一)