// rdb4api.h  For vc6,vc7,vc8,vc9,vc10 X86/X64
#ifndef I_RDB4API_H_
#define I_RDB4API_H_

//////////////////////////////////////////////////////////////////////////
//规范数据类型
typedef char				T_I8;
typedef unsigned char		T_U8;

typedef short int			T_I16;
typedef unsigned short int	T_U16;

typedef int					T_I32;
typedef unsigned int		T_U32;

typedef __int64				T_I64;
typedef unsigned __int64	T_U64;

typedef float				T_F32;
typedef double				T_F64;

typedef	T_I64				T_TIME;// 64位时标，精确到100毫，自1970-1-1开始的100毫秒数 = time_t * 10

typedef void*				T_PARAM;  //回调函数参数
typedef void*				TBHANDLE; //对象句柄

//////////////////////////////////////////////////////////////////////////
//数据类型
#define DT_VOID			0	//空类型
#define DT_DIGITAL		1	//开关量,也是4字节整数		
#define DT_INT32		2	//4字节整数
#define DT_FLOAT32		3	//4字节浮点数
#define DT_INT64		4	//8字节整数
#define DT_FLOAT64		5	//8字节浮点数
#define DT_STRING		6	//字符串
#define DT_BLOB			7	//二进制数据块

//////////////////////////////////////////////////////////////////////////
//标签类型
#define	TAGTYPE_NONE	0	//无类型

//////////////////////////////////////////////////////////////////////////
//标签分类
#define TGCLS_DEC		0	//现场设备标签
#define TGCLS_DEFINE	1	//定义标签(手工标签)
#define TGCLS_PRESET	2	//预处理标签
#define TGCLS_CURVE		3	//曲线标签

//压缩方式
#define TA_COMPNO		0	//不压缩
#define TA_COMPPER		1	//百分比精度压缩
#define TA_COMPVAL		2	//绝对值精度压缩

//////////////////////////////////////////////////////////////////////////
//数据质量
#define QA_OK			0	//质量
#define QA_SHUTDOWN		1   //关机,数据不可靠
#define QA_ERRDATA		2	//数据无效
#define QA_NOTAG		3	//无此标签
#define QA_ERRTIME		4	//错误的时标

//////////////////////////////////////////////////////////////////////////
//权限定义
#define OPT_POW_READ	0x00000001  //读取数据
#define OPT_POW_WRITE	0x00000002  //写数据
#define OPT_POW_WTAG	0x00000004  //写标签
#define OPT_POW_MAN     0x00000008  //账号管理
#define OPT_POW_CTRL	0x00000010	//控制权限

#define OPT_POW_MANAGER 0xFFFFFFFF  //管理员组

//////////////////////////////////////////////////////////////////////////
//错误码 
// 0x00  开始为通用错误码
#define SE_OK				0x00	//成功
#define SE_ERR				0x01	//错误
#define SE_EXP				0x10	//表达式错误
#define SE_EXPVAR			0x11	//表达式引用变量错误
#define SE_EXPVAROVER		0x12	//表达式引用变量太多，最多允许4个
#define SE_NOTCONNECT		0x1F	//没有连接

// 0x20 开始为权限管理错误码
#define OPT_OK				0		//成功
#define OPT_NOACTOR			0x20	//无此角色
#define OPT_NOUSER			0x21	//无此账号
#define OPT_PASSERR			0x22	//密码错误
#define OPT_NOPOWER			0x23	//无此权限
#define OPT_USEREXIST		0x24	//账号重复
#define OPT_ACTOREXIST		0x25	//角色重复
#define OPT_ACTORUSE		0x26	//角色正在使用
#define OPT_NOLOGIN			0x27	//没有登录
#define OPT_NOTACTIVE		0x28	//账号冻结
#define OPT_OPTFULL			0x29	//账号满
#define OPT_ACTFULL			0x2A	//角色满

// 0x30 开始为标签管理错误码
#define SE_TG_NOTAG			0x30	//无此标签
#define SE_TG_TAGFULL		0x31	//标签满
#define SE_TG_NOARCHIVE		0x32	//不归档

