技术中心

实时数据库ATL接口说明
    紫金桥实时数据库提供了一套完整的ATL接口,该ATL接口是一活动模板库。借助这些接口可以访问数据库中的实时数据、历史数据、统计数据、报警及系统配置信息。因为ATL接口是COM接口,您可以通过任何编程语言进行调用。使用该接口可以方便的与实时数据库进行通信。

下面以C++语言格式为例对其进行说明:

使用步骤如下:

  • 通过DbAtl.tlb倒入接口头文件。一般生成的头文件如下:

class IDataComm : public COleDispatchDriver

{

public:

IDataComm() {}// Calls COleDispatchDriver default constructor

IDataComm(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}

IDataComm(const IDataComm& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}

// Attributes

public:

// Operations

public:

void Open(LPCTSTR ServerAddress);

void Close();

};

  • 生成IdataComm接口对象,一般作为某个类的成员。
  • 创建接口CreateDispatch("DbAtl.DataComm.1")
  • 调用Open与数据库建立连接。
  • 调用各种接口函数与数据库通信。
  • 完成后调用Close
  • 释放接口ReleaseDispatch();

HRESULT Open(LPCTSTR ServerAddr);

说明:与服务器建立连接。在与数据库通信之前,必须调用该函数,关闭连接调用Close();

参数:ServerAddr:服务器IP地址,空表示本机。注意:数据库所在机器必须启动网络通信服务器Server。

HRESULT Close();

说明:断开与服务器的连接。在完成与数据库通信之后要调用该函数。

参数:无。

HRESULT GetDataDirect(LPCTSTR Name, BSTR* Data)

说明:

直接得到指定位号的当前值,而不必注册。该方法简单,但是效率较低,如果要周期性得到数据,请使用注册函数Register。

参数:

Name:点名。

Data:返回值。

HRESULT SetDataDirect(LPCTSTR Name, LPCTSTR Data)

说明:

直接设置指定位号的值,而不必注册。该方法简单,但是效率较低,如果要周期性得到数据,请使用注册函数Register。

参数:

Name:点名。

Data:要设定的值。

HRESULT Register(BSTR Tags, long Cycle)

说明:

注册位号。对于注册的位号,控件会自动更新其实时数据到本地,并且当其中任一数值改变时,将触发OnDataChanged方法。

参数:

Tags:位号列表,位号间以“,”分隔,如“FI1001.PV,FI1002.PV,FI1003.PV”。

Cycle: 查询周期,单位是毫秒。为0表示变化通知。

示例:

m_ctl.CreateDispatch("DbAtl.DataComm.1");

m_ctl.Open("");

m_ctl.Register("FI1001.PV, FI1002.PV,FI1003.PV,FI1004.PV,FI1005.PV", 0);

VARIANT var;

VariantInit(&var);

m_ctl.GetData("FI1001.PV", &var);

if(var.bstrVal)

{

CString cs(var.bstrVal);

TRACE("FI1001.PV=%s\r\n", cs);

if(var.bstrVal)

{

SysFreeString(var.bstrVal);

}

}

m_ctl.Close();

m_ctl.ReleaseDispatch();

其中:m_ctl.为ATL控件名称。

 HRESULT GetData(BSTR Tags, VARIANT* Data)

说明:

得到指定位号的值,

注意:只有在调用Register后才能调用该方法。

参数:

Tags:位号名称。

Data:返回的位号当前值。

HRESULT GetDataText(BSTR Tags, BSTR Text)

说明:

得到指定位号的文本值,该函数与上一函数类似,只是返回的数据类型为文本。

注意:只有在调用Register后才能调用该方法。

参数:

Tags:位号名称。

Text:返回的位号当前值。

HRESULT SetData(BSTR Tags, VARIANT Data)

说明:

设置指定位号的值,

注意:只有在调用Register后才能调用该方法。只有调用Commit后,才真的设置

到数据库,在调用Commit之前,数据值是记录在缓存中。

参数:

Tags:位号名称。

Data:要设置的位号当前值。

HRESULT Commit()

说明:

设置值提交到数据库,即将SetData在缓存中的值提交给数据库。

注意:只有在调用Register后才能调用该方法。

参数:无。

HRESULT InsertHisDataBegin(BSTR Name)

说明:

插入历史数据开始。调用该函数表示准备对指定的点Name插入历史数据,随后要调用InsertHisData,InsertHisDataEnd来插入数据。

