捉虫日记 (一)

最近在做一个项目,测试人员提交的BUG报告是上位机(arm linux)对下位机(某厂商单片机)的操作并没有被下位机执行。于是开始查找原因。

第一次捉虫:

查看了上位机日志,发现是串口发送了某个数据后没有收到下位机的反馈数据。于是使用笔记本与上位机使用串口直接对接,测试后发现笔记本能够接收到上位机发来的数据。于是断定上位机的程序没有问题。(此处留一个伏笔,注意是上位机的程序)

上位机{RS232} ----- {RS232 to USB2.0}笔记本电脑

第二次捉虫:

因为下位机与上位机使用的链路是485的,而上位机只有板载RS232的DB9串口,使用无源RS232 to RS485转接头。我分析是猜是不是转接头有问题。于是将笔记本的USB to 232线接此转接头给下位机发指令,发现可以正常执行,并收到下位机反馈。

下位机{RS485} ----- {[无源]RS485 to RS232} ----- {RS232 to USB2.0}笔记本电脑

第三次捉虫:

进过前两次得到的结论

1:上位机的程序没有问题

2:上位机RS232串口没有问题

3:RS232 to RS485转接头没有问题。

4:下位机没有问题。

这样就奇怪了,每个环节够验证过,到底是哪个环节的问题呢?

看来靠直观的判断已经没有办法解决了,于是把示波器拿来,接到485的AB两根信号线接上,再用笔记本发送数据帧,调整好波形。等到示波器能够清楚的显示数据波形时,将{[无源]RS485 to RS232}转接头的RS232一端接到上位机的RS232串口上。这时从示波器中发现了问题!

下位机{RS485} -- 示波器 --- {[无源]RS485 to RS232} ----- {RS232 to USB2.0}笔记本电脑

                                                                          ----- {RS232}上位机

当笔记本使用{RS232 to USB2.0}接到{[无源]RS485 to RS232}转换器后的485波形很标准,电平电压也符合规范,但是当上位机的{RS232}接{[无源]RS485 to RS232}转换器后的波形非常微弱,只有很小的电压,勉强在示波器上可以看得到。

后来查找资料,发现无源的转换器是靠窃取RS232本身的电平电压来驱动转换芯片,则说明工控机本身的RS232电压比较低,但直接与笔记本用RS232通讯没有问题,但使用无源转换器转换后的信号失真,造成下位机一端无法解析。

最后改用有源RS232 to RS485转接器,问题迎刃而解,上位机与下位机又能正常的通讯了。


你可能感兴趣的:(RS232,RS485)