名校網

LED指示燈


LED指示燈的寫法


LED指示燈介紹

一般來講,每塊網卡都具有1個以上的LED(LightEmittingDiode發(fā)光二極管)指示燈,用來表示網卡的不同工作狀態(tài),以方便我們查看網卡是否工作正常。典型的LED指示燈有Link/Act、Full、Power等。Link/Act表示連接活動狀態(tài),F(xiàn)ull表示是否全雙工(FullDuplex),而Power是電源指示等。

VC基于CStatic的實現(xiàn)

在很多應用程序,特別是工控程序中,經常需要讀入并顯示一些開關量,比如串口通信是否正常,電源是否打開,電機工作是否正常等等。這些開關量的顯示用一些控件來實現(xiàn)。這些控件根據輸入的開關量顯示不同顏色和文字用來表示打開和關閉。NI公司專門開發(fā)了一套LabWindows控件,專門用于程序開發(fā),當然這是要花錢的.本文以CStatic為基類,編寫了一個LED燈,它可根據輸入的bool值顯示開關,類似于vb里的shape控件。

NI控件

具體實現(xiàn)請請參考CLED類,當然這個類很簡單,完全可以自己實現(xiàn),當時如過你不想自己動手編寫,那么可以發(fā)郵件向我要:visualsan@yahoo.cn.也可以直接復制文章低部的類的頭文件和cpp文件。下面是程序運行時的截圖:

//類頭文件

#if!defined(AFX[_]LED[_]H[_][_]BDAD9442[_]11BB[_]4917[_]8E43[_]0E2ACC246FE3[_][_]INCLUDED[_])

#defineAFX[_]LED[_]H[_][_]BDAD9442[_]11BB[_]4917[_]8E43[_]0E2ACC246FE3[_][_]INCLUDED[_]

#if[_]MSC[_]VER1000

#pragmaonce

#endif//[_]MSC[_]VER1000

//LED.h:headerfile

//

#defineCIRCLE0

#defineSQUARE1

#defineELLIPSE2

/////////////////////////////////////////////////////////////////////////////

//CLEDwindowclassCLED:publicCStatic

{

//Constructionpublic:

CLED();

//Attributespublic:

//Operationspublic:

COLORREFm[_]crBK,m[_]crOnFG,m[_]crOffFG;

CBrush*m[_]brOnFG,*m[_]brOffFG;

intm[_]iType;

boolm[_]bOn;

CStringm[_]sOnString,m[_]sOffString;

boolm[_]bTextOn;

//Overrides

//ClassWizardgeneratedvirtualfunctionoverrides

//{{AFX[_]VIRTUAL(CLED)

//}}AFX[_]VIRTUAL

//Implementationpublic:

intGetType();

boolGetTextOnOff();

CStringGetOnText();

BOOLGetOnOff();

COLORREFGetOnFgColor();

CStringGOffText();

COLORREFGetOffFgColor();

COLORREFGetBKColor();

voidSetTextOnOff(boolval);

voidSetOffText(CStringstr);

voidSetOnText(CStringstr);

voidSetBKColor(COLORREFC);

voidSetOnOff(boolval);

voidSetType(inttype);

voidSetOffFgColor(COLORREFC);

voidSetOnFgColor(COLORREFC);

virtual~CLED();

//Generatedmessagemapfunctionsprotected:

//{{AFX[_]MSG(CLED)

afx[_]msgintOnCreate(LPCREATESTRUCTlpCreateStruct);

afx[_]msgvoidOnPaint();

afx[_]msgvoidOnDestroy();

afx[_]msgvoidOnSize(UINTnType,intcx,intcy);

//}}AFX[_]MSGDECLARE[_]MESSAGE[_]MAP()

private:

voidDrawFigure();

};

/////////////////////////////////////////////////////////////////////////////

//{{AFX[_]INSERT[_]LOCATION}}

//MicrosoftVisualC++willinsertadditionaldeclarationsimmediatelybeforethepreviousline.

#endif//!defined(AFX[_]LED[_]H[_][_]BDAD9442[_]11BB[_]4917[_]8E43[_]0E2ACC246FE3[_][_]INCLUDED[_])

/////////////////////////////////////////////////////////////////

///////////////類cpp文件

//LED.cpp:implementationfile

//

#include"stdafx.h"

#include"colortext.h"

#include"LED.h"

#ifdef[_]DEBUG

#definenewDEBUG[_]NEW

#undefTHIS[_]FILEstaticcharTHIS[_]FILE=[_][_]FILE[_][_];

#endif

/////////////////////////////////////////////////////////////////////////////

//CLEDCLED: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=newCBrush(m[_]crOnFG);

