用戶中心
· 企業(yè)空間 首頁 | 資訊 | 技術 | 產(chǎn)品 | 企業(yè) | 直播 | 專題 | 智能制造 | 論壇| 在線研討會
北京力控元通科技有限公司
企業(yè)空間 > 案例應用 > 正文
  • VC++開發(fā)基于LNS的LonWorks網(wǎng)絡數(shù)據(jù)監(jiān)控接口
  • 發(fā)布時間:2008/11/23 7:51:57   修改時間:2008/11/22 10:14:39 瀏覽次數(shù):3063
  •   
      The data monitor and control interface development based on LNS LonWorks network by Visual C++
      北京三維力控科技有限公司  林威漢
      摘要:本文介紹了用Visual C++ 6.0開發(fā)工具,在LNS環(huán)境下,開發(fā)LonWorks網(wǎng)絡數(shù)據(jù)監(jiān)控接口的方法,舉例闡述了軟件實現(xiàn)過程。對于相關系統(tǒng)的設計、開發(fā)具有一定的參考價值。
      關鍵詞:LNS、LonkWorks網(wǎng)絡數(shù)據(jù)監(jiān)控接口
      Abstract:The data monitor and control interface development based on LNS LonWorks network by Visual C++ 6.0 is introduced .And sample programming code is shown. This article is referenced by people who are developing LNS system.
      Key words:LNS、LonWorks network data monitor and control interface
      1  引言
      近年來,現(xiàn)場總線技術迅猛發(fā)展,取代傳統(tǒng)的集中式控制系統(tǒng)已成必然。LonWorks技術是美國ECHELON公司在1991年推出的一種控制局域網(wǎng)絡,它以其優(yōu)秀的分布處理能力、開放性、互操作性、多媒介適應能力以及多網(wǎng)絡拓撲結(jié)構(gòu)等特性適應了未來發(fā)展對測控網(wǎng)絡的要求,成為眾多總線中的佼佼者。與其它現(xiàn)場總線相比,它具有組網(wǎng)方便,通訊速率快,不局限于通訊介質(zhì)等優(yōu)點。目前其在國內(nèi)的應用非常廣泛,工程實例遍及樓宇控制,智能小區(qū),工廠,礦井監(jiān)控等場合,是一種具有良好發(fā)展前景的總線。
      2  LNS開發(fā)接口與開發(fā)工具
      LNS(LonWorks Network Services)是ECHELON提供的一個專為LonWorks網(wǎng)絡服務的網(wǎng)絡操作系統(tǒng)。LNS封裝了對LonWorks網(wǎng)絡的各種操作,如:網(wǎng)絡安裝、網(wǎng)絡維護、變量連接等。在Windows環(huán)境下,LNS提供了基于ActiveX和COM組件方式的開發(fā)接口。這兩種方式在功能和性能上都沒有什么差異,而ActiveX使用起來更為簡便,一般也不需要開發(fā) 人員了解很多OLE方面的知識,因而更易于被接受。本文所列舉的實例采用的就是ActiveX方式。
      采用ActiveX方式開發(fā)LonWorks網(wǎng)絡通信接口可選擇的開發(fā)工具十分豐富。Visual C++ 6.0目前仍然是開發(fā)自動化軟件的主流工具之一。當在VC環(huán)境下用ActiveX接口開發(fā)LonWorks網(wǎng)絡通信接口程序時,在實現(xiàn)過程和方法上與其它語言差別不大。只是在一些與VC語言特性相關的環(huán)節(jié)上,如果處理不當,就會影響接口程序的健壯性、穩(wěn)定性?!?BR>     LNS由LNS Server、LNS Object Server COM Component、Data Server和Network Interface幾個主要部分    組  成,提供了從網(wǎng)絡變量監(jiān)測到網(wǎng)絡管理和維護等完整的功能接口。在開發(fā)LonWorks網(wǎng)絡數(shù)據(jù)監(jiān)控接口程序時,涉及的只  是  其  中的數(shù)據(jù)監(jiān)控部分的功能。
      3  LNS實現(xiàn)監(jiān)控的過程
      LNS提供了兩種網(wǎng)絡監(jiān)控方式,一種是監(jiān)控集(Monitor set)方式,一種是單點(Single point)方式。兩種方式都是以監(jiān)控點(Monitor points)為基本 單位。一個監(jiān)控點對應一個網(wǎng)絡變量或應用消息。
      監(jiān)控集建立后就被保存在Data Sever中,即使應用程序關閉也仍然存在。單點方式每次都需要應用程序重新創(chuàng)建,退出時釋放。監(jiān)控集方式適用于監(jiān)控任務比較繁重的場合,單點方式適合監(jiān)控任務較輕,點數(shù)較多的情況。
      無論是監(jiān)控集或是單點方式,都要使用監(jiān)控點。監(jiān)控點有以下幾種監(jiān)控方式:顯式讀寫、隱式綁定、查詢、顯示綁定。
      對于顯式讀寫方式,接口程序可以直接讀寫監(jiān)控點的數(shù)值。在隱式綁定方式下,可以將一個監(jiān)控點與一個節(jié)點的網(wǎng)絡變量綁定,當網(wǎng)絡變量變化時,會用事件NvMonitorUpdateEvent通知接口程序,接口程序根據(jù)消息參數(shù)可以取得更新的數(shù)據(jù)。當使用查詢方式時,每隔一個周期就觸發(fā)一次NvMonitorUpdateEvent事件。當使用顯式綁定方式時,對應設備結(jié)點的一個或多個網(wǎng)絡變量,要在上位機上創(chuàng)建并綁定一個網(wǎng)絡變量,而這個網(wǎng)絡變量又可以用其它三種方式進行監(jiān)控。這種方式主要為了實現(xiàn)用一個監(jiān)控點同時監(jiān)測多個結(jié)點網(wǎng)絡變量。
      這幾種方式分別適用于不同的場合。查詢方式適用于監(jiān)控任務繁重,但對數(shù)據(jù)采集的實時性要求不高的場合。隱式綁定適用于監(jiān)控任務較輕,但數(shù)據(jù)變化要求實時處理的場合。當現(xiàn)場數(shù)據(jù)變化頻繁時,用顯式讀寫或查詢方式會導致應用程序的運行速度緩慢。
      本文列舉的實例采用的是監(jiān)控集方式,監(jiān)控點采用的是隱式綁定方式以獲得較好的實時性和較高的效率。
      4  接口程序的設計與實現(xiàn)
      在安裝了Echelon的LNS Application Developer's Kit開發(fā)包之后,就可以使用開發(fā)包中提供的lnsobjectserver控件了。最簡單的方法是在一個對話框資源上插入這個控件,然后用這個對話框創(chuàng)建一個類,將創(chuàng)建監(jiān)測集、獲取監(jiān)控點數(shù)據(jù)等各種操作全都封裝在這個類里,以供接口程序的其它模塊調(diào)用。本文實例中創(chuàng)建了一個名為CObjServerDlg的類。這個類提供實現(xiàn)以下幾個最主要的接口。
      1)、對LNS對象服務器進行初始化的接口。
      在這個接口時里,具體實現(xiàn)的內(nèi)容包括:
      設置對象服務的用戶模式(單用戶或多用戶);
      設置遠程或本地方式;
      打開服務器;
      設置網(wǎng)絡接口,打開網(wǎng)絡;
      設置系統(tǒng);
      設置網(wǎng)絡服務設備;
      打開系統(tǒng);
      設置通道;
      得到監(jiān)控集對象;
      設置監(jiān)控集的屬性;
      獲得包含要監(jiān)控的網(wǎng)絡變量的設備對象;
      將要監(jiān)控的網(wǎng)絡變量添加到監(jiān)控點中;
      打開監(jiān)控集。
      調(diào)用lnsobjectserver控件方法可以逐步實現(xiàn)上述初始化過程。需要注意的是VC對異常情況的處理,不進行異?;蛱幚聿划敃е陆涌诔绦虺霈F(xiàn)各種莫名錯誤。下面舉例說明:
      void CObjServerDlg::InitObjServer()
      {
      m_ObjSvr.SetRemoteFlag(FALSE);
      m_ObjSvr.SetSingleUserMode(FALSE);
      m_ObjSvr.Open();
      if (!m_ObjSvr.GetIsOpen())
      {
      ShowEvent("創(chuàng)建LNS Server失敗!");
      return;
      }
      //設置網(wǎng)絡
      LcaNetworks Networks(m_ObjSvr.GetNetworks());
      try
      {
      //在獲取網(wǎng)絡對象時要捕獲異常
      m_ActiveNetwork = Networks.GetItem(COleVariant(m_csNetworkName));
      ASSERT (m_ActiveNetwork.m_lpDispatch != NULL);
      }
      catch (COleDispatchException *pE)
      {
      //對異常的正確處理
      if (LCA_ERR_RANGE_START+LCA_OBJECT_NOT_FOUND ==
      pE->m_scError + OLE2LNS_CONVERSION)
      {
      CString csEvent;
      csEvent.Format("網(wǎng)絡%s不存在!", m_csNetworkName);
      ShowEvent(cs);
      }
      else
      ShowEvent(pE->m_strDescription);
      pE->Delete();
      return;
      }
      ......
      //其它部分代碼
      }
      2)、處理NvMonitorUpdateEvent事件消息。當網(wǎng)絡變量變化時,LNS會發(fā)送NvMonitorUpdateEvent消息通知接口程序。在這個消息函數(shù)中會將數(shù)值變化的監(jiān)控點、數(shù)據(jù)點、源地址以參數(shù)的形式傳遞過來。通過這些參數(shù)可以獲取變化數(shù)據(jù)的原始值和格式化值。這里需要注意的是如果LNS用的是VT_BSTR格式傳值,在獲取變化的數(shù)值后,必須正常釋放資源。否則接口程序就會持續(xù)不斷地占用系統(tǒng)內(nèi)存,直至內(nèi)存耗盡。下面舉例說明:
      //  將格式化的變化值賦給一個VARIANT型變量
      VARIANT NvFmtValue = UpdateDataPoint.GetFormattedValue(); 
      if (NvFmtValue.vt == VT_BSTR)
      {
      CString csNvFmtValue = NvFmtValue.bstrVal;
      ShowVaule(csNvFmtValue);
      SysFreeString(NvFmtValue.bstrVal); // 必須正確釋放內(nèi)存資源
      }
      3)、實現(xiàn)對監(jiān)控點進行寫操作的接口。
      寫操作和讀操作的過程一樣,也涉及使用原始數(shù)值格式和格式化數(shù)值格式的選擇。
      按照格式化數(shù)值格式進行寫入時過程比較簡單,示例代碼如下:
      LcaDataPoint DataPoint = NvMonitorPoint.GetDataPoint();//得到要寫入的數(shù)據(jù)點對象
      ASSERT(DataPoint.m_lpDispatch != NULL);
      DataPoint.SetFormattedValue(COleVariant(csWriteData));
      //csWriteData是一個CString類型的變量,代表寫入的數(shù)值
      如果按照原始格式進行寫操作,要注意的是LNS要求使用一種"VT_ARRAY | VT_UI1"型的VARIANT變量作為寫入值,示例代碼如下:
      LcaDataPoint DataPoint = NvMonitorPoint.GetDataPoint();//得到要寫入的數(shù)據(jù)點對象
      ASSERT(DataPoint.m_lpDispatch != NULL);
      SAFEARRAY SafeArray;
      SafeArray.cDims = 1;
      SafeArray.fFeatures = 128;
      SafeArray.cbElements = 1;
      SafeArray.cLocks = 0;
      SafeArray.rgsabound[0].cElements = nWrtDataLen;
      SafeArray.rgsabound[0].lLbound = 1;
      SafeArray.pvData = pszWriteData;//表示寫入值的字符串指針
      VARIANT NvRawValue;
      NvRawValue.vt = VT_ARRAY | VT_UI1;
      NvRawValue.parray = &SafeArray;
      DataPoint.SetRawValue(NvRawValue);
      if(!DataPoint.GetAutoWrite())
      DataPoint.Write();
      5  結(jié)束語
      本文介紹了在LNS環(huán)境下,開發(fā)LonWorks網(wǎng)絡數(shù)據(jù)監(jiān)控接口的方法。并結(jié)合VC編程語言的特點,著重說明在一些關鍵環(huán)節(jié)上的處理方法。可為其他設計、開發(fā)相關系統(tǒng)的開發(fā)人員提供參考。
      參考文獻
      [1]  ECHELON公司。LNS for Windows Programmer's Guide,2000。
      [2]  雷剛,呂國強?;贚NS和COM的LonWorks網(wǎng)絡監(jiān)控軟件開發(fā)
  • 企業(yè)介紹
