新闻  |   论坛  |   博客  |   在线研讨会
远程通信节点的系统测试方法
tvb2058 | 2007-12-09 10:28:24    阅读:1854   发布文章

作者:苏州科技学院 付保川 班建民 奚雪峰
1概述

  在基于远程通信的分布式控制系统中,为了增强系统的兼容性和灵活性,可将控制节点的远程通信功能单独分离出来,交给远程通信节点去管理。这样,各远程节点之间的通信就完全等效为控制节点间的本地通信,而无需关心其是否具有远程通信能力,从而简化控制节点的设计。

  一个典型的远程通信节点的例子是基于单片机实现的、具有2个RS-232串行口、1个485总线端口的系统。单片机选用具有存储功能的89C51,RS-232串口选用具有握手功能的接口芯片16C550,485总线接口选用75176接口芯片与单片机的串口相连,而对于待转发数据的存储则采用静态RAM芯片6264。在89C51系统中,由于I/O端口地址与外部RAM单元地址处于同一个地址空间,因此采用一个统一的3-8译码器就可以实现对I/O端口和对外部RAM单元的操作。

  通用异步收发器(UART)是实现远程通信的核心部件,也是系统测试的重点。本方案所选用的16C550是一个稳定性好、可靠性高、编程功能很强的UART。它除了完成对收发数据的"串-并"和"并-串"转换之外,还可通过对其内部11个寄存器的编程方便地设置芯片的工作方式、数据帧格式等控制参数以及读取芯片的工作状态和MODEM的状态等数据,从而实现远程通信节点之间的全双工通信。16C550有三种工作模式:查询、中断和回路自测试。系统正常工作时宜采用中断方式,以提高系统的效率;而查询方式和回路自测试方式主要用于系统测试场合。

  远程通信节点是一个软硬件结合、本地和远程通信功能并存的复杂系统,给系统测试带来一定难度:一方面硬件系统的逻辑正确性有待验证,另一方面系统软件的逻辑功能也有待进一步调试。在两种因素都不确定的情况下,如何能够确认系统逻辑的正确性,值得深入研究。解决这类问题的基本思路是对相关因素进行解耦,即将多个相互关联的因素按一定的边界条件分解为相对独立的因素,然后对这些独立的因素分别加以处理。

  完成对远程通信节点的测试需要用到如下几种仪器设备:万用表、逻辑笔、数字存储示波器以及单片机的仿真器、MODEM、公用电话线路、PC机等。

2  系统测试步骤

  在系统测试之前,应首先确定系统测试的总体方案及流程,根据总体流程把系统功能分解为功能相对独立的单元模块,对单元模块逐个进行软硬件测试;然后,从逻辑上将单元模块进行集成测试;最后,对系统的远程拨号及系统整体功能进行测试。具体地说,对远程通信节点系统的测试步骤如下:

  第一步,对I/O端口的读/写访问测试;
  第二步,对UART的连结逻辑和状态测试;
  第三步,本地数据通路测试,即测试从CPU到RS-232的本地数据通路是否形成;
  第四步,通信节点与MODEM之间握手信号的应答测试,以及MODEM对AT指令的响应测试;
  第五步,通信节点拨号功能测试与数据链路测试;
  第六步,通信节点的整体测试。

2.1  CPU外围电路及外部RAM、I/O端口的测试

  在对CPU及其外围电路测试之前,应在断电的情况下,用常规方法检查主要芯片的连线是否正确。如果连线和焊接全部正确,再对通信节点上电测试,检查其工作电压是否正常。如果这些检查都正常,则继续测试。

  (1)  CPU外围电路的测试

  将通信节点与仿真器连接,通过仿真器以单步工作方式向单片机内的I/O端口(如P1口)送出测试信号。用万用表或逻辑笔测试单片机芯片引脚的状态,依此验证单片机的外围电路是否正常工作。

  (2)  外部RAM及I/O端口的测试

  通过仿真器向外部RAM的指定单元、外部I/O端口分别写入测试数据,然后再将其读出与原数据进行比较。如果两者一致,说明对RAM单元、外部I/O端口的读/写操作是正确的,因而可以进一步证明地址译码器的逻辑选择是正确的,可以进行后续测试。

2.2  UART的回路自测试

  在远程通信节点的系统测试中,对UART的测试是关键。因为对UART的测试涉及三方面的不确定因素:UART芯片的硬件连接逻辑、UART的初始化程序、远程通信的握手信号。这三个因素之间相互关联,一旦出现问题,很难进行准确的判断,因此,必须将这三个因素单独分开逐个测试认定。UART的回路自测试为分步测试提供了有效的方法。

  (1)  进入回路自测试模式

  回路自测试是16C550提供的用于测试远程通信链路能否正常工作的辅助手段。在回路自测试模式下,由MODEM控制寄存器MCR和MODEM状态寄存器MSR相互配合,自行构成测试回路,而无需与MODEM实现连接。这样可以降低测试的复杂度。

  通过对16C550的编程,将其内部寄存器MCR的第4位置1(MCR.4=1),即可进入回路自测试模式。

  (2)  回路自测试的判断逻辑

  在回路自测试模式下,对MCR的位操作将会引起MSR相应位的状态发生变化,回路自测试的判断逻辑为:

  MSR.5 = MCR.0
  MSR.4 = MCR.1
  MSR.6 = MCR.2
  MSR.7 = MCR.3

  即在给定MCR值的情况下,如果从MSR能得到相应的值,则说明UART工作正常,外围电路的连接逻辑正确;否则,说明UART没有正常工作。对回路自测试结果进行分析判断的程序如下:


