|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区
您需要 登录 才可以下载或查看,没有账号?立即注册
×
随着计算机局域网的不断发展,网络连接越来越复杂,给网络工程师布线、维修等工作带来了很大的困难。困难的原因有两个:第一,双绞线的错接、断接、压线接触不良等问题在工程实践中层出不穷,很难直观发现,而分清每条双绞线两端的对应关系在综合布线中又显得尤其重要;第二,在一般情况下,局域网的终端之间或终端与集线器之间的距离较远,很难采用直接测量的办法对网线故障做出正确判断。
针对以上两点原因,本文对双绞线的故障检测提出了可行的方案与实现方法。首先,将微处理器快速数据分析与逻辑运算应用于双绞线故障检测,使问题变得简单,结果直观化。其次,采用射频无线收发器 nRF401进行数据传输,实现远距离数据交换,使距离远的问题迎刃而解,简化测量过程。
<strong>1系统构成</strong>
1.1nRF401结构简介[1]
nRF401内部结构如图1所示。它是由挪威Nordic公司推出的集收、发为一体的集成芯片,工作于433MHz ISM频段;采用FSK调制与解调技术;传输速率达20Kb/s,传输功率最大+10dBm;差分式天线接口,非常适合做成PCB天线,以节约成本。
<ignore_js_op>
2010-3-22 20:57:40 上传
<strong>下载附件</strong> (5.25 KB)
</ignore_js_op>
图1nRF401内部结构
图1中各引脚含义如下。
DOUT:数据输出端。
DIN:数据输入端。
TXEN:高电平允许发送数据,低电平允许接收数据。
ANT1、ANT2:天线接入端。
PWR_UP: 器件低功耗控制。
1.2nRF401外部连接及与微处理器接口
在本设计中,将天线以覆铜的方式做在印制板上,在保证了数据安全可靠传递的前提下,减小了产品的体积。nRF401的配置如图2所示。
<ignore_js_op>
2010-3-22 20:57:41 上传
<strong>下载附件</strong> (12.35 KB)
</ignore_js_op>
图2nRF401外部连接及与微处理器接口
nRF401与CPU之间控制和数据传递接口如图3 所示。
<ignore_js_op>
2010-3-22 20:57:41 上传
<strong>下载附件</strong> (5.75 KB)
</ignore_js_op>
图3nRF401与CPU接口 图4CPU与双绞线接口
1.3CPU与双绞线接口
普通双绞线包含8根线,可以将89C51的P0口作为双绞线线上电平状态的输入口。通过设置和检测P0口的状态,即可对双绞线的连接状况做出正确判断,连接如图4所示。
<strong>2双绞线连接标准</strong>
关于连接的标准有两个:T568A和T568B。两个标准的线序排列如图5所示,方向为水晶头金属压片向上且正对观测者的方向。T568B为常用的标准。
<ignore_js_op>
2010-3-22 20:57:41 上传
<strong>下载附件</strong> (4.12 KB)
</ignore_js_op>
图5RJ45连接器标准
◆ 两边使用同样标准的线称为直通线,用于PC到HUB普通口、HUB普通口到HUB级联口之间的连接。
◆ 两边使用不同标准的线称为级联线, 用于PC到PC、HUB普通口到HUB普通口之间的连接。
以上两条是判断的主要理论依据。
根据标准,对应 RJ-45插头引脚线序颜色如表1所列。
<strong>表1</strong>
<ignore_js_op>
2010-3-22 20:57:41 上传
<strong>下载附件</strong> (3.13 KB)
</ignore_js_op>
引脚定义如表2所列。
<strong>表2</strong>
<ignore_js_op>
2010-3-22 20:57:40 上传
<strong>下载附件</strong> (7.49 KB)
</ignore_js_op>
<strong>3工作原理</strong>
因为双绞线故障的不确定性,所以不能通过双绞线自身作为主设备和从设备之间数据传递的途径。通过微波进行无线数据传递,对于双绞线的故障判断实在是合适不过的。为此,我们自行设计了主从设备间的数据通信协议及相应的判断规则。
3.1通信协议
(1)连接标准选择命令(01H)
下行报文:01H + 标准数据码(T568A为0AH;T568B为0BH)+ LPC。
上行报文:01H + 确认码(00H) + LPC。
(2)通道选择命令(02H)
下行报文:02H + 通道码(01~08:通道1~通道8)+ LPC。
上行报文:02H + 确认码(00H) + LPC。
注:报文中LPC是指校验和,用于数据校验。
3.2检测算法
要检测双绞线连接的正确性,必须使电平信号在两条线上传递,否则无法检测。在本设计中,故障检测可分为三步:第一,在 8条导线中寻找1条能传递电平信号的公用导线;第二,将公用导线与待测导线在从设备端短接,使公用导线电平信号经过待测导线传递到主设备侧,从而确定待测导线的故障所在;第三,显示线路的连接状态。
3.2.1选公用导线
实际上在10M、100M网络中,仅仅使用1-2 、3-6 这两对线,而1000M网络要用所有的导线,但这并不影响双绞线的测量方法。上文已经阐明,对于直通线双绞线的两端线的排列顺序是相同的,而级联线不同于直通线,双绞线的一端1-2对应另一端的3-6,3-6对应1-2,其余与直通线连接对应关系相同。因为在实际应用中,直通线的数量远大于级联线的数量, 所以将直通线列为首要判断对象。公用导线的选择可以从1号线开始进行,主从设备均选中1号线(暂列为公用导线)。通过通道选择命令,由主设备指导从设备将 1号线(临时公用导线)和2号线在从设备端连接起来。如果两条线无故障且两个端子同属于一条双绞线,那么,1号线与2号线将形成通路,在主设备端2号线上,主设备能够检测到加在1号线上的电平信号。由此可知,1号线可选为公用导线,应用于其它导线的测量。否则,两条线中的一条出现故障不能导通,主设备将指导从设备将1、3号线连接起来,重复以上步骤,直到找到公用导线为止。如果公用导线找不到,则说明本线路最多有一条导线导通,或测量的两端不同属于一条线路,或所有的导线发生错接现象。
3.2.2其它导线对应关系测量
经过公用导线的测量结果分为两种:一, 找到公用导线;二,没有找到公用导线。在公用导线的前提下,首先按照直通线的对应关系,在从设备侧进行连接,看其它导线是否与公用导线形成环路。如果测量最终结果与直通线的对应关系不一致,则按照级联线的对应关系进行测量。如果测量结果还不一致,那么说明有错接现象。通过以上步骤已经获得部分连线导通的信息。将这些导线排除在外,利用排列、组合的数学方法与公用导线连接,从而得出错接导线的连接状况。
如果没有找到公用导线,系统只能通过排列、组合的数学方法找出导线的连接状况。当然,这种几率较少。由于微处理器的速度较快,即使出现这种极端情况,耗时也是瞬间完成的。
另外,每进行一次测量结果的记录是非常重要的,避免了重复性工作,提高了判断速度。
3.2.3显示两端对应关系
将测量结果显示于液晶屏上,使双绞线两端的对应关系一目了然,便于排除故障。
本设计采用手动和自动测量两种方法。以上叙述了自动测量的原理,手动测量的原理与自动测量相同。区别在于选择手动测量时,已经明确线路接线采用的标准。
4软件设计[2,3]
根据以上工作原理设计了相应的软件,图6为系统工作流程。下面将整个程序设计的主要通信程序提供给大家,以供参考。
<ignore_js_op>
2010-3-22 20:57:41 上传
<strong>下载附件</strong> (11.68 KB)
</ignore_js_op>
图6主从设备软件设计流程图
部分程序如下:
include "reg51.h"
include "com.h" //自定义头文件
char Cri_opt[3]; //标准选择命令码
char Cha_opt[3]; //通道选择命令码
char Xbuff[15]; //数据发送缓冲区
char Rbuff[15]; //数据接收缓冲
Xmit_mst() interrupt 4 using 3 //主设备发送中断程序
{ TI = 0; //关闭发送中断
if(Xput != Xget){ //Xput:发送缓冲区入指针;//Xget:发送缓冲区出指针
SBUF = Xbuff(Xget); //发送数据
Xget = (Xget++)&0fh; //当数据取空时指针Xget转到起始位置
}
delay(10ms);
}
Rcv_mst() interrupt 4 using 3//主设备接收中断程序
{ RI = 0; //关闭接收中断
if(Rput != Rget) { //Rput:接收缓冲区入指针;Rget://接收缓冲区出指针
Rbuff(Rput) = SBUF;
Rput = (Rput++)&0fh;
}
delay(10ms);
}
void SendCmd(char*Buff, char TotalChar){
char cnt;
for(cnt=0; Cnt<=TotalChar; Cnt++){
Xbuff[Xput] = Buff[Cnt]; //将命令移入发送缓冲区
Xput = (Xput++)&0fh; //当发送缓冲区满时入队指针由队尾指向队头
}
SBUF = Xbuff[Xget]; //引起通信中断,发送数据
delay(10ms); //延时
}
main(){
char P0_state;
Init(); //系统初始化
............
//选择连线标准
Cri_opt[1] = 0ah; //0ah或0bh
LpcGen(Cri_opt); //生成校验码并写入相应位置
SendCmd(Cri_opt,3); //将采用的连接标准通知从设备
P0 = 0ffh; //P0口操作
............
等待从设备响应; //等待从设备确认后的状态置位
//选择通道
............
Cha_opt[1] = 01h; // 01h-08h
LpcGen(Cha_opt);
SendCmd(Cha_opt,3); //发送选择通道命令
P0 = 0ffh; //P0口操作
............
等待从设备响应;
P0_state = P0; //读P0口状态
............
}
从设备程序设计可仿照主设备程序设计。
<strong>参考文献</strong>
1. nRF401 Product Specification.Nordic VLSI ASA 2002
2. 马忠梅 单片机的C语言应用程序设计 1999
3. 傅清祥.王晓东 算法与数据结构 1998
作 者:北方交通大学 周长勇 张晓冬
来 源:单片机与嵌入式系统应用2003(11) |
|