// rdbapiwap.h 客户端API包装类 For vc6,vc7,vc8,vc9,vc10 X86/X64
#ifndef I_RDBAPIWAP_H_
#define I_RDBAPIWAP_H_
#include "rdb4cls.h"

//////////////////////////////////////////////////////////////////////////
// CTomApi 客户端Api包装类
#define MAX_ERR_MSG			256 //错误信息个数
#define MAX_ERRITEM_SIZE	80	//错误信息缓冲大小
class CRdbApi
{
	//定义接口函数

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

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

		//数据
	typedef T_U32	(__stdcall *iTB_WriteReal)(
			TBHANDLE h,				//in 句柄
			T_NAMEBASEVAL vals[],		//in/out 标签值结构数组
			T_I32 nvals				//个数
		);//写基本类型实时值
	typedef T_U32	(__stdcall *iTB_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				//数据长度
		);
	typedef T_U32	(__stdcall *iTB_WriteHis)(
			TBHANDLE h,				//in 句柄
			T_NAMEBASEVAL vals[],		//in/out 标签值结构数组
			T_I32 nvals				//个数
		); //写基本类型历史	
	typedef T_U32	(__stdcall *iTB_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				//数据长度
		);
	typedef T_U32	(__stdcall *iTB_ReadReal)(
			TBHANDLE h,				//in 句柄
			T_NAMEBASEVAL vals[],	//in/out 标签值结构数组,只填写标签名
			T_I32 nvals				//个数
		);//读基本类型实时值
	typedef T_U32  (__stdcall *iTB_ReadRealVar)(
			TBHANDLE h,				//in 句柄
			const char* sname,		//in 标签名
			PVARVAL pval			//out 接收可变类型的缓冲区
		);//读可变类型实时
	typedef T_U32 (__stdcall *iTB_ReadRealVars)(
			TBHANDLE h,
			T_NAMEVARVAL* pvars,
			T_I32 nvals
		);//读可变类型实时值多个
	typedef T_U32	(__stdcall *iTB_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表示结束
		);
	typedef T_U32	(__stdcall *iTB_ReadHis_EX)(
			TBHANDLE h,				//in 句柄
			T_NAMEBASEVAL vals[],	//in/out 标签值结构数组,只填写标签名
			T_TIME ltime,			//in 时标
			T_I32 nsize				//个数
		);//读多点历史数据
	typedef T_U32  (__stdcall *iTB_ReadHisVar)(
			TBHANDLE h,				//in 句柄
			const char* sname,		//in 标签名
			T_TIME ltime,			//时标
			DWORD dwflag,			//标志 VAR_CUR,VAR_AFTER,VAR_DEFAULT之一
			PVARVAL pval			//out 接收可变类型的缓冲区
		);//取可变类型历史
	typedef T_U32  (__stdcall *iTB_GetHisSum)(
			TBHANDLE h,				//in 句柄
			const char* sname,		//in 标签名
			T_TIME lts,				//in 开始时间
			T_TIME lte,				//in 结束时间
			PBASEVAL pMin,			//out 最小值和发生时间
			PBASEVAL pMax,			//out 最大值和发生时间
			double *pavg,			//out 平均值
			double *psum,			//out 累加值
			T_I32 *plrecs			//out 样本值记录个数
		);//读统计值