// 0x40 开始为数据错误码 
#define SE_DA_TIME			0x40	//时标错误
#define SE_DA_TYPE			0x41	//类型错误
#define SE_DA_QA			0x42	//质量错误
#define SE_DA_NODATA		0x43	//无数据

// 0x50 开始为卷管理错误码
#define VOL_OK				0		//成功
#define VOL_ERR				0x51	//失败
#define VOL_VOLFLAG			0x52	//不是本库的卷,卷和库不对应
#define VOL_VOLERR			0x53	//卷错误,一般是卷损坏或者不是卷文件
#define VOL_FILE			0x54	//文件操作失败

// 0x60 开始的为控制错误码
#define CTRL_OK				0		//成功
#define CTRL_ERRARG			0x61	//参数错误
#define CTRL_NODEC			0x62	//无此设备错误
#define CTRL_NOTAG			0x63	//无此标签错误
#define CTRL_ERRWRITE		0x64	//不能写
#define CTRL_TIMEOUT		0x65	//超时
#define CTRL_COMERR			0x66	//通讯错误
#define CTRL_DRVCTRLERR		0x67	//驱动控制失败
#define CTRL_DECSTOP		0x68	//设备没运行
#define CTRL_DECNOTSUPPORT	0x69	//设备不支持写
#define CTRL_DATAERR		0x70	//数据错误

// SOE错误码
#define SOE_ERR_OK			0			//成功
#define SOE_ERR_ERR			1			//失败
#define SOE_ERR_END			SE_DA_NODATA//无记录
#define SOE_ERR_TIME		SE_DA_TIME	//时标错误
#define SOE_ERR_RSET		0x81		//错误的记录集
#define SOE_ERR_RSETFULL	0x82		//记录集满
#define SOE_ERR_RSETARG		0x83		//记录集参数错误
#define SOE_ERR_RSETEXP		SE_EXP		//表达式错误

//系统错误
#define SRV_FRMNOOD			0xFF	//无此命令
#define SRV_FRMERR			0xFE	//报文错误
#define SRV_DBVER			0xFD	//API和实时库版本不一致
#define SRV_DEMOOVER		0xFC	//试用过期,拒绝读取数据服务

//////////////////////////////////////////////////////////////////////////
//卷状态
#define VOL_ST_OK			0			//正常状态,即打开
#define VOL_ST_OFF			1			//卸载状态,不管是否有此文件,卸载状态不能访问。
#define VOL_ST_DEL			2			//删除状态
#define VOL_ST_NOTPRJ		3			//非本工程卷
#define VOL_ST_ERRTIME		4			//时间错误卷
#define VOL_ST_ERRVOL		5			//不能打开的错误卷

//////////////////////////////////////////////////////////////////////////
//标签导入策略,某位有效表示需要修改该项
#define TAG_MASK_DES		0x0001	//名称
#define TAG_MASK_UNIT		0x0002	//描述
#define TAG_MASK_COMPEXC	0x0008	//压缩属性
#define TAG_MASK_TAGTYPE	0x0010	//标签类型
#define TAG_MASK_ARCHIVE	0x0020	//归档
#define TAG_MASK_VDIGITS	0x0040	//显示精度
#define TAG_MASK_STEP		0x0080	//梯形插值
#define TAG_MASK_LIMIT		0x0100	//上下限值
#define TAG_MASK_BKSYN		0x0200	//同步标签

//////////////////////////////////////////////////////////////////////////
//标签导入结果
#define TAGIN_NOTMODIFY		0		//标签未修改
#define TAGIN_MODIFY		1		//标签修改
#define TAGIN_ADD			2		//标签添加

//////////////////////////////////////////////////////////////////////////
//基本类型标签指定方式读取历史断面数据用方式
#define ATTIME_AFTER		1		//之后
#define ATTIME_BEFORE		(-1)	//之前

//////////////////////////////////////////////////////////////////////////
//可变长度标签读取历史用
#define VAR_CUR				1		//当前时标处
#define VAR_AFTER			2		//当前之后一条
#define VAR_DEFAULT			(VAR_CUR | VAR_AFTER) //当前或之后一条

