C++開發BacnetIP主站程序 |
這里要說的方法就是調用Bacnet IP主站快速開發工具OMBacnetIPMaster.dll。 步驟1、引用頭文件和LiB文件 #Include "OM_BacnetIP_API.h" #pragma comment (lib, "OMBacnetIPMaster.lib") 把OMBacnetIPMaster.dll放到新建的VC++工程的同一個文件夾 步驟2、創建通道,通道管理所有的Bacnet屬性對象 void CBacnetDemoDlg::OnBtnCreateChannel() { UpdateData(TRUE); m_hChannel = CreateChannel(m_strIP, m_nPort); } 步驟3、創建要訪問的屬性對象。一些是訪問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、關閉程序釋放創建的資源 zui后還有幾個輔助的API函數,可以選擇性地使用。 具體的頭文件申明如下: typedef VOID (CALLBACK *ERRORHANDLERPROC)(LPCTSTR lpErrorMsg); typedef VOID (CALLBACK *ABORTHANDLERPROC)(LPCTSTR lpAbortMsg); typedef VOID (CALLBACK *REJECTHANDLERPROC)(LPCTSTR lpRejectMsg); #Ifdef __cplusplus extern "C" { #Endif //通道管理用于創建、修改、刪除通道。創建通道以后,才能創建Bacnet屬性對象 //創建一個通道對象只要是為了設置不同設備的IP地址和端口號。網絡超時等待時間默認是100毫秒 //同時管理通道下的Bacnet屬性對象 //參數 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對象管理,創建、修改、刪除 //參數 eObjType 為Bacent屬性對象的類型ID,譬如0表示 Analog Input,1表示Analog Output //參數 wInstanceNum 為指明哪一個對象,譬如要訪問Analog Input 1。則 nInstanceNum為1 //參數 ePropID 為要訪問屬性的ID,譬如當前值的屬性ID是85 //參數 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對象屬性值讀寫 //參數 eTegNumber 為Bacnet對象的Tag Number。也就是要寫的對象屬性的數據類型。當操作過ReadBacnet以后,這個參數可以為空。 //當只寫操作的時候,則需要用戶自己指明是什么數據類型。譬如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); //以下是輔助函數,可以選擇性使用 //設置寫操作的優先等級 BOOL OMOPCSVRAPI WINAPI SetBacnetPriority(HANDLE hBacnetObj, WORD wPriority); //返回Bacnet對象屬性的數據類型,一般用于寫操作 VARTYPE OMOPCSVRAPI WINAPI GetBacnetObjType(HANDLE hBacnetObj); //通信故障狀況回調函數 BOOL OMOPCSVRAPI WINAPI EnableErrorMsgNofity(ERRORHANDLERPROC fnCallback); |
相關產品
免責聲明
客服熱線: 13199863987
加盟熱線: 13199863987
媒體合作: 0571-87759945
投訴熱線: 0571-87759942
下載儀表站APP
Ybzhan手機版
Ybzhan公眾號
Ybzhan小程序