万国企业网 » 新闻资讯 » 工业用品 » 工业机械&设备 » C++开发BacnetIP主站程序

C++开发BacnetIP主站程序

放大字体  缩小字体 发布日期:2014-05-07  浏览次数:94
这里要说的方法就是调用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);
 
 
[ 加入收藏 ]  [ 告诉好友 ]  [ 打印本文 ]  [ 违规举报 ]  [ 关闭窗口 ]
 
  • 联系人:陈 冲
  • 电话:021-58776098
  • 地址:上海市浦东新区金海路2588号上海交大金桥科技园1幢A区428室
  • 邮件:1210969140@qq.com
  • 手机:13564889340
  • 传真:021-20252795