//////////////////////////////////////////////////////////////////////////
//时标限制
#define TOM_MIN_TIME		12623040000L  //最小时间, GMT 2010-1-1 0:0:0 主要是防止卷表超过限制
#define TOM_MAX_TIME		119916288000L //最大时间, GMT 2350-1-1 0:0:0 主要是防止卷表超过限制

//////////////////////////////////////////////////////////////////////////
#define TOMTAG_RESBYTE  44
//标签属性 rdb_4
typedef struct t_tomtag
{
	T_U32	uid;			//标签ID

	T_I8	cdatatype;		//数据类型
	T_I8	ctagtype;		//标签类型,没有使用,填写TAGTYPE_NONE,可有客户端自定义。
	T_I8	ccomptype;		//压缩类型
	T_I8	cres;			//保留

	T_F32	fcompval;		//压缩精度
	T_I8	sname[80];		//标签名
	T_I8	sdes[80];		//描述
	T_I8	sunit[16];		//工程单位

	T_I8	cdigits;		//小数位数，-20  到  10  ; >0 小数位数，小于0，有效位数
	T_I8	cclass;			//分类,默认TGCLS_DEC
	T_I8	cstep;			//梯形插值,1梯形，0线性
	T_I8	carchive;		//存盘,1存盘，0不存

	T_F32   fdnval;			//下限
	T_F32	fupval;			//上限

	//例外参数
	T_F32	fexcdev;		//列外偏差,如果是百分比，则和百分比压缩意义相同
	T_I16	snexcmin;		//最小例外偏差时间(单位秒)
	T_I16	snexcmax;		//最大例外偏差时间(单位秒)

	//压缩周期定义
	T_I16	sncompmin;		//最小压缩周期(单位秒)
	T_I16	sncompmax;		//最大压缩周期(单位秒)

	//下面是保留字节，清零
	T_U8	sres[TOMTAG_RESBYTE];	//保留

}T_TOMTAG,*LPTOMTAG;		//sizeof() = 256

//////////////////////////////////////////////////////////////////////////
//基本数据类型标签值 rdb_4
typedef struct t_baseval{
	T_TIME	time;		//GMT时标,从1970年1月1日开始的100毫秒数
	union 	
	{
		T_I32  	i32;	//存储didital、int32
		T_F32  	f32;	//存储float32
		T_I64	i64;	//存储int64
		T_F64 	f64;	//存储float64
		T_U64	u64;	//存储64位整数
	};
	T_I8	cvt;		//类型
	T_I8	cqa;		//质量
	T_I8	cerr;		//错误码
	T_I8	cres;		//保留
	T_U32	unres;		//保留
}T_BASEVAL,*PBASEVAL;  //sizeof() = 24

//////////////////////////////////////////////////////////////////////////
//命名基本数据类型标签值
typedef struct t_namebaseval{
	char sname[80];
	T_BASEVAL val;
}T_NAMEBASEVAL,*PNAMEBASEVAL; // sizeof = 104

//////////////////////////////////////////////////////////////////////////
//基本数据类型统计值
typedef struct t_sumval     //统计值 rdb_4
{
	T_TIME		times;	//开始时间
	T_TIME		timee;	//结束时间
	T_I32		lrecs;	//记录条数,指统计时间段内的样本值记录条数
	T_I32		lres;	//保留
	T_F64		dblavg;	//平均值
	T_F64		dblsum;	//累计值
	T_BASEVAL	tmin;	//最小值记录
	T_BASEVAL	tmax;	//最大值记录
}TSUMVAL,*LPSUMVAL; //sizeof() = 88