	typedef T_U32  (__stdcall *iTB_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 样本值记录个数
		);//读统计值,带表达式
	typedef T_U32  (__stdcall *iTB_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
	typedef T_U32	(__stdcall *iTB_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表示结束
		);
	typedef T_U32  (__stdcall *iTB_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 样本值记录个数
		);//读统计值
	typedef T_U32 (__stdcall *iTB_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合到分的跳变次数
		);//标签名开关动作统计

	typedef T_U32 (__stdcall *iTB_VolLoad)(TBHANDLE h,T_I32 nvol);//加载卷
	typedef T_U32 (__stdcall *iTB_VolDown)(TBHANDLE h,T_I32 nvol);//卸载卷
	typedef T_U32 (__stdcall *iTB_VolGetTab)(TBHANDLE h,T_VOLREC precs[],T_I32 nbufsize,T_I32 *pnsize);//读取全部卷表

	typedef T_U32 (__stdcall *iTB_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 返回数据
		); //控制

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

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

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

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

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

	typedef T_U32 (__stdcall *iSOE_ClearAllRST)(
			TBHANDLE h			//in 句柄
			); // 关闭所有记录集,返回SOE错误码
	
public:
	CRdbApi();
	virtual		~CRdbApi();
	char		m_szuser[MAX_PATH];//登录用户
protected:
	HINSTANCE	m_hinstLib;	//驱动库
	TBHANDLE	m_handel;	//句柄

	char		m_szDllFile[MAX_PATH];//DLL程序文件名(全路径,可不带路径);

	//接口
	iTB_Create			fiTB_Create;
	iTB_Destory			fiTB_Destory;
	iTB_Connect			fiTB_Connect;
	iTB_DisConnnect		fiTB_DisConnnect;
	iTB_IsConnnect		fiTB_IsConnnect;
	
	iTB_OptAddAct		fiTB_OptAddAct;
	iTB_OptAddOpt		fiTB_OptAddOpt;
	iTB_OptDelAct		fiTB_OptDelAct;
	iTB_OptDelOpt		fiTB_OptDelOpt;
	iTB_OptModPass		fiTB_OptModPass;
	iTB_OptGetActors	fiTB_OptGetActors;
	iTB_OptGetOperators fiTB_OptGetOperators;

	iTB_TagInport		fiTB_TagInport;
	iTB_TagGetAttr		fiTB_TagGetAttr;
	iTB_TagQuery		fiTB_TagQuery;
	iTB_TagDel			fiTB_TagDel;

	iTB_WriteReal		fiTB_WriteReal;
	iTB_WriteHis		fiTB_WriteHis;
	iTB_WriteRealVar	fiTB_WriteRealVar;
	iTB_WriteHisVar		fiTB_WriteHisVar;
	iTB_ReadReal		fiTB_ReadReal;
	iTB_ReadRealVar		fiTB_ReadRealVar;
	iTB_ReadRealVars	fiTB_ReadRealVars;
	iTB_ReadHis			fiTB_ReadHis;
	iTB_ReadHis_EX		fiTB_ReadHis_EX;
	iTB_ReadHisVar		fiTB_ReadHisVar;
	iTB_GetHisSum		fiTB_GetHisSum;
	iTB_GetHisSumExp	fiTB_GetHisSumExp;
	iTB_GetHisSum_EX	fiTB_GetHisSum_EX;

	iTB_QueryHisExp		fiTB_QueryHisExp;
	iTB_CountHisExp		fiTB_CountHisExp;
	iTB_CountKstAct		fiTB_CountKstAct;

	iTB_VolLoad			fiTB_VolLoad;
	iTB_VolDown			fiTB_VolDown;
	iTB_VolGetTab		fiTB_VolGetTab;

	iTB_ctrl			fiTB_ctrl; //控制接口
	
	iTB_ReadOrigHis		fiTB_ReadOrigHis;

	iSOE_Write			fiSOE_Write;
	iSOE_OpenRST		fiSOE_OpenRST;
	iSOE_GetNext		fiSOE_GetNext;
	iSOE_MoveFirst		fiSOE_MoveFirst;
	iSOE_CloseRST		fiSOE_CloseRST;
	iSOE_ClearAllRST	fiSOE_ClearAllRST;

	//错误代码信息
	char		m_serrmsg[MAX_ERR_MSG][MAX_ERRITEM_SIZE]; //错误信息
protected:
	void		InitErrMsg(); //初始化错误信息
public:
	BOOL		LoadDll(const char* lpszDllFile);//读入驱动
	void		FreeDrv();
	BOOL		IsConnect();//是否连接
	BOOL		GetErrMsg(T_U32 uerr,char sbuf[MAX_PATH]); //获取错误信息
	static		void GetPowStr(T_U32 dwpow,char sbuf[MAX_PATH]);//取权限字符串

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

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

	
		//数据
	T_U32		TB_WriteReal(
			T_NAMEBASEVAL vals[],	//in/out 标签值结构数组
			T_I32 nvals				//个数
		);//写基本类型实时值
	T_U32		TB_WriteHis(
			T_NAMEBASEVAL vals[],	//in/out 标签值结构数组
			T_I32 nvals				//个数
		);//写基本类型历史值
	T_U32		TB_WriteRealVar(
			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		TB_WriteHisVar(
			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		TB_ReadReal(
			T_NAMEBASEVAL vals[],		//in/out 标签值结构数组,只填写标签名,错误码在vals[i].cerr;
			T_I32 nvals				//个数
		);//读基本类型实时值
	T_U32  TB_ReadRealVar(
			const char* sname,		//in 标签名
			PVARVAL pval			//out 
		);//读可变类型实时
	T_U32  TB_ReadRealVars(
			T_NAMEVARVAL* pvars,	// in/out
			T_I32 nvals				// in 空间个数
		);//读可变类型实时值多个
	T_U32		TB_ReadHis(
			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	TB_ReadHis_EX(
			T_NAMEBASEVAL vals[],	//in/out 标签值结构数组,只填写标签名
			T_TIME ltime,			//in 时标
			T_I32 nsize				//个数
		);//读多点历史数据
	T_U32  TB_ReadHisVar(
			const char* sname,		//in 标签名
			T_TIME ltime,			//时标
			T_U32 dwflag,			//标志 VAR_CUR,VAR_AFTER,VAR_DEFAULT之一
			PVARVAL pval			//out 
		);//取可变类型历史
	T_U32  TB_GetHisSum(
			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  TB_GetHisSumExp(
			const char* sname,		//in 标签名
			const char *sexp,		//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  TB_GetHisSum_EX(
			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	TB_QueryHisExp(
			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  TB_CountHisExp(
			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  TB_CountKstAct(
			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 TB_VolLoad(T_I32 nvol);//加载卷
	T_U32 TB_VolDown(T_I32 nvol);//卸载卷
	T_U32 TB_VolGetTab(T_VOLREC precs[],T_I32 nbufsize,T_I32 *pnsize);//读取全部卷表

	T_U32 TB_ctrl(
			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 TB_ReadOrigHis(
			T_NAMEBASEVAL vals[],	//in/out 标签值结构数组,只填写标签名
			T_TIME ltime,			//in 时标
			T_I32 nsize,			//个数
			T_I32 nflag				//ATTIME_AFTER，ATTIME_BEFORE
		);//读多点历史数据样本值

	T_U32 SOE_Write(
			T_SOE* psoe			//in SOE结构指针
			); // 写SOE,返回SOE错误码

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

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

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

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

	T_U32 SOE_ClearAllRST(); // 关闭所有记录集,返回SOE错误码
};

#endif // I_RDBAPIWAP_H_
