紫金桥实时数据库提供了一套完整的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:报警状态,包括未确认、确认、恢复。
|