//////////////////////////////////////////////////////////////////////////
//变长类型标签值,用于存储string和blob类型
#define MAX_VAR_LEN 1000  //最大变长类型的数据字节数
typedef struct  t_varval{
	T_TIME	time;			//时标GMT时标 
	
	T_U32	uobjtype;		//类型,用户自定义,可当检索条件
	T_U32   ures;			//以后扩展用,比如第2索引BATID

	T_I8	cvt;			//数据类型,DT_STRING,DT_BLOB
	T_I8	cqa;			//质量
	T_I8	cerr;			//错误码
	T_I8	cres;			//保留

	T_U16	usres;			//保留
	T_U16	uslen;			//数据长度，如果是字符串，则不包含结束符0

	T_I8	sdata[MAX_VAR_LEN];//变长数据类型
}T_VARVAL,*PVARVAL;  //sizeof() = 1024

typedef struct t_namevarval{
	char sname[80];
	T_VARVAL var;
}T_NAMEVARVAL,*PNAMEVARVAL; //sizeof() = 1104

//////////////////////////////////////////////////////////////////////////
//账号结构
typedef struct t_operator
{
	char	sname[16];		//用户名<=15字符
	T_U8	smd5pass[16];   //二进制的MD5加密后的密码
	char	sactor[16];		//角色名,内部表关联用
	char	sdes[80];		//描述
	T_I32	lbactive;		//是否活动,0不活动，1活动
	char	sres[28];		//保留
}T_OPERATOR,*LPOPERATOR;	//sizeof = 160

//////////////////////////////////////////////////////////////////////////
//角色结构
typedef struct t_optactor
{
	char	sname[16];		//角色名
	char	sdes[80];		//描述
	T_U32	dwpower;		//权限
	char	sres[28];		//保留
}T_OPTACTOR,*LPOPTACTOR;	//sizeof = 128

//////////////////////////////////////////////////////////////////////////
//数据卷记录结构
typedef struct t_volrec
{
	T_U32	m_volno;		//卷号,唯一的,4位年和2位月模式，比如201102
	T_I32	m_nstatus;		//状态
	char	m_sname[16];	//文件名
	T_I8	m_nrec[8];		//保留
}T_VOLREC,*PVOLREC;			//sizeof() = 32 ,卷记录不会删除，只会标记状态

//////////////////////////////////////////////////////////////////////////
typedef struct t_soe
{
	T_TIME	time;		//64位时标，精确到100毫，自1970-1-1开始的100毫秒数
	T_U32	uautokey;	//自动主键,解决时间相同的SOE事件主键冲突
	T_I32	type;		//事件类型,4字节有符号,(用户自定义,比如可定义越上限，越下限等)
	T_I16	argtype;	//事件参数格式，2字节带符号，<0 为基于字符串的格式，>0为基于2进制的格式。具体有用户定义,用于客户端解析参数。
	T_U16	arglen;		//参数长度(0-240)，基于字符串格式的长度不包括结尾的0。
	T_U32	ures;		//保留，填写0
	// 以上24字节
	char	source[80];	//事件来源，0结束的字符串，最多存储79字符，可填写标签名或者其他内容
	char	sdes[160];	//事件描述，0结束的字符串，最多存储79字节
	char	sarg[240];	//事件参数。根据argtype和arglen填写。
	char	sres[8];	//保留，清零
}T_SOE,*PSOE; // sizeof() = 512

typedef void (WINAPI *Enum_TagAttr)(LPTOMTAG ptags, T_I32 ntags, T_PARAM lparam); //枚举标签函数, lparam定义为T_PARAM类型,lparam在32位开发系统是32位，在64位开发系统是64位