m[_]brOffFG=newCBrush(m[_]crOffFG);

m[_]sOnString="on";

m[_]sOffString="off";

m[_]bTextOn=true;

}

CLED:~CLED()

{

deletem[_]brOffFG;

deletem[_]brOnFG;

}

BEGIN[_]MESSAGE[_]MAP(CLED,CStatic)

//{{AFX[_]MSG[_]MAP(CLED)

ON[_]WM[_]CREATE()

ON[_]WM[_]PAINT()

ON[_]WM[_]DESTROY()

ON[_]WM[_]SIZE()

//}}AFX[_]MSG[_]MAPEND[_]MESSAGE[_]MAP()

/////////////////////////////////////////////////////////////////////////////

//CLEDmessagehandlersintCLED:OnCreate(LPCREATESTRUCTlpCreateStruct)

{

if(CStatic:OnCreate(lpCreateStruct)==-1)

return-1;

//TODO:Addyourspecializedcreationcodeherereturn0;

}

voidCLED:OnPaint()

{

CPaintDCdc(this);//devicecontextforpainting

//TODO:AddyourmessagehandlercodehereDrawFigure();

//DonotcallCStatic:OnPaint()forpaintingmessages

}

voidCLED:OnDestroy()

{

CStatic:OnDestroy();

//TODO:Addyourmessagehandlercodehere

}

voidCLED:SetOnFgColor(COLORREFC)

{

m[_]brOnFG-DeleteObject();

m[_]crOnFG=C;

m[_]brOnFG-CreateSolidBrush(m[_]crOnFG);

OnPaint();

}

COLORREFCLED:GetOnFgColor()

{

returnm[_]crOnFG;

}

voidCLED:SetOffFgColor(COLORREFC)

{

m[_]brOffFG-DeleteObject();

m[_]crOffFG=C;

m[_]brOffFG-CreateSolidBrush(m[_]crOffFG);

OnPaint();

}

COLORREFCLED:GetOffFgColor()

{

returnm[_]crOffFG;

}

voidCLED:SetType(inttype)

{

if(type0||type2)

{

return;

}

m[_]iType=type;

OnPaint();

}

intCLED:GetType()

{

returnm[_]iType;

}

voidCLED:DrawFigure()

{

CClientDCpdc(this);

CBrushb;

CRectr;

GetClientRect(r);

b.CreateSolidBrush(m[_]crBK);

pdc.SelectObject(&b);

pdc.FillRect(r,&b);

pdc.SetBkMode(TRANSPARENT);

if(m[_]bOn==true)

{

CPenpen(0,0,m[_]crOnFG);

pdc.SelectObject(&pen);

pdc.SelectObject(m[_]brOnFG);

}

else

{

CPenpen(0,0,m[_]crOffFG);

pdc.SelectObject(&pen);

pdc.SelectObject(m[_]brOffFG);

}

if(m[_]iType==0)//circle

{

CRectr1;

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());

elsepdc.TextOut(r.CenterPoint().x-m[_]sOffString.GetLength()*3.5,r.CenterPoint().y-10,m[_]sOffString,m[_]sOffString.GetLength());

}

voidCLED:SetOnOff(boolval)

{

m[_]bOn=val;

OnPaint();

}

BOOLCLED:GetOnOff()

{

returnm[_]bOn;

}

voidCLED:OnSize(UINTnType,intcx,intcy)

{

CStatic:OnSize(nType,cx,cy);

OnPaint();

}

voidCLED:SetBKColor(COLORREFC)

{

m[_]crBK=C;

OnPaint();

}

COLORREFCLED:GetBKColor()

{

returnm[_]crBK;

}

voidCLED:SetOnText(CStringstr)

{

m[_]sOnString=str;

OnPaint();

}

CStringCLED:GetOnText()

{

returnm[_]sOnString;

}

voidCLED:SetOffText(CStringstr)

{

m[_]sOffString=str;

OnPaint();

}

CStringCLED:GOffText()

{

returnm[_]sOffString;

}

voidCLED:SetTextOnOff(boolval)

{

m[_]bTextOn=val;

OnPaint();

}

boolCLED:GetTextOnOff()

{

returnm[_]bTextOn;

}

在網路卡中的作用

一般來講,每塊網路卡(NIC)都具有1個以上的LED(LightEmittingDiode,發(fā)光二極體)指示燈,用來表示網卡的不同工作狀態(tài),以方便我們查看網卡是否工作正常。典型的LED指示燈有Link/Act、Full、Power等。Link/Act表示連接活動狀態(tài),Full表示是否全雙工(FullDuplex),而Power是電源指示等。

