除BUG记

我负责一个模块,功能比较简单,就是测量环境温、湿度,外加控制空调开/关、温度设定。就是这么几个功能,就反复试验、修改,才达到稳定。在调试时,出现各种各样的BUG,一些是编程时候出现的语法错误,一些是功能设计不合理的原因。其中有个BUG折腾了好久,今天终于发现原因,这还是别人帮助我才解决的。下面看看这除BUG的过程:

   

空调通讯方面问题比较多:

1、起初是有时候出现空调与模块完全不能通讯的现象;

2、出现空调与模块单边通讯的现象,即空调收到模块的指令,但模块没有收到空调返回的信息;

3、出现空调与模块首次上电时,情况2发生,但不重启的情况时,第二次之后完全通讯成功(双边通讯)的现象。

针对情况一,通过请教OMRON公司的技术人员,我了解到温控器接收指令与发送指令之间必须有一定的时间间隔,大概有500ms就可以了。所以我在发送数据程序中加入了500ms的延时指令,问题1情况不在出现,但随之而来的是问题2的频繁出现。这个问题困扰了我很长时间。在现场我做了如下试验:

首先,断开温控器与模块之间的RS485连接,然后通过usb转串口线把温控器与调试所用的笔记本连接起来,然后通过通过串口调试助手调试温控器,目的是为了验证温控器是否能够正常工作。经过试验,结果表明温控器完全能够正常工作。电气连接示意图如图1

 

1 温控器与上位机连接

接着,断开笔记本与温控器的连接,然后通过usb转串口线把模块与调试所用的笔记本连接起来,然后通过串口调试助手调试模块,目的是为了测试模块软件是否正常。经过试验,结果表明模块能够成功接收到串口助手发送过来的数据。电气连接示意图如图2

2  模块与上位机连接

最后,重新连接温控器与模块,上电,设置温度,情况2再次出现。电气连接示意图如图3

3 温控器与模块连接

同时连接温控器、模块、笔记本时候,则温控器与模块之间能够够正常通信。电气连接示意图如图4

4 温控器与模块、上位机连接

到此初步估计是由于RS485接线问题,经过询问OMRON公司技术人员可知,11时,RS485总线终端电阻(约为120欧姆)可有可无。模块上接有终端电阻,当我尝试去掉该电阻时,针对图3情况时,问题2得到解决。但出现问题3

经过考虑,在模块上电初始化中,我加入了向空调发送“开空调”程序,这段程序能够保证每次模块上电时都要重新开启空调,以保证空调随时进行接收别的指令(当空调处于“关”时,它是不工作的,即使空调已经上电)。问题3得以解决。

到这里,本以为可以结束了,其实还有很大的问题,如果在模块上电之后才开空调的话,那么那个初始化中加入的指令就不会起作用,还是会出现问题3。这个方法治标不治本,后来,在一同事的帮助下,终于从根本上解决的问题。问题是这样解决的,只在一个地方加了这么一条语句。

void beginSend(void)

 uint8 i = 0;
 sendEnable(); //设为发送  
 TXSTAbits.TXEN = 1; //使能发送 
    for(i=0; i< sendCount; i++)
    {
   TXREG  = sendBuf[i];  
   while (!TXSTAbits.TRMT);   //TSR为空时置TRMT = 1
    }
    receEnable();    //设为接收
    sendCount = 0;
    receCount = 0;    //这个很重要
    TXSTAbits.TXEN = 0;
    Delay10KTCYx(100);   //延时500ms    
}

关于这个函数就不多解释了。对比我这样、那样的测试,还是没有找到错误的根本原因,人家只是看了一遍调试报告,就立马找出了问题的所在。这固然有经验的问题,但更多的是我自身对于问题的分析不够冷静、思维不够严谨。还没有形成自己的一套发现错误、分析错误、解决错误的思维体系。在遇到“比较怪”的情况时,就乱了方阵,试图用穷举法把可能出现错误的地方都测试一遍,这大大消耗了时间,并且本质上讲并不能对解决问题有效的帮助。反而可能因为混乱一通的测试,遇到更多别的问题,最终偏离了正确解决问题的道路。

