产品推荐:水表|流量计|压力变送器|热电偶|液位计|冷热冲击试验箱|水质分析|光谱仪|试验机|试验箱


仪表网>技术中心>使用指南>正文

欢迎联系我

有什么可以帮您? 在线咨询

C++开发BacnetIP主站程序

来源:上海迅饶自动化科技有限公司   2013年08月06日 13:38  

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);

免责声明

  • 凡本网注明“来源:仪表网”的所有作品,均为浙江兴旺宝明通网络有限公司-仪表网合法拥有版权或有权使用的作品,未经本网授权不得转载、摘编或利用其它方式使用上述作品。已经本网授权使用作品的,应在授权范围内使用,并注明“来源:仪表网”。违反上述声明者,本网将追究其相关法律责任。
  • 本网转载并注明自其它来源(非仪表网)的作品,目的在于传递更多信息,并不代表本网赞同其观点或和对其真实性负责,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品第一来源,并自负版权等法律责任。
  • 如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。
联系我们

客服热线: 15267989561

加盟热线: 15267989561

媒体合作: 0571-87759945

投诉热线: 0571-87759942

关注我们
  • 下载仪表站APP

  • Ybzhan手机版

  • Ybzhan公众号

  • Ybzhan小程序

企业未开通此功能
详询客服 : 0571-87759942