在正常情況下,在不傳送資料時,網卡的指示燈閃爍較慢,傳送資料時,閃爍較快。無論是不亮,還是長亮不滅,都表明有故障存在。如果網卡的指示燈不正常,需關掉電腦更換網卡。對于Hub的指示燈,凡是插有網線的埠,指示燈都亮。由于是Hub,所以,指示燈的作用只能指示該埠是否連接有終端設備,不能顯示通信狀態(tài)。

LED應用在這類產品的指示燈時,所選用的LED產品等級普遍是比較一般的產品,像是Lamp型LED。而比較高階的網路卡產品,會采用SMD型LED,除了省空間外,使用的電流也會比較校

除了手機背光以外,SMD型LED也很適合擔任各種電子裝置的指示燈,普遍是綠色、紅色、橘色、藍色等??色,價格上的差異日益縮小化。

在常見網絡設備故障診斷中的應用

在常見網絡設備上都有幾個指示燈,用于監(jiān)控設備的狀態(tài)和運行,這些指示燈稱之為發(fā)光二極管(LED)。充分了解這些指示燈的意義,往往能在網絡故障診斷的過程中,簡單快捷的判斷出故障原因,達到意想不到的效果。

一、網卡

在網卡后側RJ45接口一邊有兩個指示燈。它們分別為連接狀態(tài)指示燈和信號傳輸指示燈,其中正常狀態(tài)下連接狀態(tài)指示燈呈綠色并且長亮,信號指示燈呈紅色,正常應該不停地閃爍。

如果連接指示燈,也就是綠燈不亮,那么表示網卡連接到HUB或交換機之間的連接有故障。一般情況下這種故障發(fā)生多半是網線沒有接牢或水晶頭故障所造成的。而且故障點大多是在連接的兩端,例如交換機的端口處和連接計算機的網卡處,可以借助測線儀或者采用更換網線的方法進行解決。如果不是接頭的原因造成的,則需對整個鏈路用測線儀進行分段排除。

如果信號指示燈,也就是紅燈不亮,那么則說明沒有信號進行傳輸,但在綠燈亮的情況下,可以肯定的是線路之間是正常的??梢圆捎锰鎿Q法換一臺計算機連接到該網線上試試,如果所換計算機不能正常上網,則需更換該計算機連接的交換機端口或者重啟動交換機。如果所換計算機能正常上網,則可以肯定有信號傳送,進而確定是本地網卡的問題??梢試L試Ping一下本機的IP地址,如果不能Ping通,可以嘗試重新插拔網卡、安裝網卡驅動來解決;如果能夠Ping通則說明網卡的安裝沒有太大問題,這時需要檢查IP設置是否存在錯誤,是否存在IP沖突的情況。另外如果使用了集成網卡或質量不高的網卡,容易出現(xiàn)不穩(wěn)定的現(xiàn)象,即所有設置都正確,但網絡卻不通。對此可以將網卡禁用,然后再重新啟用的方法,可能會解決紅燈不亮不閃的問題。

二、光纖收發(fā)器

光纖收發(fā)器是一種將短距離的雙絞線電信號和長距離的光信號進行互換的以太網傳輸轉換單元,又稱為光電轉換器。光纖收發(fā)器延伸了以太網的連接距離,打破了雙絞線只能傳輸100m的距離限制,因此廣泛應用于使用長距離光纖的網絡環(huán)境中。伴隨著光纖收發(fā)器應用的不斷增多,它也成為網絡中一個比較重要的故障點。利用收發(fā)器的指示燈是否正常,可以快速的判斷出故障所在。

1.光路LINK燈不亮。首先檢查光纖鏈路是否有問題,光纖斷裂和光纖中間環(huán)節(jié)過多,都可能引起LINK燈不亮。比如中間有幾個接續(xù)包或者通過法蘭盤跳接等使光纖損耗過大,超出了收發(fā)器接收范圍,用光功率機測試一下就可知道。然后看收發(fā)器的兩個光纖接口與光纖的連接是否正確,A端的TX口應與B端的RX口連接,A端的RX口應與B端的TX連接。測試連接正確與否的方法很簡單,將與光纖收發(fā)器相連接的兩根光纖跳線互換,互換后,LINK燈亮了,即可證明原來的連接錯誤。

2.電路LINK燈不亮。首先檢查網線是否有問題,是否存在網線不通、水晶頭故障等問題。然后根據與收發(fā)器連接的設備選用直通線或者交叉線,一般與交換機等多地址網絡設備連接時用交叉線,與服務器工作站等單地址網絡設備連接時用直通線。有些收發(fā)器有兩個RJ45端口,一個直通一個交叉,有些側面有MPR和DTE兩個選擇開關,MPR表示直通連接,DTE表示交叉連接。還有一種情況是收發(fā)器與其他網絡設備(網卡、集線器、交換機等)的速率不匹配,比如100M的收發(fā)器接了個10M網卡或1G交換機端口,因此電路LINK燈始終不亮。要注意的是,有些收發(fā)器必須等光路連通后電路LINK燈才亮,因此要注意看收發(fā)器使用說明書。