发现并找到一种合乎科学的编程习惯、除BUG思路是以后工作时的重中之重。

 

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/259156.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

正则表达式语法(转)

正则表达式是一种文本模式&#xff0c;包括普通字符&#xff08;例如&#xff0c;a 到 z 之间的字母&#xff09;和特殊字符&#xff08;称为“元字符”&#xff09;。模式描述在搜索文本时要匹配的一个或多个字符串。 正则表达式示例 表达式匹配 /^\s*$/ 匹配空行。 /\d{2}-…

迎战校招训练题

一、双空 编译器可以根据硬件特性选择合适的类型长度&#xff0c;但要遵循如下限制&#xff1a;short与int类型至少为___C___位&#xff0c;long至少为__D____位&#xff0c;并且short类型不长于int类型&#xff0c;int类型不得长于long类型。 A. 4 B.8 C.16 D. 32 E. 64…

【ASP.NET Web API2】初识Web API

Web Api 是什么&#xff1f; MSDN&#xff1a;ASP.NET Web API 是一种框架&#xff0c;用于轻松构建可以访问多种客户端&#xff08;包括浏览器和移动设备&#xff09;的 HTTP 服务 百度百科&#xff1a;Web API是网络应用程序接口。 个人理解&#xff1a;Web API 是提供给多种…

三星s8怎么分屏操作_三星手机该怎么玩?了解完这几点用机技巧,可以轻车熟路了!...

其实对于三星这个手机品牌&#xff0c;我还是很佩服的。虽然近些年来&#xff0c;三星在国内的市场份额日渐变少&#xff0c;但是在国内的影响力依然尚存。毕竟三星手机在某些方面还是很有优势的&#xff0c;特别是旗舰系列机型深受消费者喜爱。接下来&#xff0c;笔者就跟大家…

关于条件编译的问题

这两天来忙活ucos-II在PIC18fxxx系列上的移植。在编译的时候老出现变量被多重定义的错误。花费了一天的功夫才成功编译通过&#xff0c;错误何在&#xff1f;&#xff1f;就是因为没有搞明白条件编译的原理&#xff0c;二是对mcc18编译器的特点无知。下面学习条件编译方面的知识…

二维数组的指针复习

最近一次的考试都是指针&#xff0c;真是给我深深上了一课&#xff0c;所以我特此复习一下指针方面的知识。二维数组的指针 int a[3][4] {{1,3,5,7},{9,11,13,15},{17,19,21,23}}; 下面通过一个表来做详细的说明&#xff1a; 访问二维数组&#xff0c;有两种方法&#xff0c;一…

称重的问题

给你8颗小石头和一架托盘天平。有7颗石头的重量是一样的&#xff0c;另外一颗比其他石头略重&#xff1b;除此之外&#xff0c;这些石头完全没有分别。你不得假设那颗重头到底比其他的石头重了多少。请问&#xff1a;最少要称量几次&#xff0c;你才能把那颗较重的石头找出来&a…

TIF图像文件的读取(c++代码)

一 TIF图像介绍 TIFF是最复杂的一种位图文件格式。TIFF是基于标记的文件格式&#xff0c;它广泛地应用于对图像质量要求较高的图像的存储与转换。由于它的结构灵活和包容性大&#xff0c;它已成为图像文件格式的一种标准&#xff0c;绝大多数图像系统都支持这种格式。 TIFF 是一…

g menu i meun_长沙话读“这里”,到底是阁(gó)里还是该(gái)里

