转:http://www.cnblogs.com/genli/articles/1988459.html
今天被经理狠批了一顿,事后仔细想了想,是自己的原因,是自己太笨了,不能怪领导的。
主要起因是串口通信的问题,我们做测试,需要上位机和下位机以及测试仪器通信。通信的底层函数是经理写的,而且已经封装在dll文件中,我们看不见,只能进行调用。于是问题出现了,从PC机向测试仪器发送命令没有问题,但是从测试仪器返回到PC机上却得到的不符。和同事讨论研究了半天,一开始认为是接收时间的问题,后来经过调试发现不是这个问题,最后我们认为是经理的函数的不稳定,于是请教经理。
领导就是领导,过来看下问题,想了一会,告诉我们将打开串口的函数放在初始化再进行调试。测试了很久也没有发现问题。最后经理给我们讲了一下串口通信原理,并且狠狠的批了一通,
总结来看串口通信原理,(也可以说大多数通信原理也是如此)。通信首先要有个通信,可以简单的把通信看成一个小桶,发送方住水桶里装水,接收方从水桶中取水。如果你要和对方通信首先需要将桶盖打开,再将水装入到桶中,这时接收方才能够从桶中取到水。这里就存在着一定的问题,1,如果桶盖还没有打开,发送方已经发送了。这时接收方再从桶中取水,肯定取的水不对,会不一部分缺失了。解决方式就是让桶盖打开再往其中加水。2,但是桶盖何时打开,发送方何时发送,这个不好把握。解决方法:接收方接到数据时,要返回一个应答标志,告诉发送方我已经取到数据了,而且是取得到正确数据才应答,否则不理会,继续取数据。或者一直查询,直到与发送方发来的数据一致再停止取数据。
一般的,进行串口通信总有一个是主动方一个是被动方,而且二者传输数据时,会有一定的协商好的数据格式,二者发送接收都按照此数据格式进行。
真的应该感谢经理,他的一能指教,用如此形象的比喻把串口通信原理就讲明白了,感觉受益不小。也解决了困惑很久的东西。