一般來(lái)�,每��(wǎng)�都具�1�(gè)以上的LED(Light Emitting Diode�(fā)光二極管)指示燈,用�(lái)表示�(wǎng)卡的不同工作狀�(tài),以方便我們查看網(wǎng)卡是否工作正�。典型的LED指示燈有Link/Act、Full、Power�。Link/Act表示連接活動(dòng)狀�(tài),F(xiàn)ull表示是否全雙�(Full Duplex),而Power�電源指示��
在很多應(yīng)用程�,特別是工控程序�,經(jīng)常需要讀入并顯示一些開(kāi)�(guān)量,比如串口通信是否正常,電源是否打�(kāi),電�(jī)工作是否正常等等。這些�(kāi)�(guān)量的顯示用一些控件來(lái)�(shí)�(xiàn)。這些控件根據(jù)輸入的開(kāi)�(guān)量顯示不同顏色和文字用來(lái)表示打開(kāi)和關(guān)�。NI公司專門�(kāi)�(fā)了一套LabWindows控件,專門用于程序�(kāi)�(fā),當(dāng)然這是要花錢的.本文以CStatic為基類,編寫(xiě)了一�(gè)LED�,它可根�(jù)輸入的bool值顯示開(kāi)�(guān),類似于vb里的shape控件�
NI控件
具體�(shí)�(xiàn)�(qǐng)�(qǐng)參考CLED�,當(dāng)然這�(gè)類很�(jiǎn)�,完全可以自己實(shí)�(xiàn),當(dāng)�(shí)如過(guò)你不想自己動(dòng)手編�(xiě),那么可以發(fā)郵件向我要:[email protected].也可以直接復(fù)制文章低部的類的頭文件和cpp文件。下面是程序�(yùn)行時(shí)的截圖:
//類頭文件
#if!defined(AFX[_]LED[_]H[_][_]BDAD9442[_]11BB[_]4917[_]8E43[_]0E2ACC246FE3[_][_]INCLUDED[_])
#define AFX[_]LED[_]H[_][_]BDAD9442[_]11BB[_]4917[_]8E43[_]0E2ACC246FE3[_][_]INCLUDED[_]
#if [_]MSC[_]VER 1000
#pragma once
#endif//[_]MSC[_]VER 1000
//LED.h:header file
//
#define CIRCLE 0
#define SQUARE 1
#define ELLIPSE 2
/////////////////////////////////////////////////////////////////////////////
//CLED window class CLED:public CStatic
{
//Construction public�
CLED()�
//Attributes public�
//Operations public�
COLORREF m[_]crBK,m[_]crOnFG,m[_]crOffFG�
CBrush*m[_]brOnFG,*m[_]brOffFG�
int m[_]iType�
bool m[_]bOn�
CString m[_]sOnString,m[_]sOffString�
bool m[_]bTextOn�
//Overrides
//ClassWizard generated virtual function overrides
//{{AFX[_]VIRTUAL(CLED)
//}}AFX[_]VIRTUAL
//Implementation public�
int GetType()�
bool GetTextOnOff()�
CString GetOnText()�
BOOL GetOnOff()�
COLORREF GetOnFgColor()�
CString GOffText()�
COLORREF GetOffFgColor()�
COLORREF GetBKColor()�
void SetTextOnOff(bool val)�
void SetOffText(CString str)�
void SetOnText(CString str)�
void SetBKColor(COLORREF C)�
void SetOnOff(bool val)�
void SetType(int type)�
void SetOffFgColor(COLORREF C)�
void SetOnFgColor(COLORREF C)�
virtual~CLED()�
//Generated message map functions protected�
//{{AFX[_]MSG(CLED)
afx[_]msg int OnCreate(LPCREATESTRUCT lpCreateStruct)�
afx[_]msg void OnPaint()�
afx[_]msg void OnDestroy()�
afx[_]msg void OnSize(UINT nType,int cx,int cy)�
//}}AFX[_]MSG DECLARE[_]MESSAGE[_]MAP()
private�
void DrawFigure()�
}�
/////////////////////////////////////////////////////////////////////////////
//{{AFX[_]INSERT[_]LOCATION}}
//Microsoft Visual C++will insert additional declarations immediately before the previous line.
#endif//!defined(AFX[_]LED[_]H[_][_]BDAD9442[_]11BB[_]4917[_]8E43[_]0E2ACC246FE3[_][_]INCLUDED[_])
/////////////////////////////////////////////////////////////////
///////////////類cpp文件
//LED.cpp:implementation file
//
#include"stdafx.h"
#include"colortext.h"
#include"LED.h"
#ifdef [_]DEBUG
#define new DEBUG[_]NEW
#undef THIS[_]FILE static char THIS[_]FILE=[_][_]FILE[_][_]�
#endif
/////////////////////////////////////////////////////////////////////////////
//CLED CLED:CLED()
{
m[_]crBK=RGB(255,255,255)�
m[_]crOnFG=RGB(0,255,0)�
m[_]crOffFG=RGB(255,0,0)�
m[_]iType=0�
m[_]bOn=true�
m[_]brOnFG=new CBrush(m[_]crOnFG)�
m[_]brOffFG=new CBrush(m[_]crOffFG)�
m[_]sOnString="on"�
m[_]sOffString="off"�
m[_]bTextOn=true�
}
CLED:~CLED()
{
delete m[_]brOffFG�
delete m[_]brOnFG�
}
BEGIN[_]MESSAGE[_]MAP(CLED,CStatic)
//{{AFX[_]MSG[_]MAP(CLED)
ON[_]WM[_]CREATE()
ON[_]WM[_]PAINT()
ON[_]WM[_]DESTROY()
ON[_]WM[_]SIZE()
//}}AFX[_]MSG[_]MAP END[_]MESSAGE[_]MAP()
/////////////////////////////////////////////////////////////////////////////
//CLED message handlers int CLED:OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if(CStatic:OnCreate(lpCreateStruct)==-1)
return-1�
//TODO:Add your specialized creation code here return 0�
}
void CLED:OnPaint()
{
CPaintDC dc(this)�//device context for painting
//TODO:Add your message handler code here DrawFigure()�
//Do not call CStatic:OnPaint()for painting messages
}
void CLED:OnDestroy()
{
CStatic:OnDestroy()�
//TODO:Add your message handler code here
}
void CLED:SetOnFgColor(COLORREF C)
{
m[_]brOnFG-DeleteObject()�
m[_]crOnFG=C�
m[_]brOnFG-CreateSolidBrush(m[_]crOnFG)�
OnPaint()�
}
COLORREF CLED:GetOnFgColor()
{
return m[_]crOnFG�
}
void CLED:SetOffFgColor(COLORREF C)
{
m[_]brOffFG-DeleteObject()�
m[_]crOffFG=C�
m[_]brOffFG-CreateSolidBrush(m[_]crOffFG)�
OnPaint()�
}
COLORREF CLED:GetOffFgColor()
{
return m[_]crOffFG�
}
void CLED:SetType(int type)
{
if(type 0||type 2)
{
return�
}
m[_]iType=type�
OnPaint()�
}
int CLED:GetType()
{
return m[_]iType�
}
void CLED:DrawFigure()
{
CClientDC pdc(this)�
CBrush b�
CRect r�
GetClientRect(r)�
b.CreateSolidBrush(m[_]crBK)�
pdc.SelectObject(&b)�
pdc.FillRect(r,&b)�
pdc.SetBkMode(TRANSPARENT)�
if(m[_]bOn==true)
{
CPen pen(0,0,m[_]crOnFG)�
pdc.SelectObject(&pen)�
pdc.SelectObject(m[_]brOnFG)�
}
else
{
CPen pen(0,0,m[_]crOffFG)�
pdc.SelectObject(&pen)�
pdc.SelectObject(m[_]brOffFG)�
}
if(m[_]iType==0)//circle
{
CRect r1�
if(r.Width()r.Height())
{
r1.left=r.left+(r.Width()-r.Height())/2.0�
r1.right=r.right-(r.Width()-r.Height())/2.0�
r1.top=r.top�
r1.bottom=r.bottom�
}
else
{
r1.left=r.left�
r1.right=r.right�
r1.top=r.top+(r.Height()-r.Width())/2.0�
r1.bottom=r.bottom-(r.Height()-r.Width())/2.0�
}
pdc.Ellipse(r1)�
}
if(m[_]iType==1)//squre
{
pdc.Rectangle(r)�
}
if(m[_]iType==2)//ellipse
{
pdc.Ellipse(r)�
}
if(!m[_]bTextOn)
return�
if(m[_]bOn)
pdc.TextOut(r.CenterPoint().x-m[_]sOnString.GetLength()*3.5,r.CenterPoint().y-10,m[_]sOnString,m[_]sOnString.GetLength())�
else pdc.TextOut(r.CenterPoint().x-m[_]sOffString.GetLength()*3.5,r.CenterPoint().y-10,m[_]sOffString,m[_]sOffString.GetLength())�
}
void CLED:SetOnOff(bool val)
{
m[_]bOn=val�
OnPaint()�
}
BOOL CLED:GetOnOff()
{
return m[_]bOn�
}
void CLED:OnSize(UINT nType,int cx,int cy)
{
CStatic:OnSize(nType,cx,cy)�
OnPaint()�
}
void CLED:SetBKColor(COLORREF C)
{
m[_]crBK=C�
OnPaint()�
}
COLORREF CLED:GetBKColor()
{
return m[_]crBK�
}
void CLED:SetOnText(CString str)
{
m[_]sOnString=str�
OnPaint()�
}
CString CLED:GetOnText()
{
return m[_]sOnString�
}
void CLED:SetOffText(CString str)
{
m[_]sOffString=str�
OnPaint()�
}
CString CLED:GOffText()
{
return m[_]sOffString�
}
void CLED:SetTextOnOff(bool val)
{
m[_]bTextOn=val�
OnPaint()�
}
bool CLED:GetTextOnOff()
{
return m[_]bTextOn�
}
一般來(lái)�,每塊�(wǎng)路卡(NIC)都具�1�(gè)以上� LED (Light Emitting Diode,�(fā)光二極體)指示�,用來(lái)表示�(wǎng)卡的不同工作狀�(tài),以方便我們查看網(wǎng)卡是否工作正�。典型的LED指示燈有Link/Act、Full� Power�。Link/Act表示連接活動(dòng)狀�(tài),Full表示是否全雙�(Full Duplex),而Power是電源指示等�
在正常情況下,在不傳送資料時(shí),�(wǎng)卡的指示燈閃爍較�,傳送資料時(shí),閃爍較快。無(wú)論是不亮,還是�(zhǎng)亮不�,都表明有故障存在。如果網(wǎng)卡的指示燈不正常,需�(guān)掉電腦更換網(wǎng)�。對(duì)于Hub的指示燈,凡是插有�(wǎng)線的�,指示燈都亮。由于是Hub,所�,指示燈的作用只能指示該埠是否連接有終端設(shè)�,不能顯示通信狀�(tài)�
LED�(yīng)用在這類�(chǎn)品的指示燈時(shí),所選用� LED�(chǎn)� 等級(jí)普遍是比較一般的�(chǎn)�,像是Lamp型LED。而比較高階的�(wǎng)路卡�(chǎn)�,�(huì)采用SMD型LED,除了省空間外,使用的電流也�(huì)比較�
除了手機(jī)背光以外,SMD型LED也很適合�(dān)任各種電子裝置的指示�,普遍是綠�、紅�、橘�、藍(lán)色等??�,�(jià)格上的差異日益縮小化�
在常�(jiàn)�(wǎng)�(luò)�(shè)備上都有幾�(gè)指示�,用于監(jiān)控設(shè)備的狀�(tài)和運(yùn)行,這些指示燈稱之為�(fā)光二極管(LED�。充分了解這些指示燈的意義,往往能在�(wǎng)�(luò)故障診斷的過(guò)程中,簡(jiǎn)單快捷的判斷出故障原因,�(dá)到意想不到的效果�
一、網(wǎng)�
在網(wǎng)卡后�(cè)RJ45接口一邊有兩�(gè)指示�。它們分別為連接狀�(tài)指示燈和信號(hào)傳輸指示�,其中正常狀�(tài)下連接狀�(tài)指示燈呈綠色并且�(zhǎng)�,信�(hào)指示燈呈紅色,正常應(yīng)該不停地閃爍�
如果連接指示�,也就是綠燈不亮,那么表示網(wǎng)卡連接到H U B或交換機(jī)之間的連接有故�。一般情況下這種故障�(fā)生多半是�(wǎng)線沒(méi)有接牢或水晶頭故障所造成�。而且故障�(diǎn)大多是在連接的兩�,例如交換機(jī)的端口處和連接�(jì)算機(jī)的網(wǎng)卡處,可以借助�(cè)線儀或者采用更換網(wǎng)線的方法�(jìn)行解�。如果不是接頭的原因造成�,則需�(duì)整�(gè)鏈路用測(cè)線儀�(jìn)行分段排除�
如果信號(hào)指示�,也就是紅燈不亮,那么則�(shuō)明沒(méi)有信�(hào)�(jìn)行傳�,但在綠燈亮的情況下,可以肯定的是線路之間是正常�??梢圆捎锰鎿Q法換一�(tái)�(jì)算機(jī)連接到該�(wǎng)線上試試,如果所換計(jì)算機(jī)不能正常上網(wǎng),則需更換該計(jì)算機(jī)連接的交換機(jī)端口或者重啟動(dòng)交換�(jī)。如果所換計(jì)算機(jī)能正常上�(wǎng),則可以肯定有信�(hào)傳�,�(jìn)而確定是本地�(wǎng)卡的�(wèn)�??梢試L試Ping一下本�(jī)的IP地址,如果不能Ping�,可以嘗試重新插拔網(wǎng)�、安裝網(wǎng)卡驅(qū)�(dòng)�(lái)解決;如果能夠Ping通則�(shuō)明網(wǎng)卡的安裝�(méi)有太大問(wèn)�,這時(shí)需要檢查IP�(shè)置是否存在錯(cuò)誤,是否存在IP沖突的情�。另外如果使用了集成�(wǎng)卡或�(zhì)量不高的�(wǎng)卡,容易出現(xiàn)不穩(wěn)定的�(xiàn)�,即所有設(shè)置都正確,但�(wǎng)�(luò)卻不通。對(duì)此可以將�(wǎng)卡禁�,然后再重新啟用的方�,可能會(huì)解決紅燈不亮不閃的問(wèn)��
�、光纖收�(fā)�
光纖收發(fā)器是一種將短距離的雙絞線電信號(hào)和長(zhǎng)距離的光信號(hào)�(jìn)行互換的以太�(wǎng)傳輸�(zhuǎn)換單�,又稱為光電轉(zhuǎn)換器。光纖收�(fā)器延伸了以太�(wǎng)的連接距離,打破了雙絞線只能傳輸100 m的距離限�,因此廣泛�(yīng)用于使用�(zhǎng)距離光纖的網(wǎng)�(luò)�(huán)境中。伴隨著光纖收發(fā)器應(yīng)用的不斷增多,它也成為�(wǎng)�(luò)中一�(gè)比較重要的故障點(diǎn)。利用收�(fā)器的指示燈是否正�,可以快速的判斷出故障所在�
1.光路LINK燈不�。首先檢查光纖鏈路是否有�(wèn)題,光纖斷裂和光纖中間環(huán)節(jié)�(guò)�,都可能引起LINK燈不�。比如中間有幾�(gè)接續(xù)包或者通過(guò)法蘭�(pán)跳接等使光纖損耗過(guò)�,超出了收�(fā)器接收范�,用光功率�(jī)�(cè)試一下就可知�。然后看收發(fā)器的兩�(gè)光纖接口與光纖的連接是否正確,A端的TX口應(yīng)與B端的RX口連接,A端的RX口應(yīng)與B端的TX連接。測(cè)試連接正確與否的方法很�(jiǎn)單,將與光纖收發(fā)器相連接的兩根光纖跳線互�,互換后,LINK燈亮�,即可證明原�(lái)的連接�(cuò)��
2.電路LINK燈不�。首先檢查網(wǎng)線是否有�(wèn)題,是否存在�(wǎng)線不�、水晶頭故障等問(wèn)�。然后根�(jù)與收�(fā)器連接的設(shè)備選用直通線或者交叉線,一般與交換�(jī)等多地址�(wǎng)�(luò)�(shè)備連接�(shí)用交叉線,與服�(wù)器工作站等單地址�(wǎng)�(luò)�(shè)備連接�(shí)用直通線。有些收�(fā)器有兩�(gè)RJ45端口,一�(gè)直通一�(gè)交叉,有些�(cè)面有MPR和DTE兩�(gè)選擇�(kāi)�(guān),MPR表示直通連接,DTE表示交叉連接。還有一種情況是收發(fā)器與其他�(wǎng)�(luò)�(shè)�(�(wǎng)�、集線器、交換機(jī)�)的速率不匹�,比如100M的收�(fā)器接了�(gè)10M�(wǎng)卡或1 G交換�(jī)端口,因此電路LINK燈始終不�。要注意的是,有些收發(fā)器必須等光路連通后電路LINK燈才�,因此要注意看收發(fā)器使用說(shuō)明書(shū)�
3.收�(fā)器各指示燈都亮著,但光路LINK燈和電路LINK燈閃爍過(guò)慢或閃爍明顯不對(duì)�,從而導(dǎo)致網(wǎng)�(luò)不�,一般重啟一下收�(fā)器就可恢�(fù)正常�
�、交換機(jī)
交換�(jī)因其品牌、類型、模塊等差異,設(shè)備上的指示燈也存在不�,但是交換機(jī)前面板上一般都存在下列幾種指示燈:電源指示燈、連接指示�、端口模式指示燈、端口狀�(tài)指示�。根�(jù)這些指示燈的異常,可以判斷出交換�(jī)很多的故障原�,并快速采取相�(yīng)解決方法�
1.電源指示燈(POWER LED�
POWER LED為綠燈表示電源供�(yīng)正常,熄滅表示沒(méi)有電源供�(yīng)。電源指示燈不亮?xí)r,確�(rèn)交換�(jī)的電源線連接是否正確,使用的電源插座是否完好??梢灾匦掳惭b交換�(jī)的電源線或換用另外的電源插座�
2.連接指示� (LNK/ACT LED)
LINK LED不亮表示�(méi)有連接,需確認(rèn)交換�(jī)與其他設(shè)備的�(shè)置是否一致,并確�(rèn)線纜連接正確。另外,交換�(jī)與其它網(wǎng)�(luò)�(shè)備之間的連接線纜為五類線,且距離超過(guò)100米,也會(huì)造成LINK LED不亮�
3.端口模式指示燈(MODE LED�
端口模式指示燈顯示交換機(jī)端口所處的模式。如果要選擇或修改端口模式,連續(xù)的按壓Mode按鈕直到端口模式指示燈指示在所需的模��
端口模式?jīng)Q定如何對(duì)端口狀�(tài)指示燈�(jìn)行解�。也就是�(shuō)�(duì)�(yīng)于不同的模式,端口狀�(tài)指示燈的顏色等情況表示的是不同的含義�
Mode 按鈕有三種狀�(tài)�
。STAT(狀�(tài),states�
。UTL (利用�,Utilization)
。FDUP(全雙工,full duplex�
如果交換�(jī)的狀�(tài)燈為閃爍的橙�,一般表明在某一�(gè)端口或者模塊有硬件故障�
以華為S2100型交換機(jī)為例,按MODE按紐,按下后A/L和D/S的指示燈相互切換,當(dāng)用MODE按鈕切換到A/L模式�(shí),A/L燈亮,端口狀�(tài)指示燈用�(lái)指示端口的Active和Link狀�(tài),此�(shí)端口狀�(tài)指示燈為綠色,表示鏈路正常運(yùn)行。當(dāng)切換到D/S模式的時(shí)�,D/S燈亮, 此時(shí)端口狀�(tài)指示燈表示端口的雙工模式和速率情況,端口上方的黃燈就跟著亮了,表示雙工的工作方��
4.端口狀�(tài)指示�
端口狀�(tài)指示燈能代表多種含義,取決于端口模式指示燈的�(dāng)前��
端口模式的缺省模式為STAT狀�(tài),此�(shí)某端口狀�(tài)指示燈若�(guān)�,表示無(wú)鏈路,即確定�(méi)有連接到端口的�(shè)�;指示燈持續(xù)綠色,表示鏈路正常運(yùn)行;指示燈閃爍綠�,表示發(fā)送或者接收數(shù)�(jù);指示燈綠色/琥珀色交替,表示是鏈路錯(cuò)�;指示燈持續(xù)琥珀色,表示是非�(zhuǎn)�(fā)狀�(tài).是阻塞狀�(tài)�
端口模式處于不同狀�(tài)�(shí),各�(gè)廠商�(duì)于不同顏色的LED指示燈的功能定義是各不相同的,根�(jù)端口狀�(tài)指示燈判斷交換機(jī)的端口狀�(tài)之前,應(yīng)�(rèn)真閱讀相關(guān)�(chǎn)品的�(shuō)明書(shū)�
�、路由器
路由器相比交換機(jī)而言,主要用于較大型的局域網(wǎng)和城域網(wǎng)。但隨著局域網(wǎng)的快速發(fā)�,路由器的應(yīng)用也出現(xiàn)快速上升的趨勢(shì),各種路由器故障也隨之接踵而來(lái)�
路由器的LED指示燈較交換�(jī)的指示燈作用更局�,因?yàn)槁酚善鞯慕^大部分故障都出現(xiàn)在軟件和�(shè)置上,而路由器的LED指示燈主要用�(lái)輔助查看�(shè)備的硬件故障。比如:電源模塊上有一�(gè)綠色的POWER狀�(tài)指示�。當(dāng)這�(gè)指示燈亮著時(shí),表示電源工作正�。接口模塊上的TX、RX指示�。RX指示燈為綠色表示端口正在接收�(shù)�(jù)�;如果為橙色,則表示正在接收流控制的�(shù)�(jù)�。TX指示燈為綠色表示端口正在�(fā)送數(shù)�(jù)�;如果為橙色,則表示正在�(fā)送流控制的數(shù)�(jù)��
同樣,不同品牌和型號(hào)的路由器�(duì)指示燈意義的定義不盡相同,除參考經(jīng)�(yàn)之外,還要認(rèn)真閱讀�(chǎn)品說(shuō)明書(shū)