Lonworks網(wǎng)絡(luò)虛擬監(jiān)測系統(tǒng)研究
關(guān)鍵詞:虛擬儀器;Lonworks;LabVIEW
傳統(tǒng)儀器,無論是早期的模擬儀器,還是現(xiàn)在的數(shù)字化智能儀器,雖然它們的功能日益完善和強大,但是所有的功能塊都以硬件的形式存在,這使對它們的開發(fā)和應(yīng)用都缺乏靈活性。虛擬儀器的出現(xiàn)是測試技術(shù)與計算機深層次的結(jié)合,從而使測試技術(shù)上升到一個新的層次。虛擬儀器在工程應(yīng)用方面具有突出的優(yōu)勢,它可在通用硬件平臺確定之后,用軟件取代傳統(tǒng)儀器中的硬件來完成儀器的功能,儀器的功能可由用戶根據(jù)需要通過軟件來定義,甚至能完成傳統(tǒng)儀器因工藝和制造水平的限制而難以完成的測試工作。隨著通信技術(shù)和網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,將網(wǎng)絡(luò)技術(shù)應(yīng)用到虛擬儀器領(lǐng)域,以形成網(wǎng)絡(luò)化虛擬儀器是虛擬儀器發(fā)展的一個趨勢。本文介紹了一種用于Lonworks網(wǎng)絡(luò)(簡稱LON網(wǎng))的虛擬儀器監(jiān)測系統(tǒng),給出了采用LabVIEW軟件開發(fā)平臺,并用Lonworks網(wǎng)絡(luò)作為信號傳輸通道來實現(xiàn)Lonworks網(wǎng)絡(luò)與虛擬儀器的接口設(shè)計以及通信方式。
1 Lonworks網(wǎng)絡(luò)虛擬儀器系統(tǒng)的結(jié)構(gòu)
圖1所示是一種網(wǎng)絡(luò)虛擬儀器系統(tǒng)的結(jié)構(gòu)框圖。圖中,虛擬儀器由一臺PC機和LabVIEW開發(fā)的應(yīng)用軟件構(gòu)成。LabVIEW 是一種基于圖形化編程語言的虛擬儀器軟件開發(fā)工具,它提供有豐富的功能模塊,可以支持GPIB、PXI、VXI、串口等多種總線標(biāo)準(zhǔn)。用戶可利用不同的模塊組合來編制圖形化軟件流程圖,以實現(xiàn)多種測試功能。該系統(tǒng)操作面板設(shè)計靈活,且不受“標(biāo)準(zhǔn)件”和“工藝”的限制。
Lonworks總線是Echelon公司研制的一種局部操作網(wǎng)絡(luò),是一種串行數(shù)字通信鏈路。它支持雙絞線、電力線、光纖、同軸電纜等通信媒介,并支持多種網(wǎng)絡(luò)拓?fù)洌捎糜诮⑸a(chǎn)領(lǐng)域中現(xiàn)場設(shè)備之間以及更高層次控制過程設(shè)備之間的聯(lián)系。Neuron神經(jīng)元芯片是Lonworks系統(tǒng)設(shè)備的核心器件。在Lon-works網(wǎng)絡(luò)中,以Neuron芯片為核心的智能節(jié)點主要完成各現(xiàn)場設(shè)備的信號采集和控制,一個Neuron芯片可連接多個物理I/O設(shè)備,節(jié)點掛接在lonworks總線上即可形成現(xiàn)場測控網(wǎng)絡(luò)。通過Neuron芯片和LonTalk通信協(xié)議便可實現(xiàn)各節(jié)點之間以及節(jié)點和上位機間的通信。由于總線具有串行特征,同時LabVIEW又提供了對串口的支持,而且PC機一般都帶有串行接口,因此,可以通過串口來實現(xiàn)虛擬儀器與Lonworks網(wǎng)絡(luò)的交互,并通過操作軟面板形成控制信號,以控制給定的節(jié)點,然后由節(jié)點將現(xiàn)場設(shè)備的狀態(tài)信號送到虛擬儀器進行顯示和分析。
2 虛擬儀器與Lonworks接口卡的設(shè)計
雖然Neuron芯片的I/O引腳提供了RS232半雙工異步串行工作方式,但是在傳輸速率、數(shù)據(jù)格式和通信方式方面仍有較大的局限性。網(wǎng)絡(luò)上節(jié)點間的通信是通過LonTalk通信協(xié)議用網(wǎng)絡(luò)變量或顯式消息報文的形式實現(xiàn)的。為了實現(xiàn)更靈活的應(yīng)用,筆者設(shè)計了一塊LON-RS232接口卡以實現(xiàn)RS232協(xié)議與LonTalk?yún)f(xié)議的相互轉(zhuǎn)換,從而實現(xiàn)高速率、全雙工的通信。該接口卡的硬件結(jié)構(gòu)如圖2所示。
該接口卡包括51協(xié)議轉(zhuǎn)換模塊、LON網(wǎng)接口模塊和RS232通信模塊。接口卡采用雙CPU技術(shù)。51協(xié)議轉(zhuǎn)換模塊由P89C51單片機構(gòu)成,P89C51也是接口卡的主CPU,用于完成RS232標(biāo)準(zhǔn)信號與LonTalk?yún)f(xié)議之間的轉(zhuǎn)換。接口卡向上經(jīng)RS232通信模塊與虛擬儀器進行通信;向下與TMPN3150進行并口通信。
LON網(wǎng)接口模塊由TMPN3150芯片、收發(fā)器FTT-10A、程序存儲器、數(shù)據(jù)存儲器等組成,該模塊可將主CPU接收的報文解析成LonTalk?yún)f(xié)議報文,然后通過收發(fā)器傳到LON網(wǎng),或?qū)模蹋希尉W(wǎng)上收到的LonTalk?yún)f(xié)議報文轉(zhuǎn)發(fā)給主CPU。TMPN3150芯片通過11個I/O口(IO0~IO10)與P89C51進行連接,它采用并行I/O模式的從A工作方式。在這種方式下,IO0~IO7將作為雙向數(shù)據(jù)線與P89C51的P0.0~P0.7連接,IO8作為片選信號線連接到P2.0腳,IO9為讀寫信號線,連接于P89C51的WR腳,IO10為握手信號線,接P2.1腳,主機(P89C51)和從機(TMPN3150)之間的數(shù)據(jù)傳輸通過虛擬的寫令牌傳遞協(xié)議來實現(xiàn),擁有令牌的一方具有對數(shù)據(jù)線的寫控制權(quán)。
RS232通信模塊由RS232接口芯片完成串口通信網(wǎng)絡(luò)的鏈路和協(xié)議。它由P89C51的UART進行驅(qū)動,采用中斷驅(qū)動方式。
3 系統(tǒng)通信方式的實現(xiàn)
通常,虛擬儀器測試的物理量較少,而且被測試的設(shè)備比較集中,因而信號通道一般采用并行方式。但是在設(shè)計網(wǎng)絡(luò)虛擬儀器系統(tǒng)時,除了要解決接口問題,還要考慮由于網(wǎng)絡(luò)的多種拓?fù)浣Y(jié)構(gòu)而要解決虛擬儀器與各個節(jié)點的有效通信問題,如尋址信息、控制信息以及數(shù)據(jù)傳輸?shù)取?/P>
3.1 控制信號的傳輸
一個Lonworks網(wǎng)絡(luò)包括多個節(jié)點,每個節(jié)點可以監(jiān)測多個信號,即一個節(jié)點有多個測量通道。當(dāng)虛擬儀器要獲取某個被測量數(shù)據(jù)時,必須同時指定該被測量所在的節(jié)點和通道。可在虛擬儀器的軟面板上根據(jù)實際要測量的物理量設(shè)置選擇開關(guān),當(dāng)選中某一開關(guān)時,這樣程序?qū)⒏鶕?jù)預(yù)先的設(shè)置自動形成包含節(jié)點號、通道號的控制信息,其消息格式包括節(jié)點號、通道號、控制命令代號共3個字節(jié)。經(jīng)過接口卡轉(zhuǎn)換后,節(jié)點號、通道號、控制命令代號將被寫入LonTalk顯式消息報文數(shù)據(jù)的前三個字節(jié),報文消息代碼為CONTRL_MSG,該報文以廣播方式在LON網(wǎng)上傳播。具體實現(xiàn)代碼如下:
IO_0 parallel slave s_bus; ?。x并口I/O對象
#define DATA_SIZE 255
Typedef struct
{
unsigned int length;
unsigned int data[255];?
} pio; //定義并口通信結(jié)構(gòu)
far pio p_in;
msg_tag tag_out0;
when(io_in_ready(s_bus))? //并口有數(shù)據(jù)來
{
p_in.length=DATA_SIZE?
io_in(s_bus,&p_in);? //從并口讀取數(shù)據(jù)
//構(gòu)造顯式報文
msg_out.code=CONTRL_MSG? //CONTRL_MSG是預(yù)定義的消息代碼
memcpy(msg_out.data,p_in.data,3);?
msg_out.dest_addr.bcast.type=BROADCAST;
msg_out.dest_addr.bcast.domain=0;?
msg_out.dest_addr.bcast.subnet=0;
msg_out.tag=tag_out0;
msg_send();??
}
一般情況下,節(jié)點通過when(msg_arrives(CONTRL_MSG))接收該消息,然后判斷消息數(shù)據(jù)的第一個字節(jié)的節(jié)點信息,如果不是本節(jié)點,則不作處理,如果是本節(jié)點,再判斷第二個字節(jié)的通道號,然后作相應(yīng)的處理并將選中通道的數(shù)據(jù)傳送出去。
3.2 測量數(shù)據(jù)的傳輸
在測控系統(tǒng)中,各個需要測量的參數(shù)每次需要采集的數(shù)據(jù)個數(shù)可能各不相同,少的可能只有一個數(shù)據(jù),多的可能有上千個數(shù)據(jù),因此節(jié)點收到虛擬儀器傳來的控制信號后,選中通道的監(jiān)測數(shù)據(jù)要采用顯式消息報文傳輸。在LON網(wǎng)中,設(shè)計的接口卡也是一個節(jié)點,當(dāng)其余節(jié)點收到發(fā)給本節(jié)點的控制信號后,會同時將相應(yīng)通道的數(shù)據(jù)都發(fā)送到接口卡上。筆者采用的是消息標(biāo)簽尋址。消息標(biāo)簽是顯式消息的一個連接點。網(wǎng)絡(luò)管理工具給輸入標(biāo)簽和每個輸出標(biāo)簽都會賦一個唯一的網(wǎng)絡(luò)地址。這樣,利用捆綁器可將各個節(jié)點發(fā)送給接口卡的顯式報文的消息標(biāo)簽與接口卡節(jié)點的消息輸入對象msg_in連接起來,這樣就可以實現(xiàn)點對點的數(shù)據(jù)傳送。下面以節(jié)點2收到要求發(fā)送給1號通道的數(shù)據(jù),且該通道每次發(fā)送40個字節(jié)的數(shù)據(jù)為例,給出其發(fā)送程序:
msg_tag LON_232;
when(msg_arrives(CONTRL_MSG))
{
if(msg_in.data[0]==2)
{
switch(msg_in.data[1])?
{ case 1: //通道1
msg_out.tag=LON_232;
msg_out.code=0x0c;? //消息代碼,接口卡依此處理接收的數(shù)據(jù)
msg_out.service=ACKD;
memcpy(?msg_out.data,ch1_buf,40);
msg_send();??
break;
case 2: //其他通道的處理
......
}
}
}
LON_232是定義的輸出消息標(biāo)簽,由網(wǎng)絡(luò)管理器將LON_232與接口卡的輸入消息標(biāo)簽msg_in相關(guān)聯(lián)。在接口卡上對該消息進行處理的程序如下:
far pio p_out;
when(msg_arrives(0x0c))
{
p_out.length=msg_in.len;
memcpy(p_out.data,msg_in.data,msg_in.len);
//接收從LON網(wǎng)來的數(shù)據(jù)
mio_out_request(s_bus);? //向并口總線請求獲取令牌
}
when(io_out_ready(s_bus))
{
io_out(s_bus,&p_out); //數(shù)據(jù)傳向并口總線
}
4 結(jié)束語
采用Lonworks網(wǎng)絡(luò)化虛擬儀器,可將所有測量通道的數(shù)據(jù)都在Lonworks總線上進行傳輸,從而避免了多通道并行布線的弊端,有效實現(xiàn)了遠(yuǎn)程數(shù)據(jù)的采集和控制。通過該網(wǎng)絡(luò)接口卡可使虛擬儀器任意掛接在LON網(wǎng)的任何地方,因而可以做成便攜式儀器,并方便靈活地在LON網(wǎng)上進行測試。