环球电气之家-午夜精彩视频-中国专业电气电子产品行业服务网站!

產(chǎn)品分類

當(dāng)前位置: 首頁 >

類型分類:
科普知識(shí)
數(shù)據(jù)分類:

基于LNS的LonWorks網(wǎng)絡(luò)數(shù)據(jù)監(jiān)控接口開發(fā)

發(fā)布日期:2022-04-18 點(diǎn)擊率:85

  • 關(guān)鍵詞: VC++ LonWorks
  • 摘要:本文介紹了用Visual C++ 6.0開發(fā)工具,在LNS環(huán)境下,開發(fā)LonWorks網(wǎng)絡(luò)數(shù)據(jù)監(jiān)控接口的方法,舉例闡述了軟件實(shí)現(xiàn)過程。對(duì)于相關(guān)系統(tǒng)的設(shè)計(jì)、開發(fā)具有一定的參考價(jià)值。

1  引言
    近年來,現(xiàn)場總線技術(shù)迅猛發(fā)展,取代傳統(tǒng)的集中式控制系統(tǒng)已成必然。LonWorks技術(shù)是美國ECHELON公司在1991年推出的一種控制局域網(wǎng)絡(luò),它以其優(yōu)秀的分布處理能力、開放性、互操作性、多媒介適應(yīng)能力以及多網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)等特性適應(yīng)了未來發(fā)展對(duì)測控網(wǎng)絡(luò)的要求,成為眾多總線中的佼佼者。與其它現(xiàn)場總線相比,它具有組網(wǎng)方便,通訊速率快,不局限于通訊介質(zhì)等優(yōu)點(diǎn)。目前其在國內(nèi)的應(yīng)用非常廣泛,工程實(shí)例遍及樓宇控制,智能小區(qū),工廠,礦井監(jiān)控等場合,是一種具有良好發(fā)展前景的總線。
2  LNS開發(fā)接口與開發(fā)工具
    LNS(LonWorks Network Services)是ECHELON提供的一個(gè)專為LonWorks網(wǎng)絡(luò)服務(wù)的網(wǎng)絡(luò)操作系統(tǒng)。LNS封裝了對(duì)LonWorks網(wǎng)絡(luò)的各種操作,如:網(wǎng)絡(luò)安裝、網(wǎng)絡(luò)維護(hù)、變量連接等。在Windows環(huán)境下,LNS提供了基于ActiveX和COM組件方式的開發(fā)接口。這兩種方式在功能和性能上都沒有什么差異,而ActiveX使用起來更為簡便,一般也不需要開發(fā)人員了解很多OLE方面的知識(shí),因而更易于被接受。本文所列舉的實(shí)例采用的就是ActiveX方式。
    采用ActiveX方式開發(fā)LonWorks網(wǎng)絡(luò)通信接口可選擇的開發(fā)工具十分豐富。Visual C++ 6.0目前仍然是開發(fā)自動(dòng)化軟件的主流工具之一。當(dāng)在VC環(huán)境下用ActiveX接口開發(fā)LonWorks網(wǎng)絡(luò)通信接口程序時(shí),在實(shí)現(xiàn)過程和方法上與其它語言差別不大。只是在一些與VC語言特性相關(guān)的環(huán)節(jié)上,如果處理不當(dāng),就會(huì)影響接口程序的健壯性、穩(wěn)定性。 
    LNS由LNS Server、LNS Object Server COM Component、Data Server和Network Interface幾個(gè)主要部分組成,提供了從網(wǎng)絡(luò)變量監(jiān)測到網(wǎng)絡(luò)管理和維護(hù)等完整的功能接口。在開發(fā)LonWorks網(wǎng)絡(luò)數(shù)據(jù)監(jiān)控接口程序時(shí),涉及的只是其中的數(shù)據(jù)監(jiān)控部分的功能。