“带笼子”、“打抱秋”……这些地道的长沙话&#xff0c;长沙人&#xff0c;你有多久没听过了&#xff1f;/ 长沙人&#xff0c;你还记得长沙话吗 / “去了很多地方&#xff0c;最后还是回到了长沙”“我听见了一句长沙话&#xff0c;就想回长沙了。”逗霸妹听过很多人回长沙的…

git使用---工作区和暂存区

转载于:https://www.cnblogs.com/momo-unique/articles/4380551.html

UC/OS-II的学习

粗略的的看了邵贝贝老师的那本书&#xff0c;感觉有点眉目。UC/OS-II的全局变量繁多&#xff0c;刚接触的时候容易弄混淆&#xff0c;现在总结下&#xff1a; OSRunning&#xff1a; 用于标识多任务环境是否已经开启运行&#xff0c;在OSStart()函数里启动任务后就置为True。 …

偶数哥德巴赫猜想

已知不小于6的偶数都可以分成两个素数之和。请编写6到100000的所有偶数的分解&#xff0c;若有一个偶数可以分解成多个素数之和&#xff0c;只需写出一种即可。 #include <iostream> #include <algorithm> using namespace std;bool isprime(int n)//判断素数{int …

[20170420]表达式加0或者减0不一样.txt

[20170420]表达式加0或者减0不一样.txt --//oracle 有时候避免某个索引采用字段0或者-0的方式&#xff0c;不使用索引&#xff0c;但是两者存在一点点区别&#xff0c;通过例子说明。 1.环境&#xff1a; SCOTTbook> &r/ver1 PORT_STRING VERSION …

MAPLAP开发环境中release模式和debug模式烧写.hex文件的不同之处

昨天看了齐工的报告才知道release模式和debug模式烧写.hex文件的不同。 三&#xff1a;问题分析 1. PIC系列的仿真器和集成开发环境的情况&#xff1a; Release模式和Debug模式是有区别的&#xff1b;Release模式是只把代码烧录到单片机的flash区内&#xff0c;上电执行&am…

JavaWeb -- Session实例 -- 自动登录 和 防止表单重复提交(令牌产生器) MD5码

1、 自动登录 http://blog.csdn.net/xj626852095/article/details/16825659 2. 防止表单重复提交 表单Servlet //负责产生表单 public class FormServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletEx…

电脑常见故障处理_彩超常见故障及维修

彩超是医学检测手段中重要的环节之一&#xff0c;是对产妇以及对病人进行内部组织和结构观察的重要方式之一&#xff0c;彩超应用得当可以及早的诊断出病人的疾病&#xff0c;为患者解除疾病的困扰。彩超设备是一种极为先进的诊断系统&#xff0c;一般彩超系统包括以下几个部分…

微软历史最高市值是多少?

有人说微软在1999 年 12 月达到股价历史最高点 $58.38并不准确。我1999年12月22日增加微软&#xff0c;公司依照1999年12月27日的价格&#xff08;119.125&#xff0c;拆股后变为59.5625&#xff09;给了我一笔期权&#xff0c;这个价格&#xff0c;成为微软股价空前绝后最高点…

京东2016校招编程题

记得有一个大题&#xff0c;说的是给定一个n*n的矩阵&#xff0c;要求从1开始填充矩阵&#xff0c;最后的矩阵是蛇形的。即如下&#xff1a; n3, 7 8 1 6 9 2 5 4 3 n4, 10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4 给出代码&#xff1a; #incl…

leetcode21

/*** Definition for singly-linked list.* public class ListNode {* public int val;* public ListNode next;* public ListNode(int x) { val x; }* }*/ public class Solution {public ListNode MergeTwoLists(ListNode l1, ListNode l2) {//递归实现链表合并…

springmvc02

1&#xff0c;创建实体类对象User 注意要导入 bean-validator.jar 包 package com.yangw.springmvc.entity;import org.hibernate.validator.constraints.Length; import org.hibernate.validator.constraints.NotEmpty; import org.hibernate.validator.constraints.Range; im…