北京力控元通科技有限公司(簡稱力控科技)是工業(yè)軟件產(chǎn)品開發(fā)商及解決方案提供商。聚焦中國工業(yè)4.0、智慧市政等領域的智能管控產(chǎn)品開發(fā)與行業(yè)解決方案。豐富的產(chǎn)品線融入到工業(yè)互聯(lián)網(wǎng)體系的各個環(huán)節(jié)。提供從自動化、數(shù)字化到智能化的多層次的…  更多>>
  • 聯(lián)系方式

北京力控元通科技有限公司

聯(lián)系人:力控科技

地址:北京市海淀區(qū)天秀路10號中國農(nóng)大國際創(chuàng)業(yè)園1號樓四層436室。

郵編:100193

電話:13371688021

傳真:010-62828877

公司網(wǎng)址:http://www.sunwayland.com/

  • 該空間手機版

掃描此二維碼即可訪問該空間手機版

  • 在線反饋
1.我有以下需求:



2.詳細的需求:
姓名:
單位:
電話:
郵件:
您還沒有登錄,請登陸,
如果您還沒有注冊,點擊這里注冊.
  • 網(wǎng)友反饋
  • 趙先生 在2025/6/6 12:27:00留言
  • 留言類型:得到貴公司產(chǎn)品詳細資料,得到貴公司產(chǎn)品的價格信息,貴公司產(chǎn)品銷售人員聯(lián)系我,貴公司技術支持人員聯(lián)系我,
  • 詳細留言:我需要向貴公司咨詢相關合作內(nèi)容。采購貴公司產(chǎn)品
  • 老黃牛 在2025/6/3 16:30:00留言
  • 留言類型:得到貴公司產(chǎn)品詳細資料,得到貴公司產(chǎn)品的價格信息,貴公司產(chǎn)品銷售人員聯(lián)系我,貴公司技術支持人員聯(lián)系我,
  • 詳細留言:力控EFORCECON V6.0
  • 李坊偉 在2025/5/22 16:32:00留言
  • 留言類型:我讓貴公司技術支持人員聯(lián)系我,
  • 詳細留言:鋼鐵行業(yè)數(shù)據(jù)采集
  • 在2024/11/15 13:54:00留言
  • 留言類型:我想得到貴公司產(chǎn)品的價格信息,我讓貴公司產(chǎn)品銷售人員聯(lián)系我,
  • 詳細留言:組態(tài)軟件
  • 金滔 在2024/10/24 10:04:00留言
  • 留言類型:我讓貴公司產(chǎn)品銷售人員聯(lián)系我,
  • 詳細留言:庫建設項目
更多請進入空間管理中心查看
關于我們 | 網(wǎng)站地圖 | 聯(lián)系我們
© 2003-2018    經(jīng)營許可編號:京ICP證120335號
公安機關備案號:110102002318  服務熱線:010-82053688
我要反饋