参数:

Name:点名称。

HRESULT InsertHisData(DATE Time, long MilliSec, VARIANT Data)

说明:

插入历史数据。调用该函数插入一个数据,可以多次调用该函数来插入多个数据,最后调用InsertHisDataEnd来结束插入操作。

注意:

1)。调用该函数前必须先调用InsertHisDataBegin。

2)如果不调用InsertHisDataEnd插入的数据只是保存在缓冲区中,而没有提交到实时数据库。

示例:

为点“FI1001.PV”插入前1分钟的数据,每秒一个数据。

SYSTEMTIME sys;

GetLocalTime(&sys);

CTime ti(sys);

m_comm.InsertHisDataBegin(“FI1001.PV”);

for(int i = 0; i < 60; i++)

{

COleDateTime t1(time_t(ti.GetTime() - 60 + i));

VARIANT var;

var.vt = VT_R4;

var.fltVal = float(i);

m_comm.InsertHisData(t1, 0, var);

}

m_comm.InsertHisDataEnd();

其中:m_comm为ATL控件名称。

参数:

Time:历史数据所在时刻。

MilliSec: 历史数据所在时刻的毫秒数,范围0~999。

Data:要插入的数值。

HRESULT InsertHisEnd()

说明:

向数据库提交缓存中(由InsertHisData产生)的历史数据。如果不调用InsertHisDataEnd插入的数据将不会真正插入到实时数据库。

参数:无。

HRESULT GetAlarmLog(long AreaNo,long UnitNo,long Count)

说明:

得到实时报警记录。得到的记录保存在缓存中,可以通过GetAlarmLogData或GetAlarmLogText得到记录的具体信息。

参数

AreaNo, 区域序号,-1表示所有区域。

UnitNo:单元序号,-1表示所有单元。

Count:要取得的报警记录个数,-1:表示取得所有实时报警记录。

示例:

m_comm.GetAlarmLog(0, 0, 10);

long Count = 0;

GetAlarmLogCount(&Count);

for(int i = 0; i < Count; i++)

{

BSTR Text = NULL;

m_comm.GetAlarmLogText(i, &Text);

if(Text)

{

CString cs(Text);

TRACE(cs + "\r\n");

}

}

其中:m_comm为ATL控件名称。

STDMETHODIMP GetHisAlarmLog(DATE Date, long AreaNo, long UnitNo, long Count)

说明:

得到历史报警记录。得到的记录保存在缓存中,可以通过GetAlarmLogData或GetAlarmLogText得到记录的具体信息。

参数

Date:该项指定要得到哪天的历史记录。

AreaNo, 区域序号,-1表示所有区域。

UnitNo:单元序号,-1表示所有单元。

Count:要取得的报警记录个数,-1:表示取得所有实时报警记录。

示例:

参见实时报警记录。

HRESULT GetAlarmLogCount(long* Count)

说明:

得到由GetAlarmLog或GetHisAlarmLog返回的实时报警记录个数,该数可能小于要得到的报警记录数。

参数

Count:实际取得的报警记录个数。

HRESULT GetAlarmLogText(long Index, BSTR* Text)

说明:

得到报警记录。得到的记录记录在缓存中,可以通过GetAlarmLogData或GetAlarmLogText得到记录的具体信息。

参数

Index:索引号。范围0到Count(GetAlarmLog中参数)之间。

Text:返回的报警信息。

HRESULT GetAlarmLogData(long Index, DATE* Time,BSTR *Tag, BSTR *Comment, BSTR *Type, BSTR *Limit, BSTR *Val, BSTR *Stat)

说明:

得到报警记录。得到的记录记录在缓存中,可以通过GetAlarmLogData或GetAlarmLogText得到记录的具体信息。

参数

Index:索引号。范围0到Count(GetAlarmLog中参数)之间。

Time:报警发生的时间。

Tag:发生报警的位号名。

Comment:报警说明。

Type:报警类型,如高报、低报等。

Limit:报警限值。

Val:报警时的测量值。

Stat:报警状态,包括未确认、确认、恢复。

 
 
联系我们 | 网站地图 | 版权声明 | 公司主站
版权所有(C)2007 紫金桥软件技术有限公司实时数据库开发部
地址:北京市海淀区清华东路金码大厦B座705室  (100083)
电话:(010)82838301
E-mail:lizl@realinfo.com.cn