3.收發(fā)器各指示燈都亮著,但光路LINK燈和電路LINK燈閃爍過慢或閃爍明顯不對稱,從而導致網絡不通,一般重啟一下收發(fā)器就可恢復正常。

三、交換機

交換機因其品牌、類型、模塊等差異,設備上的指示燈也存在不同,但是交換機前面板上一般都存在下列幾種指示燈:電源指示燈、連接指示燈、端口模式指示燈、端口狀態(tài)指示燈。根據這些指示燈的異常,可以判斷出交換機很多的故障原因,并快速采取相應解決方法。

1.電源指示燈(POWERLED)

POWERLED為綠燈表示電源供應正常,熄滅表示沒有電源供應。電源指示燈不亮時,確認交換機的電源線連接是否正確,使用的電源插座是否完好??梢灾匦掳惭b交換機的電源線或換用另外的電源插座。

2.連接指示燈(LNK/ACTLED)

LINKLED不亮表示沒有連接,需確認交換機與其他設備的設置是否一致,并確認線纜連接正確。另外,交換機與其它網絡設備之間的連接線纜為五類線,且距離超過100米,也會造成LINKLED不亮。

3.端口模式指示燈(MODELED)

端口模式指示燈顯示交換機端口所處的模式。如果要選擇或修改端口模式,連續(xù)的按壓Mode按鈕直到端口模式指示燈指示在所需的模式。

端口模式決定如何對端口狀態(tài)指示燈進行解釋。也就是說對應于不同的模式,端口狀態(tài)指示燈的顏色等情況表示的是不同的含義。

Mode按鈕有三種狀態(tài):

。STAT(狀態(tài),states)

。UTL(利用率,Utilization)

。FDUP(全雙工,fullduplex)

如果交換機的狀態(tài)燈為閃爍的橙色,一般表明在某一個端口或者模塊有硬件故障。

以華為S2100型交換機為例,按MODE按紐,按下后A/L和D/S的指示燈相互切換,當用MODE按鈕切換到A/L模式時,A/L燈亮,端口狀態(tài)指示燈用來指示端口的Active和Link狀態(tài),此時端口狀態(tài)指示燈為綠色,表示鏈路正常運行。當切換到D/S模式的時候,D/S燈亮,此時端口狀態(tài)指示燈表示端口的雙工模式和速率情況,端口上方的黃燈就跟著亮了,表示雙工的工作方式。

4.端口狀態(tài)指示燈

端口狀態(tài)指示燈能代表多種含義,取決于端口模式指示燈的當前值。

端口模式的缺省模式為STAT狀態(tài),此時某端口狀態(tài)指示燈若關閉,表示無鏈路,即確定沒有連接到端口的設備;指示燈持續(xù)綠色,表示鏈路正常運行;指示燈閃爍綠色,表示發(fā)送或者接收數據;指示燈綠色/琥珀色交替,表示是鏈路錯誤;指示燈持續(xù)琥珀色,表示是非轉發(fā)狀態(tài).是阻塞狀態(tài)。

端口模式處于不同狀態(tài)時,各個廠商對于不同顏色的LED指示燈的功能定義是各不相同的,根據端口狀態(tài)指示燈判斷交換機的端口狀態(tài)之前,應認真閱讀相關產品的說明書。

四、路由器

路由器相比交換機而言,主要用于較大型的局域網和城域網。但隨著局域網的快速發(fā)展,路由器的應用也出現(xiàn)快速上升的趨勢,各種路由器故障也隨之接踵而來。

路由器的LED指示燈較交換機的指示燈作用更局限,因為路由器的絕大部分故障都出現(xiàn)在軟件和設置上,而路由器的LED指示燈主要用來輔助查看設備的硬件故障。比如:電源模塊上有一個綠色的POWER狀態(tài)指示燈。當這個指示燈亮著時,表示電源工作正常。接口模塊上的TX、RX指示燈。RX指示燈為綠色表示端口正在接收數據包;如果為橙色,則表示正在接收流控制的數據包。TX指示燈為綠色表示端口正在發(fā)送數據包;如果為橙色,則表示正在發(fā)送流控制的數據包。

同樣,不同品牌和型號的路由器對指示燈意義的定義不盡相同,除參考經驗之外,還要認真閱讀產品說明書。

“LED指示燈”分字解釋


詞語首拼