MOV DPTR,#MCR ; 取MCR的地址
MOV A,#0BH
MOVX @DPTR,A ; 将MCR的值设置为0BH
MOV DPTR,#MSR ; 取MSR的地址
MOVX A,@DPTR ; 从MSR读取相应的状态数
; 据,判断其是否为B0H

  由此可见,回路自测试功能是非常有用的,使用这种方法可以迅速判断16C550的连接逻辑是否正确。

2.3  对本地数据通路的测试
 
  在完成通信节点核心部分的单元测试之后,需要对2个RS-232串口之间的本地数据通路进行测试。测试的方法是:选取一组测试数据,通过仿真器以连续方式向16C550的串行输出口发送这些测试数据,使用数字存储示波器分别在16C550的串行输出口、RS-232转换芯片的输出端及RS-232连接器的TxD引脚等位置上观察测试信号的波形,再将波形与测试数据编码进行对比。例如,如果把数据帧格式定义为8位数据位、1位起始位、1位停止位、无奇偶校验位,则可以选取55H、00H和FFH作为测试数据。此时,55H对应的输出波形是方波;00H对应的输出波形只有停止位上有一个1,其余位置全为0;而FFH 对应的输出波形只有起始位上有一个0,其余位置全为1。在16C550的串行输出口上测到的波形分别如图1所示。


图1  16C550串行输出口波形

  进行此项测试时应注意两点:第一,测试数据的选取要考虑输出波形的易判别性,波形特征要明显;第二,MAX232转换器的编码方式是负逻辑,即MAX232转换器输出端的波形与输入端的波形是反相的。

2.4  通信节点与MODEM之间的应答测试

  建立通信节点与MODEM之间的应答关系,是实现远程通信的关键,是数据链路形成的基础与核心。对该功能的测试包含两项主要内容:通信节点与MODEM之间的握手信号测试和MODEM对AT指令的响应测试。对这些功能的测试均需要编写相应的辅助测试程序。

  (1)  通信节点与MODEM之间握手信号的测试

  通信节点与MODEM之间的握手信号是指:数据终端准备好信号DTR、MODEM准备好信号DSR、发送请求信号RTS、允许发送信号CTS、振铃信号RI和数据载波信号RLSD。

  测试程序中,通信节点以查询方式与MODEM进行交互,即先由通信节点向MODEM发送终端设备准备好信号DTR=1,MODEM对此信号做出回应,并返回准备好信号DSR。如果测试程序检测到DSR=1,再向MODEM发出信号RTS=1并等待回应。如果MODEM给出回应信号CTS=1,则表示握手成功,通信节点就可以向MODEM发送AT指令了。

  (2)  MODEM对AT指令的响应测试

  通信节点与MODEM之间进行会话的途径是,在命令模式下通过通信节点的RS-232串口以ASCII码的形式向MODEM发送AT指令。因此,MODEM对AT指令能否做出正确响应是通信链路建立的基础。测试方法是:通过仿真器向MODEM发送命令ATS0=1(置MODEM为自动应答状态),然后,观察MODEM的AA指示灯是否被点亮,据此,判断MODEM是否对AT指令做出正确响应。一旦MODEM进入自动应答状态,就可以进行拨号功能测试和数据链路测试了。

2.5  通信节点的拨号功能及通信链路测试

  通信节点的拨号功能是通过通信的节点向MODEM发送自动拨号AT指令来完成的。测试方法是:把两个MODEM同时接入PSTN,一个作为主叫方,另一个作为被叫方,通过通信节点的RS-232串口与MODEM进行连接。被叫方MODEM由通信节点将其初始化为自动应答方式,而主叫方的通信节点通过AT指令向MODEM发送待呼叫的电话号码(以ASCII码表示),MODEM根据收到的电话号码向被叫方发出呼叫。如果被叫方在收到振铃信号后能对发起呼叫者作出正确回应,则说明通信节点的拨号功能有效,且两个通信节点之间数据链路可以成功建立。

2.6  全双工通信功能的综合测试

  全双工通信功能的测试方法是:将主叫方和被叫方的MODEM与各自的通信节点按照上述办法进行连接后,在通信节点的第2个RS-232串口上各连1台PC机,将MODEM初始化为自动应答方式,而通信节点自身处于等待中断并接收数据的状态。然后,在2台PC机上分别运行连续发送数据的程序和接收数据的程序(这2个程序均是事先调试好的),再将接收到的数据与对方发送的数据进行比较。如果两者一致,说明整个数据链路没有问题;如果两者不一致,则说明数据链路工作不正常。应按照下述方法进行检查:首先,检查通信节点的中断接收子程序和发送子程序是否有问题;然后,再按照前述方法的倒序逐级检查出错原因。

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客