3  LNS實(shí)現(xiàn)監(jiān)控的過程
   LNS提供了兩種網(wǎng)絡(luò)監(jiān)控方式,一種是監(jiān)控集(Monitor set)方式,一種是單點(diǎn)(Single point)方式。兩種方式都是以監(jiān)控點(diǎn)(Monitor points)為基本單位。一個(gè)監(jiān)控點(diǎn)對(duì)應(yīng)一個(gè)網(wǎng)絡(luò)變量或應(yīng)用消息。
    監(jiān)控集建立后就被保存在Data Sever中,即使應(yīng)用程序關(guān)閉也仍然存在。單點(diǎn)方式每次都需要應(yīng)用程序重新創(chuàng)建,退出時(shí)釋放。監(jiān)控集方式適用于監(jiān)控任務(wù)比較繁重的場合,單點(diǎn)方式適合監(jiān)控任務(wù)較輕,點(diǎn)數(shù)較多的情況。
   無論是監(jiān)控集或是單點(diǎn)方式,都要使用監(jiān)控點(diǎn)。監(jiān)控點(diǎn)有以下幾種監(jiān)控方式:顯式讀寫、隱式綁定、查詢、顯示綁定。
   對(duì)于顯式讀寫方式,接口程序可以直接讀寫監(jiān)控點(diǎn)的數(shù)值。在隱式綁定方式下,可以將一個(gè)監(jiān)控點(diǎn)與一個(gè)節(jié)點(diǎn)的網(wǎng)絡(luò)變量綁定,當(dāng)網(wǎng)絡(luò)變量變化時(shí),會(huì)用事件NvMonitorUpdateEvent通知接口程序,接口程序根據(jù)消息參數(shù)可以取得更新的數(shù)據(jù)。當(dāng)使用查詢方式時(shí),每隔一個(gè)周期就觸發(fā)一次NvMonitorUpdateEvent事件。當(dāng)使用顯式綁定方式時(shí),對(duì)應(yīng)設(shè)備結(jié)點(diǎn)的一個(gè)或多個(gè)網(wǎng)絡(luò)變量,要在上位機(jī)上創(chuàng)建并綁定一個(gè)網(wǎng)絡(luò)變量,而這個(gè)網(wǎng)絡(luò)變量又可以用其它三種方式進(jìn)行監(jiān)控。這種方式主要為了實(shí)現(xiàn)用一個(gè)監(jiān)控點(diǎn)同時(shí)監(jiān)測多個(gè)結(jié)點(diǎn)網(wǎng)絡(luò)變量。
   這幾種方式分別適用于不同的場合。查詢方式適用于監(jiān)控任務(wù)繁重,但對(duì)數(shù)據(jù)采集的實(shí)時(shí)性要求不高的場合。隱式綁定適用于監(jiān)控任務(wù)較輕,但數(shù)據(jù)變化要求實(shí)時(shí)處理的場合。當(dāng)現(xiàn)場數(shù)據(jù)變化頻繁時(shí),用顯式讀寫或查詢方式會(huì)導(dǎo)致應(yīng)用程序的運(yùn)行速度緩慢。
    本文列舉的實(shí)例采用的是監(jiān)控集方式,監(jiān)控點(diǎn)采用的是隱式綁定方式以獲得較好的實(shí)時(shí)性和較高的效率。
4  接口程序的設(shè)計(jì)與實(shí)現(xiàn)
    在安裝了Echelon的LNS Application Developers Kit開發(fā)包之后,就可以使用開發(fā)包中提供的lnsobjectserver控件了。最簡單的方法是在一個(gè)對(duì)話框資源上插入這個(gè)控件,然后用這個(gè)對(duì)話框創(chuàng)建一個(gè)類,將創(chuàng)建監(jiān)測集、獲取監(jiān)控點(diǎn)數(shù)據(jù)等各種操作全都封裝在這個(gè)類里,以供接口程序的其它模塊調(diào)用。本文實(shí)例中創(chuàng)建了一個(gè)名為CObjServerDlg的類。這個(gè)類提供實(shí)現(xiàn)以下幾個(gè)最主要的接口。
1)、對(duì)LNS對(duì)象服務(wù)器進(jìn)行初始化的接口。
在這個(gè)接口時(shí)里,具體實(shí)現(xiàn)的內(nèi)容包括:
設(shè)置對(duì)象服務(wù)的用戶模式(單用戶或多用戶);
設(shè)置遠(yuǎn)程或本地方式;
打開服務(wù)器;
設(shè)置網(wǎng)絡(luò)接口,打開網(wǎng)絡(luò);
設(shè)置系統(tǒng);
設(shè)置網(wǎng)絡(luò)服務(wù)設(shè)備;
打開系統(tǒng);
設(shè)置通道;
得到監(jiān)控集對(duì)象;
設(shè)置監(jiān)控集的屬性;
獲得包含要監(jiān)控的網(wǎng)絡(luò)變量的設(shè)備對(duì)象;
將要監(jiān)控的網(wǎng)絡(luò)變量添加到監(jiān)控點(diǎn)中;
打開監(jiān)控集。
    調(diào)用lnsobjectserver控件方法可以逐步實(shí)現(xiàn)上述初始化過程。需要注意的是VC對(duì)異常情況的處理,不進(jìn)行異常或處理不當(dāng)會(huì)導(dǎo)致接口程序出現(xiàn)各種莫名錯(cuò)誤。下面舉例說明:
