引言
SNMP(簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議)應(yīng)用廣泛,,功能強(qiáng)大,,只要管理軟件駐留有MIB(管理信息庫(kù)),并且擁有適當(dāng)?shù)臋?quán)限,,管理器就可以訪問(wèn)SNMP代理器,。SNMP一般用于計(jì)算機(jī)網(wǎng)絡(luò)和電信網(wǎng)絡(luò),本文提出了用SNMP進(jìn)行控制,。由于其傳輸媒介是Internet,,所以傳輸距離不受限制,這相對(duì)于其他工業(yè)控制總線有不可比擬的優(yōu)勢(shì),,SNMP最大的優(yōu)點(diǎn)是協(xié)議簡(jiǎn)潔,,適合嵌入式應(yīng)用。SNMP體系可擴(kuò)展性強(qiáng),,只要將新的MIB裝載在管理軟件上就可以實(shí)現(xiàn)對(duì)新的終端的控制與訪問(wèn),,本文介紹了一種基于廉價(jià)的微控制器的實(shí)現(xiàn)嵌入式代理器的方案,以微處理器核心實(shí)現(xiàn)相關(guān)硬件及軟件,。
1 SNMP體系結(jié)構(gòu)
SNMP的體系結(jié)構(gòu)(見(jiàn)圖1)以簡(jiǎn)單的查詢/回答模型為基礎(chǔ),,發(fā)送查詢的用戶為管理者,SNMP的服務(wù)器(代理器)回答查詢,。
SNMP在TCP/IP體系中屬于應(yīng)用層協(xié)議,。為了實(shí)現(xiàn)SNMP體系,,就必須實(shí)現(xiàn)從應(yīng)用層到物理層的所有要用到的協(xié)議,管理器在PC機(jī)上,,代理器處于監(jiān)測(cè)現(xiàn)場(chǎng),,代理器駐留在被管理系統(tǒng)的MIB,我們以單片機(jī)為核心來(lái)實(shí)現(xiàn)嵌入式代理器,,嵌入式代理器要對(duì)現(xiàn)場(chǎng)采集到的數(shù)據(jù)進(jìn)行分析,如果有異常情況發(fā)生,,通過(guò)發(fā)送Trap報(bào)文給管理器,,告知網(wǎng)管有異常情況發(fā)生,在報(bào)文中還帶有異常情況的相關(guān)信息,,網(wǎng)管可以根據(jù)這一信息進(jìn)行相應(yīng)的處理,,在一些情況下,代理器將數(shù)據(jù)保存起來(lái),,以備管理器的查詢,。
2 嵌入式代理器的硬件實(shí)現(xiàn)
我們?cè)O(shè)計(jì)的基于SNMP的控制系統(tǒng)原理見(jiàn)圖2。
控制現(xiàn)場(chǎng)的信號(hào)采集由A/D轉(zhuǎn)換模塊輸入單片機(jī),。單片機(jī)對(duì)信號(hào)進(jìn)行處理,,并且執(zhí)行SNMP代理器的任務(wù),硬件部分主要包括A/D,、串口,、以太網(wǎng)、小邏輯,、單片機(jī),、監(jiān)控信號(hào)采集、電源及監(jiān)控等模塊,,本文著重介紹與嵌入式SNMP代理器密切相關(guān)的部分,。
2.1 串口模塊
單片機(jī)使用的是TTL電平,而RS-23協(xié)議所使用的電平不同,,所以需要進(jìn)行電平轉(zhuǎn)換,,通過(guò)MAX232實(shí)現(xiàn)電平轉(zhuǎn)換。
2.2 A/D模塊
A/D模塊主要負(fù)責(zé)采集外部監(jiān)控信號(hào),,采用AD0809可以采集8個(gè)通道的數(shù)據(jù),,信號(hào)變化的動(dòng)態(tài)范圍并不大,利用這一特點(diǎn),,合理設(shè)置參考電壓,,可以提高分辨率,從而用低廉的器件實(shí)現(xiàn)很好的性能,,ADC0809的兩個(gè)參考電壓都可以通過(guò)電位器調(diào)節(jié),,為了保證系統(tǒng)的精度,,參考電壓必須穩(wěn)定,為此采用MAXIM的MAX875作為參考電壓源,。另外需要注意的是:輸入到A/D轉(zhuǎn)換器的參考電壓經(jīng)過(guò)電位器的分壓,,為了使參考電壓穩(wěn)定,必須選用高精度,、高穩(wěn)定性的電位器,。
2.3 以太網(wǎng)模塊
以太網(wǎng)模塊實(shí)現(xiàn)與以太網(wǎng)的通信,采用RealTek的RTL8019芯片實(shí)現(xiàn),。
RTL8919A(見(jiàn)圖3)有3種工作方式:跳線方式,,網(wǎng)卡的I/O和中斷由跳線決定;即插即用方式,,由軟件進(jìn)行自動(dòng)配置plug and play,;免跳線方式,網(wǎng)卡的I/O和中斷由外接的93C46中的內(nèi)容決定,。
RTL8019AS的引腳65(JP)決定了網(wǎng)卡的工作方式,,引腳65腳(JP)是輸入引腳,當(dāng)引腳65為低電平時(shí),,8019工作在即插即用方式或免跳線方式,,具體由93C46中的內(nèi)容決定,在嵌入式應(yīng)用中如果可以不使用93C46,,則可以降低成本,,同時(shí)減少連線,我們把引腳65接高電平(VCC),,使用跳線方式,。那么,網(wǎng)卡的I/O和中斷就不是由93C46的內(nèi)容決定,,這是不需要使用93C46,。
引腳64(AUI)決定使用AUI還是BNC接口。BNC接口方式支持8線雙絞線或同軸電纜,。高電平時(shí)使用AUI接口,;懸空為低電平,使用BNC接口,。我們一般使用BNC,,將該引腳懸空。網(wǎng)絡(luò)接口類型由引腳74(PL0),、引腳77(PL1)決定,。將PL0、PL1懸空,,選擇自動(dòng)檢測(cè)模式,,芯片自動(dòng)檢測(cè)接口類型是用同軸電纜或雙絞線,,然后進(jìn)行工作。
RTL89的IOCS16是16位I/O的選擇引腳,。當(dāng)網(wǎng)卡上電復(fù)位時(shí),,該引腳為網(wǎng)卡的輸入,如果該引腳為高電平,,網(wǎng)卡將選擇16位的模式,,如果該引腳為低電平,網(wǎng)卡將選擇8位模式,,51單片機(jī)是8位數(shù)據(jù),,所以用電阻R10下拉,因此在復(fù)位時(shí)該引腳為低電平,,網(wǎng)卡選擇8位模式。
AD0-AD7是網(wǎng)卡的8位數(shù)據(jù)總線,,接單片機(jī)的P0口,,RESDRV(引腳33(RESET))接單片機(jī)的T0(P3.4),單片機(jī)用P3.4來(lái)復(fù)位網(wǎng)卡,。IRQ9接單片機(jī)的INT0(P3.2
),,IRQ9是網(wǎng)卡的中斷9,接到單片機(jī)的中斷0上,,IOR,,IOW接到單片機(jī)的P3.6,P3.7(/WR,,/R),。
2.4 小邏輯模塊
小邏輯模塊主要實(shí)現(xiàn)一些邏輯功能,A/D的時(shí)鐘由單片機(jī)的ALE信號(hào)8分頻,,各個(gè)外部器件的片選功能都由小邏輯模塊實(shí)現(xiàn),,雖然功能不復(fù)雜,如果用小邏輯器件實(shí)現(xiàn),,就需要較多的器件,,器件利用率低,在電路板上占據(jù)較大的空間,,與要求體積小的嵌入式應(yīng)用相矛盾,。采用可編程邏輯器件可以解決這些問(wèn)題。
2.5 單片機(jī)模塊
單片機(jī)模塊由單片機(jī)以及復(fù)位和看門狗電路,、外部擴(kuò)展RAM,、時(shí)鐘電路等外圍電路構(gòu)成,看門狗電路可以提高現(xiàn)場(chǎng)惡劣條件的干擾,,當(dāng)系統(tǒng)受到外界干擾使得單片記的程序跑飛,,看門狗沒(méi)有喂狗信號(hào),,看門狗電路將單片機(jī)和RTL8019復(fù)位,重新開(kāi)始運(yùn)行,。
3 軟件設(shè)計(jì)與實(shí)現(xiàn)
由于SNMP的編解碼需要占用很多CPU時(shí)間,,并且在單片機(jī)上還要實(shí)現(xiàn)A/D數(shù)據(jù)采集轉(zhuǎn)換、以太網(wǎng)通信,、串口通信等功能,,這就使得協(xié)調(diào)各個(gè)功能非常困難,因此,,我們選用Micro-C/OS51作為單片機(jī)的操作系統(tǒng),,Micro-C/OS51是嵌入式實(shí)時(shí)操作系統(tǒng)Micro-C/ OS在51單片機(jī)上的移植代碼,實(shí)時(shí)系統(tǒng)能夠很好地提高CPU的效率,,并且是多任務(wù)系統(tǒng),,能夠協(xié)調(diào)多個(gè)任務(wù),我們將單片機(jī)要實(shí)現(xiàn)的功能分為人機(jī)交互任務(wù),、A/D處理任務(wù)和SNMP處理任務(wù),。
3.1 人機(jī)交互任務(wù)
人機(jī)交互任務(wù)是通過(guò)單片機(jī)的串口來(lái)實(shí)現(xiàn)與用戶的交互,用戶通過(guò)串口電纜將PC機(jī)與單片機(jī)的串口連接,,通過(guò)PC機(jī)的超級(jí)終端可以使用命令行的方式對(duì)代理器的有關(guān)參數(shù)(網(wǎng)關(guān)地址,、主機(jī)地址等)進(jìn)行配置,還可以察看相關(guān)的運(yùn)行信息,,主要的命令行有:Host 配置本機(jī)IP地址,;Gateway 配置網(wǎng)關(guān)地址;Mask 配置子網(wǎng)掩碼,;Snmphost 配置SNMP管理器IP地址,;Macadr 配置本機(jī)物理地址;ping 可以用這個(gè)命令來(lái)檢測(cè)網(wǎng)絡(luò)鏈路,;clear 清除電話顯示屏的內(nèi)容,。
人機(jī)交互任務(wù)實(shí)現(xiàn)的主要思路就是單片機(jī)接收用戶鍵盤輸入的字符存入命令緩沖區(qū),并回顯到屏幕,,當(dāng)用戶按下回車鍵,,觸發(fā)軟件狀態(tài)機(jī)狀態(tài)變遷,從輸入態(tài)轉(zhuǎn)移到命令解釋態(tài),,然后根據(jù)用戶命令調(diào)用相關(guān)子程序執(zhí)行相關(guān)操作,,執(zhí)行完畢后重新回到輸入態(tài)。
人機(jī)交互程序由詞表,、取詞子程序,、狀態(tài)機(jī)框架程序(輸入回顯和命令解釋執(zhí)行)命令相關(guān)子程序組成,詞表就是命令語(yǔ)句的集合,取詞子程序從命令行語(yǔ)句中提取單詞并存入詞表,,同時(shí)進(jìn)行匹配檢查和詞法分析,,輸入回顯程序循環(huán)檢查用戶鍵盤輸入,命令解釋程序調(diào)用取詞子程序分析用戶命令行輸入,,根據(jù)詞表第1個(gè)單詞在散轉(zhuǎn)表中的位置調(diào)用相應(yīng)執(zhí)行子程序處理命令,,命令解釋程序向相應(yīng)的命令 相關(guān)子程序傳入詞表指針,具體執(zhí)行由用戶自行決定,,由命令相關(guān)資程序返回后重新回到命令輸入態(tài),,完成一次輸入執(zhí)行全過(guò)程,此過(guò)程周而復(fù)始地循環(huán)執(zhí)行,。
3.2 A/D處理任務(wù)
A/D轉(zhuǎn)換需要一定的時(shí)間,,讀取A/D轉(zhuǎn)換的結(jié)果有3種方式:
a)采用中斷方式,讀取數(shù)據(jù)及時(shí),,同時(shí)頻繁的中斷處理增加了CPU的負(fù)擔(dān),。
b)查詢方式,造成CPU時(shí)間的浪費(fèi),,大大地降低了CPU效率,;
c)等待方式,看起來(lái)沒(méi)有優(yōu)點(diǎn),,但是在UC/OS51操作系統(tǒng)中,到任務(wù)調(diào)度的一個(gè)很重要的思想就是延時(shí),,高優(yōu)先級(jí)的任務(wù)執(zhí)行一段時(shí)間后,,再延時(shí)一段時(shí)間,以便低優(yōu)先級(jí)的任務(wù)執(zhí)行,,這樣將等待的時(shí)刻放到A/D處理任務(wù)的延時(shí)時(shí)刻,,可以起到一舉多得的作用,我們正是采用這種方式,。
3.3 SNMP處理任務(wù)
當(dāng)接收到UDP數(shù)據(jù)包,、處理UDP報(bào)頭后,由函數(shù)udp_recv()處理SNMP數(shù)據(jù)包,。其基本思想是:解碼SNMP消息,,如果解碼正確,判斷該Community(共同體)是否具有進(jìn)行所請(qǐng)求操作的權(quán)限,,如果沒(méi)有權(quán)限,,則拋棄該報(bào)文,并且給管理器發(fā)送Trap報(bào)文,。如果權(quán)限正確,,則從代理器上的MIB表中查找所請(qǐng)求的對(duì)象。找到后,執(zhí)行相應(yīng)操作,,同時(shí)生成響應(yīng)報(bào)文,。然后進(jìn)行SNMP編碼,如果編碼無(wú)誤,,則將這個(gè)SNMP報(bào)文交給上一層協(xié)議處理,,SNMP處理流程見(jiàn)圖4。
在SNMP處理過(guò)程中,,SNMP的編碼和解碼非常關(guān)鍵,,以解碼為例來(lái)說(shuō)明,解碼出SNMP報(bào)文使用SNMP的版本號(hào),,報(bào)文所使用的共同體號(hào),,版本號(hào),表明了報(bào)文使用SNMP的版本,,如果管理器與代理器使用協(xié)議的版本不同,,將不能正常通信,共同體相當(dāng)于密鑰,,只有有了密鑰的管理器才能夠訪問(wèn)代理器,,否則,代理器不予響應(yīng),,PDU解碼出管器所要訪問(wèn)的對(duì)象,,SNMP解碼的流程圖見(jiàn)圖5。
流程圖中的snmpDec()函數(shù)解碼SNMP函數(shù)報(bào)文,,將有用的信息提取出來(lái),,MibRequest()函數(shù)的作用是將駐留在嵌入式SNMP代理器中的MIB中查找解碼出來(lái)的OID(對(duì)象標(biāo)識(shí)符),查找到OID后,,同時(shí)獲得了這個(gè)對(duì)象的信息,,編碼同時(shí)開(kāi)始進(jìn)行,MibCmpObjId()函數(shù)的作用是采用比較的方式查找表項(xiàng),。SnmpEnc()函數(shù)將得到的響應(yīng)報(bào)文按SNMP的編碼規(guī)則編碼成SNMP報(bào)文,。make_udp()函數(shù)將SNMP報(bào)文封裝在UDP報(bào)文中。再經(jīng)過(guò)IP協(xié)議封裝,,以太網(wǎng)協(xié)議封裝后,,就可以通過(guò)以太網(wǎng)傳輸。
4 結(jié)束語(yǔ)
我們將該系統(tǒng)用于光無(wú)線通信的網(wǎng)絡(luò)管理與監(jiān)控系統(tǒng),。經(jīng)過(guò)使用后發(fā)現(xiàn):該系統(tǒng)能夠?qū)崟r(shí)監(jiān)控光無(wú)線通信系統(tǒng)的運(yùn)行,,由于采用Internet傳送數(shù)據(jù),所以傳輸距離不受限制,,SNMP是應(yīng)用最廣泛的網(wǎng)絡(luò)管理協(xié)議及實(shí)現(xiàn)嵌入式SNMP代理器,,可以使光無(wú)線通信系統(tǒng)的管理很方便地加入到現(xiàn)有的網(wǎng)絡(luò)管理系統(tǒng),,由于采用廉價(jià)的單片機(jī)來(lái)實(shí)現(xiàn)嵌入式SNMP代理器,主要的協(xié)議處理由軟件實(shí)現(xiàn),,成本很低,。