基于Lonworks技術(shù)的網(wǎng)絡(luò)打印服務(wù)器設(shè)計(jì)
1 NPS硬件設(shè)計(jì)
如圖2所示,NPS采用1塊TMPN315081AF神經(jīng)元芯片,配置1片64K×8位Flash存儲(chǔ)器作為程序存儲(chǔ)器和1片128K×8位RAM作為數(shù)據(jù)存儲(chǔ)器;神經(jīng)元芯片的CP0~CP4雙向通信接口和78kbps的收發(fā)器構(gòu)成Lon-works網(wǎng)絡(luò)接口;TMPN315081AF神經(jīng)元芯片I/O引腳的功能可通過(guò)程序靈活配置。在此,I/00~I(xiàn)/07引腳接打印機(jī)接口的8位數(shù)據(jù)線,I/08引腳接打印機(jī)選通線(STRB),I/09接打印機(jī)的“Busy”信號(hào)線,并要在應(yīng)用程序中用如下Neuron C語(yǔ)句配置:
IO_0 output byte PrintData;
IO_8 output bit PrintStb;
IO_9 output bit PrintBusy;。
2 NPS應(yīng)用程序設(shè)計(jì)
NPS與各個(gè)智能節(jié)點(diǎn)之間為主從方式,通過(guò)查詢完成工作。網(wǎng)絡(luò)尋址為domain:subnet:node方式。網(wǎng)絡(luò)通信采用顯示報(bào)文格式。
2.1 應(yīng)用程序運(yùn)行機(jī)制
TMPN315081AF神經(jīng)元芯片固化了LonTalk的全部七層協(xié)議[2],位于應(yīng)用層的調(diào)度程序(Scheduler)負(fù)責(zé)目標(biāo)應(yīng)用程序的啟動(dòng)、任務(wù)調(diào)度運(yùn)行,并且任務(wù)運(yùn)行必須有一個(gè)特定的事件來(lái)觸發(fā)。根據(jù)這個(gè)調(diào)度機(jī)制,本文在NPS的應(yīng)用程序中實(shí)現(xiàn)了以下事件(Events)及其對(duì)應(yīng)任務(wù)的功能。
(1) reset事件
完成NPS的網(wǎng)絡(luò)地址設(shè)置,建立Lonworks網(wǎng)絡(luò)的域和地址,并完成打印機(jī)初始化工作。
(2)timer_expires事件
在程序中定義了3個(gè)周期性定時(shí)器:
stimer repeating sNetUpDTr=12;
mtimer repeating mAddrTr=300;
mtimer repeating mPollTr=1000;。
秒級(jí)定時(shí)器sNetUpDTr啟動(dòng)網(wǎng)絡(luò)更新,毫秒級(jí)定時(shí)器mAddrTr事件對(duì)應(yīng)的任務(wù)通過(guò)廣播報(bào)文查詢網(wǎng)絡(luò)上的節(jié)點(diǎn)地址,并更新程序中的所有節(jié)點(diǎn)列表。節(jié)點(diǎn)結(jié)構(gòu)定義如下:
typedef struct
{ unsigned int ID_num;//唯一ID
char ID_descrip[32];//描述網(wǎng)絡(luò)地址,定義在Neu-ron C的addrdefs.h文件中msg_out_addr ID_dest_addr;
}ID_INFO;
毫秒級(jí)定時(shí)器mPollTr事件激發(fā)查詢?nèi)蝿?wù),詢問(wèn)網(wǎng)絡(luò)上的節(jié)點(diǎn)是否有打印信息。
(3)msg_arrives事件
當(dāng)收到報(bào)文時(shí),此事件為真,其對(duì)應(yīng)的任務(wù)接收?qǐng)?bào)文,根據(jù)報(bào)文類型字段,可以區(qū)分是命令報(bào)文還是欲打印數(shù)據(jù)報(bào)文。
(4)iO_in()事件
在程序中對(duì)應(yīng)when(iO_in(Print_Busy)==0){…},就是當(dāng)打印機(jī)一旦空閑,就啟動(dòng)打印任務(wù),把程序中打印緩沖區(qū)的數(shù)據(jù)輸出到打印機(jī)。整個(gè)NPS應(yīng)用程序的運(yùn)行機(jī)制如圖3所示,每個(gè)任務(wù)在執(zhí)行時(shí)都調(diào)用相應(yīng)的函數(shù)來(lái)完成預(yù)定功能,函數(shù)代碼不在此詳述。
2.2 應(yīng)用程序通信協(xié)議
之所以單獨(dú)提出這個(gè)問(wèn)題,是因?yàn)橥ㄓ崊f(xié)議對(duì)網(wǎng)絡(luò)應(yīng)用程序至關(guān)重要。本文中,NPS和其他智能節(jié)點(diǎn)間的應(yīng)用層通信協(xié)議為兩級(jí)協(xié)議:第一層,顯式報(bào)文嚴(yán)格按照Neu-ron C定義的格式、填寫(xiě)報(bào)文的個(gè)字段;第二層,對(duì)顯式報(bào)文中的數(shù)據(jù)段,應(yīng)該定義自己的用戶數(shù)據(jù)規(guī)約。
最后,應(yīng)用程序在NodeBuider環(huán)境下編譯、連接后生成可執(zhí)行文件,寫(xiě)入到Flash存儲(chǔ)器,經(jīng)變電站現(xiàn)場(chǎng)調(diào)試和測(cè)試,NPS能夠可靠地完成網(wǎng)絡(luò)打印功能。
3 結(jié) 論
Lonworks網(wǎng)絡(luò)技術(shù)是一種高抗干擾性、高性價(jià)比的現(xiàn)場(chǎng)總線網(wǎng)技術(shù),本文NPS設(shè)計(jì)之所以采用這種技術(shù)就是考慮到工業(yè)現(xiàn)場(chǎng)往往具有很強(qiáng)的電磁干擾。從硬件、編程和開(kāi)發(fā)工具對(duì)NPS的設(shè)計(jì)進(jìn)行較詳盡地描述,希望對(duì)從事Lonworks網(wǎng)絡(luò)技術(shù)開(kāi)發(fā)應(yīng)用的讀者能稍有裨益。本裝置與變電站測(cè)控單元、保護(hù)單元配套,經(jīng)過(guò)現(xiàn)場(chǎng)驗(yàn)證,工作穩(wěn)定可靠。