不按标准引发的bug

我们曾经在初级和中级培训中给大家详细讲解了Modbus通讯的开发,并多次强调了一定要按照标准协议的要求编写Modbus驱动程序,可是现实中仍然有很多工程师不按照标准,导致通讯中会出现bug,最近也有猿友微我说他的Modbus通信中有bug。经过详细沟通,知道他在帧完成检测和帧间字节检测时候没有严格按照标准。

小猿曾经在嵌入式培训中多次强调告诫大家Modbus通讯中帧完成检测,也就是我们常说的t3.5个字节的帧中断完成检测,和t1.5的字节间检测。在标准协议中明确要求,我们在来温习一下,希望大家牢记这段,因为这是Modbus驱动中最重要的部分。

其中t3.5的检测必须根据不同波特率做调整,在程序中比如9600波特率和19200波特率计算出来的值是不同的,例如9600波特率时候t3.5=1/9600 * 11 * 3.5 = 4.01ms, 而19200波特率时候t3.5计算出来应该为t3.5=1/19200 * 11 * 3.5 = 2.005ms,也就是说当波特率改变的时候,你的帧完成定时中断的定时器的值是不同的。如果按照相同的值来检测,那么通信就会出现bug。另一个常见的bug是因为没有做t1.5检测引入的,如上图所示,如果不做t1.5检测,那么不正常的帧2就会被认为是正常,引入通信bug。希望这两个地方引起大家的重视。

其实在标准协议中已经给出了程序的状态图,可以按照下面的图示开发你的程序就不会带来bug。

假如你的软件要过认证的话,如果你不按标准做,那么认证肯定过不了,因为认证就是按照标准做实验检测的,小猿一直有一个观点,就是有标准的东西一定要按照标准去实现,以标准为依据,依标准为指导,那么你就不会错,而且开发出的程序可移植性强,也比较专业。

原文发布于微信公众号 - 嵌入式程序猿(InterruptISR)

原文发表时间:2017-01-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏何俊林

Android 插件化和热修复知识梳理

本文来自IAM四十二授权发布,IAM四十二的简书地址:http://www.jianshu.com/u/c6f7cfa366d9 概述 在Android开发中...

4469
来自专栏FreeBuf

pyMagic:用python控制的Geek入门神器

原创作者:comover 大学四年快要结束了,这几年也学习了一点新的姿势。最近一直在跟国外的micropython项目,这个项目是由剑桥大学的理论物理学家(th...

4145
来自专栏草根专栏

.NET Core TDD 前传: 编写易于测试的代码 -- 缝

举个例子, 如果一辆汽车在产出后没完成测试, 那么没人敢去驾驶它. 代码也是一样的, 如果项目未能进行该做的测试, 那么客户就不敢去使用它, 即使使用了也会遇到...

1197
来自专栏IMWeb前端团队

聊聊http/2

本文作者:IMWeb 九月 原文出处:IMWeb社区 未经同意,禁止转载 随着web的发展,http/1.x 已经很难满足现在的需求,Google 因...

2237
来自专栏喵了个咪的博客空间

phalapi-入门篇6(小技巧和浅谈API适用范围以及入门篇总结)

#phalapi-入门篇6(小技巧和浅谈API适用范围以及入门篇总结)# ? ##前言## 先在这里感谢phalapi框架创始人@dogstar,为我们提供了这...

3705
来自专栏搜云库

《深入理解Java虚拟机》(一)Java虚拟机发展史

Java虚拟机发展史 注:本文大部分摘自《深入理解Java虚拟机(第二版)》 作为一名Java开发人员,不能局限于Java语言规范,更需要对Java虚拟机规范有...

24810
来自专栏Albert陈凯

Spark开发电商日志分析用户行为聚合功能练习下面开始搭建开发环境注意Task表中最后一个列task_param中,Json的StartDate和EndDate需要设置成今天,因为mock数据的时候,

项目介绍 ? 项目介绍 电商网站的各种用户行为进行分析 访问首页 → 点击商品 → 添加购物车 → 结算 访问首页 → 输入关键词 → 点击商品列表 → 点击...

5139
来自专栏沈唁志

你认为该怎么样学习PHP?PHP成长之路

2985
来自专栏王清培的专栏

.NET应用架构设计—表模块模式与事务脚本模式的代码编写

要想正确的设计系统架构就必须能正确的搞懂每个架构模式的用意,而不是胡子眉毛一把抓。现在有一个现象是什么呢,项目的结构从表面上看是很不错,层分的很合理,其实对业务...

900
来自专栏编程一生

架构师之路--搜索业务和技术介绍及容错机制

1332

扫码关注云+社区

领取腾讯云代金券