当前位置:自动化网>上海迅饶自动化科技有限公司门户>应用案例>C++开发BacnetIP主站程序

C++开发BacnetIP主站程序

发布时间:2014-03-18 18:19   类型:技术前沿   人浏览

这里要说的方法就是调用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、关闭程序释放创建的资源
最后还有几个辅助的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);

本文地址:http://ca800.com/apply/d_1nsq78b4sdd21_1.html

拷贝地址

版权声明:版权归中国自动化网所有,转载请注明出处!

留言反馈
  • 评价:

  • 关于:

  • 联系人:

  • 联系电话:

  • 联系邮箱:

  • 需求意向:

  • 验证码:

    看不清楚?

  • 在线咨询