手機訪問更快捷
更多流量 更易傳播
隨時掌握行業(yè)動態(tài)
網(wǎng)絡(luò)課堂 行業(yè)直播
C++開發(fā)BacnetIP主站程序 |
這里要說的方法就是調(diào)用Bacnet IP主站快速開發(fā)工具OMBacnetIPMaster.dll。 步驟1、引用頭文件和LiB文件 #Include "OM_BacnetIP_API.h" #pragma comment (lib, "OMBacnetIPMaster.lib") 把OMBacnetIPMaster.dll放到新建的VC++工程的同一個文件夾 步驟2、創(chuàng)建通道,通道管理所有的Bacnet屬性對象 void CBacnetDemoDlg::OnBtnCreateChannel() { UpdateData(TRUE); m_hChannel = CreateChannel(m_strIP, m_nPort); } 步驟3、創(chuàng)建要訪問的屬性對象。一些是訪問Analog Output 1的當前值屬性。 void CBacnetDemoDlg::OnBtnBacnetObject() { if (m_hChannel && !m_hBacnetObj) { m_hBacnetObj = CreateBacnetObject(m_hChannel, OBJECT_ANALOG_OUTPUT, 1, PROP_PRESENT_VALUE); } } 步驟4、讀寫屬性對象的值 void CBacnetDemoDlg::OnBtnReadObject() { if (m_hBacnetObj && m_hBacnetObj) { VARIANT variant; VariantInit(&variant); BOOL bIsOK = ReadBacnetObject(m_hBacnetObj, &variant); m_strPV.Format("%f", variant.fltVal); VariantClear(&variant); UpdateData(FALSE); } } 寫1000到Analog Output 1 void CBacnetDemoDlg::OnBtnWriteObject() { if (m_hBacnetObj) { VARIANT variant; VariantInit(&variant); variant.vt = GetBacnetObjType(m_hBacnetObj); variant.fltVal = 1000; BOOL bIsOK = WriteBacnetObject(m_hBacnetObj, &variant); VariantClear(&variant); } } 步驟4、關(guān)閉程序釋放創(chuàng)建的資源 zui后還有幾個輔助的API函數(shù),可以選擇性地使用。 具體的頭文件申明如下: typedef VOID (CALLBACK *ERRORHANDLERPROC)(LPCTSTR lpErrorMsg); typedef VOID (CALLBACK *ABORTHANDLERPROC)(LPCTSTR lpAbortMsg); typedef VOID (CALLBACK *REJECTHANDLERPROC)(LPCTSTR lpRejectMsg); #Ifdef __cplusplus extern "C" { #Endif //通道管理用于創(chuàng)建、修改、刪除通道。創(chuàng)建通道以后,才能創(chuàng)建Bacnet屬性對象 //創(chuàng)建一個通道對象只要是為了設(shè)置不同設(shè)備的IP地址和端口號。網(wǎng)絡(luò)超時等待時間默認是100毫秒 //同時管理通道下的Bacnet屬性對象 //參數(shù) hChannel 為通道對象的句柄 HANDLE OMOPCSVRAPI WINAPI CreateChannel(LPCTSTR lpIP, WORD wPort, DWORD dwTimeOut =100); BOOL OMOPCSVRAPI WINAPI ConfigureChannel(HANDLE hChannel, LPCTSTR lpIP, WORD wPort, DWORD dwTimeOut=100); BOOL OMOPCSVRAPI WINAPI RemoveChannel (HANDLE hChannel); //Bacnet對象管理,創(chuàng)建、修改、刪除 //參數(shù) eObjType 為Bacent屬性對象的類型ID,譬如0表示 Analog Input,1表示Analog Output //參數(shù) wInstanceNum 為指明哪一個對象,譬如要訪問Analog Input 1。則 nInstanceNum為1 //參數(shù) ePropID 為要訪問屬性的ID,譬如當前值的屬性ID是85 //參數(shù) hBacnetObj 為Bacnet對象的句柄 HANDLE OMOPCSVRAPI WINAPI CreateBacnetObject(HANDLE hChannel, BACNET_OBJECT_TYPE eObjType, WORD wInstanceNum, BACNET_PROPERTY_ID ePropID = PROP_PRESENT_VALUE ); BOOL OMOPCSVRAPI WINAPI ConfigureBacnetObject(HANDLE hBacnetObj, BACNET_OBJECT_TYPE eObjType, WORD wInstanceNum, BACNET_PROPERTY_ID ePropID); BOOL OMOPCSVRAPI WINAPI RemoveBacnetObject (HANDLE hBacnetObj); // Bacnet對象屬性值讀寫 //參數(shù) eTegNumber 為Bacnet對象的Tag Number。也就是要寫的對象屬性的數(shù)據(jù)類型。當操作過ReadBacnet以后,這個參數(shù)可以為空。 //當只寫操作的時候,則需要用戶自己指明是什么數(shù)據(jù)類型。譬如Analog Output為4.也就是單精度浮點型。 BOOL OMOPCSVRAPI WINAPI ReadBacnetObject(HANDLE hBacnetObj, VARIANT *pValue); BOOL OMOPCSVRAPI WINAPI WriteBacnetObject(HANDLE hBacnetObj,VARIANT* pValue, BACNET_APPLICATION_TAG eTegNumber = BACNET_APPLICATION_TAG_NULL); //以下是輔助函數(shù),可以選擇性使用 //設(shè)置寫操作的優(yōu)先等級 BOOL OMOPCSVRAPI WINAPI SetBacnetPriority(HANDLE hBacnetObj, WORD wPriority); //返回Bacnet對象屬性的數(shù)據(jù)類型,一般用于寫操作 VARTYPE OMOPCSVRAPI WINAPI GetBacnetObjType(HANDLE hBacnetObj); //通信故障狀況回調(diào)函數(shù) BOOL OMOPCSVRAPI WINAPI EnableErrorMsgNofity(ERRORHANDLERPROC fnCallback); |
相關(guān)產(chǎn)品
免責聲明
客服熱線: 15267989561
加盟熱線: 15267989561
媒體合作: 0571-87759945
投訴熱線: 0571-87759942
下載儀表站APP
Ybzhan手機版
Ybzhan公眾號
Ybzhan小程序