最近工作中需要通过DTU将西门子信号机ST800中的配置信息读取出来,并且实时下发新的配配置。根据ST800的手册,它提供了一系列的串口命令来访问信号机,程序开发已经完成,并且有线测试已经通过,但是把信号机接到DTU上,期望后台服务器可以通过DTU来远程下发串口指令时却发现DTU与信号机之间通信不上。以下是调试过程与分析,
- 通过测试发现用电脑直连信号机,和用电脑直连DTU都是可以连通的,唯独用DTU直连信号机不行,所以怀疑信号机或者DTU某一方的串口功能有问题。
- 用万用表测试各个设备的串口引脚电压得到以下数据,
引脚1 | 引脚2 | 引脚3 | 引脚4 | 引脚5 | 引脚6 | 引脚7 | 引脚8 | 引脚9 | |
DTU | 5.57 | 0 | -5.5 | 0 | - | 0 | 0 | -5.57 | -1 |
信号机 | 0 | -9.56 | 0 | 0 | - | 9.35 | 0 | 9.35 | 0 |
电脑 | 0 | 0 | -6.34 | 7.08 | - | 0 | 7.08 | 0 | 0 |
通过图可以发现,电脑作为上位机,引脚3,4,7是Out输出方向,所以有电平。信号机作为下位机,3,4,7是In输入方向,所以没有电平,由此说明电脑和信号机的串口设置是正确的。所以问题应该是出在DTU的串口上。继续看DTU的引脚电压,发现其4,7引脚上没有电平,正常情况下引脚4和7都是硬流控的输出位,如果下位机需要支持硬流控的话,那么作为上位机的DTU也必须支持,所以问题应该是出在这两个引脚没有给高电平导致的。
- 考虑到引脚上的电平需要和其他引脚保持一致,所以考虑是否可以通过DTU的引脚来代替这两个引脚来提供高电平,但是目前DTU只有引脚1上有一个高电平,理论上可以通过额外的一根跳线来同时给4,7供电,但是操作起来比较复杂。于是用DTU的配置工具尝试关掉串口流控制,
结果发现DTU的引脚8由低电平变成高电平了!于是把DTU的引脚1当成是引脚4,引脚8当成引脚7,wala! DTU和信号机正常通信!