void CObjServerDlg::InitObjServer()
{
        m_ObjSvr.SetRemoteFlag(FALSE);
        m_ObjSvr.SetSingleUserMode(FALSE);
        m_ObjSvr.Open();
        if (!m_ObjSvr.GetIsOpen())
        {
                ShowEvent("創(chuàng)建LNS Server失敗!");
                return;
        }
        //設(shè)置網(wǎng)絡(luò)
        LcaNetworks Networks(m_ObjSvr.GetNetworks());
    try
        {
                //在獲取網(wǎng)絡(luò)對(duì)象時(shí)要捕獲異常
                m_ActiveNetwork = Networks.GetItem(COleVariant(m_csNetworkName));
            ASSERT (m_ActiveNetwork.m_lpDispatch != NULL);
        }
        catch (COleDispatchException *pE)
        {
                //對(duì)異常的正確處理
                if (LCA_ERR_RANGE_START+LCA_OBJECT_NOT_FOUND ==
                                                                        pE->m_scError + OLE2LNS_CONVERSION)
                {
                        CString csEvent;
                        csEvent.Format("網(wǎng)絡(luò)%s不存在!", m_csNetworkName);
                        ShowEvent(cs);
                }
                else
                        ShowEvent(pE->m_strDescription);
                pE->Delete();
                return;
        }
        ......
        //其它部分代碼
}
2)、處理NvMonitorUpdateEvent事件消息。當(dāng)網(wǎng)絡(luò)變量變化時(shí),LNS會(huì)發(fā)送NvMonitorUpdateEvent消息通知接口程序。在這個(gè)消息函數(shù)中會(huì)將數(shù)值變化的監(jiān)控點(diǎn)、數(shù)據(jù)點(diǎn)、源地址以參數(shù)的形式傳遞過來。通過這些參數(shù)可以獲取變化數(shù)據(jù)的原始值和格式化值。這里需要注意的是如果LNS用的是VT_BSTR格式傳值,在獲取變化的數(shù)值后,必須正常釋放資源。否則接口程序就會(huì)持續(xù)不斷地占用系統(tǒng)內(nèi)存,直至內(nèi)存耗盡。下面舉例說明:
//  將格式化的變化值賦給一個(gè)VARIANT型變量
VARIANT NvFmtValue = UpdateDataPoint.GetFormattedValue();       
if (NvFmtValue.vt == VT_BSTR)
{
                CString csNvFmtValue = NvFmtValue.bstrVal;
                ShowVaule(csNvFmtValue);
                SysFreeString(NvFmtValue.bstrVal);        // 必須正確釋放內(nèi)存資源
}
3)、實(shí)現(xiàn)對(duì)監(jiān)控點(diǎn)進(jìn)行寫操作的接口。
    寫操作和讀操作的過程一樣,也涉及使用原始數(shù)值格式和格式化數(shù)值格式的選擇。
按照格式化數(shù)值格式進(jìn)行寫入時(shí)過程比較簡單,示例代碼如下:
LcaDataPoint DataPoint = NvMonitorPoint.GetDataPoint();//得到要寫入的數(shù)據(jù)點(diǎn)對(duì)象
ASSERT(DataPoint.m_lpDispatch != NULL);
DataPoint.SetFormattedValue(COleVariant(csWriteData));
                //csWriteData是一個(gè)CString類型的變量,代表寫入的數(shù)值
    如果按照原始格式進(jìn)行寫操作,要注意的是LNS要求使用一種“VT_ARRAY | VT_UI1”型的VARIANT變量作為寫入值,示例代碼如下:
LcaDataPoint DataPoint = NvMonitorPoint.GetDataPoint();//得到要寫入的數(shù)據(jù)點(diǎn)對(duì)象
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)絡(luò)數(shù)據(jù)監(jiān)控接口的方法。并結(jié)合VC編程語言的特點(diǎn),著重說明在一些關(guān)鍵環(huán)節(jié)上的處理方法??蔀槠渌O(shè)計(jì)、開發(fā)相關(guān)系統(tǒng)的開發(fā)人員提供參考。
  
參考文獻(xiàn)
[1]  ECHELON公司。LNS for Windows Programmers Guide,2000。
[2]  雷剛,呂國強(qiáng)?;贚NS和COM的LonWorks網(wǎng)絡(luò)監(jiān)控軟件開發(fā)
  



下一篇: PLC、DCS、FCS三大控

上一篇: 索爾維全系列Solef?PV

推薦產(chǎn)品