/* 下面是导出接口函数定义,具体的动态调用方法见rdbapiwap.h/rdbapiwap.cpp
extern "C"
{
	//定义接口函数

		//管理和连接
	TBHANDLE __stdcall TB_Create();			//创建对象,返回对象句柄
	T_U32	__stdcall TB_Destory(TBHANDLE h);	//注销对象，注销后h不能再用
	T_U32	__stdcall TB_Connect(
			TBHANDLE h,				//in 句柄
			const char *sServerIP,	//in tom库 IP地址
			T_U16 wPort,				//in 服务端口，默认16088
			const char * lpszUser,		//in 用户账号
			const char * lpszPass		//in 密码
		);//连接
	T_U32	__stdcall TB_DisConnnect(TBHANDLE h);//断开连接
	T_U32	__stdcall TB_IsConnnect(TBHANDLE h,T_I32 *pret);//*pret回填 1表示已连接，0表示未连接

		//权限
	T_U32	__stdcall TB_OptAddAct(TBHANDLE h,LPOPTACTOR pa);
	T_U32	__stdcall TB_OptAddOpt(TBHANDLE h,LPOPERATOR po);
	T_U32	__stdcall TB_OptDelAct(TBHANDLE h,const char *sname);
	T_U32	__stdcall TB_OptDelOpt(TBHANDLE h,const char *sname);
	T_U32	__stdcall TB_OptModPass(TBHANDLE h,const char *sname,const char*soldpass,const char *snewpass);
	T_U32	__stdcall TB_OptGetActors(TBHANDLE h,T_OPTACTOR actors[],T_I32 nrecbufsize,T_I32 *pnacts); //取所有角色，最多20个
	T_U32	__stdcall TB_OptGetOperators(TBHANDLE h,T_OPERATOR opts[],T_I32 nrecbufsize,T_I32 *pnopts);//取所有账号，最多80个
		//标签
	T_U32	__stdcall TB_TagInport(
			TBHANDLE h,				//in 句柄
			T_U32 dwflag,			//in 策略
			LPTOMTAG ptag,			//in 标签属性,已名字为索引，uid不填写
			T_I32 *pnResult			//in/out 回填非0表示增加，0表示修改 
		);//导入一个标签,*pIsAdd非0表示是添加
	T_U32	__stdcall TB_TagGetAttr(
			TBHANDLE h,				//in 句柄	
			LPTOMTAG ptag			//in/out 输入时只填写标签名
		);//读取标签属性
	T_U32  __stdcall TB_TagDel(TBHANDLE h,const char *sname);//删除标签
	T_U32	__stdcall TB_TagQuery(
			TBHANDLE h,				//in 句柄
			const char* sname,		//名称过滤串
			const char* sdes,		//描述过滤串
			T_I32 ndatatype,		//数据类型，-1表示全部
			T_I32 ntagtype,			//标签类型,-1表示全部
			Enum_TagAttr pfun,		//回调函数
			T_PARAM lEnumparam			//回调函数的参数
		);//查询标签

		//数据
	T_U32	__stdcall TB_WriteReal(
			TBHANDLE h,				//in 句柄
			T_NAMEBASEVAL vals[],	//in/out 标签值结构数组
			T_I32 nvals				//个数
		);//写基本类型实时值
	T_U32	__stdcall TB_WriteRealVar(
			TBHANDLE h,				//in 句柄
			const char* sname,		//标签名
			char cdatatype,			//类型DT_STRING,DT_BLOB
			T_U32 uobjtype,			//对象类型,客户端自定义
			T_TIME ltime,			//时标
			char cqa,				//质量
			T_U8 *pdata,			//数据
			T_I32 nlen				//数据长度
		);
	T_U32	__stdcall TB_WriteHis(
			TBHANDLE h,				//in 句柄
			T_NAMEBASEVAL vals[],	//in/out 标签值结构数组
			T_I32 nvals				//个数
		); //写基本类型历史	
	T_U32	__stdcall TB_WriteHisVar(
			TBHANDLE h,				//in 句柄
			const char* sname,		//标签名
			char cdatatype,			//类型DT_STRING,DT_BLOB
			T_U32 uobjtype,			//对象类型,客户端自定义
			T_TIME ltime,			//时标
			char cqa,				//质量
			T_U8 *pdata,			//数据
			T_I32 nlen				//数据长度
		);
	T_U32 __stdcall TB_ReadReal(
			TBHANDLE h,				//in 句柄
			T_NAMEBASEVAL vals[],	//in/out 标签值结构数组,只填写标签名
			T_I32 nvals				//个数
		);//读基本类型实时值
	T_U32 __stdcall TB_ReadRealVar(
			TBHANDLE h,				//in 句柄
			const char* sname,		//in 标签名
			PVARVAL pval			//out 接收可变类型的缓冲区
		);//读可变类型实时
	T_U32 __stdcall TB_ReadRealVars(
			TBHANDLE h,
			T_NAMEVARVAL* pvars,
			T_I32 nvals
		);//读可变类型实时值多个

	T_U32	__stdcall TB_ReadHis(
			TBHANDLE h,				//in 句柄
			const char *sname,		// in 标签名
			T_TIME lts,				// in 开始时标
			T_TIME lte,				// in 结束时标
			T_TIME lds,				// in 间隔时间,秒0表示样本值
			T_I32  lflag,			// in 标志
			T_BASEVAL vals[],		// out 接收数据空间
			T_I32 nsize,			// in 空间大小
			T_I32 *pnrecs,			// out 实际记录数
			T_I32 *pnend			// out 是否结束，0表示还有数据，非0表示结束
		);
	T_U32	__stdcall TB_ReadHis_EX(
			TBHANDLE h,				//in 句柄
			T_NAMEBASEVAL vals[],	//in/out 标签值结构数组,只填写标签名
			T_TIME ltime,			//in 时标
			T_I32 nsize				//个数
		);//读多点历史数据
	T_U32  __stdcall TB_ReadHisVar(
			TBHANDLE h,				//in 句柄
			const char* sname,		//in 标签名
			T_TIME ltime,			//时标
			DWORD dwflag,			//标志 VAR_CUR,VAR_AFTER,VAR_DEFAULT之一
			PVARVAL pval			//out 接收可变类型的缓冲区
		);//取可变类型历史
	T_U32  __stdcall TB_GetHisSum(
			TBHANDLE h,				//in 句柄
			const char* sname,		//in 标签名
			T_TIME lts,				//in 开始时间
			T_TIME lte,				//in 结束时间
			PBASEVAL pMin,			//out 最小值和发生时间
			PBASEVAL pMax,			//out 最大值和发生时间
			T_F64 *pavg,			//out 平均值
			T_F64 *psum,			//out 累加值
			T_I32 *plrecs			//out 样本值记录个数
		);//读统计值

	T_U32  __stdcall TB_GetHisSumExp(
			TBHANDLE h,				//in 句柄
			const char* sname,		//in 标签名
			const char* sexp,		//in 表达式 < 500字符
			T_TIME lts,				//in 开始时间
			T_TIME lte,				//in 结束时间
			PBASEVAL pMin,			//out 最小值和发生时间
			PBASEVAL pMax,			//out 最大值和发生时间
			T_F64 *pavg,			//out 平均值
			T_F64 *psum,			//out 累加值
			T_I32 *plrecs			//out 样本值记录个数
		);//读统计值,带表达式
	

	T_U32  __stdcall TB_GetHisSum_EX(
			TBHANDLE h,				//in 句柄
			const char* sname,		//in 标签名
			T_TIME lts,				//in 开始时间
			T_TIME lte,				//in 结束时间
			T_TIME lds,				//in 分组时间(秒)，比如1小时就填写3600
			TSUMVAL groupvals[],	//out 分组统计值空间,调用前不用填写其内容
			T_I32 nbufsize,			//in 分组统计值空间大小，组数个数
			T_I32 *psize			//out 实际统计的组数
		);//读分组统计值,每次调用最大分组数512
	

	T_U32	__stdcall TB_QueryHisExp(
			TBHANDLE h,				//in 句柄
			const char *sname,		// in 标签名
			const char *sexp,		// in 表达式
			T_TIME lts,				// in 开始时标
			T_TIME lte,				// in 结束时标
			T_TIME lds,				// in 间隔时间,秒0表示样本值
			T_I32 lflag,			// in 标志
			T_BASEVAL vals[],		// out 接收数据空间
			T_I32 nsize,			// in 空间大小
			T_I32 *pnrecs,			// out 实际记录数
			T_I32 *pnend			// out 是否结束，0表示还有数据，非0表示结束
		);
	T_U32  __stdcall TB_CountHisExp(
			TBHANDLE h,				//in 句柄
			const char* sname,		//in 标签名
			const char *sexp,		//in 表达式
			T_TIME lts,				//in 开始时间
			T_TIME lte,				//in 结束时间
			T_TIME *pltime,			//out 时间值
			T_I32 *plrecs			//out 样本值记录个数
		);//读统计值
	T_U32 __stdcall TB_CountKstAct(
			TBHANDLE h,				//in 句柄
			const char *sname,		//in 标签名
			T_TIME lts,				//in 开始时间
			T_TIME lte,				//in 结束时间
			T_I32 nlval,			//in 分状态值，一般为0
			T_I32 nhval,			//in 合状态值，一般为1
			T_I32 *pnl2h,			//out 分到合的跳变次数
			T_I32 *pnh2l			//out合到分的跳变次数
		);//标签名开关动作统计

	T_U32 __stdcall TB_VolLoad(TBHANDLE h,T_I32 nvol);//加载卷
	T_U32 __stdcall TB_VolDown(TBHANDLE h,T_I32 nvol);//卸载卷
	T_U32 __stdcall TB_VolGetTab(TBHANDLE h,T_VOLREC precs[],T_I32 nbufsize,T_I32 *pnsize);//读取全部卷表

	T_U32 __stdcall TB_ctrl(
			TBHANDLE h,				//in 句柄
			const char* sip,		//in 目的地IP地址，指rdbdac的地址
			T_U16 wport,			//in 控制端口,指rdbdac的控制服务UDP端口
			const char* sdec,		//in 控制设备，指rdbdac中的设备名
			const char* stag,		//in 控制标签, 指rdbdac中设备的驱动标签名。
			T_I32 ndatatype,		//in 数据类型 DT_INT32等
			T_I32 ndatasize,		//in 控制数据的字节数,最大400字节
			unsigned char* pdata,	//in 控制数据
			T_U8 *pdrverrcode,		//out 回填驱动错误码，成功填写0，其他由驱动自己定义
			char sdrverrinfo[96],	//out 当pdrverrcode被回填有错误码时，sdrverrinfo回填驱动错误信息。
			T_I32 *pretdatasize,	//out 返回数据字节数
			T_U8 pretdata[400]		//out 返回数据
		); //控制

	T_U32 __stdcall TB_ReadOrigHis(
			TBHANDLE h,				//in 句柄
			T_NAMEBASEVAL vals[],	//in/out 标签值结构数组,只填写标签名
			T_TIME ltime,			//in 时标
			T_I32 nsize,			//in 个数
			T_I32 nflag				//in ATTIME_AFTER，ATTIME_BEFORE
			);//读多点历史数据样本值
	
		//SOE接口
	T_U32 __stdcall SOE_Write(
			TBHANDLE h,			//in 句柄
			T_SOE* psoe			//in SOE结构指针
			); // 写SOE,返回SOE错误码

	T_U32 __stdcall SOE_OpenRST(
			TBHANDLE h,			//in 句柄
			T_TIME ts,			//in 开始时标
			T_TIME te,			//in 结束时标
			char *sexp,			//in 查询表达式
			T_I32 *pnrst		//out 回填记录集号
			); //打开SOE记录集,成功打开后自动处于第一条位置处,返回SOE错误码

	T_U32 __stdcall SOE_GetNext(
			TBHANDLE h,			//in 句柄
			T_I32 nrst,			//in 记录集号
			T_SOE* psoe			//out soe结构
			); //读取下一个SOE,返回SOE错误码

	T_U32 __stdcall SOE_MoveFirst(
			TBHANDLE h,			//in 句柄
			T_I32 nrst			//in 记录集号
			); // 记录集游标移动到头部,返回SOE错误码

	T_U32 __stdcall SOE_CloseRST(
			TBHANDLE h,			//in 句柄
			T_I32 nrst			//in 记录集号
			); // 关闭记录集,返回SOE错误码

	T_U32 __stdcall SOE_ClearAllRST(
			TBHANDLE h			//in 句柄
			); // 关闭所有记录集,返回SOE错误码

}*/
#endif //I_RDB4API_H_