一般來�,每��(wǎng)�都具�1個以上的LED(Light Emitting Diode�(fā)光二極管)指示燈,用來表示網(wǎng)卡的不同工作狀�(tài),以方便我們查看網(wǎng)卡是否工作正常。典型的LED指示燈有Link/Act、Full、Power�。Link/Act表示連接活動狀�(tài),F(xiàn)ull表示是否全雙�(Full Duplex),而Power�電源指示��
在很多應(yīng)用程序,特別是工控程序中,經(jīng)常需要讀入并顯示一些開�(guān)�,比如串口通信是否正常,電源是否打�,電�(jī)工作是否正常等等。這些開關(guān)量的顯示用一些控件來實現(xiàn)。這些控件根據(jù)輸入的開�(guān)量顯示不同顏色和文字用來表示打開和關(guān)�。NI公司專門開發(fā)了一套LabWindows控件,專門用于程序開發(fā),當(dāng)然這是要花錢的.本文以CStatic為基�,編寫了一個LED燈,它可根據(jù)輸入的bool值顯示開�(guān),類似于vb里的shape控件�
NI控件
具體實現(xiàn)請請參考CLED�,當(dāng)然這個類很簡�,完全可以自己實�(xiàn),當(dāng)時如過你不想自己動手編寫,那么可以發(fā)郵件向我要:[email protected].也可以直接復(fù)制文章低部的類的頭文件和cpp文件。下面是程序運行時的截圖�
//類頭文件
#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�
}
一般來�,每塊�(wǎng)路卡(NIC)都具�1個以上的 LED (Light Emitting Diode,�(fā)光二極體)指示�,用來表示�(wǎng)卡的不同工作狀�(tài),以方便我們查看網(wǎng)卡是否工作正常。典型的LED指示燈有Link/Act、Full� Power�。Link/Act表示連接活動狀�(tài),Full表示是否全雙�(Full Duplex),而Power是電源指示等�
在正常情況下,在不傳送資料時,�(wǎng)卡的指示燈閃爍較�,傳送資料時,閃爍較快。無論是不亮,還是長亮不滅,都表明有故障存在。如果網(wǎng)卡的指示燈不正常,需�(guān)掉電腦更換網(wǎng)�。對于Hub的指示燈,凡是插有�(wǎng)線的�,指示燈都�。由于是Hub,所�,指示燈的作用只能指示該埠是否連接有終端設(shè)�,不能顯示通信狀�(tài)�
LED�(yīng)用在這類�(chǎn)品的指示燈時,所選用� LED�(chǎn)� 等級普遍是比較一般的�(chǎn)�,像是Lamp型LED。而比較高階的�(wǎng)路卡�(chǎn)�,會采用SMD型LED,除了省空間外,使用的電流也會比較校
除了手機(jī)背光以外,SMD型LED也很適合�(dān)任各種電子裝置的指示�,普遍是綠�、紅色、橘�、藍(lán)色等??�,價格上的差異日益縮小��
在常見網(wǎng)�(luò)�(shè)備上都有幾個指示燈,用于監(jiān)控設(shè)備的狀�(tài)和運行,這些指示燈稱之為�(fā)光二極管(LED�。充分了解這些指示燈的意義,往往能在�(wǎng)�(luò)故障診斷的過程中,簡單快捷的判斷出故障原因,�(dá)到意想不到的效果�
一、網(wǎng)�
在網(wǎng)卡后�(cè)RJ45接口一邊有兩個指示燈。它們分別為連接狀�(tài)指示燈和信號傳輸指示�,其中正常狀�(tài)下連接狀�(tài)指示燈呈綠色并且長亮,信號指示燈呈紅�,正常應(yīng)該不停地閃爍�
如果連接指示�,也就是綠燈不亮,那么表示網(wǎng)卡連接到H U B或交換機(jī)之間的連接有故障。一般情況下這種故障�(fā)生多半是�(wǎng)線沒有接牢或水晶頭故障所造成�。而且故障點大多是在連接的兩�,例如交換機(jī)的端口處和連接計算�(jī)的網(wǎng)卡處,可以借助測線儀或者采用更換網(wǎng)線的方法�(jìn)行解�。如果不是接頭的原因造成�,則需對整個鏈路用測線儀�(jìn)行分段排除�
如果信號指示�,也就是紅燈不亮,那么則說明沒有信號�(jìn)行傳�,但在綠燈亮的情況下,可以肯定的是線路之間是正常�??梢圆捎锰鎿Q法換一臺計算機(jī)連接到該�(wǎng)線上試試,如果所換計算機(jī)不能正常上網(wǎng),則需更換該計算機(jī)連接的交換機(jī)端口或者重啟動交換�(jī)。如果所換計算機(jī)能正常上�(wǎng),則可以肯定有信號傳�,�(jìn)而確定是本地�(wǎng)卡的問題??梢試L試Ping一下本�(jī)的IP地址,如果不能Ping通,可以嘗試重新插拔�(wǎng)�、安裝網(wǎng)卡驅(qū)動來解決;如果能夠Ping通則說明�(wǎng)卡的安裝沒有太大問題,這時需要檢查IP�(shè)置是否存在錯�,是否存在IP沖突的情況。另外如果使用了集成�(wǎng)卡或�(zhì)量不高的�(wǎng)�,容易出�(xiàn)不穩(wěn)定的�(xiàn)�,即所有設(shè)置都正確,但�(wǎng)�(luò)卻不通。對此可以將�(wǎng)卡禁�,然后再重新啟用的方�,可能會解決紅燈不亮不閃的問題�
�、光纖收�(fā)�
光纖收發(fā)器是一種將短距離的雙絞線電信號和長距離的光信號�(jìn)行互換的以太�(wǎng)傳輸�(zhuǎn)換單�,又稱為光電轉(zhuǎn)換器。光纖收�(fā)器延伸了以太�(wǎng)的連接距離,打破了雙絞線只能傳輸100 m的距離限�,因此廣泛�(yīng)用于使用長距離光纖的�(wǎng)�(luò)�(huán)境中。伴隨著光纖收發(fā)器應(yīng)用的不斷增多,它也成為�(wǎng)�(luò)中一個比較重要的故障�。利用收�(fā)器的指示燈是否正常,可以快速的判斷出故障所��
1.光路LINK燈不亮。首先檢查光纖鏈路是否有問題,光纖斷裂和光纖中間�(huán)節(jié)過多,都可能引起LINK燈不亮。比如中間有幾個接�(xù)包或者通過法蘭盤跳接等使光纖損耗過�,超出了收�(fā)器接收范�,用光功率�(jī)測試一下就可知�。然后看收發(fā)器的兩個光纖接口與光纖的連接是否正確,A端的TX口應(yīng)與B端的RX口連接,A端的RX口應(yīng)與B端的TX連接。測試連接正確與否的方法很簡單,將與光纖收�(fā)器相連接的兩根光纖跳線互�,互換后,LINK燈亮�,即可證明原來的連接錯誤�
2.電路LINK燈不�。首先檢查網(wǎng)線是否有問題,是否存在網(wǎng)線不通、水晶頭故障等問�。然后根�(jù)與收�(fā)器連接的設(shè)備選用直通線或者交叉線,一般與交換�(jī)等多地址�(wǎng)�(luò)�(shè)備連接時用交叉�,與服�(wù)器工作站等單地址�(wǎng)�(luò)�(shè)備連接時用直通線。有些收�(fā)器有兩個RJ45端口,一個直通一個交�,有些�(cè)面有MPR和DTE兩個選擇開�(guān),MPR表示直通連接,DTE表示交叉連接。還有一種情況是收發(fā)器與其他�(wǎng)�(luò)�(shè)�(�(wǎng)�、集線器、交換機(jī)�)的速率不匹�,比如100M的收�(fā)器接了�10M�(wǎng)卡或1 G交換�(jī)端口,因此電路LINK燈始終不�。要注意的是,有些收發(fā)器必須等光路連通后電路LINK燈才�,因此要注意看收發(fā)器使用說明書�
3.收�(fā)器各指示燈都亮著,但光路LINK燈和電路LINK燈閃爍過慢或閃爍明顯不對�,從而導(dǎo)致網(wǎng)�(luò)不�,一般重啟一下收�(fā)器就可恢�(fù)正常�
�、交換機(jī)
交換�(jī)因其品牌、類�、模塊等差異,設(shè)備上的指示燈也存在不�,但是交換機(jī)前面板上一般都存在下列幾種指示燈:電源指示燈、連接指示�、端口模式指示燈、端口狀�(tài)指示�。根�(jù)這些指示燈的異常,可以判斷出交換�(jī)很多的故障原�,并快速采取相�(yīng)解決方法�
1.電源指示燈(POWER LED�
POWER LED為綠燈表示電源供�(yīng)正常,熄滅表示沒有電源供�(yīng)。電源指示燈不亮?xí)r,確�(rèn)交換�(jī)的電源線連接是否正確,使用的電源插座是否完好??梢灾匦掳惭b交換�(jī)的電源線或換用另外的電源插座�
2.連接指示� (LNK/ACT LED)
LINK LED不亮表示沒有連接,需確認(rèn)交換�(jī)與其他設(shè)備的�(shè)置是否一�,并確認(rèn)線纜連接正確。另�,交換機(jī)與其它網(wǎng)�(luò)�(shè)備之間的連接線纜為五類線,且距離超過100米,也會造成LINK LED不亮�
3.端口模式指示燈(MODE LED�
端口模式指示燈顯示交換機(jī)端口所處的模式。如果要選擇或修改端口模式,連續(xù)的按壓Mode按鈕直到端口模式指示燈指示在所需的模��
端口模式?jīng)Q定如何對端口狀�(tài)指示燈�(jìn)行解釋。也就是說對�(yīng)于不同的模式,端口狀�(tài)指示燈的顏色等情況表示的是不同的含義�
Mode 按鈕有三種狀�(tài)�
。STAT(狀�(tài),states�
。UTL (利用�,Utilization)
。FDUP(全雙工,full duplex�
如果交換�(jī)的狀�(tài)燈為閃爍的橙�,一般表明在某一個端口或者模塊有硬件故障�
以華為S2100型交換機(jī)為例,按MODE按紐,按下后A/L和D/S的指示燈相互切換,當(dāng)用MODE按鈕切換到A/L模式時,A/L燈亮,端口狀�(tài)指示燈用來指示端口的Active和Link狀�(tài),此時端口狀�(tài)指示燈為綠色,表示鏈路正常運�。當(dāng)切換到D/S模式的時�,D/S燈亮, 此時端口狀�(tài)指示燈表示端口的雙工模式和速率情況,端口上方的黃燈就跟著亮�,表示雙工的工作方式�
4.端口狀�(tài)指示�
端口狀�(tài)指示燈能代表多種含義,取決于端口模式指示燈的�(dāng)前值�
端口模式的缺省模式為STAT狀�(tài),此時某端口狀�(tài)指示燈若�(guān)�,表示無鏈路,即確定沒有連接到端口的�(shè)�;指示燈持續(xù)綠色,表示鏈路正常運�;指示燈閃爍綠色,表示發(fā)送或者接收數(shù)�(jù);指示燈綠色/琥珀色交�,表示是鏈路錯誤;指示燈持續(xù)琥珀色,表示是非�(zhuǎn)�(fā)狀�(tài).是阻塞狀�(tài)�
端口模式處于不同狀�(tài)時,各個廠商對于不同顏色的LED指示燈的功能定義是各不相同的,根�(jù)端口狀�(tài)指示燈判斷交換機(jī)的端口狀�(tài)之前,應(yīng)�(rèn)真閱讀相關(guān)�(chǎn)品的說明��
四、路由器
路由器相比交換機(jī)而言,主要用于較大型的局域網(wǎng)和城域網(wǎng)。但隨著局域網(wǎng)的快速發(fā)�,路由器的應(yīng)用也出現(xiàn)快速上升的趨勢,各種路由器故障也隨之接踵而來�
路由器的LED指示燈較交換�(jī)的指示燈作用更局�,因為路由器的絕大部分故障都出現(xiàn)在軟件和�(shè)置上,而路由器的LED指示燈主要用來輔助查看設(shè)備的硬件故障。比如:電源模塊上有一個綠色的POWER狀�(tài)指示�。當(dāng)這個指示燈亮著時,表示電源工作正常。接口模塊上的TX、RX指示�。RX指示燈為綠色表示端口正在接收�(shù)�(jù)包;如果為橙�,則表示正在接收流控制的�(shù)�(jù)�。TX指示燈為綠色表示端口正在�(fā)送數(shù)�(jù)包;如果為橙�,則表示正在�(fā)送流控制的數(shù)�(jù)��
同樣,不同品牌和型號的路由器對指示燈意義的定義不盡相同,除參考經(jīng)驗之�,還要認(rèn)真閱讀�(chǎn)品說明書