更多
主站蜘蛛池模板: 南京租车,南京汽车租赁,南京包车,南京会议租车-南京七熹租车 | 钢托盘,铁托盘,钢制托盘,镀锌托盘,饲料托盘,钢托盘制造商-南京飞天金属13260753852 | 冷油器,取样冷却器,热力除氧器-连云港振辉机械设备有限公司 | 福兰德PVC地板|PVC塑胶地板|PVC运动地板|PVC商用地板-中国弹性地板系统专业解决方案领先供应商! 福建成考网-福建成人高考网 | 耐酸碱泵-自吸耐酸碱泵型号「品牌厂家」立式耐酸碱泵价格-昆山国宝过滤机有限公司首页 | 对照品_中药对照品_标准品_对照药材_「格利普」高纯中药标准品厂家-成都格利普生物科技有限公司 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库 | 干粉砂浆设备-干粉砂浆生产线-干混-石膏-保温砂浆设备生产线-腻子粉设备厂家-国恒机械 | PVC地板|PVC塑胶地板|PVC地板厂家|地板胶|防静电地板-无锡腾方装饰材料有限公司-咨询热线:4008-798-128 | 精密光学实验平台-红外粉末压片机模具-天津博君 | 多功能真空滤油机_润滑油全自动滤油机_高效真空滤油机价格-重庆润华通驰 | 无锡网站建设_小程序制作_网站设计公司_无锡网络公司_网站制作 | 数控车床-立式加工中心-多功能机床-小型车床-山东临沂金星机床有限公司 | 重庆私家花园设计-别墅花园-庭院-景观设计-重庆彩木园林建设有限公司 | 立式矫直机_卧式矫直机-无锡金矫机械制造有限公司 | EDLC超级法拉电容器_LIC锂离子超级电容_超级电容模组_软包单体电容电池_轴向薄膜电力电容器_深圳佳名兴电容有限公司_JMX专注中高端品牌电容生产厂家 | 鲸鱼视觉 -数字展厅多媒体互动展示制作公司 | 磁力加热搅拌器-多工位|大功率|数显恒温磁力搅拌器-司乐仪器官网 | 水冷散热器_水冷电子散热器_大功率散热器_水冷板散热器厂家-河源市恒光辉散热器有限公司 | 活性氧化铝|无烟煤滤料|活性氧化铝厂家|锰砂滤料厂家-河南新泰净水材料有限公司 | 智能风向风速仪,风速告警仪,数字温湿仪,综合气象仪(气象五要素)-上海风云气象仪器有限公司 | 北京森语科技有限公司-模型制作专家-展览展示-沙盘模型设计制作-多媒体模型软硬件开发-三维地理信息交互沙盘 | 机械加工_绞车配件_立式离心机_减速机-洛阳三永机械厂 | 高温热泵烘干机,高温烘干热泵,热水设备机组_正旭热泵 | 河南中整光饰机械有限公司-抛光机,去毛刺抛光机,精密镜面抛光机,全自动抛光机械设备 | 奇酷教育-Python培训|UI培训|WEB大前端培训|Unity3D培训|HTML5培训|人工智能培训|JAVA开发的教育品牌 | 上海新光明泵业制造有限公司-电动隔膜泵,气动隔膜泵,卧式|立式离心泵厂家 | sus630/303cu不锈钢棒,440C/430F/17-4ph不锈钢研磨棒-江苏德镍金属科技有限公司 | 广西绿桂涂料--承接隔热涂料、隔音涂料、真石漆、多彩仿石漆等涂料工程双包施工 | 全自动过滤器_反冲洗过滤器_自清洗过滤器_量子除垢环_量子环除垢_量子除垢 - 安士睿(北京)过滤设备有限公司 | 传动滚筒_厂家-淄博海恒机械制造厂 | 大通天成企业资质代办_承装修试电力设施许可证_增值电信业务经营许可证_无人机运营合格证_广播电视节目制作许可证 | 压接机|高精度压接机|手动压接机|昆明可耐特科技有限公司[官网] 胶泥瓷砖胶,轻质粉刷石膏,嵌缝石膏厂家,腻子粉批发,永康家德兴,永康市家德兴建材厂 | 粘度计维修,在线粘度计,二手博勒飞粘度计维修|收购-天津市祥睿科技有限公司 | 爱德华真空泵油/罗茨泵维修,爱发科-比其尔产品供应东莞/杭州/上海等全国各地 | 【星耀裂变】_企微SCRM_任务宝_视频号分销裂变_企业微信裂变增长_私域流量_裂变营销 | 干洗加盟网-洗衣店品牌排行-干洗设备价格-干洗连锁加盟指南 | 物流公司电话|附近物流公司电话上门取货| 深圳市宏康仪器科技有限公司-模拟高空低压试验箱-高温防爆试验箱-温控短路试验箱【官网】 | 气象监测系统_气象传感器_微型气象仪_气象环境监测仪-山东风途物联网 | 环氧铁红防锈漆_环氧漆_无溶剂环氧涂料_环氧防腐漆-华川涂料 | 美国PARKER齿轮泵,美国PARKER柱塞泵,美国PARKER叶片泵,美国PARKER电磁阀,美国PARKER比例阀-上海维特锐实业发展有限公司二部 |