二次开发SDK安装

Navigation: »No topics above this level«

二次开发SDK安装

 Return to chapter overview

实时数据库提供二次开发SDK, 解压缩SDK包有lib库、头文件以及程序示例，目前二次开发支持的开发语言为C/C++、Java、C#和python。

SDK目录结构如下(假设路径为%iHDSDK_HOME%)：

/executable:该文件夹包含了所有需要的实时数据库动态链接库以及C#的log4net库；

/include:该文件夹下包含了C++开发所需要的所有头文件；

/library:该文件夹下包含了C++开发所需的lib库文件，和Java开发所需要的所有jar文件；

/samples:该文件夹下提供了示例程序，用户在开发之前可以参考该文件夹内容。

hs-caution

§JavaSDK支持1.7/1.8。

§C#SDK支持.NET Framework 4.0,开发工具VS2010。

§如果二次开发的程序不在%iHDSDK_HOME%\executable，那么环境变量Path中需要手动添加%iHDSDK_HOME%\executable路径才能加载动态库。

§C++工程编译使用VS2010需要SP1补丁。

§非windows系统仅支持C++和Java开发语言。

§SDK 安装包官网下载的都是基于windows 的，不同的操作系统需要不一样的SDK安装包，如有需要其他系统SDK安装包请联系支持人员。

§一般需要添加动态库路径到系统环境变量LD_LIBRARY_PATH。


C++

Navigation: »No topics above this level«

C++

 Return to chapter overview

API(Application Program Interface)应用程序接口是一组定义、程序与协议的集合，通过API接口实现计算机软件之间的相互通信。API的一个主要功能就是提供通用功能集。程序员通过使用API函数开发应用程序，从而可以避免编写无用程序，以减轻编程任务。

实时数据库对外接口以C++接口作为基础进行封装。


2.4接口升级说明

Navigation: C++ >

2.4接口升级说明

 Return to chapter overview

接口2.4升级到3.0，由于2.4是单机版、3.0是分布式版本，接口做了合并和修改,新的接口动态库名称为hdKingAPI。

1.统一的改动.

接口名称：为了尽量保持兼容性，新版本的接口名与旧版本的接口名基本保持一致，通过前缀插入’3’来表明是3.0版本的接口，例如连接从nt_connect改为nt3_connect，加点从pt_add_tag改为pt3_add_tag。

参数：参数前面都有一个宏来表明是输入参数还是输出参数，hd3_in表示输入，hd3_out表示输出。例如加点的接口

int32 pt3_add_tag(

hd3_in const HD3PtTagProp* pTagProp,

hd3_in const HD3Mask* pMask,

hd3_in const char* szDataNodeName，

hd3_out uint32* pnTagID

);

前3个参数表示输入，后1个参数表示输出，一目了然。这两个宏只起标示的作用，对于编译和运行没有任何影响。

2.连接和断开

老接口：int32 nt_connect(const char* szIP, uint16 nPort, HDHANDLE* pSrvHandle, int32 nTimeOutSec);

int32 nt_disconnect(HDHANDLE hServer);

新接口：int32 nt3_connect(hd3_in const HD3Connection* pInfo);

typedef struct {

char szAddress[HD3_LEN_ADDRESS * HD3_BASE];

uint16 nPort;

char szBakAddress[HD3_LEN_ADDRESS * HD3_BASE];

uint16 nBakPort;

int32 nTimeout;

}HD3Connection;

int32 nt3_disconnect();

说明：接口参数从分散的ip，端口，超时改为结构体，新增备机ip和备机端口，如果没有备机，备机信息不用填写。ip 和端口是3.0版本的配置中心所在的机器地址，默认端口号为5673。

老版本的接口返回连接句柄，其它的接口需要使用这个句柄，新版本中已经不需要了。

新版本的连接已经自动实现了重连的功能，调用者不用再编写保持重连的代码。

3. 点的配置

点的类型分为系统点，普通点，报警点，SPC报警点，统计点，计算点。其中系统点是ihd自动创建，其它类型的点提供接口增删查改。

4.1 新增点

老接口：int32 pt_add_tag(HDHANDLE hServer, const TagProp* pTagProp, int64 nPropMask);

新接口：int32 pt3_add_tag(

hd3_in const HD3PtTagProp* pTagProp,

hd3_in const HD3Mask* pMask,

hd3_in const char* szDataNodeName，

hd3_out uint32* pnTagID

);

点的结构体从TagProp 变为HD3PtTagProp，结构体的内容名称不变。

// Tag点掩码

typedef struct {

int64 nCommMask; // 公共属性的掩码

int64 nExtMask;

}HD3Mask;

掩码从int64的掩码修改为包含2个int64的掩码结构体。新的掩码包括点的基础掩码和点的扩展掩码，分别对应于点的基础属性和扩展属性，所有的掩码都定义在hd3MaskDefine.h中。

1）全属性掩码为 HD3M_ALL，表明调用者需要所有的属性

2）基本属性掩码 HD3M_COMM_PROP_XXX普通点，报警点，计算点，统计点的基本属性都用这些掩码

例如：名字掩码 HD3M_COMM_PROP_TAG_NAME

类型掩码HD3M_COMM_PROP_TAG_TYPE

3）普通点的扩展掩码 HD3M_PT_EXT_PROP_XXX, 普通点扩展属性只跟底层的数据采集相关，如采集器名称，设备名称，地址等。不使用iHD的OPC采集器，modbus采集器的用户不需要关系这些属性，扩展掩码赋值为0即可。

例如：采集器名 HD3M_PT_EXT_PROP_COLLECTOR_NAME

设备名 HD3M_PT_EXT_PROP_DEVICE_NAME

4)报警点的扩展掩码 HD3M_AM_EXT_PROP_XXX，报警点的扩展属性只与报警的产生确认恢复相关，如报警条件，报警源点，报警死区等。

例如：报警条件1 HD3M_AM_EXT_PROP_TEST1

报警源点：HD3M_AM_EXT_PROP_SOURCE_TAG

5)统计点的扩展掩码 HD3M_ST_EXT_PROP_XXX，统计点的扩展属性只与统计相关，如统计类型，统计取值方式，统计开始时间等。

例如：统计类型 HD3M_ST_EXT_PROP_STATS_TYPE

统计开始时间：HD3M_ST_EXT_PROP_SAMPLE_START_DATE

6)计算点的扩展掩码 HD3M_CA_EXT_PROP_XXX，计算点的扩展属性只与计算属性相关，如计算表达式，计算周期等。

例如：计算表达式 HD3M_CA_EXT_PROP_CALC_EXPR

计算周期：HD3M_CA_EXT_PROP_CALC_PERIOD

4.2 删除点

普通点，统计点，计算点，报警点的删除点的接口都合并为一个tag3_delete_tag

4.3 条件查询点

4.3.1 条件查询点的个数

普通点，统计点，计算点，报警点的条件查询点的个数的接口全部合并为一个

int32 tag3_query_tag_num_cond(

hd3_in enum HD3_TAG_CLASS nTagClass,

hd3_in const HD3FilterItemSet* pSet,

hd3_out int32* pnTagNum

);

条件查询参数

// 查询过滤项数组

typedef struct {

int32 nSize;

HD3FilterItem* pItem; // array

}HD3FilterItemSet;

typedef struct {

int32 nItemID;

enum HD3_RELATION nRelation;

char szValue[HD3_LEN_QUERY_ITEM_VALUE * HD3_BASE];

}HD3FilterItem;

属性项ID定义在hd3Enum.h中HD3_TAG_COL_XXX

例如Tag名称 HD3_TAG_COL_COMM_PROP_TAG_NAME

4.4 根据名称查询ID

普通点，统计点，计算点，报警点的条件查询点的个数的接口全部合并为一个

int32 tag3_query_id_by_name(

hd3_in const char* szName,

hd3_out uint32* pnTagID

);

5.新旧接口对照表

2.4版本接口 | 3.0版本接口 | 说明
ut_set_mode | 已去除 | buffer接口使用独立API
ut_set_timeout | ut3_set_request_timeout |
ut_get_item_step | ut3_get_item_step |
ut_free_iterator | ut3_free_handle |
nt_connect | nt3_connect |
nt_disconnect | nt3_disconnect |
nt_test_connection | 已去除 | KingAPI自动重连，调用者不需要自己测试判断和重连了
nt_get_server_current_time | ut3_get_server_ms_time |
ut_get_license_info | ut3_get_license_info |
ut_get_license_info_all | ut3_get_license_info_all |
pt_register_tag_change_info | 已去除 |
pt_query_tagid | tag3_query_id_by_name |
pt_query_tagids | tag3_query_ids_by_names |
pt_query_tag_type | pt3_query_tag_type |
pt_query_tag_prop | pt3_query_tag_prop |
pt_add_tag | pt3_add_tag |
pt_add_tags | pt3_add_tags |
pt_delete_tag | tag3_delete_tag, tag3_delete_tags |
pt_get_collector_timestamp | pt3_get_collector_version |
pt_get_collector_change_his | pt3_get_collector_alter_report |
pt_delete_change_his | 已去除 |
pt_query_tag_num_cond | tag3_query_tag_num_cond |
pt_query_tags_cond | pt3_query_tags_cond |
pt_query_specify_page_tags_cond | pt3_query_specify_page_tags_cond |
pt_modify_tag_prop | pt3_modify_tag_prop, pt3_modify_tags_prop |
pt_reg_monitored_tag | pt3_reg_monitored_tag |
pt_add_digitalset | pt3_add_digitalset |
pt_delete_digitalset | pt3_delete_digitalset |
pt_modify_digitalset | pt3_modify_digitalset |
pt_query_digitalset_state_infos | pt3_query_digitalset_all_state_infos |
pt_query_digitalset_state_name | pt3_query_digitalset_state_name |
pt_query_digitalset_names | pt3_query_digitalset_names |
pt_is_sys_tag_name | 已去除 |
sn_save_snapshot | sn3save_snapshot |
sn_save_snapshots | sn3_save_snapshots |
sn_save_disorder_snapshots | sn3_save_disorder_snapshots |
sn_save_tags_disorder_snapshots | sn3_save_tags_disorder_snapshots |
sn_query_snapshot | sn3_query_snapshot |
sn_query_snapshots | sn3_query_snapshots |
ar_query_interp_record | 已去除 | 功能包含在ar3_query_interp_record_by_mode
ar_query_raw_records | ar3_query_raw_records |
ar_query_interp_records | 已去除 | 功能包含在ar3_query_interp_records_by_mode
ar_query_interp_record_by_mode | ar3_query_interp_record_by_mode |
ar_query_interp_records_by_mode | ar3_query_interp_records_by_mode |
ar_query_tags_interp_records_by_mode | ar3_query_tags_interp_records_by_mode |
ar_delete_record | ar3_delete_record |
ar_modify_record | ar3_modify_record |
ar_query_specify_num_raw_recs | ar3_query_specify_num_raw_recs |
ar_query_raw_records_number | ar3_query_raw_records_number |
am_register_alarm_record_info | am3_register_alarm_record_info |
am_unregister_alarm_record_info | am3_unregister_alarm_record_info |
am_add_tag | am3_add_tag |
am_query_tagid | tag3_query_id_by_name |
am_delete_tag | tag3_delete_tag, tag3_delete_tags |
am_modify_tag_prop | am3_modify_tag_prop |
am_query_tag_prop | am3_query_tag_prop |
am_query_tag_names | tag3_query_tags_common_prop |
am_query_tag_num_cond | tag3_query_tag_num_cond |
am_query_tags_cond | am3_query_tags_cond |
am_query_specify_page_tags_cond | am3_query_specify_page_tags_cond |
am_add_group | am3_add_group |
am_query_groupid | am3_query_groupid |
am_delete_group | am3_delete_group |
am_modify_group_name | am3_modify_group |
am_modify_group_desc | am3_modify_group |
am_modify_group_parentid | am3_modify_group |
am_query_group_props | am3_query_group_props |
am_query_group_child_tags | am3_query_group_child_tags |
am_query_group_child_groups | am3_query_group_child_groups |
am_query_snapshots | am3_query_snapshots |
am_query_tag_records | am3_query_tag_records |
am_query_tags_all_records | am3_query_tags_all_records |
am_query_group_records | am3_query_group_records |
am_acknowledge_alarms | am3_acknowledge_alarms |
am_comment_alarms | am3_comment_alarms |
sc_login | sc3_login |
sc_modify_password | sc3_modify_password |
sc_reset_password | sc3_reset_password |
sc_add_user | sc3_add_user |
sc_delete_user | sc3_delete_user |
sc_add_group | sc3_add_group |
sc_delete_group | sc3_delete_group |
sc_add_user_to_group | sc3_add_user_to_group |
sc_delete_user_from_group | sc3_delete_user_from_group |
sc_modify_user_desc | sc3_modify_user_desc |
sc_modify_group_desc | sc3_modify_group_desc |
sc_query_all_users | sc3_query_all_users |
sc_query_members_of_group | sc3_query_members_of_group |
sc_query_all_groups | sc3_query_all_groups |
sc_query_groups_of_user | sc3_query_groups_of_user |
sc_query_manage_security | sc3_query_manage_security |
sc_modify_manage_security | sc3_modify_manage_security |
sc_query_all_trusts | sc3_query_all_trusts |
sc_add_trust | sc3_add_trust |
sc_delete_trust | sc3_delete_trust |
sc_query_current_user_name | sc3_query_current_user_name |
sc_add_auth_item | sc3_add_auth_item |
sc_delete_auth_item | sc3_delete_auth_item |
sc_modify_auth_item | sc3_modify_auth_item |
sc_add_auth_item_to_group | sc3_add_auth_item_to_group |
sc_delete_auth_item_from_group | sc3_delete_auth_item_from_group |
sc_query_all_auth_items | sc3_query_all_auth_items |
sc_query_auth_items_of_group | sc3_query_auth_items_of_group |
sc_query_groups_of_auth_item | sc3_query_groups_of_auth_item |
sc_query_auth_of_user | sc3_query_auth_of_user |
ct_add_collector | ct3_add_collector |
ct_delete_collector | ct3_delete_collector |
ct_query_all_collectors | ct3_query_all_collectors |
ct_query_collector | ct3_query_collector |
ct_query_collector_id_by_name | ct3_query_collector_id_by_name |
ct_modify_collector | ct3_modify_collector |
ct_add_device | ct3_add_device |
ct_delete_device | ct3_delete_device |
ct_query_device | ct3_query_device |
ct_query_device_id_by_name | ct3_query_device_id_by_name |
ct_query_devices_of_collector | ct3_query_devices_of_collector |
ct_modify_device | ct3_modify_device |
ct_add_scan_group | ct3_add_scan_group |
ct_delete_scan_group | ct3_delete_scan_group |
ct_query_scan_group | ct3_query_scan_group |
ct_query_scan_group_id_by_name | ct3_query_scan_group_id_by_name |
ct_query_scan_groups_of_device | ct3_query_scan_groups_of_device |
ct_modify_scan_group | ct3_modify_scan_group |
ct_register_collector_change_info | 已去除 |
ct_update_collector_status | ct3_update_collector_status |
ct_update_device_status | ct3_update_device_status |
ct_query_collector_status | ct3_query_collectors_status |
ct_query_device_status | ct3_query_devices_status |
ct_query_collector_status_rec | 已去除 |
ct_query_device_status_rec | 已去除 |
ct_query_update_status_inter | ct3_get_status_update_interval |
st_add_tag_v2 | st3_add_tag |
st_query_tagid | tag3_query_id_by_name |
st_delete_tag | tag3_delete_tag, tag3_delete_tags |
st_modify_tag_prop_v2 | st3_modify_tag_prop |
st_query_tag_prop_v2 | st3_query_tag_prop |
st_query_tag_num_cond_v2 | tag3_query_tag_num_cond |
st_query_tags_cond_v2 | st_query_tags_cond |
st_query_specify_page_tags_cond_v2 | st_query_specify_page_tags_cond |
st_tag_max | st3_tag_stats_calc |
st_tag_min | st3_tag_stats_calc |
st_tag_sum | st3_tag_stats_calc |
st_tag_mean | st3_tag_stats_calc |
st_tag_integral | st3_tag_stats_calc |
st_tag_good_percent | st3_tag_stats_calc |
st_tag_stats_calc | st3_tag_stats_calc |
ca_add_tag | ca3_add_tag |
ca_query_tagid | tag3_query_id_by_name |
ca_query_tag_name | tag3_query_tags_common_prop |
ca_delete_tag | tag3_delete_tag, tag3_delete_tags |
ca_modify_tag_prop | ca3_modify_tag_prop |
ca_query_tag_prop | ca3_query_tag_prop |
ca_query_tag_num_cond | tag3_query_tag_num_cond |
ca_query_tags_cond | ca3_query_tags_cond |
ca_query_specify_page_tags_cond | ca3_query_specify_page_tags_cond |
cs_register_cfg_chg_callback | 已去除 |
spc_add_tag | spc3_add_tag |
spc_delete_tag | tag3_delete_tag, tag3_delete_tags |
spc_modify_tag_prop | spc3_modify_tag_prop |
spc_query_tag_names | tag3_query_tags_common_prop |
spc_query_tag_prop | spc3_query_tag_prop |
spc_query_tagid | tag3_query_id_by_name |
spc_query_tag_num_cond | spc3_query_tag_num_cond |
spc_query_tags_cond | spc3_query_tags_cond |
spc_query_specify_page_tags_cond | spc3_query_specify_page_tags_cond |
spc_query_group_child_tags | spc3_query_group_child_tags |
spc_acknowledge_alarms | spc3_acknowledge_alarms |
spc_query_snapshots | spc3_query_snapshots |
spc_register_alarm_record_info | spc3_register_alarm_record_info |
spc_unregister_alarm_record_info | spc3_unregister_alarm_record_info |
spc_query_tag_records | spc3_query_tag_records |
spc_query_tags_records | spc3_query_tags_all_records |
spc_query_group_records | spc3_query_group_records |
spc_comment_alarms | spc3_comment_alarms |
tag_query_tags_baisc_info_by_name | tag3_query_tags_baisc_info_by_name |
tag_query_tags_cond | tag3_query_tags_cond |
tag_query_tags_basic_prop | tag3_query_tags_common_prop |
tag_opc_release_tag | 已去除 |
tag_opc_release_tags | 已去除 |
tag_opc_unrelease_tag | 已去除 |
tag_opc_unrelease_tags | 已去除 |
tag_opc_query_tag_state | 已去除 |
tag_opc_query_tags_state | 已去除 |
tag_opc_set_tags_state | 已去除 |
tag_opc_query_all_release_tags | 已去除 |
tag_query_tag_number | tag3_query_tag_num_cond |
ut_query_netmgr_connect_client_num | 已去除 |
ut_set_charset | ut3_set_charset |
ut_get_charset | ut3_get_charset |
nt_get_all_client_num | ut3_get_all_client_num |
nt_get_all_client_info | ut3_get_all_client_info |
nt_get_socket_net_info | ut3_get_socket_net_info |
nt_get_client_sockets | ut3_get_client_sockets |


ODBC API

Navigation: C++ >

ODBC API

 Return to chapter overview

HDODBC提供一些简单的ODBC接口以支持SQL查询。（客户端安装后在系统中提供了ODBC驱动，具体参考用户手册，功能明细 > 数据据询 > ODDC与SQL查询 > ODBC Driver）

·支持的ODBC接口

§申请句柄接口

SQLRETURN SQL_API SQLAllocHandle(SQLSMALLINT HandleType,SQLHANDLE InputHandle, SQLHANDLE *OutputHandle);

接口详细说明参见http://msdn.microsoft.com/en-us/library/ms712455(v=vs.85).aspx

§释放句柄接口

SQLRETURN SQL_API SQLFreeHandle(SQLSMALLINT HandleType, SQLHANDLE Handle);

接口详细说明参见http://msdn.microsoft.com/en-us/library/ms710123(v=vs.85).aspx

§连接数据源接口

SQLRETURN SQL_API SQLConnect(SQLHDBC ConnectionHandle,

SQLCHAR *ServerName, SQLSMALLINT NameLength1,

SQLCHAR *UserName, SQLSMALLINT NameLength2,

SQLCHAR *Authentication, SQLSMALLINT NameLength3);

接口详细说明参见http://msdn.microsoft.com/en-us/library/ms711810(v=vs.85).aspx

§断开数据源连接接口

SQLRETURN SQL_API SQLDisconnect(SQLHDBC ConnectionHandle);

接口详细说明参见http://msdn.microsoft.com/en-us/library/ms713946(v=vs.85).aspx

§设置连接属性接口

SQLRETURN SQL_API SQLSetConnectAttr(SQLHDBC ConnectionHandle,

SQLINTEGER Attribute, SQLPOINTER Value,

SQLINTEGER StringLength);

接口详细说明参见http://msdn.microsoft.com/en-us/library/ms713605%28v=vs.85%29.aspx

§执行sql接口

SQLRETURN SQL_API SQLExecDirect

(

SQLHSTMT StatementHandle,

__in_ecount_opt(TextLength) SQLCHAR* StatementText,

SQLINTEGER TextLength

);

接口详细说明参见http://msdn.microsoft.com/en-us/library/ms713611(v=vs.85).aspx

§获取查询结果接口

SQLRETURN SQL_API SQLFetch(SQLHSTMT StatementHandle);

接口详细说明参见http://msdn.microsoft.com/en-us/library/ms712424(v=vs.85).aspx

§绑定列接口

SQLRETURN SQL_API SQLBindCol(SQLHSTMT StatementHandle,

SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType,

SQLPOINTER TargetValue, SQLLEN BufferLength,

SQLLEN *StrLen_or_Ind);

接口详细说明参见http://msdn.microsoft.com/en-us/library/ms711010(v=vs.85).aspx

§数据源查询接口

SQLRETURN SQL_API SQLDataSources(SQLHENV EnvironmentHandle,

SQLUSMALLINT Direction, SQLCHAR *ServerName,

SQLSMALLINT BufferLength1, SQLSMALLINT *NameLength1,

SQLCHAR *Description, SQLSMALLINT BufferLength2,

SQLSMALLINT *NameLength2);

接口详细说明参见http://msdn.microsoft.com/en-us/library/ms711004(v=vs.85).aspx

·代码示例

example

#include "sql.h"

#include <sqlext.h>

int32 main(int argc, char** argv)

{

SQLHANDLE hEnv = SQL_NULL_HENV;

SQLHANDLE hDbc = SQL_NULL_HDBC;

SQLHANDLE hStmt = SQL_NULL_HSTMT;

SQLRETURN nRet = SQL_SUCCESS;

HDBC* pHDDbc = NULL;

int8 nTimeOut = 3;

char szSQL[1024];

char szTagName[128];

char szTimeStr[24];

uint16 nQuality;

int32 nValue;

char szValue[1024];

float64 fValue;

char szTimeStep[24];

char szInterType[24];

int32 nCount = 0;

// 申请HDODBC环境句柄

nRet = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &hEnv);

if(SQL_SUCCESS != nRet)

{

return nRet;

}

// 申请HDODBC连接句柄

nRet = SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDbc);

if(SQL_SUCCESS != nRet)

{

SQLFreeHandle(SQL_HANDLE_ENV, hEnv);

return nRet;

}

// 设置HDODBC连接超时

nRet = SQLSetConnectAttr(hDbc, SQL_ATTR_CONNECTION_TIMEOUT, &nTimeOut, sizeof(nTimeOut));

if(SQL_SUCCESS != nRet)

{

SQLFreeHandle(SQL_HANDLE_DBC, hDbc);

SQLFreeHandle(SQL_HANDLE_ENV, hEnv);

return nRet;

}

// 连接数据源abc

nRet = SQLConnect(hDbc, (SQLCHAR*)"abc", strlen("abc") + 1, NULL, 0, NULL , 0);

if(SQL_SUCCESS != nRet)

{

SQLFreeHandle(SQL_HANDLE_DBC, hDbc);

SQLFreeHandle(SQL_HANDLE_ENV, hEnv);

return nRet;

}

// 申请Stmt句柄

nRet = SQLAllocHandle(SQL_HANDLE_STMT, hDbc, &hStmt);

if(SQL_SUCCESS != nRet)

{

SQLFreeHandle(SQL_HANDLE_DBC, hDbc);

SQLFreeHandle(SQL_HANDLE_ENV, hEnv);

return nRet;

}

// 执行SQL

strcpy(szSQL, "select * from HDInter where Ftag=\'TAG\' and FTime >= \'2013-09-12 10:00:00.000\' and FTime <= \'2013-09-18 11:00:00.000\' LIMIT 10 DESC");

nRet = SQLExecDirect(hStmt, (SQLCHAR*)szSQL, strlen(szSQL) + 1);

if(SQL_SUCCESS != nRet)

{

SQLFreeHandle(SQL_HANDLE_STMT, hStmt);

SQLFreeHandle(SQL_HANDLE_DBC, hDbc);

SQLFreeHandle(SQL_HANDLE_ENV, hEnv);

return nRet;

}

// 绑定字段buffer

nRet = SQLBindCol(hStmt, 0, SQL_CHAR, szTagName, 128, 0);

if(SQL_SUCCESS != nRet)

{

SQLFreeHandle(SQL_HANDLE_STMT, hStmt);

SQLFreeHandle(SQL_HANDLE_DBC, hDbc);

SQLFreeHandle(SQL_HANDLE_ENV, hEnv);

return nRet;

}

// 绑定字段buffer

nRet = SQLBindCol(hStmt, 1, SQL_CHAR, szTimeStr, 128, 0);

if(SQL_SUCCESS != nRet)

{

SQLFreeHandle(SQL_HANDLE_STMT, hStmt);

SQLFreeHandle(SQL_HANDLE_DBC, hDbc);

SQLFreeHandle(SQL_HANDLE_ENV, hEnv);

return nRet;

}

// 绑定字段buffer

nRet = SQLBindCol(hStmt, 2, SQL_INTEGER, &nQuality, sizeof(nQuality), 0);

if(SQL_SUCCESS != nRet)

{

SQLFreeHandle(SQL_HANDLE_STMT, hStmt);

SQLFreeHandle(SQL_HANDLE_DBC, hDbc);

SQLFreeHandle(SQL_HANDLE_ENV, hEnv);

return nRet;

}

// 绑定字段buffer

nRet = SQLBindCol(hStmt, 3, SQL_INTEGER, &nValue, sizeof(nValue), 0);

if(SQL_SUCCESS != nRet)

{

SQLFreeHandle(SQL_HANDLE_STMT, hStmt);

SQLFreeHandle(SQL_HANDLE_DBC, hDbc);

SQLFreeHandle(SQL_HANDLE_ENV, hEnv);

return nRet;

}

// 绑定字段buffer

nRet = SQLBindCol(hStmt, 4, SQL_CHAR,szValue, sizeof(szValue), 0);

if(SQL_SUCCESS != nRet)

{

SQLFreeHandle(SQL_HANDLE_STMT, hStmt);

SQLFreeHandle(SQL_HANDLE_DBC, hDbc);

SQLFreeHandle(SQL_HANDLE_ENV, hEnv);

return nRet;

}

// 绑定字段buffer

nRet = SQLBindCol(hStmt, 5, SQL_FLOAT,&fValue, sizeof(fValue), 0);

if(SQL_SUCCESS != nRet)

{

SQLFreeHandle(SQL_HANDLE_STMT, hStmt);

SQLFreeHandle(SQL_HANDLE_DBC, hDbc);

SQLFreeHandle(SQL_HANDLE_ENV, hEnv);

return nRet;

}

// 绑定字段buffer

nRet = SQLBindCol(hStmt, 6, SQL_CHAR,szTimeStep, sizeof(szTimeStep), 0);

if(SQL_SUCCESS != nRet)

{

SQLFreeHandle(SQL_HANDLE_STMT, hStmt);

SQLFreeHandle(SQL_HANDLE_DBC, hDbc);

SQLFreeHandle(SQL_HANDLE_ENV, hEnv);

return nRet;

}

// 绑定字段buffer

nRet = SQLBindCol(hStmt, 7, SQL_CHAR,szInterType, sizeof(szInterType), 0);

if(SQL_SUCCESS != nRet)

{

SQLFreeHandle(SQL_HANDLE_STMT, hStmt);

SQLFreeHandle(SQL_HANDLE_DBC, hDbc);

SQLFreeHandle(SQL_HANDLE_ENV, hEnv);

return nRet;

}

// 逐条取查询结果并printf

while(SQL_SUCCESS == SQLFetch(hStmt))

{

printf("Tag=%s, Time=%s,Quality=%d,FIValue=%d,FSValue=%s,FFValue=%f, FTimeStep=%s,FinterType=%s\n",

szTagName, szTimeStr, nQuality,nValue,szValue,fValue, szTimeStep,szInterType);

}

// 断开连接

SQLDisconnect(hDbc);

// 释放句柄

SQLFreeHandle(SQL_HANDLE_STMT, hStmt);

SQLFreeHandle(SQL_HANDLE_DBC, hDbc);

SQLFreeHandle(SQL_HANDLE_ENV, hEnv);

return 1;

}


连接管理接口

Navigation: C++ >

连接管理接口

 Return to chapter overview

《连接管理接口》主要内容包括:

·nt3_connect

·nt3_disconnect

connect

copycode !MISSING PHRASE 'COPYCODE'!

//*NetWork Function

#include "hdKingAPI.h"

#include "error_code.h"

#include "data_types.h"

#include "hd3Struct.h"

#include <stdio.h>

#include <string.h>

int32 main()

{

int32 nRet = RD_SUCCESS;

HD3Connection conn;

int32 nConnectStatus = 0;

strcpy(conn.szAddress, "168.2.237.1");//主备ip分别是实际的真实的ip地址，主备ip初始化固定，与ihdb的活动和非活动状态无关。

conn.nPort = 5673;

conn.nTimeout = 3;

nRet = nt3_connect(&conn);

if (nRet != RD_SUCCESS)

{

printf("connect to server failed, error code[%d]!\n", nRet);

return -1;

}

printf("connect to server successful!\n");

nRet = nt3_disconnect();

if (nRet != RD_SUCCESS)

{

printf("disconnect to server failed, error code [%d]!\n", nRet);

return -1;

}

printf("disconnect to server successful!\n");

return 0;

}

//*/

©2015. All Rights Reserved.


nt3_connect

Navigation: C++ > 连接管理接口 >

nt3_connect

 Return to chapter overview

·函数

§连接配置中心

int32 nt3_connect(

const HD3Connection* pInfo

);

·参数

typedef struct {

char szAddress[HD3_LEN_ADDRESS * HD3_BASE];

uint16 nPort;

char szBakAddress[HD3_LEN_ADDRESS * HD3_BASE];

uint16 nBakPort;

int32 nTimeout;

}HD3Connection;

§pInfo

[in] 连接参数,类型为HD3Connection，定义见上。

szAddress | 主机IP
nPort | 主机端口
szBakAddress | 备机IP，如果没有备机赋值为空字符串
nBakPort | 备机端口，如果没有备机赋值为0
nTimeout | 连接超时时间，单位为秒，根据实际网络情况设置

·返回值

连接成功，返回RD_SUCCESS。失败返回其它错误码，见error_code.h

·说明

调用nt3_connect后不管调用是否成功，接口内部会开启自动重连的线程，调用者可以不用再调用nt3_connect，只要保证nt3_connect和nt3_disconnect成对使用即可。

如果调用者需要调用nt3_connect直到成功为止，那么失败后再次调用nt3_connect前必须先调用nt3_disconnect。

·举例

示例代码参见连接管理接口。

参见：

·nt3_connect

·nt3_disconnect

©2015. All Rights Reserved.


nt3_disconnect

Navigation: C++ > 连接管理接口 >

nt3_disconnect

 Return to chapter overview

·函数

§断开连接

int32 nt3_disconnect(

);

·参数

无

·返回值

成功，返回RD_SUCCESS。失败返回其它错误码，见error_code.h

·说明

调用nt3_connect后不管调用是否成功，接口内部会开启自动重连的线程，调用者可以不用再调用nt3_connect，只要保证nt3_connect和nt3_disconnect成对使用即可。

如果调用者需要调用nt3_connect直到成功为止，那么失败后再次调用nt3_connect前必须先调用nt3_disconnect。

·举例

示例代码参见连接管理接口。

参见：

·nt3_connect

·nt3_disconnect

©2015. All Rights Reserved.


数据源通用管理接口

数据源管理接口

Navigation: C++ >

数据源管理接口

 Return to chapter overview

数据源管理主要包含Tag点的增删改查，pt3开头的接口处理普通点，tag3开头的接口可处理其他类型的点。

·tag3_delete_tag

·tag3_delete_tags

·tag3_query_id_by_name

·tag3_query_ids_by_names

·tag3_query_tag_num_cond

·tag3_query_tags_basic_info_by_name

·tag3_query_tags_comm_prop

·tag3_query_tags_cond

tag query

copycode !MISSING PHRASE 'COPYCODE'!

///*Tag Function

#include "hdKingAPI.h"

#include "error_code.h"

#include "data_types.h"

#include "hd3Enum.h"

#include "hd3Struct.h"

#include <stdio.h>

#include <string.h>

int main()

{

int32 nRet = RD_SUCCESS;

HD3Connection conn;

HD3PtTagProp normalTag;

HD3StatsTagProp statsTag;

HD3CalcTagProp calcTag;

HD3SpcTagProp spcAlarmTag;

HD3AlarmTagProp alarmTag;

HD3HANDLE hIter = NULL;

int32 nTotalTagNum = 0;

HD3FilterItemSet filterSet;

HD3FilterItem filterItem[2];

HD3Mask mask;

//connect

strcpy(conn.szAddress, "127.0.0.1");

conn.nPort = 5673;

conn.nTimeout = 3;

nRet = nt3_connect(&conn);

if (nRet != RD_SUCCESS)

{

printf("connect to server failed, error code[%d]!\n", nRet);

return -1;

}

//login

nRet = sc3_login("admin", "admin");

if (nRet != RD_SUCCESS)

{

printf("login failed, error code[%d]!\n", nRet);

return -1;

}

printf("login successful!\n");

//add one normal tag

strcpy(normalTag.szTagName, "szNormalTag");

normalTag.nTagType = HD3_TAG_TYPE_INT32;

mask.nCommMask = HD3M_COMM_PROP_TAG_NAME | HD3M_COMM_PROP_TAG_TYPE;

mask.nExtMask = 0;

nRet = pt3_add_tag(&normalTag, &mask, "", &normalTag.nTagID);

if (nRet != RD_SUCCESS)

{

printf("add tag[%s] failed, error code [%d]!\n", normalTag.szTagName, nRet);

nt3_disconnect();

return -1;

}

printf("add tag[%s] successful!\n", normalTag.szTagName);

//add statistics tag

strcpy(statsTag.szTagName, "szStatsTag");

strcpy(statsTag.szSourceTagName, normalTag.szTagName);

statsTag.nScanPeriod = 60;

statsTag.nStatsType = HD3_STATS_TYPE_MAX;

statsTag.nSampleMode = HD3_STATS_SAMPLE_MODE_INTERVAL;

statsTag.nSampleInterval = 3600;

statsTag.nSampleStartDate = 1;

statsTag.nSampleType = HD3_STATS_SAMPLE_TYPE_RAW;

statsTag.nCalcPeriod = 0;

mask.nCommMask = HD3M_COMM_PROP_TAG_NAME;

mask.nExtMask = HD3M_ST_EXT_PROP_SOURCE_TAG_NAME |HD3M_ST_EXT_PROP_SCAN_PERIOD

| HD3M_ST_EXT_PROP_STATS_TYPE | HD3M_ST_EXT_PROP_SAMPLE_MODE

| HD3M_ST_EXT_PROP_SAMPLE_INTERVAL | HD3M_ST_EXT_PROP_SAMPLE_START_DATE

| HD3M_ST_EXT_PROP_SAMPLE_TYPE | HD3M_ST_EXT_PROP_CALC_PERIOD;

nRet = st3_add_tag(&statsTag, &mask, "", &statsTag.nTagID);

if (nRet != RD_SUCCESS)

{

printf("add stat tag[%s] failed, error code [%d]!\n", statsTag.szTagName, nRet);

nt3_disconnect();

return -1;

}

printf("add tags[%s] successful!\n", statsTag.szTagName);

//add calc tag

strcpy(calcTag.szTagName, "szCalcTag");

calcTag.nTagType = HD3_TAG_TYPE_INT32;

calcTag.nCalcMode = HD3_CALC_MODE_POLL;

calcTag.nCalcPeriod = 60;

sprintf(calcTag.szCalcExpr, "'%s' + 1", normalTag.szTagName);

mask.nCommMask = HD3M_COMM_PROP_TAG_NAME | HD3M_COMM_PROP_TAG_TYPE;

mask.nExtMask = HD3M_CA_EXT_PROP_CALC_PERIOD | HD3M_CA_EXT_PROP_CALC_MODE | HD3M_CA_EXT_PROP_CALC_EXPR;

nRet = ca3_add_tag(&calcTag, &mask, "", &calcTag.nTagID);

if (nRet != RD_SUCCESS)

{

printf("add calc tag[%s] failed, error code [%d]!\n", calcTag.szTagName, nRet);

nt3_disconnect();

return -1;

}

printf("add calc tag[%s] successful!\n", calcTag.szTagName);

//add alarm tag

strcpy(alarmTag.szTagName, "szAlarmTag");

strcpy(alarmTag.szSourceTagName, normalTag.szTagName);

strcpy(alarmTag.szTest1, "LT(10)");

strcpy(alarmTag.szAction1, "2_lolo_unack");

mask.nCommMask = HD3M_COMM_PROP_TAG_NAME;

mask.nExtMask = HD3M_AM_EXT_PROP_SOURCE_TAG | HD3M_AM_EXT_PROP_TEST1 | HD3M_AM_EXT_PROP_ACTION1;

nRet = am3_add_tag(&alarmTag, &mask, "", &alarmTag.nTagID);

if (nRet != RD_SUCCESS)

{

printf("add alarm tag[%s] failed, error code [%d]!\n", alarmTag.szTagName, nRet);

nt3_disconnect();

return -1;

}

printf("add alarm tag[%s] successful!\n", alarmTag.szTagName);

//add spc alarm tag

memset(&spcAlarmTag, 0, sizeof(spcAlarmTag));

strcpy(spcAlarmTag.szTagName, "szSPCAlarmTag");

strcpy(spcAlarmTag.szSourceTagName, "szStatsTag");

spcAlarmTag.nCtrlChartType = HD3_SPC_CTRL_CHART_TYPE_XBAR;

strcpy(spcAlarmTag.szUCLTagName, "szNormalTag");

strcpy(spcAlarmTag.szCLTagName, "szNormalTag");

strcpy(spcAlarmTag.szLCLTagName, "szNormalTag");

spcAlarmTag.dUCLDefaultValue = 200;

spcAlarmTag.dCLDefaultVaule = 100;

spcAlarmTag.dLCLDefaultValue = 50;

mask.nCommMask = HD3M_COMM_PROP_TAG_NAME;

mask.nExtMask = HD3M_SPC_EXT_PROP_SOURCE_TAG_NAME | HD3M_SPC_EXT_PROP_CTRL_CHART_TYPE | HD3M_SPC_EXT_PROP_RULE;

nRet = spc3_add_tag(&spcAlarmTag, &mask, "", &spcAlarmTag.nTagID );

if (nRet != RD_SUCCESS)

{

printf("add spc tag[%s] failed, error code [%d]!\n", spcAlarmTag.szTagName, nRet);

nt3_disconnect();

return -1;

}

printf("add spc tag[%s] successful!\n", spcAlarmTag.szTagName);

//query tag basic info by tag name

HD3TagBasicInfo tagBasicInfo[5];

int64 nTagClassMask = 0;

int32 nErrCodes[5];

strcpy(tagBasicInfo[0].szTagName, "szNormalTag");

strcpy(tagBasicInfo[1].szTagName, "szAlarmTag");

strcpy(tagBasicInfo[2].szTagName, "szStatsTag");

strcpy(tagBasicInfo[3].szTagName, "szCalcTag");

strcpy(tagBasicInfo[4].szTagName, "szSPCAlarmTag");

nTagClassMask = HD3M_ALL;

nRet = tag3_query_tags_basic_info_by_name(nTagClassMask, 5, tagBasicInfo, nErrCodes);

if (nRet != RD_SUCCESS)

{

printf("tag_query_tags_baisc_info_by_name failed %d\n", nRet);

nt3_disconnect();

return -1;

}

for (int32 i = 0; i < 5; i ++)

{

printf("name[%s], id[%d], tag class[%d], tag type[%d]\n", tagBasicInfo[i].szTagName,

tagBasicInfo[i].nTagID, (int32)tagBasicInfo[i].nTagClass, (int32)tagBasicInfo[i].nTagType);

}

//query tag id by name

nRet = tag3_query_id_by_name(normalTag.szTagName, &normalTag.nTagID);

if (nRet != RD_SUCCESS)

{

printf("query tag id by name failed, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

printf("query tag id by name successful\n");

//query tag ids by name

nRet = tag3_query_ids_by_names(1, &normalTag.szTagName, &normalTag.nTagID, &nErrCodes[0]);

if (nRet != RD_SUCCESS)

{

printf("query tag ids by name failed, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

printf("query tag ids by name successful\n");

//query tag base props

HD3CommTagProp tagsBaseProp[5];

tagsBaseProp[0].nTagID = tagBasicInfo[0].nTagID;

tagsBaseProp[1].nTagID = tagBasicInfo[1].nTagID;

tagsBaseProp[2].nTagID = tagBasicInfo[2].nTagID;

tagsBaseProp[3].nTagID = tagBasicInfo[3].nTagID;

tagsBaseProp[4].nTagID = tagBasicInfo[4].nTagID;

nTagClassMask = HD3M_ALL;

memset(nErrCodes, 0, sizeof(nErrCodes));

nRet = tag3_query_tags_common_prop(nTagClassMask, 5, HD3M_ALL, tagsBaseProp, nErrCodes);

if (nRet != RD_SUCCESS)

{

printf("tag_query_tags_basic_prop failed, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

printf("tag_query_tags_basic_prop successful!\n");

//query tags base props by condition

filterItem[0].nItemID = HD3_TAG_COL_COMM_PROP_TAG_NAME;

filterItem[0].nRelation = HD3_RELATION_LIKE;

strcpy(filterItem[0].szValue, "*");

filterItem[1].nItemID = HD3_TAG_COL_COMM_PROP_TAG_TYPE;

filterItem[1].nRelation = HD3_RELATION_EQUAL;

sprintf(filterItem[1].szValue, "%d", HD3_TAG_TYPE_DIGITAL);

nTagClassMask = HD3M_ALL;

filterSet.nSize = 2;

filterSet.pItem = filterItem;

nRet = tag3_query_tags_cond(nTagClassMask, &filterSet, HD3M_ALL, &hIter);

if (nRet != RD_SUCCESS)

{

printf("tag_query_tags_cond, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

int32 nTagNum = 0;

while (true)

{

nRet = ut3_get_item_step(hIter, &tagsBaseProp[0]);

if (RD_SUCCESS == nRet)

{

nTagNum ++;

printf("query tag successful, tag name is %s!\n", tagsBaseProp[0].szTagName);

}

else if (EC_HD_API_QUERY_END == nRet)

{

printf("query tag complete!\n");

break;

}

else

{

printf("query tag failed, error code [%d]!\n", nRet);

break;

}

}

printf("you have queried %d tags totally!\n", nTagNum);

ut3_free_handle(hIter);

nRet = tag3_query_tag_num_cond(HD3_TAG_CLASS_BASIC, &filterSet, &nTotalTagNum);

if (nRet != RD_SUCCESS)

{

printf("query total tag number failed, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

printf("query total tag number successful tag number is %d\n", nTotalTagNum);

HD3PageQueryTagParam pageQueryParam;

HD3FilterItem fi;

fi.nItemID = HD3_TAG_COL_COMM_PROP_TAG_NAME;

fi.nRelation = HD3_RELATION_LIKE;

strcpy(fi.szValue, "*");

pageQueryParam.itemSet.pItem = &fi;

pageQueryParam.itemSet.nSize = 1;

pageQueryParam.mask.nCommMask = HD3M_ALL;

pageQueryParam.mask.nExtMask = HD3M_ALL;

pageQueryParam.nCapacity = 20;

pageQueryParam.nStartID = 0;

nRet = tag3_query_specify_page_tags_cond(HD3M_TAG_CLASS_CALC | HD3M_TAG_CLASS_BASIC | HD3M_TAG_CLASS_STATS, &pageQueryParam, &hIter);

if (nRet != RD_SUCCESS)

{

printf("tag3_query_specify_page_tags_cond, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

nTagNum = 0;

while (true)

{

nRet = ut3_get_item_step(hIter, &tagsBaseProp[0]);

if (RD_SUCCESS == nRet)

{

nTagNum ++;

printf("query tag successful, tag name is %s!\n", tagsBaseProp[0].szTagName);

}

else if (EC_HD_API_QUERY_END == nRet)

{

printf("query tag complete!\n");

break;

}

else

{

printf("query tag failed, error code [%d]!\n", nRet);

break;

}

}

printf("you have queried %d tags totally!\n", nTagNum);

ut3_free_handle(hIter);

//delete tag

nRet = tag3_delete_tag(spcAlarmTag.nTagID);

if (nRet != RD_SUCCESS)

{

printf("delete tag failed, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

printf("delete tag successful\n");

//delete tags

nRet = tag3_delete_tags(1, &alarmTag.nTagID, &nErrCodes[0]);

if (nRet != RD_SUCCESS)

{

printf("delete tag failed, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

printf("delete tag successful\n");

nt3_disconnect();

return 0;

}

//*/

©2015. All Rights Reserved.


tag3_delete_tag

Navigation: C++ > 数据源管理接口 >

tag3_delete_tag

 Return to chapter overview

·函数

§删除一个普通点

int32 tag3_delete_tag(

uint32 nTagID

);

·参数

§nTagID

[in] 数据源ID，大于零。

·返回值

删除成功，返回RD_SUCCESS。删除失败返回错误码，见error_code.h

·说明

根据点的ID删除一个点(包括普通点，报警点，统计点，计算点，spc报警点)

·举例

示例代码参见数据源管理接口。

参见：

·tag3_delete_tag

·tag3_delete_tags

·tag3_query_id_by_name

·tag3_query_ids_by_names

·tag3_query_tag_num_cond

·tag3_query_tags_basic_info_by_name

·tag3_query_tags_comm_prop

·tag3_query_tags_cond

©2015. All Rights Reserved.


pt3_delete_tags

Navigation: C++ > 数据源管理接口 >

pt3_delete_tags

 Return to chapter overview

·函数

§删除Tag点（批量接口）

int32 tag3_delete_tags(

int32 nTagNum,

const uint32* pTagIDArray,

int32* pErrCodeArray

);

·参数

§nTagNum

[in] Tag个数。

§pTagIDArray

[in] TagID数组 容量：nTagNum,。

§pErrCodeArray

[in] 错误码数组。

·返回值

如果所有都删除成功，返回RD_SUCCESS。如果部分成功，则返回EC_HD3_API_BATCH_REQUEST删除失败返回错误码，见error_code.h

·说明

根据点的ID删除一个点(包括普通点，报警点，统计点，计算点，spc报警点)

·举例

示例代码参见数据源管理接口。

参见：

·tag3_delete_tag

·tag3_delete_tags

·tag3_query_id_by_name

·tag3_query_ids_by_names

·tag3_query_tag_num_cond

·tag3_query_tags_basic_info_by_name

·tag3_query_tags_comm_prop

·tag3_query_tags_cond

©2015. All Rights Reserved.


tag3_query_id_by_name

Navigation: C++ > 数据源管理接口 >

tag3_query_id_by_name

 Return to chapter overview

·函数

§根据普通点名称查询ID

int32 tag3_query_id_by_name(

const char* szTagName,

uint32* pnTagID

);

·参数

§szTagName

[in] 普通点名称。

§pnTagID

[out] 普通点ID。

·返回值

查询成功，返回RD_SUCCESS。查询失败返回错误码，见error_code.h。

·说明

通过普通点的名字查询ID。

·举例

示例代码参见数据源管理接口。

参见：

·tag3_delete_tag

·tag3_delete_tags

·tag3_query_id_by_name

·tag3_query_ids_by_names

·tag3_query_tag_num_cond

·tag3_query_tags_basic_info_by_name

·tag3_query_tags_comm_prop

·tag3_query_tags_cond

©2015. All Rights Reserved.


tag3_query_ids_by_names

Navigation: C++ > 数据源管理接口 >

tag3_query_ids_by_names

 Return to chapter overview

·函数

§根据普通点名称批量查询IDs

int32 tag3_query_ids_by_names(

int32 nTagNum,

const char szTagNames[][HD3_LEN_TAG_NAME * HD3_BASE]

uint32* pTagIDArray,

int32* pErrCodeArray

);

·参数

§nTagNum

[in] Tag个数。

§szTagNames

[in] Tag名称数组；容量：nTagNum。

§pnTagID

[out] TagID数组;容量：nTagNum。

§pErrCodeArray

[out] 错误码数组；容量：nTagNum。

·返回值

查询成功，返回RD_SUCCESS。查询失败返回错误码，见error_code.h。

·说明

通过根据名字查询ID（批量接口）。

·举例

示例代码参见数据源管理接口。

参见：

·tag3_delete_tag

·tag3_delete_tags

·tag3_query_id_by_name

·tag3_query_ids_by_names

·tag3_query_tag_num_cond

·tag3_query_tags_basic_info_by_name

·tag3_query_tags_comm_prop

·tag3_query_tags_cond

©2015. All Rights Reserved.


tag3_query_tag_num_cond

Navigation: C++ > 数据源管理接口 >

tag3_query_tag_num_cond

 Return to chapter overview

·函数

§条件查询满足条件的普通点的个数

int32 tag3_query_tag_num_cond(

enum HD3_TAG_CLASS nTagClass,

const HD3FilterItemSet* pSet,

int32* pnTagNum

)

·参数

§nTagClass

[in] Tag类别。

§pSet

[in] 过滤项集合 。

§pnTagNum

[out] 返回的Tag点个数。

·返回值

查询成功，返回RD_SUCCESS。查询失败，返回错误码，见error_code.h。

·说明

条件查询满足条件的Tag点的个数

·举例

示例代码参见数据源管理接口。

参见：

·tag3_delete_tag

·tag3_delete_tags

·tag3_query_id_by_name

·tag3_query_ids_by_names

·tag3_query_tag_num_cond

·tag3_query_tags_basic_info_by_name

·tag3_query_tags_comm_prop

·tag3_query_tags_cond

©2015. All Rights Reserved.


tag3_query_tags_basic_info_by_name

Navigation: C++ > 数据源管理接口 >

tag3_query_tags_basic_info_by_name

 Return to chapter overview

·函数

§根据多个点名称批量查询查询点的基本信息（ID、类型和类别）

int32 tag3_query_tags_baisc_info_by_name(

int64 nTagClassMask,

int32 nTagNum,

HD3TagbasicInfo*pInfoArray,

int32* pErrCodeArray

);

·参数

nTagClassMask

[in] Tag类别掩码。

nTagNum

[in] 普通点个数。

pInfoArray

[in,out]参数数组。

nErrCodes

[out] 错误码数组。

·返回值

查询成功，返回RD_SUCCESS。部分查询成功返回EC_HD_API_QUERY_TAGS_BAISC_INFO_FAILED，查询失败返回错误码，见error_code.h。

·说明

根据多个点名称批量查询查询点的基本信息（ID、类型和类别）

·举例

示例代码参见数据源管理接口。

参见：

·tag3_delete_tag

·tag3_delete_tags

·tag3_query_id_by_name

·tag3_query_ids_by_names

·tag3_query_tag_num_cond

·tag3_query_tags_basic_info_by_name

·tag3_query_tags_comm_prop

·tag3_query_tags_cond

©2015. All Rights Reserved.


tag3_query_tags_common_prop

Navigation: C++ > 数据源管理接口 >

tag3_query_tags_common_prop

 Return to chapter overview

·函数

§指定TagClass，根据Tag属性查询Tag

int32 tag3_query_tags_common_prop(

hd3_in int64 nTagClassMask,

hd3_in int32 nTagNum,

hd3_in int64 nPropMask,

hd3_inout HD3CommTagProp* pPropArray,

hd3_out int32* pErrCodeArray

);

·参数

§nTagClassMask

[in] Tag类别掩码。

§nTagNum

[in] Tag点个数。

§nPropMask

[in] 查询条件掩码。

§pPropArray

[in,out]属性数组。

§pErrCodeArray

[out] 错误码数组。

·返回值

查询成功，返回RD_SUCCESS。部分查询成功返回EC_HD_API_QUERY_TAGS_BAISC_INFO_FAILED，查询失败返回错误码，见error_code.h。

·说明

指定TagClass，根据TagID查询Tag公共属性

·举例

示例代码参见数据源管理接口。

参见：

·pt3_add_tag

·pt3_add_tags

·pt3_modify_tag_prop

·pt3_modify_tags_prop

·pt3_query_tag_prop

·pt3_query_tag_type

·pt3_query_tags_cond

·pt3_query_specify_page_tags_cond

©2015. All Rights Reserved.


tag3_query_tags_cond

Navigation: C++ > 数据源管理接口 >

tag3_query_tags_cond

 Return to chapter overview

·函数

§查询满足查询条件的Tag,普通点，报警点，统计点，计算点，SPC报警点都能查询

int32 tag3_query_tags_cond(

int64 nTagClassMask,

const HD3FilterItemSet*pSet,

int64 nPropMask,

HD3HANDLE* phResutSet);

·参数

nTagClassMask

[in] Tag类别掩码。

pSet

[in] 查询条件数组。

nPropMask

[in] 属性掩码（仅限共有属性）。

phResultSet

[out] 查询迭代器。

·返回值

查询成功，返回RD_SUCCESS。查询失败，返回错误码，见error_code.h。

·说明

§szValue：属性项的值，用字符串表示。

例如：查询条件Tag name 以“上海”开头且 TagID小于1000的条件为：

根据查询条件查询满足查询条件的Tag，普通点、报警点、spc点、统计点、计算点都能查询。

调用该接口成功后会获得一个查询迭代器的句柄，然后调用ut3_get_item_step接口，传入迭代器句柄和分配的空间(HD3CommTagProp*)，返回RD_SUCCESS就可以获得第一个点的属性，再调用ut3_get_item_step返回RD_SUCCESS就可以获得第二个点的属性。如此循环的查询直到调用ut3_get_item_step返回错误码为EC_HD_API_QUERY_END表明所有的点的属性都查询完毕了。查询完毕后调用ut3_free_iterator方法来释放迭代器。

·举例

示例代码参见数据源管理接口。

参见：

·tag3_delete_tag

·tag3_delete_tags

·tag3_query_id_by_name

·tag3_query_ids_by_names

·tag3_query_tag_num_cond

·tag3_query_tags_basic_info_by_name

·tag3_query_tags_comm_prop

·tag3_query_tags_cond

©2015. All Rights Reserved.


普通点管理接口

Navigation: C++ >

普通点管理接口

 Return to chapter overview

普通点管理主要包含普通点的增删改查。

·pt3_add_tag

·pt3_add_tags

·pt3_modify_tag_prop

·pt3_modify_tags_prop

·pt3_query_tag_prop

·pt3_query_tag_type

·pt3_query_tags_cond

·pt3_query_specify_page_tags_cond

pt tag

//*Normal Tag Function

#include "hdKingAPI.h"

#include "error_code.h"

#include "data_types.h"

#include "hd3Struct.h"

#include <stdio.h>

#include <string.h>

int main()

{

int32 nRet = RD_SUCCESS;

HD3Connection conn;

HD3PtTagProp tagSave;

HD3PtTagProp tagQuery;

const char* szTagName_1 = "szTagName_1";

const char* szTagName_2 = "szTagName_2";

HD3FilterItemSet queryItemset;

HD3FilterItem filterItem[2];

int64 nTagClassMask = 0;

HD3PtTagProp HD3PtTagProps[10];

int32 nTotalTagNum = 10;

int32 nTagIDs[10];

int32 nErrCode[10];

HD3Mask mask;

uint32 nPtTagID=0;

HD3HANDLE hIter = NULL;

int32 nTagNum = 0;

int32 i = 0;

strcpy(conn.szAddress, "127.0.0.1");

conn.nPort = 5673;

conn.nTimeout = 3;

nRet = nt3_connect(&conn);

if (nRet != RD_SUCCESS)

{

printf("connect to server failed, error code[%d]!\n", nRet);

return -1;

}

//login

nRet = sc3_login("admin", "admin");

if (nRet != RD_SUCCESS)

{

printf("login failed, error code[%d]!\n", nRet);

return -1;

}

printf("login successful!\n");

//add two tag

strcpy(tagSave.szTagName, szTagName_1);

tagSave.nTagType = HD3_TAG_TYPE_INT32;

mask.nCommMask = HD3M_COMM_PROP_TAG_NAME | HD3M_COMM_PROP_TAG_TYPE;

mask.nExtMask = 0;

nRet = pt3_add_tag(&tagSave, &mask, "", &nPtTagID);

if (nRet != RD_SUCCESS)

{

printf("add tags[%s] failed, error code [%d]!\n", tagSave.szTagName, nRet);

nt3_disconnect();

return -1;

}

printf("add tags[%s] successful!\n", tagSave.szTagName);

strcpy(tagSave.szTagName, szTagName_2);

tagSave.nTagType = HD3_TAG_TYPE_STRING;

nRet = pt3_add_tag(&tagSave, &mask, "", &nPtTagID);

if (nRet != RD_SUCCESS)

{

printf("add tags[%s] failed, error code [%d]!\n", tagSave.szTagName, nRet);

nt3_disconnect();

return -1;

}

printf("add tags[%s] successful!\n", tagSave.szTagName);

// add ten tags

uint32* pTagIDs = NULL;

pTagIDs = new uint32[10];

memset((void*)pTagIDs, 0, sizeof(uint32)*10);

int32* pErrCodes = NULL;

pErrCodes = new int32[10];

memset((void*)pErrCodes, 0, sizeof(int32)*10);

HD3Mask *pPropMasks;

memset(HD3PtTagProps, 0, sizeof(HD3PtTagProp) * 10);

pPropMasks = new HD3Mask[10];

memset((void*)pPropMasks, 0, sizeof(HD3Mask)*10);

memset(nTagIDs, 0, sizeof(int32)*10);

memset(nErrCode, 0, sizeof(int32)*10);

// set HD3PtTagProp

for( i = 0; i < nTotalTagNum; ++i)

{

HD3PtTagProps[i].nTagType = HD3_TAG_TYPE_INT32;

sprintf(HD3PtTagProps[i].szTagName, "tagfix%d", i);

pPropMasks[i].nCommMask = HD3M_COMM_PROP_TAG_NAME | HD3M_COMM_PROP_TAG_TYPE;

pPropMasks[i].nExtMask = 0;

}

nRet = pt3_add_tags(nTotalTagNum, HD3PtTagProps, pPropMasks, "", pTagIDs, pErrCodes);

delete[] pPropMasks;

if(RD_SUCCESS != nRet)

{

printf("Failed to add tags!nRet = %d\n", nRet);

nt3_disconnect();

return -1;

}

printf("add tags successfully nRet = %d\n", nRet) ;

//query tags by condition

filterItem[0].nItemID = HD3_TAG_COL_COMM_PROP_TAG_NAME;

filterItem[0].nRelation = HD3_RELATION_LIKE;

strcpy(filterItem[0].szValue, "*");

filterItem[1].nItemID = HD3_TAG_COL_COMM_PROP_TAG_TYPE;

filterItem[1].nRelation = HD3_RELATION_EQUAL;

sprintf(filterItem[1].szValue, "%d", HD3_TAG_TYPE_STRING);

nTagClassMask = HD3M_ALL;

queryItemset.nSize = 2;

queryItemset.pItem = filterItem;

nRet = pt3_query_tags_cond( &queryItemset, &mask, &hIter);

if (nRet != RD_SUCCESS)

{

printf("query tags by condition failed!\n");

nt3_disconnect();

return -1;

}

nTagNum = 0;

while (true)

{

nRet = ut3_get_item_step(hIter, &tagQuery);

if (RD_SUCCESS == nRet)

{

nTagNum ++;

printf("query tag successful, tag name is %s, tag type is %d!\n", tagQuery.szTagName, tagQuery.nTagType);

}

else if (EC_HD_API_QUERY_END == nRet)

{

printf("query tag complete!");

break;

}

else

{

printf("query tag failed, error code [%d]!", nRet);

break;

}

}

printf("you have queried %d tags totally!\n", nTagNum);

ut3_free_handle(hIter);

//query page tags by condition

HD3PageQueryTagParam hdparam;

hdparam.itemSet.pItem = queryItemset.pItem;

hdparam.itemSet.nSize = queryItemset.nSize;

hdparam.mask = mask;

hdparam.nCapacity = 20;

hdparam.nStartID = 0;

nRet = pt3_query_specify_page_tags_cond(&hdparam, &hIter);

if (nRet != RD_SUCCESS)

{

printf("pt_query_specify_page_tags_cond failed!\n");

nt3_disconnect();

return -1;

}

nTagNum = 0;

while (true)

{

nRet = ut3_get_item_step(hIter, &tagQuery);

if (RD_SUCCESS == nRet)

{

nTagNum ++;

printf("query tag successful, tag name is %s, tag type is %d!\n", tagQuery.szTagName, tagQuery.nTagType);

}

else if (EC_HD_API_QUERY_END == nRet)

{

printf("query tag complete!");

break;

}

else

{

printf("query tag failed, error code [%d]!", nRet);

break;

}

}

printf("you have queried %d tags totally!\n", nTagNum);

ut3_free_handle(hIter);

//query tag id

uint32 nTagID = 0;

nRet = tag3_query_id_by_name(szTagName_1, &nTagID);

if (nRet != RD_SUCCESS)

{

printf("query tag id failed, tag name[%s], error code[%d]!\n", szTagName_1, nRet);

nt3_disconnect();

return -1;

}

printf("tag[%s] query tag id successful, tag id[%d]!\n", szTagName_1, nTagID);

//query tag type

HD3_TAG_TYPE nTagType;

nRet = pt3_query_tag_type(nTagID, &nTagType);

if (nRet != RD_SUCCESS)

{

printf("query tag type failed, tag id[%d], error code[%d]!\n", nTagID, nRet);

nt3_disconnect();

return -1;

}

printf("query tag type successful, tag id[%d]!\n", nTagID);

//modify tag desc

HD3Mask hdMask;

hdMask.nCommMask = HD3M_COMM_PROP_DESCRIPTOR;

hdMask.nExtMask = 0;

strcpy(tagSave.szDescriptor, "tag descriptor is modified");

nRet = pt3_modify_tag_prop(nTagID, &tagSave, &hdMask);

if (nRet != RD_SUCCESS)

{

printf("modify tag failed, tag id[%d], error code[%d]!\n", nTagID, nRet);

nt3_disconnect();

return -1;

}

printf("modify tag successful, tag id[%d]!\n", nTagID);

//modify tag desc

hdMask;

hdMask.nCommMask = HD3M_COMM_PROP_DESCRIPTOR;

hdMask.nExtMask = 0;

strcpy(tagSave.szDescriptor, "tag descriptor is modified");

nRet = pt3_modify_tags_prop(1, &nTagID, &tagSave, &hdMask, &nErrCode[0]);

if (nRet != RD_SUCCESS)

{

printf("modify tag failed, tag id[%d], error code[%d]!\n", nTagID, nRet);

nt3_disconnect();

return -1;

}

printf("modify tag successful, tag id[%d]!\n", nTagID);

//query tag prop

nRet = pt3_query_tag_prop(nTagID, &tagQuery);

if (nRet != RD_SUCCESS)

{

printf("query tag prop failed, tag id[%d], error code[%d]!\n", nTagID, nRet);

nt3_disconnect();

return -1;

}

printf("query tag prop successful, tag id[%d], tag name[%s], tag description[%s]!\n",

tagQuery.nTagID, tagQuery.szTagName, tagQuery.szDescriptor);

//delete tag

nRet = tag3_delete_tag(nTagID);

if (nRet != RD_SUCCESS)

{

printf("delete tag failed, tag id[%d], error code[%d]!\n", nTagID, nRet);

nt3_disconnect();

return -1;

}

printf("delete tag successful, tag id[%d]!\n", nTagID);

nt3_disconnect();

return 0;

}

//*/


pt3_query_specify_page_tags_cond

Navigation: C++ > 普通点管理接口 >

pt3_query_specify_page_tags_cond

 Return to chapter overview

·函数

§根据查询条件查询满足条件的指定位置和指定个数的普通点

int32 pt3_query_specify_page_tags_cond(

HD3PageQueryTagParam* pParam,

HDHANDLE* phResultSet

)

·参数

§pParam

[in] 查询条件。

§phResultSet

[out] 结果集句柄。

·返回值

查询成功，返回RD_SUCCESS。查询失败，返回错误码，见error_code.h。

·说明

§分页查询，条件查询满足过滤项的普通点的属性

§从起始索引开始查询满足查询条件的指定数量的Tag，起始索引从0开始，按照TagID从小到大的顺序排列。

§调用该接口成功后会获得一个查询迭代器的句柄，然后调用ut3_get_item_step接口，传入迭代器句柄和分配的空间(TagProp*)，返回RD_SUCCESS就可以获得第一个普通点的属性，再调用ut3_get_item_step返回RD_SUCCESS就可以获得第二个普通点的属性。如此循环的查询直到调用ut3_get_item_step返回错误码为EC_HD_API_QUERY_END表明所有的普通点的ID都查询完毕了。查询完毕后调用ut3_free_iterator方法来释放迭代器。

·举例

示例代码参见数据源管理接口。

参见：

·tag3_delete_tag

·tag3_delete_tags

·tag3_query_id_by_name

·tag3_query_ids_by_names

·tag3_query_tag_num_cond

·tag3_query_tags_basic_info_by_name

·tag3_query_tags_comm_prop

·tag3_query_tags_cond

©2015. All Rights Reserved.


pt3_query_tags_cond

Navigation: C++ > 普通点管理接口 >

pt3_query_tags_cond

 Return to chapter overview

·函数

§根据查询条件查询满足条件的普通点

int32 pt3_query_tags_cond(

const HD3FilterItemSet* pSet,

const HD3Mask* pMask,

HD3HANDLE* phResultSet

);

·参数

pSet

[in] 过滤项集合。

pMask

[in] 属性掩码。

pHResultSet

[in] 结果集句柄。

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h。

·说明

§调用该接口成功后会获得一个查询迭代器的句柄，然后调用ut3_get_item_step接口，传入迭代器句柄和分配的空间(HD3PtTagProp*)，返回RDUCCESS就可以获得第一个普通点的属性，再调用ut3_get_item_step返回RD_SUCCESS就可以获得第二个普通点的属性。如此循环的查询直到调用ut3_get_item_step返回错误码为EC_HD_API_QUERY_END表明所有的普通点的ID都查询完毕了。查询完毕后调用ut3_free_iterator方法来释放迭代器。

§查询条件：

HD3FilterItemSet

copycode!MISSING PHRASE 'COPYCODE'!

typedef struct

{

int32 nSize;

HD3FilterItem* pItem;

}HD3FilterItemSet;

HD3FilterItem

copycode!MISSING PHRASE 'COPYCODE'!

typedef struct

{

int32 nItemID;

enum HD3_RELATION nRelation;

char szValue[HD3_LEN_QUERY_ITEM_VALUE * HD3_BASE];

}HD3FilterItem;

§nItemID:属性项ID，标识该查询条件针对的某一个具体的属性。

nItemID | 代表的Tag属性项
HD3_TAG_COL_COMM_PROP_TAG_NAME | szTagName
HD3_TAG_COL_COMM_PROP_ARCHIVING | bArchiving
HD3_TAG_COL_COMM_PROP_COMP_DEV | fCompDev
HD3_TAG_COL_COMM_PROP_COMP_MAX_TIME | nCompMax
HD3_TAG_COL_COMM_PROP_COMP_TYPE | nCompType
HD3_TAG_COL_COMM_PROP_CHANGE_DATE | nChangeDate
HD3_TAG_COL_COMM_PROP_CHANGER | szChanger
HD3_TAG_COL_COMM_PROP_CREATION_DATE | nCreationDate
HD3_TAG_COL_COMM_PROP_CREATOR | szCreator
HD3_TAG_COL_COMM_PROP_DESCRIPTOR | szDescriptor
HD3_TAG_COL_COMM_PROP_DIGITAL_SET | nDigitalSet
HD3_TAG_COL_COMM_PROP_ENG_UNITS | szEngUnits
HD3_TAG_COL_COMM_PROP_EXC_MAX_TIME | fExcMax
HD3_TAG_COL_COMM_PROP_EXC_DEV | fExcMin
HD3_TAG_COL_COMM_PROP_REC_ACCESS | nRecAccess
HD3_TAG_COL_COMM_PROP_REC_NORMAL_GROUP | szRecGroup
HD3_TAG_COL_COMM_PROP_REC_OWNER_GROUP | szRecOwner
HD3_TAG_COL_COMM_PROP_SCAN | bScan
HD3_TAG_COL_COMM_PROP_MIN_VALUE | fMinValue
HD3_TAG_COL_COMM_PROP_TAG_CLASS | nTagClass
HD3_TAG_COL_COMM_PROP_TAG_AVALIABLE | nTagAvaliable
HD3_TAG_COL_COMM_PROP_OPCREALSE | nScanPeriod
HD3_TAG_COL_COMM_PROP_SPAN | fSpan
HD3_TAG_COL_COMM_PROP_TAG_ACCESS | nTagAccess
HD3_TAG_COL_COMM_PROP_TAG_NORMAL_GROUP | szTagGroup
HD3_TAG_COL_COMM_PROP_TAGID | nTagID
HD3_TAG_COL_COMM_PROP_TAG_OWNER_GROUP | szTagOwner
HD3_TAG_COL_COMM_PROP_TAG_TYPE | nTagType
HD3_TAG_COL_COMM_PROP_PARAM1 | nParam1
HD3_TAG_COL_COMM_PROP_PARAM2 | nParam2
HD3_TAG_COL_COMM_PROP_PARAM3 | nParam3
HD3_TAG_COL_COMM_PROP_PARAM4 | nParam4
HD3_TAG_COL_COMM_PROP_PARAM5 | nParam5
HD3_TAG_COL_PT_EXT_PROP_INSTRUMENT_ADDRESS | szInstrumentAddress
HD3_TAG_COL_PT_EXT_PROP_INSTRUMENT_ADDRESS_TYPE | nInstrumentAddressType
HD3_TAG_COL_PT_EXT_PROP_COLLECTOR_NAME | szCollectorName
HD3_TAG_COL_PT_EXT_PROP_COLLECTOR_ID | nCollectorID
HD3_TAG_COL_PT_EXT_PROP_DEVICE_NAME | szDeviceName
HD3_TAG_COL_PT_EXT_PROP_DEVICE_ID | nDeviceID
HD3_TAG_COL_PT_EXT_PROP_SCAN_GROUP_NAME | szScanGroupName
HD3_TAG_COL_PT_EXT_PROP_SCAN_GROUP_ID | nScanGroupID
HD3_TAG_COL_PT_EXT_PROP_DATA_ORDER | nDataOrder

§nRelation:属性项查询关系。

nRelation | 含义
HD3_RELATION_EQUAL | =
HD3_RELATION_NON_EQUAL | <>
HD3_RELATION_GREAT | >
HD3_RELATION_LESS | <
HD3_RELATION_GREAT_EQUAL | >=
HD3_RELATION_LESS_EQUAL | <=
HD3_RELATION_LIKE | 模糊查询，“*”表示多字符模糊查询 ，“？”表示单字符模糊查询

§szValue：属性项的值，用字符串表示。

§例如查询条件Tag name 以“上海”开头且 TagID小于1000的条件为：

查询条件

copycode!MISSING PHRASE 'COPYCODE'!

HD3FilterItem fi[2];

HD3FilterItemSet fis;

fi[0].nItemID = HD3_TAG_COL_TAG_NAME;

fi[0].nRelation = HD3_RELATION_LIKE;

strcpy(fi[0].szValue, "上海*");//Tag name 以”上海“开头

fi[1].nItemID = HD3_TAG_COL_TAGID;

fi[1].nRelation = HD3_RELATION_LESS;

strcpy(fi[1].szValue, "1000");//TagID 小于1000

fis.nSize = 2;

fis.pItem = fi[0];

·举例

示例代码参见数据源管理接口。

参见：

·tag3_delete_tag

·tag3_delete_tags

·tag3_query_id_by_name

·tag3_query_ids_by_names

·tag3_query_tag_num_cond

·tag3_query_tags_basic_info_by_name

·tag3_query_tags_comm_prop

·tag3_query_tags_cond

©2015. All Rights Reserved.


pt3_query_tag_type

Navigation: C++ > 普通点管理接口 >

pt3_query_tag_type

 Return to chapter overview

·函数

§查询普通点的类型

int32 pt3_query_tag_type(

uint32 nTagID,

enum HD3_TAG_TYPE* pTagType

);

·参数

§nTagID

[in] TagID。

§pTagType

[out] 点的类型。

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h

·说明

该接口通过ID获取普通点的类型。

·举例

示例代码参见数据源管理接口。

参见：

·tag3_delete_tag

·tag3_delete_tags

·tag3_query_id_by_name

·tag3_query_ids_by_names

·tag3_query_tag_num_cond

·tag3_query_tags_basic_info_by_name

·tag3_query_tags_comm_prop

·tag3_query_tags_cond

©2015. All Rights Reserved.


pt3_query_tag_prop

Navigation: C++ > 普通点管理接口 >

pt3_query_tag_prop

 Return to chapter overview

·函数

§查询普通点属性

int32 pt3_query_tag_prop(

uint32 nTagID,

HD3PtTagProp* pTagProp

);

·参数

§nTagID

[in] Tag点ID。

§pTagProp

[out] 指向TagProp结构体的指针。

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h。

·说明

该接口根据普通点ID查询该普通点的所有属性。

·举例

示例代码参见数据源管理接口。

参见：

·tag3_delete_tag

·tag3_delete_tags

·tag3_query_id_by_name

·tag3_query_ids_by_names

·tag3_query_tag_num_cond

·tag3_query_tags_basic_info_by_name

·tag3_query_tags_comm_prop

·tag3_query_tags_cond

©2015. All Rights Reserved.


pt3_modify_tags_prop

Navigation: C++ > 普通点管理接口 >

pt3_modify_tags_prop

 Return to chapter overview

·函数

§修改普通点的属性

int32 pt3_modify_tags_prop(

int32 nTagNum,

uint32* pTagIDArray,

const HD3PtTagProp* pTagPropArray,

const HD3Mask* pMaskArray,

int32* pErrCodeArray

);

·参数

§nTagNum

[in] 点个数。

§pTagIDArray

[in] TagID数组。

§pTagPropArray

[in] 属性数组。

§pMaskArray

[in] 掩码数组。

§pErrCodeArray

[out] 错误码数组。

·返回值

修改成功，返回RD_SUCCESS。修改失败则返回错误码，见error_code.h。

·说明

批量修改Tag相同的属性，修改的属性项由属性掩码决定。属性掩码的说明见hdMaskDefine.h。

·举例

示例代码参见数据源管理接口。

参见：

·tag3_delete_tag

·tag3_delete_tags

·tag3_query_id_by_name

·tag3_query_ids_by_names

·tag3_query_tag_num_cond

·tag3_query_tags_basic_info_by_name

·tag3_query_tags_comm_prop

·tag3_query_tags_cond

©2015. All Rights Reserved.


pt3_modify_tag_prop

Navigation: C++ > 普通点管理接口 >

pt3_modify_tag_prop

 Return to chapter overview

·函数

§修改普通点的属性

int32 pt3_modify_tag_prop(

uint32 nTagID,

const HD3PtTagProp* pTagProp,

const HD3Mask* pMask

);

·参数

§nTagID

[in] 普通点ID。

§pTagProp

[in] 指向普通点属性结构体的指针。

§pMask

[in] 修改普通点属性的掩码。

·返回值

修改成功，返回RD_SUCCESS。修改失败则返回错误码，见error_code.h。

·说明

修改一个Tag的属性，修改的属性项由属性掩码决定。属性掩码的说明见hdMaskDefine.h。

·举例

示例代码参见数据源管理接口。

参见：

·tag3_delete_tag

·tag3_delete_tags

·tag3_query_id_by_name

·tag3_query_ids_by_names

·tag3_query_tag_num_cond

·tag3_query_tags_basic_info_by_name

·tag3_query_tags_comm_prop

·tag3_query_tags_cond

©2015. All Rights Reserved.


pt3_add_tags

Navigation: C++ > 普通点管理接口 >

pt3_add_tags

 Return to chapter overview

·函数

§向服务器批量添加点

int32 pt3_add_tags(

int32 nTagNum,

const HD3PtTagProp* pTagPropArray,

const HD3Mask* pMasksArray,

const char* szDataNodeName，

uint32* pTagIDArray,

int32* pErrCodeArray

);

·参数

§nTagNum

[in] tag点数。掩码必须包含TagName和TagType

§pTagPropArray

[in] 指向普通点属性结构体数组的指针。

§pMasksArray

[in] 属性掩码数组。掩码必须包含TagName和TagType

§szDataNodeName

[in] 数据节点名称，指定数据节点名称可以将点添加到指定数据节点，如果想由系统自动分配节点传入""或者NULL。

§pTagIDArray

[out] tag ID数组

§pErrCodeArray

[out] 错误码数组

·返回值

添加成功，返回RD_SUCEESS。添加失败返回错误码，见error_code.h。

·说明

属性掩码可以由单独的 42个属性项掩码组合而成，如TAG_PROP_TAG_NAME | TAG_PROP_TAG_TYPE表示属性掩码只包含Tag名和Tag类型这两个属性项。TAG_PROP_ALL表示包含所有的属性项。

添加普通点时，点的名称和点的类型必须添加。

掩码定义在文件hd3MaskDefine.h 里面

例如：Tag属性掩码 HD3M_COMM_PROP_TAG_NAME

·举例

示例代码参见数据源管理接口。

参见：

·tag3_delete_tag

·tag3_delete_tags

·tag3_query_id_by_name

·tag3_query_ids_by_names

·tag3_query_tag_num_cond

·tag3_query_tags_basic_info_by_name

·tag3_query_tags_comm_prop

·tag3_query_tags_cond


pt3_add_tag

Navigation: C++ > 普通点管理接口 >

pt3_add_tag

 Return to chapter overview

·函数

§向服务器添加一个普通点

int32 pt3_add_tag(

const HD3PtTagProp* pTagProp,

const HD3Mask* pMask;

const char* szDataNodeName，

uint32* pnTagID

);

·参数

§pTagProp

[in] 指向普通点属性结构体的指针。

§pMask

[in] 属性掩码。掩码必须包含TagName和TagType。

§szDataNodeName

[in] 数据节点名称，指定数据节点名称可以将点添加到指定数据节点，如果想由系统自动分配节点传入""或者NULL。

§pnTagID

[out]添加成功，该点对应的ID

·返回值

添加成功，返回RD_SUCEESS。添加失败返回错误码，见error_code.h。

·说明

属性掩码可以由单独的 42个属性项掩码组合而成包括33个基本属性和9个扩展属性，如HD3M_COMM_PROP_TAG_NAME | HD3M_COMM_PROP_TAG_TYPE表示属性掩码只包含Tag名和Tag类型这两个属性项。TAG_PROP_ALL表示包含所有的属性项。

添加普通点时，点的名称和点的类型必须添加。

掩码定义在文件hd3MaskDefine.h 里面

例如：Tag属性掩码 HD3M_COMM_PROP_TAG_NAME

·举例

示例代码参见数据源管理接口。

参见：

·tag3_delete_tag

·tag3_delete_tags

·tag3_query_id_by_name

·tag3_query_ids_by_names

·tag3_query_tag_num_cond

·tag3_query_tags_basic_info_by_name

·tag3_query_tags_comm_prop

·tag3_query_tags_cond

©2015. All Rights Reserved.


计算点管理接口

Navigation: C++ >

计算点管理接口

 Return to chapter overview

计算点管理接口包含：

·ca3_add_tag

·ca3_add_tags

·ca3_modify_tag_prop

·ca3_modify_tags_prop

·ca3_query_tag_prop

·ca3_query_tags_cond

·ca3_query_specify_page_tags_cond

·删除点参见tag3_delete_tag, tag3_delete_tags

·查询id参见tag3_query_id_by_name ,tag3_query_ids_by_names

calc tag

copycode !MISSING PHRASE 'COPYCODE'!

//*Calc Tag Function

#include "hdKingAPI.h"

#include "error_code.h"

#include "data_types.h"

#include "hd3Struct.h"

#include <stdio.h>

#include <string.h>

int main()

{

int32 nRet = RD_SUCCESS;

HD3Connection conn;

HD3PtTagProp normalTag;

HD3CalcTagProp calcTagSave;

HD3CalcTagProp calcTagQuery;

const char* szTagName_1 = "szCalcTagName_1";

const char* szTagName_2 = "szCalcTagName_2";

HD3FilterItem filterItem[2];

HD3FilterItemSet queryItemset;

HD3HANDLE hIter = NULL;

int32 nTagNum = 0;

int32 nErrCode = 0;

//connect

strcpy(conn.szAddress, "127.0.0.1");

conn.nPort = 5673;

conn.nTimeout = 3;

nRet = nt3_connect(&conn);

if (nRet != RD_SUCCESS)

{

printf("connect to server failed, error code[%d]!\n", nRet);

return -1;

}

//login

nRet = sc3_login("admin", "admin");

if (nRet != RD_SUCCESS)

{

printf("login failed, error code[%d]!\n", nRet);

return -1;

}

printf("login successful!\n");

//add one normal tag and get tag id

strcpy(normalTag.szTagName, "szNormalTag");

normalTag.nTagType = HD3_TAG_TYPE_INT32;

HD3Mask mask;

mask.nCommMask = HD3M_COMM_PROP_TAG_NAME | HD3M_COMM_PROP_TAG_TYPE;

mask.nExtMask = 0;

uint32 nPtTagID=0;

nRet = pt3_add_tag(&normalTag, &mask, "", &nPtTagID);

if (nRet != RD_SUCCESS)

{

printf("add tag[%s] failed, error code [%d]!\n", normalTag.szTagName, nRet);

nt3_disconnect();

return -1;

}

printf("add tag[%s] successful! tag id[%d]!\n", normalTag.szTagName, nPtTagID);

//add two calc tag

strcpy(calcTagSave.szTagName, szTagName_1);

calcTagSave.nTagType = HD3_TAG_TYPE_INT32;

calcTagSave.nCalcMode = HD3_CALC_MODE_POLL;

calcTagSave.nCalcPeriod = 60;

sprintf(calcTagSave.szCalcExpr, "'%s' + 1", normalTag.szTagName);

uint32 nTagID=0;

//HD3Mask hdMask;

mask.nCommMask = HD3M_COMM_PROP_TAG_NAME | HD3M_COMM_PROP_TAG_TYPE;

mask.nExtMask = HD3M_CA_EXT_PROP_CALC_MODE | HD3M_CA_EXT_PROP_CALC_PERIOD | HD3M_CA_EXT_PROP_CALC_EXPR;

nRet = ca3_add_tag( &calcTagSave, &mask, "", &nTagID);

if (nRet != RD_SUCCESS)

{

printf("add calc tag[%s] failed, error code [%d]!\n", calcTagSave.szTagName, nRet);

nt3_disconnect();

return -1;

}

printf("add calc tag[%s] successful! nTagID=%d\n", calcTagSave.szTagName, nTagID);

strcpy(calcTagSave.szTagName, szTagName_2);

calcTagSave.nTagType = HD3_TAG_TYPE_INT32;

calcTagSave.nCalcMode = HD3_CALC_MODE_POLL;

calcTagSave.nCalcPeriod = 60;

sprintf(calcTagSave.szCalcExpr, "'%s' + 1", normalTag.szTagName);

nRet = ca3_add_tags(1, &calcTagSave,&mask, "", &nTagID, &nErrCode);

if (nRet != RD_SUCCESS)

{

printf("add calc tag[%s] failed, error code [%d]!\n", calcTagSave.szTagName, nRet);

nt3_disconnect();

return -1;

}

printf("add calc tag[%s] successful!nTagID=%d\n", calcTagSave.szTagName, nTagID);

//query tags by condition

queryItemset.nSize = 2;

queryItemset.pItem = filterItem;

queryItemset.pItem[0].nItemID = HD3_TAG_COL_COMM_PROP_TAG_NAME;

queryItemset.pItem[0].nRelation = HD3_RELATION_LIKE;

strcpy(queryItemset.pItem[0].szValue, "*");

queryItemset.pItem[1].nItemID = HD3_TAG_COL_COMM_PROP_TAG_TYPE;

queryItemset.pItem[1].nRelation = HD3_RELATION_EQUAL;

sprintf(queryItemset.pItem[1].szValue, "%d", HD3_TAG_TYPE_INT32);

mask.nCommMask = HD3M_COMM_PROP_TAG_NAME;

mask.nExtMask = 0;

nRet = ca3_query_tags_cond(&queryItemset, &mask, &hIter);

if (nRet != RD_SUCCESS)

{

printf("query calc tags by condition failed, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

while (true)

{

nRet = ut3_get_item_step(hIter, &calcTagQuery);

if (RD_SUCCESS == nRet)

{

nTagNum ++;

printf("query calc tag successful, tag name is %s!\n", calcTagQuery.szTagName);

}

else if (EC_HD_API_QUERY_END == nRet)

{

printf("query calc tag complete!\n");

break;

}

else

{

printf("query calc tag failed, error code [%d]!\n", nRet);

break;

}

}

printf("you have queried %d calc tags totally!\n", nTagNum);

ut3_free_handle(hIter);

//query page tag by condition

HD3PageQueryTagParam hdparam;

hdparam.itemSet.pItem = queryItemset.pItem;

hdparam.itemSet.nSize = queryItemset.nSize;

hdparam.mask = mask;

hdparam.nCapacity = 20;

hdparam.nStartID = 0;

nRet = ca3_query_specify_page_tags_cond(&hdparam, &hIter);

if (nRet != RD_SUCCESS)

{

printf("ca3_query_specify_page_tags_cond failed, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

nTagNum = 0;

while (true)

{

nRet = ut3_get_item_step(hIter, &calcTagQuery);

if (RD_SUCCESS == nRet)

{

nTagNum ++;

printf("query calc tag successful, tag name is %s!\n", calcTagQuery.szTagName);

}

else if (EC_HD_API_QUERY_END == nRet)

{

printf("query calc tag complete!\n");

break;

}

else

{

printf("query calc tag failed, error code [%d]!\n", nRet);

break;

}

}

printf("you have queried %d calc tags totally!\n", nTagNum);

ut3_free_handle(hIter);

//modify tag desc

HD3Mask hdMask;

hdMask.nCommMask = HD3M_COMM_PROP_DESCRIPTOR;

hdMask.nExtMask = 0;

strcpy(calcTagSave.szDescriptor, "calc tag descriptor is modified");

nRet = ca3_modify_tag_prop(nTagID, &calcTagSave, &hdMask);

if (nRet != RD_SUCCESS)

{

printf("modify calc tag failed, tag id[%d], error code[%d]!\n", nTagID, nRet);

nt3_disconnect();

return -1;

}

printf("modify calc tag successful, tag id[%d]!\n", nTagID);

//modify tag desc

hdMask;

hdMask.nCommMask = HD3M_COMM_PROP_DESCRIPTOR;

hdMask.nExtMask = 0;

strcpy(calcTagSave.szDescriptor, "calc tag descriptor is modified");

nRet = ca3_modify_tags_prop(1, &nTagID, &calcTagSave, &hdMask, &nErrCode);

if (nRet != RD_SUCCESS)

{

printf("modify calc tag failed, tag id[%d], error code[%d]!\n", nTagID, nRet);

nt3_disconnect();

return -1;

}

printf("modify calc tag successful, tag id[%d]!\n", nTagID);

//query tag prop

nRet = ca3_query_tag_prop(nTagID, &calcTagQuery);

if (nRet != RD_SUCCESS)

{

printf("query calc tag prop failed, tag id[%d], error code[%d]!\n", nTagID, nRet);

nt3_disconnect();

return -1;

}

printf("query calc tag prop successful, tag id[%d], tag name[%s], tag description[%s]!\n",

calcTagQuery.nTagID, calcTagQuery.szTagName, calcTagQuery.szDescriptor);

//delete tag

nRet = tag3_delete_tag(nTagID);

if (nRet != RD_SUCCESS)

{

printf("delete calc tag failed, tag id[%d], error code[%d]!\n", nTagID, nRet);

nt3_disconnect();

return -1;

}

printf("delete calc tag successful, tag id[%d]!\n", nTagID);

nt3_disconnect();

return 0;

}

//*/

©2015. All Rights Reserved.


ca3_add_tag

Navigation: C++ > 计算点管理接口 >

ca3_add_tag

 Return to chapter overview

·函数

§添加计算点

int32 ca3_add_tag(

const HD3CalcTagProp* pTagProp,

const HD3Mask* pMask,

const char* szDataNodeName,

uint32* pTagID

);

·参数

§pTagProp

[in] 属性

§pMask

[in] 掩码

§szDataNodeName

[in] 数据节点名称，指定数据节点名称可以将点添加到指定数据节点，如果想由系统自动分配节点传入""或者NULL。

§pTagID

[out] TagID

·返回值

添加成功，返回RD_SUCCESS。其它错误码，见error_code.h

·举例

示例代码参见计算点管理接口。

参见：

·ca3_add_tag

·ca3_add_tags

·ca3_modify_tag_prop

·ca3_modify_tags_prop

·ca3_query_tag_prop

·ca3_query_tags_cond

·ca3_query_specify_page_tags_cond


ca3_add_tags

Navigation: C++ > 计算点管理接口 >

ca3_add_tags

 Return to chapter overview

·函数

§添加计算点

int32 ca3_add_tags(

int32 nTagNum,

const HD3CalcTagProp* pTagPropArray,

const HD3Mask* pMaskArray,

const char* szDataNodeName,

uint32* pTagIDArray,

int32* pErrCodeArray

);

·参数

§nTagNum

[in] 点个数

§pTagPropArray

[in] 属性数组

§pMaskArray

[in] 掩码数组

§szDataNodeName

[in] 数据节点名称，指定数据节点名称可以将点添加到指定数据节点，如果想由系统自动分配节点传入""或者NULL。

§pTagIDArray

[out] TagID数组

§pErrCodeArray

[out] 错误码数组

·返回值

添加成功，返回RD_SUCCESS。其它错误码，见error_code.h

·举例

示例代码参见计算点管理接口。

参见：

·ca3_add_tag

·ca3_add_tags

·ca3_modify_tag_prop

·ca3_modify_tags_prop

·ca3_query_tag_prop

·ca3_query_tags_cond

·ca3_query_specify_page_tags_cond

©2015. All Rights Reserved.


ca query tags cond

Navigation: C++ > 计算点管理接口 >

ca query tags cond

 Return to chapter overview

·函数

§条件查询满足过滤项的计算点的属性

int32 ca3_query_tags_cond(

hd3_in const HD3FilterItemSet* pSet,

hd3_in const HD3Mask* pMask,

hd3_out HD3HANDLE* phResultSet

);

·参数

§pSet

[in]过滤项集合

§pMask

[in]属性掩码

§pResultSet

[out]结果集句柄

·返回值

添加成功，返回RD_SUCEESS。添加失败返回错误码，见error_code.h。

·举例

示例代码参见计算点管理接口。

参见：

·ca3_add_tag

·ca3_add_tags

·ca3_modify_tag_prop

·ca3_modify_tags_prop

·ca3_query_tag_prop

·ca3_query_tags_cond

·ca3_query_specify_page_tags_cond

©2015. All Rights Reserved.


ca3_modify_tag_prop

Navigation: C++ > 计算点管理接口 >

ca3_modify_tag_prop

 Return to chapter overview

·函数

§修改计算点属性

int32 ca3_modify_tag_prop(

hd3_in uint32 nTagID,

hd3_in const HD3CalcTagProp* pProp,

hd3_in const HD3Mask* pMask

);

·参数

§nTagID

[in] 计算点TagID。

§pProp

[in] 指向计算点属性结构体的指针。

§pMask

[in] 属性掩码。

·返回值

添加成功，返回RD_SUCEESS。添加失败返回错误码，见error_code.h。

·举例

示例代码参见计算点管理接口。

·ca3_add_tag

·ca3_add_tags

·ca3_modify_tag_prop

·ca3_modify_tags_prop

·ca3_query_tag_prop

·ca3_query_tags_cond

·ca3_query_specify_page_tags_cond

©2015. All Rights Reserved.


ca3_modify_tags_prop

Navigation: C++ > 计算点管理接口 >

ca3_modify_tags_prop

 Return to chapter overview

·函数

§修改计算点属性

int32 ca3_modify_tags_prop(

hd3_in int32 nTagNum,

hd3_in const uint32* pTagIDArray,

hd3_in const HD3CalcTagProp* pTagPropArray,

hd3_in const HD3Mask* pMaskArray,

hd3_out int32* pErrCodeArray

);

·参数

§nTagNum

[in] 点个数

§pTagIDArray

[in] TagID数组

§pTagPropArray

[in] 属性数组

§pMaskArray

[in] 掩码数组

§pErrCodeArray

[out] 错误码数组

·返回值

添加成功，返回RD_SUCEESS。添加失败返回错误码，见error_code.h。

·举例

示例代码参见计算点管理接口。

·ca3_add_tag

·ca3_add_tags

·ca3_modify_tag_prop

·ca3_modify_tags_prop

·ca3_query_tag_prop

·ca3_query_tags_cond

·ca3_query_specify_page_tags_cond

©2015. All Rights Reserved.


ca3_query_tag_prop

Navigation: C++ > 计算点管理接口 >

ca3_query_tag_prop

 Return to chapter overview

·函数

§根据TagID查询计算点属性

int32 ca3_query_tag_prop(

hd3_in uint32 nTagID,

hd3_out HD3CalcTagProp* pTagProp

);

·参数

§nTagID

[in]计算点ID

§pTagProp

[in] 指向计算点属性结构体的指针。

·返回值

添加成功，返回RD_SUCEESS。添加失败返回错误码，见error_code.h。

·举例

示例代码参见计算点管理接口。

·ca3_add_tag

·ca3_add_tags

·ca3_modify_tag_prop

·ca3_modify_tags_prop

·ca3_query_tag_prop

·ca3_query_tags_cond

·ca3_query_specify_page_tags_cond

©2015. All Rights Reserved.


ca3_query_specify_page_tags_cond

Navigation: C++ > 计算点管理接口 >

ca3_query_specify_page_tags_cond

 Return to chapter overview

·函数

§分页查询：条件查询满足过滤项的普通点的属性

int32 ca3_query_specify_page_tags_cond(

hd3_in const HD3PageQueryTagParam* pParam,

hd3_out HD3HANDLE* phResultSet

);

·参数

§pParam

[in] 过滤项

§phResultSet

[out] 结果集句柄

§取结果项需再调用接口ut3_get_item_step(hResultSet, HD3PCaTagProp*)

* 具体参见示例和ut3_get_item_step接口的说明

* 结果中的Tag按照TagID增序排序

·返回值

查询成功，返回RD_SUCCESS。查询失败，返回错误码，见error_code.h。

·举例

示例代码参见计算点管理接口。

·ca3_add_tag

·ca3_add_tags

·ca3_modify_tag_prop

·ca3_modify_tags_prop

·ca3_query_tag_prop

·ca3_query_tags_cond

·ca3_query_specify_page_tags_cond

©2015. All Rights Reserved.


统计管理接口

Navigation: C++ >

统计管理接口

 Return to chapter overview

《统计管理接口》主要包括的接口包括：

·统计点

§st3_query_tags_cond

§st3_query_tag_prop

§st3_modify_tag_prop

§st3_modify_tags_prop

§st3_query_specify_page_tags_cond

§st3_add_tag

§st3_add_tags

§删除相关接口参见tag3_delete_tag, tag3_delete_tags

§查询id接口参见tag3_query_id_by_name ,tag3_query_ids_by_names

·统计计算

§st3_tag_stats_calc

©2015. All Rights Reserved.


统计点

Navigation: C++ > 统计管理接口 >

统计点

 Return to chapter overview

《统计点》主要介绍一下接口：

§st3_query_tags_cond

§st3_query_tag_prop

§st3_modify_tag_prop

§st3_modify_tags_prop

§st3_query_specify_page_tags_cond

§st3_add_tag

§st3_add_tags

stats tag

copycode !MISSING PHRASE 'COPYCODE'!

///*

#include "hdKingAPI.h"

#include "error_code.h"

#include "data_types.h"

#include "hd3Struct.h"

#include <stdio.h>

#include <string.h>

int main()

{

int32 nRet = RD_SUCCESS;

HD3Connection conn;

HD3PtTagProp normalTag;

HD3StatsTagProp statTagSave;

HD3StatsTagProp statTagQuery;

const char* szTagName_1 = "szStatTagName_1";

const char* szTagName_2 = "szStatTagName_2";

HD3HANDLE hIter = NULL;

int32 nTagNum = 0;

HD3Mask mask;

HD3FilterItemSet filterSet;

HD3FilterItem filterItem[2];

HD3PageQueryTagParam pageQueryParam;

int32 nErrCode = 0;

//connect

strcpy(conn.szAddress, "127.0.0.1");

conn.nPort = 5673;

conn.nTimeout = 3;

nRet = nt3_connect(&conn);

if (nRet != RD_SUCCESS)

{

printf("connect to server failed, error code[%d]!\n", nRet);

return -1;

}

//login

nRet = sc3_login("admin", "admin");

if (nRet != RD_SUCCESS)

{

printf("login failed, error code[%d]!\n", nRet);

return -1;

}

printf("login successful!\n");

//add one normal tag and get tag id

strcpy(normalTag.szTagName, "szNormalTag");

normalTag.nTagType = HD3_TAG_TYPE_INT32;

mask.nCommMask = HD3M_COMM_PROP_TAG_NAME | HD3M_COMM_PROP_TAG_TYPE;

mask.nExtMask = 0;

nRet = pt3_add_tag(&normalTag, &mask, "", &normalTag.nTagID);

if (nRet != RD_SUCCESS)

{

printf("add tag[%s] failed, error code [%d]!\n", normalTag.szTagName, nRet);

nt3_disconnect();

return -1;

}

printf("add tag[%s] successful!\n", normalTag.szTagName);

//add two stat tag

strcpy(statTagSave.szTagName, szTagName_1);

strcpy(statTagSave.szSourceTagName, normalTag.szTagName);

statTagSave.nScanPeriod = 60;

statTagSave.nStatsType = HD3_STATS_TYPE_MAX;

statTagSave.nSampleMode = HD3_STATS_SAMPLE_MODE_INTERVAL;

statTagSave.nSampleInterval = 3600;

statTagSave.nSampleStartDate = 1;

statTagSave.nSampleType = HD3_STATS_SAMPLE_TYPE_RAW;

statTagSave.nCalcPeriod = 0;

mask.nCommMask = HD3M_COMM_PROP_TAG_NAME;

mask.nExtMask = HD3M_ST_EXT_PROP_SOURCE_TAG_NAME |HD3M_ST_EXT_PROP_SCAN_PERIOD

| HD3M_ST_EXT_PROP_STATS_TYPE | HD3M_ST_EXT_PROP_SAMPLE_MODE

| HD3M_ST_EXT_PROP_SAMPLE_INTERVAL | HD3M_ST_EXT_PROP_SAMPLE_START_DATE

| HD3M_ST_EXT_PROP_SAMPLE_TYPE | HD3M_ST_EXT_PROP_CALC_PERIOD;

nRet = st3_add_tag(&statTagSave, &mask, "", &statTagSave.nTagID);

if (nRet != RD_SUCCESS)

{

printf("add stat tag[%s] failed, error code [%d]!\n", statTagSave.szTagName, nRet);

nt3_disconnect();

return -1;

}

printf("add tags[%s] successful!\n", statTagSave.szTagName);

strcpy(statTagSave.szTagName, szTagName_2);

strcpy(statTagSave.szSourceTagName, normalTag.szTagName);

statTagSave.nScanPeriod = 60;

statTagSave.nStatsType = HD3_STATS_TYPE_MIN;

statTagSave.nSampleMode = HD3_STATS_SAMPLE_MODE_INTERVAL;

statTagSave.nSampleInterval = 3600;

statTagSave.nSampleStartDate = 1;

statTagSave.nSampleType = HD3_STATS_SAMPLE_TYPE_RAW;

statTagSave.nCalcPeriod = 0;

mask.nCommMask = HD3M_COMM_PROP_TAG_NAME;

mask.nExtMask = HD3M_ST_EXT_PROP_SOURCE_TAG_NAME |HD3M_ST_EXT_PROP_SCAN_PERIOD

| HD3M_ST_EXT_PROP_STATS_TYPE | HD3M_ST_EXT_PROP_SAMPLE_MODE

| HD3M_ST_EXT_PROP_SAMPLE_INTERVAL | HD3M_ST_EXT_PROP_SAMPLE_START_DATE

| HD3M_ST_EXT_PROP_SAMPLE_TYPE | HD3M_ST_EXT_PROP_CALC_PERIOD;

nRet = st3_add_tags(1, &statTagSave, &mask, "", &statTagSave.nTagID, &nErrCode);

if (nRet != RD_SUCCESS)

{

printf("add stat tag[%s] failed, error code [%d]!\n", statTagSave.szTagName, nRet);

nt3_disconnect();

return -1;

}

printf("add tags[%s] successful!\n", statTagSave.szTagName);

//query tags by condition

filterItem[0].nItemID = HD3_TAG_COL_COMM_PROP_TAG_NAME;

filterItem[0].nRelation = HD3_RELATION_LIKE;

strcpy(filterItem[0].szValue, "*");

filterItem[1].nItemID = HD3_TAG_COL_COMM_PROP_TAG_TYPE;

filterItem[1].nRelation = HD3_RELATION_EQUAL;

sprintf(filterItem[1].szValue, "%d", HD3_STATS_TYPE_MIN);

filterSet.nSize = 2;

filterSet.pItem = filterItem;

mask.nCommMask = HD3M_COMM_PROP_TAG_NAME;

mask.nExtMask = 0;

nRet = st3_query_tags_cond(&filterSet, &mask, &hIter);

if (nRet != RD_SUCCESS)

{

printf("query tags by condition failed, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

while (true)

{

nRet = ut3_get_item_step(hIter, &statTagQuery);

if (RD_SUCCESS == nRet)

{

nTagNum ++;

printf("query tag successful, tag name is %s!\n", statTagQuery.szTagName);

}

else if (EC_HD_API_QUERY_END == nRet)

{

printf("query tag complete!\n");

break;

}

else

{

printf("query tag failed, error code [%d]!\n", nRet);

break;

}

}

printf("you have queried %d stat tags totally!\n", nTagNum);

ut3_free_handle(hIter);

//query page tag by condition

pageQueryParam.itemSet = filterSet;

pageQueryParam.mask = mask;

pageQueryParam.nCapacity = 20;

pageQueryParam.nStartID = 0;

nRet = st3_query_specify_page_tags_cond(&pageQueryParam, &hIter);

if (nRet != RD_SUCCESS)

{

printf("query tags by condition failed, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

nTagNum = 0;

while (true)

{

nRet = ut3_get_item_step(hIter, &statTagQuery);

if (RD_SUCCESS == nRet)

{

nTagNum ++;

printf("query tag successful, tag name is %s!\n", statTagQuery.szTagName);

}

else if (EC_HD_API_QUERY_END == nRet)

{

printf("query tag complete!\n");

break;

}

else

{

printf("query tag failed, error code [%d]!\n", nRet);

break;

}

}

printf("you have queried %d stat tags totally!\n", nTagNum);

ut3_free_handle(hIter);

//query tag id

uint32 nTagID = 0;

nRet = tag3_query_id_by_name(szTagName_1, &nTagID);

if (nRet != RD_SUCCESS)

{

printf("query tag id failed, stat tag name[%s], error code[%d]!\n", szTagName_1, nRet);

nt3_disconnect();

return -1;

}

printf("stat tag[%s] query tag id successful, tag id[%d]!\n", szTagName_1, nTagID);

//modify tag desc

strcpy(statTagSave.szDescriptor, "stat tag descriptor is modified");

mask.nCommMask = HD3M_COMM_PROP_DESCRIPTOR;

mask.nExtMask = 0;

nRet = st3_modify_tag_prop(nTagID, &statTagSave, &mask);

if (nRet != RD_SUCCESS)

{

printf("modify stat tag failed, tag id[%d], error code[%d]!\n", nTagID, nRet);

nt3_disconnect();

return -1;

}

printf("modify stat tag successful, tag id[%d]!\n", nTagID);

//modify tag desc

strcpy(statTagSave.szDescriptor, "stat tag descriptor is modified");

mask.nCommMask = HD3M_COMM_PROP_DESCRIPTOR;

mask.nExtMask = 0;

nRet = st3_modify_tags_prop(1, &nTagID, &statTagSave, &mask, &nErrCode);

if (nRet != RD_SUCCESS)

{

printf("modify stat tag failed, tag id[%d], error code[%d]!\n", nTagID, nRet);

nt3_disconnect();

return -1;

}

printf("modify stat tag successful, tag id[%d]!\n", nTagID);

//query tag prop

nRet = st3_query_tag_prop(nTagID, &statTagQuery);

if (nRet != RD_SUCCESS)

{

printf("query stat tag prop failed, tag id[%d], error code[%d]!\n", nTagID, nRet);

nt3_disconnect();

return -1;

}

printf("query stat tag prop successful, tag id[%d], tag name[%s], tag description[%s]!\n",

statTagQuery.nTagID, statTagQuery.szTagName, statTagQuery.szDescriptor);

//delete tag

nRet = tag3_delete_tag(nTagID);

if (nRet != RD_SUCCESS)

{

printf("delete stat tag failed, tag id[%d], error code[%d]!\n", nTagID, nRet);

nt3_disconnect();

return -1;

}

printf("delete stat tag successful, tag id[%d]!\n", nTagID);

nt3_disconnect();

return 0;

}

//*/

©2015. All Rights Reserved.


st3_query_tags_cond

Navigation: C++ > 统计管理接口 > 统计点 >

st3_query_tags_cond

 Return to chapter overview

·函数

§条件查询满足过滤项的统计点的属性

int32 st3_query_tags_cond(

const HD3FilterItemSet* pSet,

const HD3Mask* pMask,

HD3HANDLE* phResultSet

);

·参数

§pSet

[in] 过滤项集合

§pMask

[in] 查询结果属性掩码

§phResultSet

[out] 查询迭代器

·返回值

添加成功，返回RD_SUCCESS。失败返回其它错误码，见error_code.h

·说明

使用ut3_get_item_step(HD3HANDLE, HD3StatsTagProp)获取统计点属性

·举例

示例代码参见统计点接口。

§st3_query_tags_cond

§st3_query_tag_prop

§st3_modify_tag_prop

§st3_modify_tags_prop

§st3_query_specify_page_tags_cond

§st3_add_tag

§st3_add_tags

©2015. All Rights Reserved.


st3_query_tag_prop

Navigation: C++ > 统计管理接口 > 统计点 >

st3_query_tag_prop

 Return to chapter overview

·函数

§根据TagID查询报警点属性

int32 st3_query_tag_prop(

uint32 nTagID,

HD3StatsTagProp* pProp

);

·参数

§nTagID

[in] 统计点ID

§pTagProp

[out] 统计点属性，包含所有属性

·返回值

添加成功，返回RD_SUCCESS。失败返回其它错误码，见error_code.h

·说明

无

·举例

示例代码参见统计点接口。

§st3_query_tags_cond

§st3_query_tag_prop

§st3_modify_tag_prop

§st3_modify_tags_prop

§st3_query_specify_page_tags_cond

§st3_add_tag

§st3_add_tags

©2015. All Rights Reserved.


st3_modify_tag_prop

Navigation: C++ > 统计管理接口 > 统计点 >

st3_modify_tag_prop

 Return to chapter overview

·函数

修改统计点属性

int32 st3_modify_tag_prop(

uint32 nTagID,

const HD3StatsTagProp* pProp,

HD3Mask* pMask

);

·参数

§nTagID

[in] 统计点ID

§pProp

[in] 统计点属性

§nPropMask

[in] 属性掩码

·返回值

添加成功，返回RD_SUCCESS。失败返回其它错误码，见error_code.h

·说明

无

·举例

示例代码参见统计点接口。

§st3_query_tags_cond

§st3_query_tag_prop

§st3_modify_tag_prop

§st3_modify_tags_prop

§st3_query_specify_page_tags_cond

§st3_add_tag

§st3_add_tags

©2015. All Rights Reserved.


st3_query_specify_page_tags_cond

Navigation: C++ > 统计管理接口 > 统计点 >

st3_query_specify_page_tags_cond

 Return to chapter overview

·函数

§分页查询

int32 st3_query_specify_page_tags_cond(

const HD3PageQueryTagParam* pParam,

HD3HANDLE* phResultSet

);

·参数

§pParam

[in] 查询条件参数

§phResultSet

[out] 查询迭代器

·返回值

添加成功，返回RD_SUCCESS。失败返回其它错误码，见error_code.h

·说明

使用ut3_get_item_step(HD3HANDLE, HD3StatsTagProp*)获取统计点属性

·举例

示例代码参见统计点接口。

§st3_query_tags_cond

§st3_query_tag_prop

§st3_modify_tag_prop

§st3_modify_tags_prop

§st3_query_specify_page_tags_cond

§st3_add_tag

§st3_add_tags

©2015. All Rights Reserved.


st3_add_tags

Navigation: C++ > 统计管理接口 > 统计点 >

st3_add_tags

 Return to chapter overview

·函数

§添加统计点(批量接口)

int32 st_add_tags(

int32 nTagNum,

const HD3StatsTagProp* pTagPropArray,

const HD3Mask* pMaskArray,

const char* szDataNodeName,

uint32* pTagIDArray,

int32* pErrCodeArray

);

·参数

§int32 nTagNum

[in] 点个数

§pTagPropArray

[in] 统计点属性数组

§pMaskArray

[in] 属性掩码数组

§szDataNodeName

[in] 数据节点名称，指定数据节点名称可以将点添加到指定数据节点，如果想由系统自动分配节点传入""或者NULL。

§pTagIDArray

[out]TagID数组

§pErrCodeArray

[out] 错误码数组

·返回值

添加成功，返回RD_SUCCESS。失败返回其它错误码，见error_code.h

·说明

无

·举例

示例代码参见统计点接口。

§st3_query_tags_cond

§st3_query_tag_prop

§st3_modify_tag_prop

§st3_modify_tags_prop

§st3_query_specify_page_tags_cond

§st3_add_tag

§st3_add_tags

©2015. All Rights Reserved.


st3_add_tag

Navigation: C++ > 统计管理接口 > 统计点 >

st3_add_tag

 Return to chapter overview

·函数

§添加统计点

int32 st3_add_tag(

const HD3StatsTagProp* pTagProp,

const HD3Mask* pMask,

const char* szDataNodeName,

uint32* pnTagID

);

·参数

§pTagProp

[out]统计点属性

§nPropMask

[in]属性掩码

§szDataNodeName

[in] 数据节点名称，指定数据节点名称可以将点添加到指定数据节点，如果想由系统自动分配节点传入""或者NULL。

§pnTagID

[in]添加成功，该点对应的ID

·返回值

添加成功，返回RD_SUCEESS。添加失败返回错误码，见error_code.h。

·举例

示例代码参见统计点接口。

§st3_query_tags_cond

§st3_query_tag_prop

§st3_modify_tag_prop

§st3_modify_tags_prop

§st3_query_specify_page_tags_cond

§st3_add_tag

§st3_add_tags

©2015. All Rights Reserved.


st3_modify_tags_prop

Navigation: C++ > 统计管理接口 > 统计点 >

st3_modify_tags_prop

 Return to chapter overview

·函数

§修改统计点属性

int32 st3_modify_tags_prop(

int32 nTagNum,

uint32* pTagIDArray,

const HD3StatsTagProp* pTagPropArray,

HD3Mask* pMaskArray,

int32* pErrCodeArray

);

·参数

§nTagNum

[in]点个数

§nTagID

[in]TagID数组

§pTagPropArray

[in]统计点属性数组

§nPropMask

[in]属性掩码数组

§pErrCodeArray

[out]错误码数组

·返回值

添加成功，返回RD_SUCEESS。添加失败返回错误码，见error_code.h。

·举例

示例代码参见统计点接口。

§st3_query_tags_cond

§st3_query_tag_prop

§st3_modify_tag_prop

§st3_modify_tags_prop

§st3_query_specify_page_tags_cond

§st3_add_tag

§st3_add_tags

©2015. All Rights Reserved.


统计计算

Navigation: C++ > 统计管理接口 >

统计计算

 Return to chapter overview

《统计计算》主要介绍介绍一下接口：

§st3_tag_stats_calc

stats calc

///* Stats Calc Function

#include "hdKingAPI.h"

#include "error_code.h"

#include "data_types.h"

#include "hd3Struct.h"

#include <stdio.h>

#include <string.h>

#include <Windows.h>

int32 main()

{

int32 nRet = RD_SUCCESS;

HD3Connection conn;

HD3PtTagProp tag;

const char* szTagName = "szTagName";

int32 nRecNum = 3;

HD3Record records[3];

uint32 nTagIDs[3];

int32 nErrorCodes[3];

double dValue;

float fPercentGood = 0.0;

int32 i = 0;

HD3Mask mask;

HD3StRelatedParam stParam;

HD3TimeRegion stTimeRegion;

//connect

strcpy(conn.szAddress, "127.0.0.1");

conn.nPort = 5673;

conn.nTimeout = 3;

nRet = nt3_connect(&conn);

if (nRet != RD_SUCCESS)

{

printf("connect to server failed, error code[%d]!\n", nRet);

return -1;

}

printf("connect to server successful!\n");

//login

nRet = sc3_login("admin", "admin");

if (nRet != RD_SUCCESS)

{

printf("login failed, error code[%d]!\n", nRet);

return -1;

}

printf("login successful!\n");

//add tag

strcpy(tag.szTagName, szTagName);

tag.nTagType = HD3_TAG_TYPE_INT32;

mask.nCommMask = HD3M_COMM_PROP_TAG_NAME | HD3M_COMM_PROP_TAG_TYPE;

mask.nExtMask = 0;

nRet = pt3_add_tag(&tag, &mask, "", &tag.nTagID);

if (nRet != RD_SUCCESS)

{

printf("add tags[%s] failed, error code [%d]!\n", tag.szTagName, nRet);

nt3_disconnect();

return -1;

}

printf("add tags[%s] successful!\n", tag.szTagName);

Sleep(30000);

// save snapshots

for (i = 0; i < nRecNum; i ++)

{

nTagIDs[i] = tag.nTagID;

records[i].nSec = 1 + i;

records[i].nMsec = 0;

records[i].nQuality = 192;

records[i].value.nInt32 = records[i].nSec;

}

nRet = sn3_save_snapshots(nRecNum, nTagIDs, records, nErrorCodes);

if (nRet != RD_SUCCESS)

{

printf("save snapshots failed, error code[%d]!\n", nRet);

nt3_disconnect();

return -1;

}

printf("save %d record successful!\n", nRecNum);

//calc arith mean using raw data

stTimeRegion.bLeftClosed = true;

stTimeRegion.bRightClosed = true;

stTimeRegion.left.nSec = 0;

stTimeRegion.left.nMsec = 0;

stTimeRegion.right.nSec = records[nRecNum - 1].nSec + 1;

stTimeRegion.right.nMsec = 0;

stParam.pTimeRegions = &stTimeRegion;

stParam.nTimeRegionNum = 1;

stParam.fPercentGood = 0;

stParam.nStatsType = HD3_STATS_TYPE_ARITH_MEAN;

stParam.nSampleType = HD3_STATS_SAMPLE_TYPE_RAW;

strcpy(stParam.szFilterExpr, "");

nRet = st3_tag_stats_calc(tag.nTagID, &stParam, &dValue);

if (nRet != RD_SUCCESS)

{

printf("save snapshots failed, error code[%d]!\n", nRet);

nt3_disconnect();

return -1;

}

printf("save %d record successful!\n", nRecNum);

nt3_disconnect();

return 0;

}

//*/

©2015. All Rights Reserved.


st3 tag stats calc

Navigation: C++ > 统计管理接口 > 统计计算 >

st3 tag stats calc

 Return to chapter overview

·函数

§统计计算接口：

int32 st3_tag_stats_calc(

uint32 nTagID,

const HD3StRelatedParam* pParam,

double* pfValue

);

·参数

§nTagID

[in]点id

§pStatsParam

[in]统计参数

§pValue

[out]统计值

·返回值

成功，返回RD_SUCCESS。失败返回错误码，见error_code.h

·说明

类型 | 属性名 | 说明
uint8 | nStatsType | 统计类型HD3_STATS_TYPE_MAX、HD3_STATS_TYPE_MIN、HD3_STATS_TYPE_SUM、HD3_STATS_TYPE_LAST、HD3_STATS_TYPE_PCT_GOOD、HD3_STATS_TYPE_ARITH_MEAN算术均值、HD3_STATS_TYPE_TIME_WEIGHTED_MEAN、HD3_STATS_TYPE_INTEGRAL、HD3_STATS_TYPE_COUNT_CHG_VALUE 、HD3_STATS_TYPE_COUNT_CHG_FROM_LESS_TO_GREAT、HD3_STATS_TYPE_COUNT_CHG_FROM_GREAT_TO_LESS、HD3_STATS_TYPE_DIFF、HD3_STATS_TYPE_COUNT_IN_RANGE、HD3_STATS_TYPE_COUNT_NOT_IN_RANGE、HD3_STATS_TYPE_RANGE、HD3_STATS_TYPE_STANDARD_DEVIATION、HD3_STATS_TYPE_TIME_GT、HD3_STATS_TYPE_TIME_GE、HD3_STATS_TYPE_TIME_EQ、HD3_STATS_TYPE_TIME_NE、HD3_STATS_TYPE_TIME_LT、HD3_STATS_TYPE_TIME_LE、HD3_STATS_TYPE_TIME_IN_RANGE、HD3_STATS_TYPE_TIME_NOT_IN_RANGE
int32 | nTimeRegionNum | 统计时间区间个数>=1
HD3TimeRegion* | pTimeRegions | 统计时间区间,时间区间之间不可以有交集，区间[a,b]，a < b
float | fPercentGood | 信任度(Good的数据个数百分比大于或等于该比例时认为计算出的结果是可信的)，0-100
uint8 | nSampleType | 采样模式，HD_STATS_SAMPLE_TYPE_RAW：原始点，HD_STATS_SAMPLE_TYPE_LINER_INTERP：线性插值， HD_STATS_SAMPLE_TYPE_PREV_INTERP: 前向插值
char | szFilterExpr[HD_LEN_FILTER_EXPR] | 数据过滤表达式, 传入空字符串表示不过滤
uint8 | nFilterFailMode | 过滤失败时对采样数据的处理，0为过滤采样数据，1为不过滤采样数据
double | nExtParam1 | 计数和计时的参数, 值变化的参数，区间变化的第一个参数，在区间不在区间的第一个参数
double | nExtParam2 | 计数和计时的参数，区间变化的第二个参数，在区间不在区间的第二个参数
int32 | nOffset | 采样模式为插值时，插值点为startTime+nOffset,startTime+nOffset+nPeriod, 单位为秒
int32 | nPeriod | 采样模式为插值时，插值点的间隔为nPeriod, 单位为秒

·补充说明

§针对TagA采样数据RecA在某时刻TimeA的采样数据，过滤表达式中的Tag点的数据获取规则是，表达式中的TagA的数据为采样数据RecA，非TagA的点取采样时刻TimeA的线性插值记录。

§如果过滤表达式执行失败如插值失败，数据质量为bad等，这个采样点是否过滤由过滤失败参数nFilterFailMode决定。

§只有数据质量为Good的数据才需要过滤，不管过滤结果如何，置信度都是Good个数除以总点数。如10个点3个Good，1个Good被过滤，置信度仍然是3/10.

§HD_STATS_TYPE_DIFF不支持多个区间

§计时的时间单位为毫秒

·举例

示例代码参见统计计算接口。

§st3_query_tags_cond

§st3_query_tag_prop

§st3_modify_tag_prop

§st3_modify_tags_prop

§st3_query_specify_page_tags_cond

§st3_add_tag

§st3_add_tags

©2015. All Rights Reserved.


报警管理接口

Navigation: C++ >

报警管理接口

 Return to chapter overview

《报警管理接口》主要内容包括：

·报警组

§am3_add_group

§am3_delete_group

§am3_modify_group_desc

§am3_query_group_child_groups

§am3_query_group_child_tags

§am3_query_group_props

§am3_query_groupid

·报警点

§am3_add_tag

§am3_add_tags

§am3_modify_tag_prop

§am3_modify_tags_prop

§am3_query_tag_prop

§am3_query_tags_cond

§am3_query_specify_page_tags_cond

·报警记录

§am_acknowledge_alarm

§am_query_snapshots

§am_register_alarm_record_info

§am_unregister_alarm_record_info

§am_query_tag_records

§am_query_tags_all_records

§am_query_group_records

§am_comment_alarms

©2015. All Rights Reserved.


报警组

Navigation: C++ > 报警管理接口 >

报警组

 Return to chapter overview

《报警组》的接口主要包括：

§am3_add_group

§am3_delete_group

§am3_modify_group_desc

§am3_query_group_child_groups

§am3_query_group_child_tags

§am3_query_group_props

§am3_query_groupid

alarm group

copycode !MISSING PHRASE 'COPYCODE'!

//*Alarm Group Function

#include "hdKingAPI.h"

#include "error_code.h"

#include "data_types.h"

#include "hd3Struct.h"

#include <stdio.h>

#include <string.h>

int main()

{

int32 nRet = RD_SUCCESS;

HD3Connection conn;

uint32 nOrphenGroupID = 0;

const int32 ALARM_GROUP_COUNT = 2;

uint32 nGroupIDs[ALARM_GROUP_COUNT] = {0};

HD3AlarmGroup alarmGroups[ALARM_GROUP_COUNT];

memset(alarmGroups, 0, sizeof(alarmGroups));

int32 nErrCodes[ALARM_GROUP_COUNT];

HD3PtTagProp normalTag;

HD3HANDLE hIter = NULL;

uint32 nChildGroupID = 0;

uint32 nChildAlarmTagID = 0;

HD3AlarmTagProp alarmTag;

int32 i = 0;

HD3Mask mask;

uint32 nPtTagID = 0;

uint32 nAlarmTagID = 0;

HD3AlarmGroup queryAlarmGroups[ALARM_GROUP_COUNT];

//connect

strcpy(conn.szAddress, "127.0.0.1");

conn.nPort = 5673;

conn.nTimeout = 3;

nRet = nt3_connect(&conn);

if (nRet != RD_SUCCESS)

{

printf("connect to server failed, error code[%d]!\n", nRet);

return -1;

}

//login

nRet = sc3_login("admin", "admin");

if (nRet != RD_SUCCESS)

{

printf("login failed, error code[%d]!\n", nRet);

return -1;

}

printf("login successful!\n");

//add alarm groups

for (i = 0; i < ALARM_GROUP_COUNT; i ++)

{

sprintf(alarmGroups[i].szName, "alarm_group_name_%d", i);

sprintf(alarmGroups[i].szDesc, "alarm_group_desc_%d", i);

alarmGroups[i].nParentID = nOrphenGroupID;

nRet = am3_add_group(alarmGroups+i, &nOrphenGroupID);

if (nRet != RD_SUCCESS)

{

printf("add alarm group[%s] failed, error code [%d]!\n", alarmGroups[i].szName, nRet);

nt3_disconnect();

return -1;

}

printf("add alarm group[%s] successful!\n",alarmGroups[i].szName);

}

//query alarm group id

for (i = 0; i < ALARM_GROUP_COUNT; i ++)

{

nRet = am3_query_group_id(alarmGroups[i].szName, alarmGroups[i].nParentID, &(nGroupIDs[i]));

if (nRet != RD_SUCCESS)

{

printf("query alarm group [%s] id failed, error code [%d]!\n", alarmGroups[i].szName, nRet);

nt3_disconnect();

return -1;

}

printf("query alarm group[%s] id successful!\n",alarmGroups[i].szName);

}

//query alarm group props

for (i = 0; i < ALARM_GROUP_COUNT; i ++)

{

nRet = am3_query_group_props(ALARM_GROUP_COUNT, nGroupIDs, queryAlarmGroups, nErrCodes);

if (nRet != RD_SUCCESS)

{

printf("query alarm group [id:%d] prop failed, error code [%d]!\n", nGroupIDs[i], nRet);

nt3_disconnect();

return -1;

}

printf("query alarm group[%d] prop successful!\n",nGroupIDs[i]);

}

//modify alarm group name and desc

for (i = 0; i < ALARM_GROUP_COUNT; i ++)

{

strcat(alarmGroups[i].szName, "_modify");

strcat(alarmGroups[i].szDesc, "_modify");

if (i >= 1)

{

alarmGroups[i].nParentID = nGroupIDs[i - 1];

}

nRet = am3_modify_group(nGroupIDs[i], alarmGroups + i);

if (nRet != RD_SUCCESS)

{

printf("modify alarm group [id:%d] name failed, error code [%d]!\n", nGroupIDs[i], nRet);

nt3_disconnect();

return -1;

}

printf("modify alarm group[id:%d] name successful!\n",nGroupIDs[i]);

}

//query child alarm group

for (i = 0; i < ALARM_GROUP_COUNT; i ++)

{

nRet = am3_query_group_child_groups(nGroupIDs[i], &hIter);

if (nRet != RD_SUCCESS)

{

printf("query alarm group [id:%d] child group failed, error code [%d]!\n", nGroupIDs[i], nRet);

nt3_disconnect();

return -1;

}

while (true)

{

nRet = ut3_get_item_step(hIter, &nChildGroupID);

if (RD_SUCCESS == nRet)

{

printf("query alarm group [id:%d] child group successful, child group id %d!\n", nGroupIDs[i], nChildGroupID);

}

else if (EC_HD_API_QUERY_END == nRet)

{

printf("query alarm group [id:%d] child group complete!\n", nGroupIDs[i]);

break;

}

else

{

printf("query alarm group [id:%d] child group, error code [%d]!\n", nGroupIDs[i], nRet);

break;

}

}

ut3_free_handle(hIter);

}

//add normal tag

strcpy(normalTag.szTagName, "szNormalTag");

normalTag.nTagType = HD3_TAG_TYPE_INT32;

mask.nCommMask = HD3M_COMM_PROP_TAG_NAME | HD3M_COMM_PROP_TAG_TYPE;

mask.nExtMask = 0;

nRet = pt3_add_tag(&normalTag, &mask, "", &nPtTagID);

if (nRet != RD_SUCCESS)

{

printf("add tag[%s] failed, error code [%d]!\n", normalTag.szTagName, nRet);

nt3_disconnect();

return -1;

}

printf("add tag[%s] successful!\n", normalTag.szTagName);

// add alarm tag

for (i = 0; i < ALARM_GROUP_COUNT; i ++)

{

sprintf(alarmTag.szTagName, "alarmTag_%d", i);

strcpy(alarmTag.szSourceTagName, normalTag.szTagName);

strcpy(alarmTag.szTest1, "GT(100)");

strcpy(alarmTag.szAction1, "1_hihi_unack");

alarmTag.nAlarmGroupID = nGroupIDs[i];

mask.nCommMask = HD3M_COMM_PROP_TAG_NAME;

mask.nExtMask = HD3M_AM_EXT_PROP_SOURCE_TAG | HD3M_AM_EXT_PROP_TEST1

| HD3M_AM_EXT_PROP_ACTION1 | HD3M_AM_EXT_PROP_ALARM_GROUP_ID;

nRet = am3_add_tag(&alarmTag, &mask, "", &nAlarmTagID);

if (nRet != RD_SUCCESS)

{

printf("add alarm tag[%s] failed, error code [%d]!\n", alarmTag.szTagName, nRet);

nt3_disconnect();

return -1;

}

printf("add alarm tag[%s] successful!\n", alarmTag.szTagName);

}

//query alarm group tag

for (i = 0; i < ALARM_GROUP_COUNT; i ++)

{

nRet = am3_query_group_child_tags(nGroupIDs[i], &hIter);

if (nRet != RD_SUCCESS)

{

printf("query alarm group [id:%d] child tags failed, error code [%d]!\n", nGroupIDs[i], nRet);

nt3_disconnect();

return -1;

}

while (true)

{

nRet = ut3_get_item_step(hIter, &nChildAlarmTagID);

if (RD_SUCCESS == nRet)

{

printf("query alarm group [id:%d] child tag successful, child tag id %d!\n", nGroupIDs[i], nChildAlarmTagID);

nRet = tag3_delete_tag(nChildAlarmTagID);

if (nRet != RD_SUCCESS)

{

printf("delete alarm tag [id:%d] failed, error code [%d]!\n", nChildAlarmTagID, nRet);

ut3_free_handle(hIter);

nt3_disconnect();

return -1;

}

printf("delete alarm tag [id:%d] successful!\n", nChildAlarmTagID);

}

else if (EC_HD_API_QUERY_END == nRet)

{

printf("query alarm group [id:%d] child tag complete!\n", nGroupIDs[i]);

break;

}

else

{

printf("query alarm group [id:%d] child tag, error code [%d]!\n", nGroupIDs[i], nRet);

break;

}

}

ut3_free_handle(hIter);

}

//delete alarm groups

for (i = 0; i < ALARM_GROUP_COUNT; i ++)

{

nRet = am3_delete_group(nGroupIDs[ALARM_GROUP_COUNT - i - 1]);

if (nRet != RD_SUCCESS)

{

printf("delete alarm group [id:%d] failed, error code [%d]!\n", nGroupIDs[ALARM_GROUP_COUNT - i - 1], nRet);

nt3_disconnect();

return -1;

}

printf("delete alarm group [id:%d] successful!\n", nGroupIDs[ALARM_GROUP_COUNT - i - 1]);

}

//disconnect

nt3_disconnect();

return 0;

}

//*/

©2015. All Rights Reserved.


am3_add_group

Navigation: C++ > 报警管理接口 > 报警组 >

am3_add_group

 Return to chapter overview

·函数

int32 am3_add_group(

const HD3AlarmGroup* pGroup,

uint32* pnGroupID

);

·参数

§pGroup

[in] 报警组。

§pnGroupID

[in] 报警组ID。

·返回值

添加成功，返回RD_SUCCESS。添加返回其它错误码，见error_code.h

·举例

示例代码参见报警组接口。

参考：

§am3_add_group

§am3_delete_group

§am3_modify_group_desc

§am3_query_group_child_groups

§am3_query_group_child_tags

§am3_query_group_props

§am3_query_groupid

©2015. All Rights Reserved.


am3_delete_group

Navigation: C++ > 报警管理接口 > 报警组 >

am3_delete_group

 Return to chapter overview

·函数

§在一台服务器中删除一个指定报警组

int32 am3_delete_group(

uint32 nGroupID

);

·参数

§nGroupID

[in] 报警组ID。

·返回值

删除成功，返回RD_SUCCESS。删除失败返回其它错误码，见error_code.h。

·说明

当报警组下面有子报警组或者报警点时，该报警组不能被删除。

·举例

示例代码参见报警组接口。

参见:

§am3_add_group

§am3_delete_group

§am3_modify_group_desc

§am3_query_group_child_groups

§am3_query_group_child_tags

§am3_query_group_props

§am3_query_groupid

©2015. All Rights Reserved.


am3_modify_group

Navigation: C++ > 报警管理接口 > 报警组 >

am3_modify_group

 Return to chapter overview

·函数

§在一台服务器中修改指定报警组的描述

int32 am3_modify_group(

uint32 nGroupID,

const HD3AlarmGroup*pGroup

);

·参数

§nGroupID

[in] 报警组ID。

§pGroup

[in] 报警组。

·返回值

修改成功，返回RD_SUCCESS。修改失败返回其它错误码，见error_code.h。

·举例

示例代码参见报警组接口。

参见：

§am3_add_group

§am3_delete_group

§am3_modify_group_desc

§am3_query_group_child_groups

§am3_query_group_child_tags

§am3_query_group_props

§am3_query_groupid

©2015. All Rights Reserved.


am3_query_group_child_groups

Navigation: C++ > 报警管理接口 > 报警组 >

am3_query_group_child_groups

 Return to chapter overview

·函数

§在一台服务器中查询一个报警组下面的子报警组

int32 am3_query_group_child_groups(

uint32 nGroupID,

HD3HANDLE* phResultSet

);

·参数

§nGroupID

[in] 报警组ID。

§phResultSet

[out] 查询迭代器。

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h。

·说明

调用该接口成功后会获得一个查询迭代器的句柄，然后调用ut3_get_item_step接口，传入迭代器句柄和分配的空间(uint32*)，返回RD_SUCCESS就可以获得第一个子报警组的ID，再调用ut3_get_item_step返回RD_SUCCESS就可以获得第二个子报警组的ID。如此循环的查询直到调用ut3_get_item_step返回错误码为EC_HD_API_QUERY_END表明所有的子报警组的ID都查询完毕了。查询完毕后调用ut3_free_handle方法来释放迭代器。

·举例

示例代码参见报警组接口。

参见：

§am3_add_group

§am3_delete_group

§am3_modify_group_desc

§am3_query_group_child_groups

§am3_query_group_child_tags

§am3_query_group_props

§am3_query_groupid

©2015. All Rights Reserved.


am3_query_group_child_tags

Navigation: C++ > 报警管理接口 > 报警组 >

am3_query_group_child_tags

 Return to chapter overview

·函数

在一台服务器中查询一个报警组下面的子报警点

int32 am3_query_group_child_tags(

uint32 nGroupID,

HD3HANDLE* phResultSet

);

·参数

§nGroupID

[in] 报警组ID。

§phResultSet

[out] 查询迭代器。

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h。

·说明

调用该接口成功后会获得一个查询迭代器的句柄，然后调用ut3_get_item_step接口，传入迭代器句柄和分配的空间(uint32*)，返回RD_SUCCESS就可以获得第一个子报警点的ID，再调用ut3_get_item_step返回RD_SUCCESS就可以获得第二个子报警点的ID。如此循环的查询直到调用ut3_get_item_step返回错误码为EC_HD_API_QUERY_END表明所有的子报警点的ID都查询完毕了。查询完毕后调用ut3_free_handle方法来释放迭代器.

·举例

示例代码参见报警组接口。

参数：

§am3_add_group

§am3_delete_group

§am3_modify_group_desc

§am3_query_group_child_groups

§am3_query_group_child_tags

§am3_query_group_props

§am3_query_groupid

©2015. All Rights Reserved.


am3_query_group_props

Navigation: C++ > 报警管理接口 > 报警组 >

am3_query_group_props

 Return to chapter overview

·函数

§在一台服务器中查询多个报警组的属性

int32 am3_query_group_props(

int32 nGroupNum,

uint32* pGroupIDArray,

HD3AlarmGroup* pGroupArray,

int32* pErrCodeArray

);

·参数

§nGroupNum

[in] 报警组个数。

§pGroupIDArray

[in] 报警组ID数组。

§pGroupArray

[out] 报警组数组。

§pErrCodeArray

[out] 错误码数组。

·返回值

查询成功，返回RD_SUCCESS。一部分成功返回EC_HD_API_QUERY_ALARM_GROUP_PROPS_FAILED，查询失败返回其它错误码，见error_code.h。

·说明

返回RD_SUCCESS表明所有的组的属性查询都成功。

pErrCodeArray可以知道哪些组查询成功。

返回其它错误码表明查询失败。

·举例

示例代码参见报警组接口。

参见：

§am3_add_group

§am3_delete_group

§am3_modify_group_desc

§am3_query_group_child_groups

§am3_query_group_child_tags

§am3_query_group_props

§am3_query_groupid

©2015. All Rights Reserved.


am3_query_group_id

Navigation: C++ > 报警管理接口 > 报警组 >

am3_query_group_id

 Return to chapter overview

·函数

§在一台服务器中根据报警组的名称和报警组的父组ID查询报警组的ID

int32 am3_query_group_id(

const char* szName,

uint32 nParentID,

uint32* pnGroupID

);

·参数

§szName

[in] 报警组名称。

§nParentID

[in] 报警组父组ID。

§pnGroupID

[out] 报警组ID。

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h。

·说明

报警组的ID是唯一的，同一个父报警组下的报警组名称是不能重复的，根据父组ID和报警组名称可以唯一的查询到一个报警组ID。

·举例

示例代码参见报警组接口。

参见：

§am3_add_group

§am3_delete_group

§am3_modify_group_desc

§am3_query_group_child_groups

§am3_query_group_child_tags

§am3_query_group_props

§am3_query_groupid

©2015. All Rights Reserved.


报警点

Navigation: C++ > 报警管理接口 >

报警点

 Return to chapter overview

《报警点》主要接口包括：

§am3_add_tag

§am3_add_tags

§am3_modify_tag_prop

§am3_modify_tags_prop

§am3_query_tag_prop

§am3_query_tags_cond

§am3_query_specify_page_tags_cond

alarm tag

///*Alarm Tag Function

#include "hdKingAPI.h"

#include "error_code.h"

#include "data_types.h"

#include "hd3Struct.h"

#include <stdio.h>

#include <string.h>

int main()

{

int32 nRet = RD_SUCCESS;

HD3Connection conn;

HD3PtTagProp normalTag;

HD3AlarmTagProp alarmTagSave;

HD3AlarmTagProp alarmTagQuery;

const char* szTagName_1 = "szAlarmTagName_1";

const char* szTagName_2 = "szAlarmTagName_2";

HD3FilterItem filterItem[2];

HD3FilterItemSet filterSet;

HD3HANDLE hIter = NULL;

int32 nTagNum = 0;

int32 nErrCode = 0;

HD3Mask mask;

HD3PageQueryTagParam pageQueryParam;

uint32 nTagID = 0;

//connect

strcpy(conn.szAddress, "127.0.0.1");

conn.nPort = 5673;

conn.nTimeout = 3;

nRet = nt3_connect(&conn);

if (nRet != RD_SUCCESS)

{

printf("connect to server failed, error code[%d]!\n", nRet);

return -1;

}

//login

nRet = sc3_login("admin", "admin");

if (nRet != RD_SUCCESS)

{

printf("login failed, error code[%d]!\n", nRet);

return -1;

}

printf("login successful!\n");

//add normal tag

strcpy(normalTag.szTagName, "szNormalTag");

normalTag.nTagType = HD3_TAG_TYPE_INT32;

mask.nCommMask = HD3M_COMM_PROP_TAG_NAME | HD3M_COMM_PROP_TAG_TYPE;

mask.nExtMask = 0;

nRet = pt3_add_tag(&normalTag, &mask, "", &normalTag.nTagID);

if (nRet != RD_SUCCESS)

{

printf("add tag[%s] failed, error code [%d]!\n", normalTag.szTagName, nRet);

nt3_disconnect();

return -1;

}

printf("add tag[%s] successful!\n", normalTag.szTagName);

//add two alarm tag

strcpy(alarmTagSave.szTagName, szTagName_1);

strcpy(alarmTagSave.szSourceTagName, normalTag.szTagName);

strcpy(alarmTagSave.szTest1, "GT(100)");

strcpy(alarmTagSave.szAction1, "1_hihi_unack");

mask.nCommMask = HD3M_COMM_PROP_TAG_NAME;

mask.nExtMask = HD3M_AM_EXT_PROP_SOURCE_TAG | HD3M_AM_EXT_PROP_TEST1

| HD3M_AM_EXT_PROP_ACTION1;

nRet = am3_add_tag(&alarmTagSave, &mask, "", &alarmTagSave.nTagID);

if (nRet != RD_SUCCESS)

{

printf("add alarm tag[%s] failed, error code [%d]!\n", alarmTagSave.szTagName, nRet);

nt3_disconnect();

return -1;

}

printf("add alarm tag[%s] successful!\n", alarmTagSave.szTagName);

strcpy(alarmTagSave.szTagName, szTagName_2);

strcpy(alarmTagSave.szSourceTagName, normalTag.szTagName);

strcpy(alarmTagSave.szTest1, "LT(10)");

strcpy(alarmTagSave.szAction1, "2_lolo_unack");

mask.nCommMask = HD3M_COMM_PROP_TAG_NAME;

mask.nExtMask = HD3M_AM_EXT_PROP_SOURCE_TAG | HD3M_AM_EXT_PROP_TEST1

| HD3M_AM_EXT_PROP_ACTION1;

nRet = am3_add_tags(1, &alarmTagSave, &mask, "", &alarmTagSave.nTagID, &nErrCode);

if (nRet != RD_SUCCESS)

{

printf("add alarm tag[%s] failed, error code [%d]!\n", alarmTagSave.szTagName, nRet);

nt3_disconnect();

return -1;

}

printf("add alarm tag[%s] successful!\n", alarmTagSave.szTagName);

//query tags by condition

filterSet.nSize = 2;

filterSet.pItem = filterItem;

filterSet.pItem[0].nItemID = HD3_TAG_COL_COMM_PROP_TAG_NAME;

filterSet.pItem[0].nRelation = HD3_RELATION_LIKE;

strcpy(filterSet.pItem[0].szValue, "*");

filterSet.pItem[1].nItemID = HD3_TAG_COL_COMM_PROP_TAG_TYPE;

filterSet.pItem[1].nRelation = HD3_RELATION_EQUAL;

sprintf(filterSet.pItem[1].szValue, "%d", HD3_TAG_TYPE_DIGITAL);

mask.nCommMask = HD3M_COMM_PROP_TAG_NAME;

mask.nExtMask = 0;

nRet = am3_query_tags_cond(&filterSet, &mask, &hIter);

if (nRet != RD_SUCCESS)

{

printf("query alarm tags by condition failed, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

while (true)

{

nRet = ut3_get_item_step(hIter, &alarmTagQuery);

if (RD_SUCCESS == nRet)

{

nTagNum ++;

printf("query alarm tag successful, tag name is %s!\n", alarmTagQuery.szTagName);

}

else if (EC_HD_API_QUERY_END == nRet)

{

printf("query alarm tag complete!\n");

break;

}

else

{

printf("query alarm tag failed, error code [%d]!\n", nRet);

break;

}

}

printf("you have queried %d alarm tags totally!\n", nTagNum);

ut3_free_handle(hIter);

//query page

pageQueryParam.itemSet = filterSet;

pageQueryParam.mask.nCommMask = HD3M_COMM_PROP_TAG_NAME;

pageQueryParam.mask.nExtMask = 0;

pageQueryParam.nCapacity = 20;

pageQueryParam.nStartID = 0;

nRet = am3_query_specify_page_tags_cond(&pageQueryParam, &hIter);

if (nRet != RD_SUCCESS)

{

printf("query alarm tags by condition failed, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

nTagNum = 0;

while (true)

{

nRet = ut3_get_item_step(hIter, &alarmTagQuery);

if (RD_SUCCESS == nRet)

{

nTagNum ++;

printf("query alarm tag successful, tag name is %s!\n", alarmTagQuery.szTagName);

}

else if (EC_HD_API_QUERY_END == nRet)

{

printf("query alarm tag complete!\n");

break;

}

else

{

printf("query alarm tag failed, error code [%d]!\n", nRet);

break;

}

}

printf("you have queried %d alarm tags totally!\n", nTagNum);

ut3_free_handle(hIter);

//query tag id

nRet = tag3_query_id_by_name(szTagName_1, &nTagID);

if (nRet != RD_SUCCESS)

{

printf("query alarm tag id failed, alarm tag name[%s], error code[%d]!\n", szTagName_1, nRet);

nt3_disconnect();

return -1;

}

printf("alarm tag[%s] query tag id successful, alarm tag id[%d]!\n", szTagName_1, nTagID);

//modify tag props

mask.nCommMask = HD3M_COMM_PROP_DESCRIPTOR;

mask.nExtMask = 0;

strcpy(alarmTagSave.szDescriptor, "alarm tag descriptor is modified");

nRet = am3_modify_tag_prop(nTagID, &alarmTagSave, &mask);

if (nRet != RD_SUCCESS)

{

printf("modify alarm tag failed, tag id[%d], error code[%d]!\n", nTagID, nRet);

nt3_disconnect();

return -1;

}

printf("modify alarm tag successful, tag id[%d]!\n", nTagID);

//modify tags props

mask.nCommMask = HD3M_COMM_PROP_DESCRIPTOR;

mask.nExtMask = 0;

strcpy(alarmTagSave.szDescriptor, "alarm tag descriptor is modified");

nRet = am3_modify_tags_prop(1, &nTagID, &alarmTagSave, &mask, &nErrCode);

if (nRet != RD_SUCCESS)

{

printf("modify alarm tag failed, tag id[%d], error code[%d]!\n", nTagID, nRet);

nt3_disconnect();

return -1;

}

printf("modify alarm tag successful, tag id[%d]!\n", nTagID);

//query tag prop

nRet = am3_query_tag_prop(nTagID, &alarmTagQuery);

if (nRet != RD_SUCCESS)

{

printf("query alarm tag prop failed, tag id[%d], error code[%d]!\n", nTagID, nRet);

nt3_disconnect();

return -1;

}

printf("query alarm tag prop successful, tag id[%d], tag name[%s], tag description[%s]!\n",

alarmTagQuery.nTagID, alarmTagQuery.szTagName, alarmTagQuery.szDescriptor);

//delete alarm tag

nRet = tag3_delete_tag(nTagID);

if (nRet != RD_SUCCESS)

{

printf("delete alarm tag failed, tag id[%d], error code[%d]!\n", nTagID, nRet);

nt3_disconnect();

return -1;

}

printf("delete alarm tag successful, tag id[%d]!\n", nTagID);

nt3_disconnect();

return 0;

}

//*/

©2015. All Rights Reserved.


am3_add_tag

Navigation: C++ > 报警管理接口 > 报警点 >

am3_add_tag

 Return to chapter overview

·函数

§添加一个报警点

int32 am3_add_tag(

const HD3AlarmTagProp* pTagProp,

const HD3Mask* pMask,

const char* szDataNodeName,

uint32* pnTagID

);

·参数

§pTagProp

[in] 报警点属性。

§pMask

[in] 报警点属性掩码，表明要存储报警点的哪些属性。

szDataNodeName

[in] 数据节点名称，报警点将与报警源点创建在同一数据节点，请传入""或者NULL，传入指定的数据节点名称也不会生效。

§pnTagID

[out] 添加点成功，该点对应的ID

·返回值

添加成功，返回RD_SUCCESS。添加失败返回其它错误码，见error_code.h。

·说明

添加报警点时，报警点名称必须添加，其它属性可以选择性的添加，添加哪些属性有属性掩码决定。

·举例

示例代码参见报警点接口。

参见：

§am3_add_tag

§am3_add_tags

§am3_modify_tag_prop

§am3_modify_tags_prop

§am3_query_tag_prop

§am3_query_tags_cond

§am3_query_specify_page_tags_cond

©2015. All Rights Reserved.


am3_add_tags

Navigation: C++ > 报警管理接口 > 报警点 >

am3_add_tags

 Return to chapter overview

·函数

§添加报警点（批量接口）

int32 am3_add_tags(

int32 nTagNum,

const HD3AlarmTagProp* pTagPropArray,

const HD3Mask* pMaskArray,

const char* szDataNodeName,

uint32* pTagIdArray,

int32* pErrCodeArray

);

·参数

§nTagNum

[in] 点个数。

§pTagPropArray

[in] 属性数组。

§pMaskArray

[in] 报警点属性掩码，表明要存储报警点的哪些属性。

szDataNodeName

[in] 数据节点名称，报警点将与报警源点创建在同一数据节点，请传入""或者NULL，传入指定的数据节点名称也不会生效。

§pTagIDArray

[out] 添加点成功，该点对应的ID数组

§pErrCodeArray

[out] 错误码数组

·返回值

添加成功，返回RD_SUCCESS。添加失败返回其它错误码，见error_code.h。

·说明

添加报警点时，报警点名称必须添加，其它属性可以选择性的添加，添加哪些属性有属性掩码决定。

·举例

示例代码参见报警点接口。

参见：

§am3_add_tag

§am3_add_tags

§am3_modify_tag_prop

§am3_modify_tags_prop

§am3_query_tag_prop

§am3_query_tags_cond

§am3_query_specify_page_tags_cond

©2015. All Rights Reserved.


am3_modify_tag_prop

Navigation: C++ > 报警管理接口 > 报警点 >

am3_modify_tag_prop

 Return to chapter overview

·函数

§修改一个报警点的属性

int32 am3_modify_tag_prop(

uint32 nTagID,

const HD3AlarmTagProp* pProp,

const HD3MAsk* pMask

);

·参数

§nTagID

[in] 报警点ID。

§pProp

[in] 报警点属性。

§pMask

[in] 报警点属性掩码。

·说明

创建日期，修改日期，报警点ID，报警点名称和报警点类型不允许修改。

·举例

示例代码参见报警点接口。

参见：

§am3_add_tag

§am3_add_tags

§am3_modify_tag_prop

§am3_modify_tags_prop

§am3_query_tag_prop

§am3_query_tags_cond

§am3_query_specify_page_tags_cond

©2015. All Rights Reserved.


am3_modify_tags_prop

Navigation: C++ > 报警管理接口 > 报警点 >

am3_modify_tags_prop

 Return to chapter overview

·函数

§修改报警点（批量接口）

int32 am3_modify_tags_prop(

int32 nTagNum,

uint32* pTagIDArray,

const HD3AlarmTagProp* pTagPropArray,

const HD3Mask* pMaskArray,

int32* pErrCodeArray

);

·参数

§nTagNum

[in] 报警点个数。

§pTagIDArray

[in] 报警点ID数组。

§pTagPropArray

[out] 报警点属性数组。

§pmaskArray

[in] 掩码数组

§pErrCodeArray

[out] 错误码数组。

·返回值

查询成功，返回RD_SUCCESS。一部分成功返回EC_HD_API_AM_QUERY_TAG_NAMES_FAILED，查询失败返回其它错误码，见error_code.h。

·说明

返回RD_SUCCESS表明所有的报警点的名称查询都成功。

返回EC_HD_API_AM_QUERY_TAG_NAMES_FAILED表明一部分报警点的名称查询成功，通过查询错误码数组pErrCodeArray可以知道哪些报警点查询成功。

返回其它错误码表明查询失败。

·举例

示例代码参见报警点接口。

·参见：

§am3_add_tag

§am3_add_tags

§am3_modify_tag_prop

§am3_modify_tags_prop

§am3_query_tag_prop

§am3_query_tags_cond

§am3_query_specify_page_tags_cond

©2015. All Rights Reserved.


am3_query_tag_prop

Navigation: C++ > 报警管理接口 > 报警点 >

am3_query_tag_prop

 Return to chapter overview

·函数

§根据TagID查询报警点属性

int32 am3_query_tag_prop(

uint32 nTagID,

HD3AlarmTagProp* pProp

);

·参数

§nTagID

[in] 报警点ID。

§pProp

[out] 报警点属性。

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h。

·举例

示例代码参见报警点接口。

参见：

§am3_add_tag

§am3_add_tags

§am3_modify_tag_prop

§am3_modify_tags_prop

§am3_query_tag_prop

§am3_query_tags_cond

§am3_query_specify_page_tags_cond

©2015. All Rights Reserved.


am3_query_tags_cond

Navigation: C++ > 报警管理接口 > 报警点 >

am3_query_tags_cond

 Return to chapter overview

·函数

§条件查询满足过滤项的报警点属性

int32 am3_query_tags_cond(

const HD3FilterItemSet* pSet,

const HD3Mask* pMask,

HD3HANDLE* phResultSet

);

·参数

§pSet

[in] 过滤项集合。

§nMask

[in] 属性掩码

§pHIter

[out] 结果集句柄。

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h。

·说明

调用该接口成功后会获得一个查询迭代器的句柄，然后调用ut3_get_item_step接口，传入迭代器句柄和分配的空间(HD3AlarmTagProp*)，返回RD_SUCCESS就可以获得第一个报警点的属性，再调用ut3_get_item_step返回RD_SUCCESS就可以获得第二个报警点的属性。如此循环的查询直到调用ut3_get_item_step返回错误码为EC_HD_API_QUERY_END表明所有的报警点的ID都查询完毕了。查询完毕后调用ut3_free_handle方法来释放迭代器。

Type your Drop Down Section text here.

·举例

示例代码参见报警点接口。

参见：

§am3_add_tag

§am3_add_tags

§am3_modify_tag_prop

§am3_modify_tags_prop

§am3_query_tag_prop

§am3_query_tags_cond

§am3_query_specify_page_tags_cond

©2015. All Rights Reserved.


am3_query_specify_page_tags_cond

Navigation: C++ > 报警管理接口 > 报警点 >

am3_query_specify_page_tags_cond

 Return to chapter overview

·函数

§分页查询：条件查询满足过滤性的报警点的属性

int32 am3_query_specify_page_tags_cond(

const HD3PageQueryTagParam* pParam,

HD3HANDLE* phResultSet

);

·参数

§pParam

[in] 查询参数

§phResultSet

[out] 结果集句柄。

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h。

·说明

szValue：属性项的值，用字符串表示。

例如：查询条件Tag name 以“上海”开头且 TagID小于1000的条件为：

从起始索引开始查询满足查询条件的指定数量的Tag，起始索引从0开始，按照TagID从小到大的顺序排列。

调用该接口成功后会获得一个查询迭代器的句柄，然后调用ut3_get_item_step接口，传入迭代器句柄和分配的空间(HD3AlarmTagProp*)，返回RD_SUCCESS就可以获得第一个报警点的属性，再调用ut3_get_item_step返回RD_SUCCESS就可以获得第二个普通点的属性。如此循环的查询直到调用ut3_get_item_step返回错误码为EC_HD_API_QUERY_END表明所有的报警点都查询完毕。查询完毕后调用ut3_free_handle方法来释放迭代器。

·举例

示例代码参见报警点接口。

参见：

§am3_add_tag

§am3_add_tags

§am3_modify_tag_prop

§am3_modify_tags_prop

§am3_query_tag_prop

§am3_query_tags_cond

§am3_query_specify_page_tags_cond

©2015. All Rights Reserved.


报警记录

Navigation: C++ > 报警管理接口 >

报警记录

 Return to chapter overview

《报警记录》的主要接口包括：

§am_acknowledge_alarm

§am_query_snapshots

§am_register_alarm_record_info

§am_unregister_alarm_record_info

§am_query_tag_records

§am_query_tags_all_records

§am_query_group_records

§am_comment_alarms

alarm record

copycode !MISSING PHRASE 'COPYCODE'!

//*Alarm Record Function

#include "hdKingAPI.h"

#include "error_code.h"

#include "data_types.h"

#include "hd3Struct.h"

#include "hd3Enum.h"

#include "hd3MaskDefine.h"

#include <stdio.h>

#include <string.h>

#include <windows.h>

void alarm_rec_callback(enum HD3_AM_CHANGE nChange, const HD3AlarmRecord* pRecord)

{

printf("a alarm occur\n");

}

int32 main()

{

int32 nRet = RD_SUCCESS;

HD3Connection conn;

HD3PtTagProp normalTag;

HD3AlarmTagProp alarmTag;

int32 nRecNum = 3;

const int32 ALARM_TAG_NUM = 3;

uint32 nAlarmTagIDs[ALARM_TAG_NUM];

HD3AlarmQuery queryCond;

HD3Record snapshot;

HD3HANDLE hIter = NULL;

HD3AlarmRecord alarmRecord;

HD3AlarmRecord snAlarms[ALARM_TAG_NUM];

int32 nErrorCodes[ALARM_TAG_NUM];

HD3Time alarmTimes[ALARM_TAG_NUM];

int32 i = 0;

HD3Mask mask;

uint32 nPtTagID = 0;

strcpy(conn.szAddress, "127.0.0.1");

conn.nPort = 5673;

conn.nTimeout = 3;

nRet = nt3_connect(&conn);

if (nRet != RD_SUCCESS)

{

return -1;

}

//login

nRet = sc3_login("admin", "admin");

if (nRet != RD_SUCCESS)

{

printf("login failed, error code[%d]!\n", nRet);

return -1;

}

printf("login successful!\n");

// add normal tag

strcpy(normalTag.szTagName, "szNormalTag");

normalTag.nTagType = HD3_TAG_TYPE_INT32;

mask.nCommMask = HD3M_COMM_PROP_TAG_NAME | HD3M_COMM_PROP_TAG_TYPE;

mask.nExtMask = 0;

nRet = pt3_add_tag(&normalTag, &mask, "", &normalTag.nTagID);

if (nRet != RD_SUCCESS)

{

printf("add tag[%s] failed, error code [%d]!\n", normalTag.szTagName, nRet);

nt3_disconnect();

return -1;

}

printf("add tag[%s] successful!\n", normalTag.szTagName);

//add alarm tag

strcpy(alarmTag.szSourceTagName, normalTag.szTagName);

strcpy(alarmTag.szTest1, "GT(34)");

strcpy(alarmTag.szAction1, "1_hihi_ack");

strcpy(alarmTag.szTest2, "LT(34)");

strcpy(alarmTag.szAction2, "2_lolo_unack");

alarmTag.nAutoAck = HD3_AM_ACK_TYPE_MANUAL;

for (i = 0; i < ALARM_TAG_NUM; i ++)

{

sprintf(alarmTag.szTagName, "alarmTag_%d", i);

mask.nCommMask = HD3M_COMM_PROP_TAG_NAME;

mask.nExtMask = HD3M_AM_EXT_PROP_SOURCE_TAG | HD3M_AM_EXT_PROP_TEST1

| HD3M_AM_EXT_PROP_ACTION1 | HD3M_AM_EXT_PROP_TEST2

| HD3M_AM_EXT_PROP_ACTION2 | HD3M_AM_EXT_PROP_AUTOACK;

nRet = am3_add_tag(&alarmTag, &mask, "", nAlarmTagIDs + i );

if (nRet != RD_SUCCESS)

{

printf("add alarm tag[%s] failed, error code [%d]!\n", alarmTag.szTagName, nRet);

nt3_disconnect();

return -1;

}

printf("add alarm tag[%s] successful!\n", alarmTag.szTagName);

}

Sleep(30000);

//register alarm callback

nRet = am3_register_alarm_record_info(alarm_rec_callback);

if (nRet != RD_SUCCESS)

{

printf("register alarm call back failed, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

printf("register alarm call back successful!\n");

//save snapshots generate alarms

for (i = 0; i < nRecNum; i++)

{

snapshot.nSec = i + 1;

snapshot.nMsec = 0;

snapshot.nQuality = 192;

if (0 == i % 2)

{

snapshot.value.nInt32 = 0;

}

else

{

snapshot.value.nInt32 = 66;

}

nRet = sn3_save_snapshot(normalTag.nTagID, &snapshot);

if (nRet != RD_SUCCESS)

{

printf("save snapshot failed, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

printf("save snapshot successful!\n");

}

Sleep(3000);

//query alarm snapshot

nRet = am3_query_snapshots(ALARM_TAG_NUM, nAlarmTagIDs,

HD3M_ALL, snAlarms, nErrorCodes);

if (RD_SUCCESS == nRet)

{

printf("query alarm snapshots successful!\n");

}

else if (EC_HD_API_AM_QUERY_SNAPSHOTS_FAILED == nRet)

{

for (i = 0; i < ALARM_TAG_NUM; i ++)

{

if (nErrorCodes[i] != RD_SUCCESS)

{

printf("query alarm tag[%d] snapshot failed, error code [%d]!\n", nAlarmTagIDs[i], nErrorCodes[i]);

}

}

}

else

{

printf("query alarm snapshots failed, error code[%d]!\n", nRet);

nt3_disconnect();

return -1;

}

//ack alarms

for (i = 0; i < nRecNum; i++)

{

alarmTimes[i].nSec = snAlarms[i].tvStartTime.nSec;

alarmTimes[i].nMsec = snAlarms[i].tvStartTime.nMsec;

}

nRet = am3_acknowledge_alarms(ALARM_TAG_NUM, nAlarmTagIDs, alarmTimes, nErrorCodes);

if (nRet != RD_SUCCESS)

{

printf("acknowledge alarms failed, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

printf("acknowledge alarms successful!\n");

//comment alarms

nRet = am3_comment_alarms(ALARM_TAG_NUM, nAlarmTagIDs, alarmTimes, "this is a comment", nErrorCodes);

if (nRet != RD_SUCCESS)

{

printf("comment alarms failed, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

printf("comment alarms successful!\n");

//query tag alarm records

queryCond.tvStart.nSec = 1;

queryCond.tvStart.nMsec = 0;

queryCond.tvEnd.nMsec =0;

queryCond.tvEnd.nSec =100;

queryCond.nAckMask = HD3M_ALL;

queryCond.nPriorMask = HD3M_ALL;

queryCond.nTypeMask = HD3M_ALL;

queryCond.nRestoreMask = HD3M_ALL;

nRet = am3_query_tag_records(nAlarmTagIDs[0], &queryCond, HD3M_ALL, &hIter);

while (true)

{

nRet = ut3_get_item_step(hIter, &alarmRecord);

if (RD_SUCCESS == nRet)

{

printf("query alarm successful, alarm tag id [%d] start time[%d:%d]\n", alarmRecord.nAlarmTagID,

alarmRecord.tvStartTime.nSec, alarmRecord.tvStartTime.nMsec);

}

else if (EC_HD_API_QUERY_END == nRet)

{

printf("query tags records complete\n");

nRet = RD_SUCCESS;

break;

}

else

{

printf("query tags all records failed, error code [%d]\n", nRet);

}

}

ut3_free_handle(hIter);

//query tags all alarm records include am snapshots

nRet = am3_query_tags_all_records(ALARM_TAG_NUM, nAlarmTagIDs, &queryCond,

HD3M_ALL, &hIter);

while (true)

{

nRet = ut3_get_item_step(hIter, &alarmRecord);

if (RD_SUCCESS == nRet)

{

printf("query alarm successful, alarm tag id [%d] start time[%d:%d]\n", alarmRecord.nAlarmTagID,

alarmRecord.tvStartTime.nSec, alarmRecord.tvStartTime.nMsec);

}

else if (EC_HD_API_QUERY_END == nRet)

{

printf("query tags all records complete\n");

nRet = RD_SUCCESS;

break;

}

else

{

printf("query tags all records failed, error code [%d]\n", nRet);

}

}

ut3_free_handle(hIter);

//query group alarm records

nRet = am3_query_group_records(0, &queryCond, HD3M_ALL, &hIter);

while (true)

{

nRet = ut3_get_item_step(hIter, &alarmRecord);

if (RD_SUCCESS == nRet)

{

printf("query alarm successful, alarm tag id [%d] start time[%d:%d]\n", alarmRecord.nAlarmTagID,

alarmRecord.tvStartTime.nSec, alarmRecord.tvStartTime.nMsec);

}

else if (EC_HD_API_QUERY_END == nRet)

{

printf("query group all records complete\n");

nRet = RD_SUCCESS;

break;

}

else

{

printf("query group records failed, error code [%d]\n", nRet);

}

}

ut3_free_handle(hIter);

//unregister alarm callback

nRet = am3_unregister_alarm_record_info();

if (nRet != RD_SUCCESS)

{

printf("unregister alarm call back failed, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

printf("unregister alarm call back successful!\n");

//disconnect

nt3_disconnect();

return 0;

}

//*/

©2015. All Rights Reserved.


am_acknowledge_alarm

Navigation: C++ > 报警管理接口 > 报警记录 >

am_acknowledge_alarm

 Return to chapter overview

·函数

§确认报警（批量接口）该报警点在指定时刻产生的报警记录的确认状态被修改为已确认

int32 am3_acknowledge_alarms(

int32 nAckNum,

const uint32* pTagIDArray,

const HD3Time* pTimeArray,

int32* pErrCodeArray

);

·参数

§nAckNum

[in] 报警个数

§nTagIDArray

[in] 报警点ID数组

§pTimeArray,

[in] 时间数组

§pErrCodeArray

[in] 错误码数组

·返回值

查询成功，返回RD_SUCCESS，查询失败返回其它错误码，见error_code.h。

·说明

调用该方法成功后，该报警点在某一时刻产生的报警记录的确认状态被修改为确认。

·举例

示例代码参见报警记录接口。

参见：

§am_acknowledge_alarm

§am_query_snapshots

§am_register_alarm_record_info

§am_unregister_alarm_record_info

§am_query_tag_records

§am_query_tags_all_records

§am_query_group_records

§am_comment_alarms

©2015. All Rights Reserved.


am3_query_snapshots

Navigation: C++ > 报警管理接口 > 报警记录 >

am3_query_snapshots

 Return to chapter overview

·函数

§获取实时报警记录

int32 am3_query_snapshots(

int32 nRecNum,

uint32* pTagIDArray,

int64 nMask,

HD3AlarmRecord* pRecArray,

int32* pErrCodeArray

);

·参数

§nRecNum

[in] 报警点个数。

§pTagIDArray

[in] 报警点ID数组。

§nMask

[in]返回的报警记录的属性掩码

§pRecArray

[out] 报警记录数组。

§pErrCodeArray

[out] 错误码数组。

·返回值

查询成功，返回RD_SUCCESS。一部分成功返回EC_HD_API_AM_QUERY_SNAPSHOTS_FAILED，查询失败返回其它错误码，见error_code.h。

·说明

无

·举例

示例代码参见报警记录接口。

参见：

§am_acknowledge_alarm

§am_query_snapshots

§am_register_alarm_record_info

§am_unregister_alarm_record_info

§am_query_tag_records

§am_query_tags_all_records

§am_query_group_records

§am_comment_alarms

©2015. All Rights Reserved.


am3_register_alarm_record_info

Navigation: C++ > 报警管理接口 > 报警记录 >

am3_register_alarm_record_info

 Return to chapter overview

·函数

§注册报警记录回调，用于被动接收报警记录。

int32 am_register_alarm_record_info(

HD3AlarmCallbackFUnc pfn

);

·参数

§pFn

[in] 报警记录回调函数指针。

·返回值

注册成功，返回RD_SUCCESS。注册失败返回其它错误码，见error_code.h。

·说明

回调函数可以为NULL

回调函数定义：

void (*HD3AlarmCallbackFUnc)(

enum HD3_AM_CHANGE nChange,

const HD3AlarmRecord* pRecord

);

注销报警通知接口

int32 am3_unregister_alarm_record_info();

返回值，注销成功就返回RD_SUCCESS,否则，返回具体的错误码

·参数

§nChange

[in] 报警类型类型（新到报警，确认，恢复，注释）

§pRecord

[in] 报警记录

hs-caution

在回调函数中不能调用其它的iHyperDB的API。

·举例

示例代码参见报警记录接口。

参见：

§am_acknowledge_alarm

§am_query_snapshots

§am_register_alarm_record_info

§am_unregister_alarm_record_info

§am_query_tag_records

§am_query_tags_all_records

§am_query_group_records

§am_comment_alarms

©2015. All Rights Reserved.


am3_unregister_alarm_record_info

Navigation: C++ > 报警管理接口 > 报警记录 >

am3_unregister_alarm_record_info

 Return to chapter overview

·函数

§注销注册报警记录回调。

int32 am_unregister_alarm_record_info(

);

·参数

·返回值

注销成功，返回RD_SUCCESS。注册失败返回其它错误码，见error_code.h。

·说明

·举例

示例代码参见报警记录接口。

参见：

§am_acknowledge_alarm

§am_query_snapshots

§am_register_alarm_record_info

§am_unregister_alarm_record_info

§am_query_tag_records

§am_query_tags_all_records

§am_query_group_records

§am_comment_alarms

©2015. All Rights Reserved.


am3_query_tag_records

Navigation: C++ > 报警管理接口 > 报警记录 >

am3_query_tag_records

 Return to chapter overview

·函数

§查询一个点下的历史报警记录

int32 am3_query_tag_records(

uint32 nTagID,

const HD3AlarmQuery* pQuery,

int64 nMask,

HD3HANDLE* pnResultSet

);

·参数

§nTagID

[in] 报警点ID数组

§pQuery

[in] 查询条件

§nMask

[in] 返回的报警记录的属性掩码

§pnResultSet

[out] 报警记录迭代器句柄,查询的报警记录包括实时记录和历史记录

·返回值

查询成功,返回RD_SUCCESS,查询失败返回其他错误码,见error.h

·说明

无

·举例

示例代码参见报警记录接口。

参见：

§am_acknowledge_alarm

§am_query_snapshots

§am_register_alarm_record_info

§am_unregister_alarm_record_info

§am_query_tag_records

§am_query_tags_all_records

§am_query_group_records

§am_comment_alarms

©2015. All Rights Reserved.


am3_query_tags_all_records

Navigation: C++ > 报警管理接口 > 报警记录 >

am3_query_tags_all_records

 Return to chapter overview

·函数

§查询多个报警点的全部报警记录

int32 am_query_tags_all_records(

int32 nTagNum,

const uint32* pTagIDArray,

const HD3AlarmQuery* pQuery,

int64 nMask,

HD3HANDLE* phResultSet

);

·参数

§nTagNum

[in] 报警点数组个数

§pTagIDArray

[in] 报警点ID数组

§pQuery

[in] 查询条件

§nMask

[in] 报警记录的属性掩码

§phResultSet

[out] 报警记录迭代器句柄,查询的报警记录包括实时记录和历史记录

·返回值

查询成功,返回RD_SUCCESS;查询失败返回其他错误码,见error.h

·说明

无

·举例

示例代码参见报警记录接口。

参见：

§am_acknowledge_alarm

§am_query_snapshots

§am_register_alarm_record_info

§am_unregister_alarm_record_info

§am_query_tag_records

§am_query_tags_all_records

§am_query_group_records

§am_comment_alarms

©2015. All Rights Reserved.


am3_query_group_records

Navigation: C++ > 报警管理接口 > 报警记录 >

am3_query_group_records

 Return to chapter overview

·函数

§查询报警组下的报警

int32 am3_query_group_records(

uint32 nAlarmGroupID,

const HDAlarmQuery* pQuery,

int64 nMask,

HD3HANDLE* pResultSet

);

·参数

§nAlarmGroupID

[in] 报警组ID

§pQuery

[in] 查询条件

§nMask

[in] 报警记录的属性掩码

§phResultSet

[out] 报警记录迭代器句柄,查询的报警记录包括实时记录和历史记录

·返回值

查询成功,返回RD_SUCCESS,查询失败返回其他错误码,见error.h

·说明

无

·举例

示例代码参见报警记录接口。

参见：

§am_acknowledge_alarm

§am_query_snapshots

§am_register_alarm_record_info

§am_unregister_alarm_record_info

§am_query_tag_records

§am_query_tags_all_records

§am_query_group_records

§am_comment_alarms

©2015. All Rights Reserved.


am3_comment_alarms

Navigation: C++ > 报警管理接口 > 报警记录 >

am3_comment_alarms

 Return to chapter overview

·函数

§注释报警（批量接口）

int32 am3_comment_alarms(

int32 nCommentNum,

const uint32* pTagIDArray,

HD3Time* pTimeArray,

const char* szComment,

int32* pErrCodeArray

);

·参数

§nCommentNum

[in] 报警个数

§pTagIDArray

[in] 报警点ID数组

§pTimeArray

[in] 报警产生的时间数组

§szComment

[in]注释内容

§pErrCodeArray

[in]需要注释的报警个数

·返回值

查询成功，返回RD_SUCCESS，查询失败返回其它错误码，见error_code.h。

·说明

无

·举例

示例代码参见报警记录接口。

参见：

§am_acknowledge_alarm

§am_query_snapshots

§am_register_alarm_record_info

§am_unregister_alarm_record_info

§am_query_tag_records

§am_query_tags_all_records

§am_query_group_records

§am_comment_alarms

©2015. All Rights Reserved.


SPC管理接口

Navigation: C++ >

SPC管理接口

 Return to chapter overview

《SPC报警管理接口》主要内容包括：

·报警组

§am3_add_group

§am3_delete_group

§am3_modify_group_desc

§am3_query_group_child_groups

§am3_query_group_child_tags

§am3_query_group_props

§am3_query_groupid

·报警点

§spc3_add_tag

§spc3_add_tags

§spc3_modify_tag_prop

§spc3_modify_tags_prop

§spc3_query_tag_prop

§spc3_query_tags_cond

§spc3_query_specify_page_tags_cond

·报警记录

§spc3_query_group_child_tags

§spc3_acknowledge_alarms

§spc3_query_snapshots

§spc3_register_alarm_record_info

§spc3_query_tag_records

§spc3_query_tags_all_all_records

§spc3_query_group_records

§spc3_comment_alarms


SPC报警点

Navigation: C++ > SPC管理接口 >

SPC报警点

 Return to chapter overview

§spc3_add_tag

§spc3_add_tags

§spc3_modify_tag_prop

§spc3_modify_tags_prop

§spc3_query_tag_prop

§spc3_query_tags_cond

§spc3_query_specify_page_tags_cond

SPC alarm tag

///*

#include "hdKingAPI.h"

#include "error_code.h"

#include "data_types.h"

#include "hd3Struct.h"

#include <stdio.h>

#include <string.h>

int main()

{

int32 nRet = RD_SUCCESS;

HD3Connection conn;

HD3PtTagProp normalTag;

HD3StatsTagProp statsTag;

HD3SpcTagProp spcAlarmTagSave;

HD3SpcTagProp spcAlarmTagQuery;

HD3FilterItem pQueryTagPropItem[2];

HD3HANDLE hIter = NULL;

int32 nTagNum = 0;

int32 nErrCode = 0;

char (*szTagNames)[HD3_LEN_TAG_NAME] = NULL;

uint32 nTagID = 0;

//connect

strcpy(conn.szAddress, "127.0.0.1");

conn.nPort = 5673;

conn.nTimeout = 3;

nRet = nt3_connect(&conn);

if (nRet != RD_SUCCESS)

{

printf("connect to server failed, error code[%d]!\n", nRet);

return -1;

}

//login

nRet = sc3_login("admin", "admin");

if (nRet != RD_SUCCESS)

{

printf("login failed, error code[%d]!\n", nRet);

return -1;

}

printf("login successful!\n");

//add one normal tag as stats tag source tag

strcpy(normalTag.szTagName, "szNormalTag");

normalTag.nTagType = HD3_TAG_TYPE_INT32;

HD3Mask mask;

mask.nCommMask = HD3M_COMM_PROP_TAG_NAME | HD3M_COMM_PROP_TAG_TYPE;

mask.nExtMask = 0;

nRet = pt3_add_tag(&normalTag, &mask, "", &nTagID);

if (nRet != RD_SUCCESS)

{

printf("add tag[%s] failed, error code [%d]!\n", normalTag.szTagName, nRet);

nt3_disconnect();

return -1;

}

printf("add tag[%s] successful!\n", normalTag.szTagName);

//add statistics tag

strcpy(statsTag.szTagName, "szStatsTag");

strcpy(statsTag.szSourceTagName, normalTag.szTagName);

statsTag.nScanPeriod = 60;

statsTag.nStatsType = HD3_STATS_TYPE_ARITH_MEAN;

statsTag.nSampleMode = HD3_STATS_SAMPLE_MODE_INTERVAL;

statsTag.nSampleInterval = 3600;

statsTag.nSampleStartDate = 1;

statsTag.nSampleType = HD3_STATS_SAMPLE_TYPE_RAW;

statsTag.nCalcPeriod = 0;

HD3Mask smask;

smask.nCommMask = HD3M_COMM_PROP_TAG_NAME;

smask.nExtMask = HD3M_ST_EXT_PROP_SOURCE_TAG_NAME | HD3M_ST_EXT_PROP_SCAN_PERIOD

| HD3M_ST_EXT_PROP_STATS_TYPE | HD3M_ST_EXT_PROP_SAMPLE_MODE

| HD3M_ST_EXT_PROP_SAMPLE_INTERVAL | HD3M_ST_EXT_PROP_SAMPLE_START_DATE

| HD3M_ST_EXT_PROP_SAMPLE_TYPE | HD3M_ST_EXT_PROP_CALC_PERIOD;

nRet = st3_add_tag(&statsTag, &smask, "", &nTagID);

if (nRet != RD_SUCCESS)

{

printf("add stat tag[%s] failed, error code [%d]!\n", statsTag.szTagName, nRet);

nt3_disconnect();

return -1;

}

printf("add tags[%s] successful!\n", statsTag.szTagName);

//add one normal tag as spc tag ucl tag

strcpy(normalTag.szTagName, "szUCLTag");

normalTag.nTagType = HD3_TAG_TYPE_FLOAT32;

nRet = pt3_add_tag(&normalTag, &mask, "", &nTagID);

if (nRet != RD_SUCCESS)

{

printf("add tag[%s] failed, error code [%d]!\n", normalTag.szTagName, nRet);

nt3_disconnect();

return -1;

}

printf("add tag[%s] successful!\n", normalTag.szTagName);

//add one normal tag as spc tag cl tag

strcpy(normalTag.szTagName, "szCLTag");

normalTag.nTagType = HD3_TAG_TYPE_FLOAT32;

nRet = pt3_add_tag(&normalTag, &mask, "", &nTagID);

if (nRet != RD_SUCCESS)

{

printf("add tag[%s] failed, error code [%d]!\n", normalTag.szTagName, nRet);

nt3_disconnect();

return -1;

}

printf("add tag[%s] successful!\n", normalTag.szTagName);

//add one normal tag as spc tag lcl tag

strcpy(normalTag.szTagName, "szLCLTag");

normalTag.nTagType = HD3_TAG_TYPE_FLOAT32;

nRet = pt3_add_tag(&normalTag, &mask, "", &nTagID);

if (nRet != RD_SUCCESS)

{

printf("add tag[%s] failed, error code [%d]!\n", normalTag.szTagName, nRet);

nt3_disconnect();

return -1;

}

printf("add tag[%s] successful!\n", normalTag.szTagName);

//add spc alarm tag

memset(&spcAlarmTagSave, 0, sizeof(spcAlarmTagSave));

strcpy(spcAlarmTagSave.szTagName, "szSPCAlarmTag_1");

strcpy(spcAlarmTagSave.szSourceTagName, "szStatsTag");

spcAlarmTagSave.nCtrlChartType = HD3_SPC_CTRL_CHART_TYPE_XBAR;

strcpy(spcAlarmTagSave.szUCLTagName, "szUCLTag");

strcpy(spcAlarmTagSave.szCLTagName, "szCLTag");

strcpy(spcAlarmTagSave.szLCLTagName, "szLCLTag");

spcAlarmTagSave.dUCLDefaultValue = 200;

spcAlarmTagSave.dCLDefaultVaule = 100;

spcAlarmTagSave.dLCLDefaultValue = 50;

HD3Mask spcmask;

spcmask.nCommMask = HD3M_COMM_PROP_TAG_NAME;

spcmask.nExtMask = HD3M_SPC_EXT_PROP_CTRL_CHART_TYPE | HD3M_SPC_EXT_PROP_SOURCE_TAG_NAME

| HD3M_SPC_EXT_PROP_RULE;

nRet = spc3_add_tag(&spcAlarmTagSave, &spcmask, "", &nTagID);

if (nRet != RD_SUCCESS)

{

printf("add spc tag[%s] failed, error code [%d]!\n", spcAlarmTagSave.szTagName, nRet);

nt3_disconnect();

return -1;

}

printf("add spc tag[%s] successful!\n", spcAlarmTagSave.szTagName);

memset(&spcAlarmTagSave, 0, sizeof(spcAlarmTagSave));

strcpy(spcAlarmTagSave.szTagName, "szSPCAlarmTag_2");

strcpy(spcAlarmTagSave.szSourceTagName, "szStatsTag");

spcAlarmTagSave.nCtrlChartType = HD3_SPC_CTRL_CHART_TYPE_XBAR;

strcpy(spcAlarmTagSave.szUCLTagName, "szUCLTag");

strcpy(spcAlarmTagSave.szCLTagName, "szCLTag");

strcpy(spcAlarmTagSave.szLCLTagName, "szLCLTag");

spcAlarmTagSave.dUCLDefaultValue = 200;

spcAlarmTagSave.dCLDefaultVaule = 100;

spcAlarmTagSave.dLCLDefaultValue = 50;

nRet = spc3_add_tags(1, &spcAlarmTagSave, &spcmask, "", &nTagID, &nErrCode);

if (nRet != RD_SUCCESS)

{

printf("add spc tag[%s] failed, error code [%d]!\n", spcAlarmTagSave.szTagName, nRet);

nt3_disconnect();

return -1;

}

printf("add spc tag[%s] successful!\n", spcAlarmTagSave.szTagName);

//query spc tags by condition

pQueryTagPropItem[0].nItemID = HD3_TAG_COL_COMM_PROP_TAG_NAME;

pQueryTagPropItem[0].nRelation = HD3_RELATION_LIKE;

strcpy(pQueryTagPropItem[0].szValue, "*");

pQueryTagPropItem[1].nItemID = HD3_TAG_COL_COMM_PROP_TAG_TYPE;

pQueryTagPropItem[1].nRelation = HD3_RELATION_EQUAL;

sprintf(pQueryTagPropItem[1].szValue, "%d", HD3_TAG_TYPE_DIGITAL);

HD3FilterItemSet fs;

fs.nSize = 2;

fs.pItem = &pQueryTagPropItem[0];

nRet = tag3_query_tags_cond(HD3M_TAG_CLASS_SPC, &fs, HD3M_COMM_PROP_TAG_NAME, &hIter);

if (nRet != RD_SUCCESS)

{

printf("query spc tags by condition failed, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

while (true)

{

nRet = ut3_get_item_step(hIter, &spcAlarmTagQuery);

if (RD_SUCCESS == nRet)

{

nTagNum ++;

printf("query spc tag successful, tag name is %s!\n", spcAlarmTagQuery.szTagName);

}

else if (EC_HD_API_QUERY_END == nRet)

{

printf("query spc tag complete!\n");

break;

}

else

{

printf("query spc tag failed, error code [%d]!\n", nRet);

break;

}

}

printf("you have queried %d spc alarm tags totally!\n", nTagNum);

ut3_free_handle(hIter);

//query tag number by condition

nTagNum = 0;

nRet = tag3_query_tag_num_cond(HD3_TAG_CLASS_SPC, &fs, &nTagNum);

if (nRet != RD_SUCCESS)

{

printf("spc_query_tag_num_cond failed, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

printf("spc_query_tag_num_cond successful, tag number is %d!\n", nTagNum);

HD3PageQueryTagParam pp;

pp.itemSet = fs;

pp.mask.nCommMask = HD3M_COMM_PROP_TAG_NAME;

pp.nStartID = 0;

pp.nCapacity = 20;

//query page tag by condition

nRet = spc3_query_specify_page_tags_cond(&pp, &hIter);

if (nRet != RD_SUCCESS)

{

printf("spc_query_specify_page_tags_cond failed, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

nTagNum = 0;

while (true)

{

nRet = ut3_get_item_step(hIter, &spcAlarmTagQuery);

if (RD_SUCCESS == nRet)

{

nTagNum ++;

printf("query spc tag successful, tag name is %s!\n", spcAlarmTagQuery.szTagName);

}

else if (EC_HD_API_QUERY_END == nRet)

{

printf("query spc tag complete!\n");

break;

}

else

{

printf("query spc tag failed, error code [%d]!\n", nRet);

break;

}

}

printf("you have queried %d spc tags totally!\n", nTagNum);

ut3_free_handle(hIter);

//query tag id

nRet = tag3_query_id_by_name(spcAlarmTagSave.szTagName, &nTagID);

if (nRet != RD_SUCCESS)

{

printf("query spc alarm tag id failed, alarm spc name[%s], error code[%d]!\n", spcAlarmTagSave.szTagName, nRet);

nt3_disconnect();

return -1;

}

printf("spc alarm tag[%s] query tag id successful, alarm tag id[%d]!\n", spcAlarmTagSave.szTagName, nTagID);

//modify tag desc

strcpy(spcAlarmTagSave.szDescriptor, "spc tag descriptor is modified");

spcAlarmTagSave.bRule1 = true;

spcAlarmTagSave.nRule1M = 10;

HD3Mask spcnmask;

spcnmask.nExtMask = HD3M_SPC_EXT_PROP_RULE;

spcnmask.nCommMask = HD3M_COMM_PROP_DESCRIPTOR;

nRet = spc3_modify_tag_prop(nTagID, &spcAlarmTagSave, &spcnmask);

if (nRet != RD_SUCCESS)

{

printf("modify spc tag failed, tag id[%d], error code[%d]!\n", nTagID, nRet);

nt3_disconnect();

return -1;

}

printf("modify spc tag successful, tag id[%d]!\n", nTagID);

//modify tag desc

strcpy(spcAlarmTagSave.szDescriptor, "spc tag descriptor is modified");

spcAlarmTagSave.bRule1 = true;

spcAlarmTagSave.nRule1M = 10;

mask.nExtMask = HD3M_SPC_EXT_PROP_RULE;

mask.nCommMask = HD3M_COMM_PROP_DESCRIPTOR;

nRet = spc3_modify_tags_prop(1, &nTagID, &spcAlarmTagSave, &spcnmask, &nErrCode);

if (nRet != RD_SUCCESS)

{

printf("modify spc tag failed, tag id[%d], error code[%d]!\n", nTagID, nRet);

nt3_disconnect();

return -1;

}

printf("modify spc tag successful, tag id[%d]!\n", nTagID);

//query tag prop

nRet = spc3_query_tag_prop(nTagID, &spcAlarmTagQuery);

if (nRet != RD_SUCCESS)

{

printf("query spc tag prop failed, tag id[%d], error code[%d]!\n", nTagID, nRet);

nt3_disconnect();

return -1;

}

printf("query spc tag prop successful, tag id[%d], tag name[%s], tag description[%s]!\n",

spcAlarmTagQuery.nTagID, spcAlarmTagQuery.szTagName, spcAlarmTagQuery.szDescriptor);

//delete spc tag

nRet = tag3_delete_tag(nTagID);

if (nRet != RD_SUCCESS)

{

printf("delete spc alarm tag failed, tag id[%d], error code[%d]!\n", nTagID, nRet);

nt3_disconnect();

return -1;

}

printf("delete spc alarm tag successful, tag id[%d]!\n", nTagID);

nt3_disconnect();

return 0;

}

//*/

//*/


spc3_add_tag

Navigation: C++ > SPC管理接口 > SPC报警点 >

spc3_add_tag

 Return to chapter overview

·函数

§添加一个spc报警点

int32 spc3_add_tag(

const HD3SpcTagProp* pTagProp,

const HD3Mask* pMask,

const char* szDataNodeName,

uint32* pnTagID

);

·参数

§pTagProp

[in] 点属性。

§pMask

[in] 属性掩码。

§szDataNodeName

[in] 数据节点名称，SPC报警点将与报警源点创建在同一数据节点，请传入""或者NULL，传入指定的数据节点名称也不会生效。

§pnTagID

[in] 添加成功，该点对应的ID。

·返回值

添加成功，返回RD_SUCCESS。添加失败返回其它错误码，见error_code.h

·说明

添加报警点时，报警点名称, 报警点源点名称必须添加，其它属性可以选择性的添加，添加哪些属性有属性掩码决定。SPC报警点的源点只能是统计点

·举例

示例代码参见SPC报警点。

参见：

§spc3_add_tag

§spc3_add_tags

§spc3_modify_tag_prop

§spc3_modify_tags_prop

§spc3_query_tag_prop

§spc3_query_tags_cond

§spc3_query_specify_page_tags_cond

©2015. All Rights Reserved.


spc3_add_tags

Navigation: C++ > SPC管理接口 > SPC报警点 >

spc3_add_tags

 Return to chapter overview

·函数

§添加spc报警点（批量接口）

int32 spc3_add_tags(

int32 nTagNum,

const HD3SpcTagProp* pTagPropArray,

const HD3Mask* pMaskArray,

const char* szDataNodeName,

uint32* pTagIDArray,

int32* pErrCodeArray

);

·参数

§nTagNum

[in] 点个数

§pTagPropArray

[in] 属性数组。

§pMaskArray

[in] 掩码数组

§szDataNodeName

[in] 数据节点名称，SPC报警点将与报警源点创建在同一数据节点，请传入""或者NULL，传入指定的数据节点名称也不会生效。

§pTagIDArray

[in] 报警点ID数组。

§pErrCodeArray

[out]错误码数组

·返回值

删除成功，返回RD_SUCCESS。删除失败返回其它错误码，见error_code.h。

·说明

无

·举例

示例代码参见SPC报警点。

参见：

§spc3_add_tag

§spc3_add_tags

§spc3_modify_tag_prop

§spc3_modify_tags_prop

§spc3_query_tag_prop

§spc3_query_tags_cond

§spc3_query_specify_page_tags_cond

©2015. All Rights Reserved.


spc3_modify_tag_prop

Navigation: C++ > SPC管理接口 > SPC报警点 >

spc3_modify_tag_prop

 Return to chapter overview

·函数

§修改SPC点

int32 spc3_modify_tag_prop(

uint32 nTagID,

const HD3SpcTagProp* pProp,

const HD3Mask* pMask

);

·参数

§nTagID

[in] 报警点ID。

§pProp

[in] 报警点属性。

§pMask

[in] 报警点属性掩码。

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h

·说明

创建日期，修改日期，报警点ID，报警点名称，报警点类型，源点名称，控制图类型，触发模式不会被修改。

·举例

示例代码参见SPC报警点。

参见：

§spc3_add_tag

§spc3_add_tags

§spc3_modify_tag_prop

§spc3_modify_tags_prop

§spc3_query_tag_prop

§spc3_query_tags_cond

§spc3_query_specify_page_tags_cond

©2015. All Rights Reserved.


spc3_modify_tags_prop

Navigation: C++ > SPC管理接口 > SPC报警点 >

spc3_modify_tags_prop

 Return to chapter overview

·函数

§修改SPC报警点（批量接口）

int32 spc3_modify_tags_prop(

int32 nTagNum,

const uint32* pTagIDArray,

const HD3SpcTagProp* pTagPropArray,

const HD3Mask* pMaskArray,

int32* pErrCodeArray

);

·参数

§nTagNum

[in] 点个数。

§pTagIDArray

[in] 报警点ID数组。

§pTagPropArray

[in] 报警点属性数组。

§pMaskArray

[in] 掩码数组

§pErrCodeArray

[out] 错误码数组。

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h。

·举例

示例代码参见SPC报警点。

参见：

§spc3_add_tag

§spc3_add_tags

§spc3_modify_tag_prop

§spc3_modify_tags_prop

§spc3_query_tag_prop

§spc3_query_tags_cond

§spc3_query_specify_page_tags_cond

©2015. All Rights Reserved.


spc3_query_tag_prop

Navigation: C++ > SPC管理接口 > SPC报警点 >

spc3_query_tag_prop

 Return to chapter overview

·函数

§查询一个SPC报警点的属性

int32 spc3_query_tag_prop(

uint32 nTagID,

HD3SpcTagProp* pTagProp

);

·参数

§nTagID

[in] 报警点ID。

§pTagProp

[out] SPC报警点属性。

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h。

·说明

无

·举例

示例代码参见SPC报警点。

参见：

§spc3_add_tag

§spc3_add_tags

§spc3_modify_tag_prop

§spc3_modify_tags_prop

§spc3_query_tag_prop

§spc3_query_tags_cond

§spc3_query_specify_page_tags_cond

©2015. All Rights Reserved.


spc3_query_tags_cond

Navigation: C++ > SPC管理接口 > SPC报警点 >

spc3_query_tags_cond

 Return to chapter overview

·函数

查询条件查询满足条件的SPC报警点

int32 spc3_query_tags_cond(

const HD3FilterItemSet* pSet,

const HD3Mask* pMask,

HD3HANDLE* phResultSet

);

·参数

§pSet

[in] 查询条件数组

§pMask

[in] 返回报警点掩码，表明返回哪些报警点的属性。

§phResultSet

[out] 查询迭代器。

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h。

·说明

调用该接口成功后会获得一个查询迭代器的句柄，然后调用ut3_get_item_step接口，传入迭代器句柄和分配的空间(HD3SpcTagProp*)，返回RD_SUCCESS就可以获得第一个报警点的属性，再调用ut3_get_item_step返回RD_SUCCESS就可以获得第二个报警点的属性。如此循环的查询直到调用ut3_get_item_step返回错误码为EC_HD_API_QUERY_END表明所有的报警点的ID都查询完毕了。查询完毕后调用ut3_free_iterator方法来释放迭代器。

·举例

示例代码参见SPC报警点。

参见：

§spc3_add_tag

§spc3_add_tags

§spc3_modify_tag_prop

§spc3_modify_tags_prop

§spc3_query_tag_prop

§spc3_query_tags_cond

§spc3_query_specify_page_tags_cond

©2015. All Rights Reserved.


spc3_query_specify_page_tags_cond

·函数

根据查询条件查询满足条件的指定位置和指定个数的spc点

int32 spc3_query_specify_page_tags_cond(

const Hd3PageQueryTagProp* pParam,

HD3HANDLE* phResultSet

)

·参数

§pParam

[in] 查询条件数组。

§phResultSet

[out] 结果集句柄。

·返回值

查询成功，返回RD_SUCCESS。查询失败，返回错误码，见error_code.h。

·说明

szValue：属性项的值，用字符串表示。

例如：查询条件Tag name 以“上海”开头且 TagID小于1000的条件为：

从起始索引开始查询满足查询条件的指定数量的Tag，起始索引从0开始，按照TagID从小到大的顺序排列。

调用该接口成功后会获得一个查询迭代器的句柄，然后调用ut3_get_item_step接口，传入迭代器句柄和分配的空间(HD3SpcTagProp*)，返回RD_SUCCESS就可以获得第一个spc点的属性，再调用ut3_get_item_step返回RD_SUCCESS就可以获得第二个spc点的属性。如此循环的查询直到调用ut3_get_item_step返回错误码为EC_HD_API_QUERY_END表明所有的spc点都查询完毕。查询完毕后调用ut3_free_handle方法来释放迭代器。

·举例

示例代码参见SPC报警点。

参考：

§spc3_add_tag

§spc3_add_tags

§spc3_modify_tag_prop

§spc3_modify_tags_prop

§spc3_query_tag_prop

§spc3_query_tags_cond

§spc3_query_specify_page_tags_cond

©2015. All Rights Reserved.


SPC报警记录

Navigation: C++ > SPC管理接口 >

SPC报警记录

 Return to chapter overview

§spc3_query_group_child_tags

§spc3_acknowledge_alarms

§spc3_query_snapshots

§spc3_register_alarm_record_info

§spc3_query_tag_records

§spc3_query_tags_all_all_records

§spc3_query_group_records

§spc3_comment_alarms

SPC alarm record

///*SPC Alarm Record Function

#include "hdKingAPI.h"

#include "error_code.h"

#include "data_types.h"

#include "hd3Struct.h"

#include <stdio.h>

#include <string.h>

#include <windows.h>

#include <time.h>

void spc_record_callback(HD3_AM_CHANGE nType, const HD3SpcRecord* spcAlarm)

{

printf("spc alarm occer, nType %d, tag id %d, time %d\n", nType, spcAlarm->nSPCTagID, spcAlarm->tvStartTime.nSec);

}

int32 main()

{

int32 nRet = RD_SUCCESS;

HD3Connection conn;

HD3PtTagProp normalTag;

HD3StatsTagProp statsTag;

HD3SpcTagProp spcAlarmTagSave;

int32 nRecNum = 4;

const int32 SPC_ALARM_TAG_NUM = 4;

uint32 nSPCTagIDs[SPC_ALARM_TAG_NUM];

HD3SPCQuery queryCond;

HD3Record snapshot;

HD3HANDLE hIter = NULL;

HD3SpcRecord spcAlarmRec;

HD3SpcRecord snSPCAlarms[SPC_ALARM_TAG_NUM];

int32 nErrorCodes[SPC_ALARM_TAG_NUM];

HD3Time alarmTimes[SPC_ALARM_TAG_NUM];

int32 i = 0;

uint32 nSrcTagID = 0;

uint32 nUCLTagID = 0;

uint32 nCLTagID = 0;

uint32 nLCLTagID = 0;

//connect

strcpy(conn.szAddress, "127.0.0.1");

conn.nPort = 5673;

conn.nTimeout = 3;

nRet = nt3_connect(&conn);

if (nRet != RD_SUCCESS)

{

printf("connect to server failed, error code[%d]!\n", nRet);

return -1;

}

//login

nRet = sc3_login("admin", "admin");

if (nRet != RD_SUCCESS)

{

printf("login failed, error code[%d]!\n", nRet);

return -1;

}

printf("login successful!\n");

// add normal tag

strcpy(normalTag.szTagName, "szNormalTag");

normalTag.nTagType = HD3_TAG_TYPE_INT32;

HD3Mask mask;

mask.nCommMask = HD3M_COMM_PROP_TAG_NAME | HD3M_COMM_PROP_TAG_TYPE;

mask.nExtMask = 0;

nRet = pt3_add_tag(&normalTag, &mask, "", &nSrcTagID);

if (nRet != RD_SUCCESS)

{

printf("add tag[%s] failed, error code [%d]!\n", normalTag.szTagName, nRet);

nt3_disconnect();

return -1;

}

printf("add tag[%s] successful!\n", normalTag.szTagName);

//add statistics tag

strcpy(statsTag.szTagName, "szStatsTag");

strcpy(statsTag.szSourceTagName, normalTag.szTagName);

statsTag.nScanPeriod = 1;

statsTag.nStatsType = HD3_STATS_TYPE_ARITH_MEAN;

statsTag.nSampleMode = HD3_STATS_SAMPLE_MODE_INTERVAL;

statsTag.nSampleInterval = 1;

statsTag.nSampleStartDate = 1;

statsTag.bBeginTimeStamp = true;

statsTag.nSampleType = HD3_STATS_SAMPLE_TYPE_RAW;

statsTag.nCalcPeriod = 0;

HD3Mask smask;

smask.nCommMask = HD3M_COMM_PROP_TAG_NAME;

smask.nExtMask = HD3M_ST_EXT_PROP_SOURCE_TAG_NAME | HD3M_ST_EXT_PROP_SCAN_PERIOD

| HD3M_ST_EXT_PROP_STATS_TYPE | HD3M_ST_EXT_PROP_SAMPLE_MODE

| HD3M_ST_EXT_PROP_SAMPLE_INTERVAL | HD3M_ST_EXT_PROP_SAMPLE_START_DATE

| HD3M_ST_EXT_PROP_BEGIN_TIMESTAMP | HD3M_ST_EXT_PROP_SAMPLE_TYPE | HD3M_ST_EXT_PROP_CALC_PERIOD;

nRet = st3_add_tag(&statsTag, &smask, "", &statsTag.nTagID);

if (nRet != RD_SUCCESS)

{

printf("add stat tag[%s] failed, error code [%d]!\n", statsTag.szTagName, nRet);

nt3_disconnect();

return -1;

}

printf("add tags[%s] successful!\n", statsTag.szTagName);

//add one normal tag as spc tag ucl tag

strcpy(normalTag.szTagName, "szUCLTag");

normalTag.nTagType = HD3_TAG_TYPE_FLOAT32;

nRet = pt3_add_tag(&normalTag, &mask, "", &nUCLTagID);

if (nRet != RD_SUCCESS)

{

printf("add tag[%s] failed, error code [%d]!\n", normalTag.szTagName, nRet);

nt3_disconnect();

return -1;

}

printf("add tag[%s] successful!\n", normalTag.szTagName);

//add one normal tag as spc tag cl tag

strcpy(normalTag.szTagName, "szCLTag");

normalTag.nTagType = HD3_TAG_TYPE_FLOAT32;

nRet = pt3_add_tag(&normalTag, &mask, "", &nCLTagID);

if (nRet != RD_SUCCESS)

{

printf("add tag[%s] failed, error code [%d]!\n", normalTag.szTagName, nRet);

nt3_disconnect();

return -1;

}

printf("add tag[%s] successful!\n", normalTag.szTagName);

//add one normal tag as spc tag lcl tag

strcpy(normalTag.szTagName, "szLCLTag");

normalTag.nTagType = HD3_TAG_TYPE_FLOAT32;

nRet = pt3_add_tag(&normalTag, &mask, "", &nLCLTagID);

if (nRet != RD_SUCCESS)

{

printf("add tag[%s] failed, error code [%d]!\n", normalTag.szTagName, nRet);

nt3_disconnect();

return -1;

}

printf("add tag[%s] successful!\n", normalTag.szTagName);

//add spc alarm tag

for (i = 0; i < SPC_ALARM_TAG_NUM; i ++)

{

memset(&spcAlarmTagSave, 0, sizeof(spcAlarmTagSave));

sprintf(spcAlarmTagSave.szTagName, "szSPCAlarmTag_%d", i);

strcpy(spcAlarmTagSave.szSourceTagName, "szStatsTag");

spcAlarmTagSave.nCtrlChartType = HD3_SPC_CTRL_CHART_TYPE_XBAR;

strcpy(spcAlarmTagSave.szUCLTagName, "szUCLTag");

strcpy(spcAlarmTagSave.szCLTagName, "szCLTag");

strcpy(spcAlarmTagSave.szLCLTagName, "szLCLTag");

spcAlarmTagSave.dUCLDefaultValue = 200;

spcAlarmTagSave.dCLDefaultVaule = 100;

spcAlarmTagSave.dLCLDefaultValue = 50;

spcAlarmTagSave.bJudgeContinuous = true;

spcAlarmTagSave.bRule1 = true;

spcAlarmTagSave.nRule1M = 1;

HD3Mask spcmask;

spcmask.nCommMask = HD3M_COMM_PROP_TAG_NAME;

spcmask.nExtMask = HD3M_SPC_EXT_PROP_SOURCE_TAG_NAME | HD3M_SPC_EXT_PROP_CTRL_CHART_TYPE

| HD3M_SPC_EXT_PROP_RULE;

nRet = spc3_add_tag(&spcAlarmTagSave, &spcmask, "", &nSPCTagIDs[i]);

if (nRet != RD_SUCCESS)

{

printf("add spc tag[%s] failed, error code [%d]!\n", spcAlarmTagSave.szTagName, nRet);

nt3_disconnect();

return -1;

}

printf("add spc tag[%s] successful!\n", spcAlarmTagSave.szTagName);

}

//reg spc alarm callback

nRet = spc3_register_alarm_record_info(spc_record_callback);

if (nRet != RD_SUCCESS)

{

printf("register spc alarm call back failed, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

printf("register spc alarm call back successful!\n");

Sleep(30000);

snapshot.value.fFloat32 = 200;

snapshot.nSec = 1;

snapshot.nMsec = 0;

snapshot.nQuality = 192;

snapshot.nTagType = HD3_TAG_TYPE_FLOAT32;

nRet = sn3_save_snapshot(nUCLTagID, &snapshot);

if (nRet != RD_SUCCESS)

{

printf("save snapshot failed, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

snapshot.value.fFloat32 = 50;

snapshot.nSec = 1;

snapshot.nMsec = 0;

snapshot.nQuality = 192;

snapshot.nTagType = HD3_TAG_TYPE_FLOAT32;

nRet = sn3_save_snapshot(nLCLTagID, &snapshot);

if (nRet != RD_SUCCESS)

{

printf("save snapshot failed, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

snapshot.value.fFloat32 = 100;

snapshot.nSec = 1;

snapshot.nMsec = 0;

snapshot.nQuality = 192;

snapshot.nTagType = HD3_TAG_TYPE_FLOAT32;

nRet = sn3_save_snapshot(nCLTagID, &snapshot);

if (nRet != RD_SUCCESS)

{

printf("save snapshot failed, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

//save snapshots generate spc alarm

//for (i = 0; i < nRecNum; i++)

for (i = 0; i < 10; i++)

{

snapshot.nSec = (int32)time(NULL) + i + 1;

snapshot.nMsec = 0;

snapshot.nQuality = 192;

snapshot.value.nInt32 = 300;

snapshot.nTagType = HD3_TAG_TYPE_INT32;

nRet = sn3_save_snapshot(nSrcTagID, &snapshot);

if (nRet != RD_SUCCESS)

{

printf("save snapshot failed, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

printf("save snapshot successful!\n");

Sleep(10);

}

Sleep(3000);

//query alarm snapshot

nRet = spc3_query_snapshots(SPC_ALARM_TAG_NUM, nSPCTagIDs,

HD3M_ALL, snSPCAlarms, nErrorCodes);

if (RD_SUCCESS == nRet)

{

printf("query alarm snapshots successful!\n");

}

else if (EC_HD_API_AM_QUERY_SNAPSHOTS_FAILED == nRet)

{

for (i = 0; i < SPC_ALARM_TAG_NUM; i ++)

{

if (nErrorCodes[i] != RD_SUCCESS)

{

printf("query alarm tag[%d] snapshot failed, error code [%d]!\n", nSPCTagIDs[i], nErrorCodes[i]);

}

}

}

else

{

printf("query alarm snapshots failed, error code[%d]!\n", nRet);

nt3_disconnect();

return -1;

}

//ack alarms

for (i = 0; i < nRecNum; i++)

{

alarmTimes[i].nSec = snSPCAlarms[i].tvStartTime.nSec;

alarmTimes[i].nMsec = snSPCAlarms[i].tvStartTime.nMsec;

}

nRet = spc3_acknowledge_alarms(SPC_ALARM_TAG_NUM, nSPCTagIDs, alarmTimes, &nErrorCodes[0]);

if (nRet != RD_SUCCESS)

{

printf("acknowledge alarms failed, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

printf("acknowledge alarms successful!\n");

//comment alarms

nRet = spc3_comment_alarms(SPC_ALARM_TAG_NUM, nSPCTagIDs, alarmTimes, "this is a comment", &nErrorCodes[0]);

if (nRet != RD_SUCCESS)

{

printf("comment alarms failed, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

printf("comment alarms successful!\n");

//query tag alarm records

queryCond.tvStart.nSec = 1;

queryCond.tvStart.nMsec = 0;

queryCond.tvEnd.nMsec =0;

queryCond.tvEnd.nSec =100;

queryCond.nAckMask = HD3M_AM_REC_ACK_STATE_NO | HD3M_AM_REC_ACK_STATE_YES;

queryCond.nRestoreMask = HD3M_AM_REC_RESTORE_STATE_NO | HD3M_AM_REC_RESTORE_STATE_YES;

nRet = spc3_query_tag_records(nSPCTagIDs[0], &queryCond, HD3M_ALL, &hIter);

while (true)

{

nRet = ut3_get_item_step(hIter, &spcAlarmRec);

if (RD_SUCCESS == nRet)

{

printf("query alarm successful, alarm tag id [%d] start time[%d:%d]\n", spcAlarmRec.nSPCTagID,

spcAlarmRec.tvStartTime.nSec, spcAlarmRec.tvStartTime.nMsec);

}

else if (EC_HD_API_QUERY_END == nRet)

{

printf("query tags records complete\n");

nRet = RD_SUCCESS;

break;

}

else

{

printf("query tags all records failed, error code [%d]\n", nRet);

}

}

ut3_free_handle(hIter);

//query group alarm records

nRet = spc3_query_group_records(0, &queryCond, HD3M_ALL, &hIter);

while (true)

{

nRet = ut3_get_item_step(hIter, &spcAlarmRec);

if (RD_SUCCESS == nRet)

{

printf("query alarm successful, alarm tag id [%d] start time[%d:%d]\n", spcAlarmRec.nSPCTagID,

spcAlarmRec.tvStartTime.nSec, spcAlarmRec.tvStartTime.nMsec);

}

else if (EC_HD_API_QUERY_END == nRet)

{

printf("query group all records complete\n");

nRet = RD_SUCCESS;

break;

}

else

{

printf("query group records failed, error code [%d]\n", nRet);

}

}

ut3_free_handle(hIter);

//query tags alarm records

nRet = spc3_query_tags_all_records(SPC_ALARM_TAG_NUM, nSPCTagIDs,

&queryCond, HD3M_ALL, &hIter);

while (true)

{

nRet = ut3_get_item_step(hIter, &spcAlarmRec);

if (RD_SUCCESS == nRet)

{

printf("query alarm successful, alarm tag id [%d] start time[%d:%d]\n", spcAlarmRec.nSPCTagID,

spcAlarmRec.tvStartTime.nSec, spcAlarmRec.tvStartTime.nMsec);

}

else if (EC_HD_API_QUERY_END == nRet)

{

printf("query tags all records complete\n");

nRet = RD_SUCCESS;

break;

}

else

{

printf("query tags records failed, error code [%d]\n", nRet);

}

}

ut3_free_handle(hIter);

//reg spc alarm callback

nRet = spc3_unregister_alarm_record_info();

if (nRet != RD_SUCCESS)

{

printf("unregister spc alarm call back failed, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

printf("unregister spc alarm call back successful!\n");

//disconnect

nt3_disconnect();

return 0;

}

//*/


spc3_query_group_child_tags

Navigation: C++ > SPC管理接口 > SPC报警记录 >

spc3_query_group_child_tags

 Return to chapter overview

·函数

§在一台服务器中查询一个报警组下面的spc子报警点

int32 spc3_query_group_child_tags(

uint32 nGroupID,

HD3HANDLE* phResultSet

);

·参数

§nGroupID

[in] 报警组ID。

§phResultSet

[out] 查询迭代器。

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h。

·说明

调用该接口成功后会获得一个查询迭代器的句柄，然后调用ut3_get_item_step接口，传入迭代器句柄和分配的空间(uint32*)，返回RD_SUCCESS就可以获得第一个子报警点的ID，再调用ut3_get_item_step返回RD_SUCCESS就可以获得第二个子报警点的ID。如此循环的查询直到调用ut3_get_item_step返回错误码为EC_HD_API_QUERY_END表明所有的子报警点的ID都查询完毕了。查询完毕后调用ut3_free_handle方法来释放迭代器.

·举例

示例代码参见SPC报警记录。

参见：

§spc3_query_group_child_tags

§spc3_acknowledge_alarms

§spc3_query_snapshots

§spc3_register_alarm_record_info

§spc3_query_tag_records

§spc3_query_tags_all_all_records

§spc3_query_group_records

§spc3_comment_alarms

©2015. All Rights Reserved.


spc3_acknowledge_alarms

Navigation: C++ > SPC管理接口 > SPC报警记录 >

spc3_acknowledge_alarms

 Return to chapter overview

·函数

§确认SPC报警（批量接口）

int32 spc3_acknowledge_alarms(

int32 nAckNum,

const uint32* pTagIDArray,

const HD3Time* pTimeArray,

int32* pErrCodeArray

);

·参数

§nAckNum

[in] SPC报警个数

§pTagIDArray

[in] 报警点ID数组

§pTimeArray

[in] 报警产生的时间数组

§pErrCodeArray

[in] 错误码数组

·返回值

查询成功，返回RD_SUCCESS，查询失败返回其它错误码，见error_code.h。

·说明

调用该方法成功后，该报警点在某一时刻产生的报警记录的确认状态为确认。

·举例

示例代码参见SPC报警记录。

参见：

§spc3_query_group_child_tags

§spc3_acknowledge_alarms

§spc3_query_snapshots

§spc3_register_alarm_record_info

§spc3_query_tag_records

§spc3_query_tags_all_all_records

§spc3_query_group_records

§spc3_comment_alarms

©2015. All Rights Reserved.


spc3_query_snapshots

Navigation: C++ > SPC管理接口 > SPC报警记录 >

spc3_query_snapshots

 Return to chapter overview

·函数

§查询多个spc报警点的实时报警记录

int32 spc3_query_snapshots(

int32 nRecNum,

uint32* pTagIDArray,

int64 nMask,

HD3SpcRecord* pRecArray,

int32* pErrCodeArray

);

·参数

§nRecNum

[in] 报警点个数。

§pTagIDArray

[in] 报警点ID数组。

§nMask

[in]返回的报警记录的属性掩码

§pRecArray

[out] 报警记录数组。

§pErrCodeArray

[out] 错误码数组。

·返回值

查询成功，返回RD_SUCCESS。一部分成功返回EC_HD_API_SPC_QUERY_SNAPSHOTS_FAILED，查询失败返回其它错误码，见error_code.h。

·说明

无

·举例

示例代码参见SPC报警记录。

参见：

§spc3_query_group_child_tags

§spc3_acknowledge_alarms

§spc3_query_snapshots

§spc3_register_alarm_record_info

§spc3_query_tag_records

§spc3_query_tags_all_all_records

§spc3_query_group_records

§spc3_comment_alarms

©2015. All Rights Reserved.


spc3_register_alarm_record_info

Navigation: C++ > SPC管理接口 > SPC报警记录 >

spc3_register_alarm_record_info

 Return to chapter overview

·函数

§向服务器注册实时报警记录通知，每当服务器有新的报警记录产生时，用户传入的回调函数就会被调用。

int32 spc3_register_alarm_record_info(

HD3SpcCallbackFUnc pfn);

);

·参数

§pFn

[in] 报警记录回调函数。

·返回值

注册成功，返回RD_SUCCESS。注册失败返回其它错误码，见error_code.h。

·说明

回调函数可以为NULL

hs-caution

在回调函数中不能调用其它的iHyperDB的API。

回掉函数说明：

void (*HD3SPCCallbackFUnc)(

enum HD3_AM_CHANGE nChange,

const HD3SpcRecord* pRecord

);

注销报警通知接口

int32 spc3_unregister_alarm_record_info();

返回值，注销成功就返回RD_SUCCESS,否则，返回具体的错误码

·举例

示例代码参见SPC报警记录。

参见：

§spc3_query_group_child_tags

§spc3_acknowledge_alarms

§spc3_query_snapshots

§spc3_register_alarm_record_info

§spc3_query_tag_records

§spc3_query_tags_all_all_records

§spc3_query_group_records

§spc3_comment_alarms

©2015. All Rights Reserved.


spc3_unregister_alarm_record_info

Navigation: C++ > SPC管理接口 > SPC报警记录 >

spc3_unregister_alarm_record_info

 Return to chapter overview

·函数

§向服务器注销实时报警记录通知。

int32 spc3_unregister_alarm_record_info(

);

·参数

·返回值

注册成功，返回RD_SUCCESS。注册失败返回其它错误码，见error_code.h。

·说明

·举例

示例代码参见SPC报警记录。

参见：

§spc3_query_group_child_tags

§spc3_acknowledge_alarms

§spc3_query_snapshots

§spc3_register_alarm_record_info

§spc3_query_tag_records

§spc3_query_tags_all_all_records

§spc3_query_group_records

§spc3_comment_alarms

©2015. All Rights Reserved.


spc3_query_tag_records

Navigation: C++ > SPC管理接口 > SPC报警记录 >

spc3_query_tag_records

 Return to chapter overview

·函数

§查询一个SPC报警点的报警记录

int32 spc3_query_tag_records(

uint32 nTagID,

const HD3SPCQuery* pQuery,

int64 nMask,

HD3HANDLE* phResultSet

);

·参数

§nTagID

[in] 报警点ID数组

§pQuery

[in] 查询条件

§nMask

[in] 报警记录的属性掩码

§phResultSet

[out] 报警记录迭代器句柄,查询的报警记录包括实时记录和历史记录

·返回值

查询成功,返回RD_SUCCESS,查询失败返回其他错误码,见error.h

·举例

示例代码参见SPC报警记录。

参见：

§spc3_query_group_child_tags

§spc3_acknowledge_alarms

§spc3_query_snapshots

§spc3_register_alarm_record_info

§spc3_query_tag_records

§spc3_query_tags_all_all_records

§spc3_query_group_records

§spc3_comment_alarms

©2015. All Rights Reserved.


spc3_query_tags_all_records

Navigation: C++ > SPC管理接口 > SPC报警记录 >

spc3_query_tags_all_records

 Return to chapter overview

·函数

§查询spc报警点的全部报警记录

int32 spc3_query_tags_all_records(

int32 nTagNum,

uint32* pTagIDArray,

const HD3SPCQuery* pQuery,

int64 nMask,

HD3HANDLE* phResultSet

);

·参数

§nTagNum

[in] 报警点的个数

§pTagIDArray

[in] 报警点ID数组

§pQuery

[in] 查询条件

§nMask

[in] 报警记录的属性掩码

§phResultSet

[out] 报警记录迭代器句柄,查询的报警记录包括实时记录和历史记录

·返回值

查询成功,返回RD_SUCCESS;查询失败返回其他错误码,见error.h

·说明

无

·举例

示例代码参见SPC报警记录。

参见：

§spc3_query_group_child_tags

§spc3_acknowledge_alarms

§spc3_query_snapshots

§spc3_register_alarm_record_info

§spc3_query_tag_records

§spc3_query_tags_all_all_records

§spc3_query_group_records

§spc3_comment_alarms

©2015. All Rights Reserved.


spc3_query_group_records

Navigation: C++ > SPC管理接口 > SPC报警记录 >

spc3_query_group_records

 Return to chapter overview

·函数

int32 spc3_query_group_records(

uint32 nAlarmGroupID,

HD3SPCQuery* pQuery,

int64 nMask,

HD3HANDLE* phResultSet

);

·参数

§nAlarmGroupID

[in] 报警组ID

§pQuery

[in] 查询条件

§nMask

[in] 返回的报警记录的属性掩码

§phResultSet

[out] 报警记录迭代器句柄,查询的报警记录包括实时记录和历史记录

·返回值

查询成功,返回RD_SUCCESS,查询失败返回其他错误码,见error_code.h

·举例

示例代码参见SPC报警记录。

参见：

§spc3_query_group_child_tags

§spc3_acknowledge_alarms

§spc3_query_snapshots

§spc3_register_alarm_record_info

§spc3_query_tag_records

§spc3_query_tags_all_all_records

§spc3_query_group_records

§spc3_comment_alarms

©2015. All Rights Reserved.


spc3_comment_alarms

Navigation: C++ > SPC管理接口 > SPC报警记录 >

spc3_comment_alarms

 Return to chapter overview

·函数

int32 spc_comment_alarms(

int32 nCommentNum,

const uint32* pTagIDArray,

const HD3Time* pTimeArray,

const char* szComment,

int32* pErrCodeArray

);

·参数

§nCommentNum

[in] SPC报警个数

§pTagIDArray

[in] 报警点ID数组数组

§pTimeArray

[in] 报警产生的时间数组

§szComment

[in]注释内容

§pErrCodeArray

[in]错误码数组

·返回值

查询成功，返回RD_SUCCESS，查询失败返回其它错误码，见error_code.h。

·举例

示例代码参见SPC报警记录。

参见：

§spc3_query_group_child_tags

§spc3_acknowledge_alarms

§spc3_query_snapshots

§spc3_register_alarm_record_info

§spc3_query_tag_records

§spc3_query_tags_all_all_records

§spc3_query_group_records

§spc3_comment_alarms

©2015. All Rights Reserved.


内存快照接口

Navigation: C++ >

内存快照接口

 Return to chapter overview

《内存快照接口》的主要内容包括：

§sn3_query_snapshot

§sn3_query_snapshots

§sn3_save_disorder_snapshots

§sn3_save_tags_disorder_snapshots

§sn3_save_snapshot

§sn3_save_snapshots

§sn3_register_callback

§sn3_unregister_callback

§sn3_register_value_change_callback

§sn3_unregister_value_change_callback

snapshot

copycode !MISSING PHRASE 'COPYCODE'!

///*Snapshot Function

#include "hdKingAPI.h"

#include "error_code.h"

#include "data_types.h"

#include "hd3Struct.h"

#include <stdio.h>

#include <string.h>

#include <Windows.h>

void sn_notify_callback(uint32 nTagID, const HD3Record* pRec)

{

printf("sn_notify_callback tagid = %d\n", nTagID);

}

void sn_value_change_notify_callback(uint32 nTagID, const HD3Record* pRec)

{

printf("sn_notify_callback tagid = %d\n", nTagID);

}

int32 main()

{

int32 nRet = RD_SUCCESS;

HD3Connection conn;

HD3PtTagProp tag;

const char* szTagName_1 = "szTagName_1";

const char* szTagName_2 = "szTagName_2";

int32 nRecNum = 2;

HD3Record snapshotsSaved[2];

uint32 nTagIDs[2];

int32 nErrorCodes[2];

HD3Record snapshotsQueried[2];

int32 i = 0;

//connect

strcpy(conn.szAddress, "127.0.0.1");

conn.nPort = 5673;

conn.nTimeout = 3;

nRet = nt3_connect(&conn);

if (nRet != RD_SUCCESS)

{

printf("connect to server failed, error code[%d]!\n", nRet);

return -1;

}

printf("connect to server successful!\n");

//login

nRet = sc3_login("admin", "admin");

if (nRet != RD_SUCCESS)

{

printf("login failed, error code[%d]!\n", nRet);

return -1;

}

printf("login successful!\n");

//add two tag , type is int32 and string

strcpy(tag.szTagName, szTagName_1);

tag.nTagType = HD3_TAG_TYPE_INT32;

HD3Mask mask;

mask.nCommMask = HD3M_COMM_PROP_TAG_NAME | HD3M_COMM_PROP_TAG_TYPE;

mask.nExtMask = 0;

nRet = pt3_add_tag(&tag, &mask,"", &nTagIDs[0]);

if (nRet != RD_SUCCESS)

{

printf("add tags[%s] failed, error code [%d]!\n", tag.szTagName, nRet);

nt3_disconnect();

return -1;

}

printf("add tags[%s] successful!\n", tag.szTagName);

strcpy(tag.szTagName, szTagName_2);

tag.nTagType = HD3_TAG_TYPE_STRING;

mask.nCommMask = HD3M_COMM_PROP_TAG_NAME | HD3M_COMM_PROP_TAG_TYPE;

mask.nExtMask = 0;

nRet = pt3_add_tag(&tag, &mask, "", &nTagIDs[1]);

if (nRet != RD_SUCCESS)

{

printf("add tags[%s] failed, error code [%d]!\n", tag.szTagName, nRet);

nt3_disconnect();

return -1;

}

printf("add tags[%s] successful!\n", tag.szTagName);

//query tag ids

nRet = tag3_query_id_by_name(szTagName_1, &nTagIDs[0]);

if (nRet != RD_SUCCESS)

{

printf("query tag id failed, tag name[%s], error code[%d]!\n", szTagName_1, nRet);

nt3_disconnect();

return -1;

}

printf("tag[%s] query tag id successful, tag id[%d]!\n", szTagName_1, nTagIDs[0]);

nRet = tag3_query_id_by_name(szTagName_2, &nTagIDs[1]);

if (nRet != RD_SUCCESS)

{

printf("query tag id failed, tag name[%s], error code[%d]!\n", szTagName_2, nRet);

nt3_disconnect();

return -1;

}

printf("tag[%s] query tag id successful, tag id[%d]!\n", szTagName_2, nTagIDs[1]);

nRet = sn3_register_callback(1, nTagIDs, sn_notify_callback);

if (nRet != RD_SUCCESS)

{

printf("sn3_register_callback failed, tag id[%d], error code[%d]!\n", nTagIDs[0], nRet);

nt3_disconnect();

return -1;

}

printf("tag[%d] sn3_register_callback successful\n", nTagIDs[0]);

nRet = sn3_register_value_change_callback(1, nTagIDs, sn_value_change_notify_callback);

if (nRet != RD_SUCCESS)

{

printf("sn3_register_value_change_callback failed, tag id[%d], error code[%d]!\n", nTagIDs[0], nRet);

nt3_disconnect();

return -1;

}

printf("tag[%d] sn3_register_value_change_callback successful\n", nTagIDs[0]);

Sleep(30000);

//save one snapshot

snapshotsSaved[0].nSec = 3600;

snapshotsSaved[0].nMsec = 0;

snapshotsSaved[0].nQuality = 192;

snapshotsSaved[0].nTagType = HD3_TAG_TYPE_INT32;

snapshotsSaved[0].value.nInt32 = 111;

nRet = sn3_save_snapshot(nTagIDs[0], &(snapshotsSaved[0]));

if (nRet != RD_SUCCESS)

{

printf("save snapshot failed, tag id [%d], error code [%d]!\n", nTagIDs[0], nRet);

nt3_disconnect();

return -1;

}

printf("save snapshot successful, tag id[%d]!\n", nTagIDs[0]);

//query one snapshot

nRet = sn3_query_snapshot(nTagIDs[0], &(snapshotsQueried[0]));

if (nRet != RD_SUCCESS)

{

printf("query snapshot failed, tag id [%d], error code [%d]!\n", nTagIDs[0], nRet);

nt3_disconnect();

return -1;

}

printf("query snapshot successful, tag id[%d]!\n", nTagIDs[0]);

//save disorder snapshots

snapshotsSaved[0].nSec = 3600 - 60;

snapshotsSaved[0].nMsec = 0;

snapshotsSaved[0].nQuality = 192;

snapshotsSaved[0].nTagType = HD3_TAG_TYPE_INT32;

snapshotsSaved[0].value.nInt32 = 111;

snapshotsSaved[1].nSec = 3600 + 60;

snapshotsSaved[1].nMsec = 0;

snapshotsSaved[1].nQuality = 192;

snapshotsSaved[1].nTagType = HD3_TAG_TYPE_INT32;

snapshotsSaved[1].value.nInt32 = 222;

nRet = sn3_save_disorder_snapshots(nRecNum, nTagIDs[0], snapshotsSaved, &nErrorCodes[0]);

if (nRet != RD_SUCCESS)

{

printf("save disorder snapshots failed, tag id [%d], error code [%d]!\n", nTagIDs[0], nRet);

nt3_disconnect();

return -1;

}

printf("save disorder snapshots successful, tag id [%d]!\n", nTagIDs[0]);

// save snapshots

for (i = 0; i < nRecNum; i ++)

{

snapshotsSaved[i].nSec = 7200;

snapshotsSaved[i].nMsec = 0;

snapshotsSaved[i].nQuality = 192;

}

snapshotsSaved[0].nTagType = HD3_TAG_TYPE_INT32;

snapshotsSaved[0].value.nInt32 = 123;

snapshotsSaved[1].nTagType = HD3_TAG_TYPE_STRING;

snapshotsSaved[1].value.strBlob.pBuf = new char[HD3_LEN_VAR_TYPE_VALUE];

strcpy(snapshotsSaved[1].value.strBlob.pBuf, "this is a string");

snapshotsSaved[1].value.strBlob.nLenBuf = strlen(snapshotsSaved[1].value.strBlob.pBuf) + 1;

nRet = sn3_save_snapshots(nRecNum, nTagIDs, snapshotsSaved, nErrorCodes);

if (RD_SUCCESS == nRet)

{

printf("save snapshots successful!\n");

}

else if (EC_HD_API_SAVE_SNAPSHOTS_FAILED == nRet)

{

for (i = 0; i < nRecNum; i ++)

{

if (nErrorCodes[i] != RD_SUCCESS)

{

printf("tag[%d] save snapshot failed, error code [%d]!\n", nTagIDs[i], nErrorCodes[i]);

}

}

}

else

{

printf("save snapshots failed, error code[%d]!\n", nRet);

nt3_disconnect();

for (i = 0; i < nRecNum; i ++)

{

if (HD3_TAG_TYPE_STRING == snapshotsSaved[i].nTagType||HD3_TAG_TYPE_BLOB == snapshotsSaved[i].nTagType)

{

delete[] snapshotsSaved[i].value.strBlob.pBuf;

snapshotsSaved[i].value.strBlob.pBuf = NULL;

}

}

return -1;

}

for (i = 0; i < nRecNum; i ++)

{

if (HD3_TAG_TYPE_STRING == snapshotsSaved[i].nTagType||HD3_TAG_TYPE_BLOB == snapshotsSaved[i].nTagType)

{

delete[] snapshotsSaved[i].value.strBlob.pBuf;

snapshotsSaved[i].value.strBlob.pBuf = NULL;

}

}

//query sanpshots

snapshotsQueried[0].nTagType = HD3_TAG_TYPE_INT32;

snapshotsQueried[1].nTagType = HD3_TAG_TYPE_STRING;

snapshotsQueried[1].value.strBlob.pBuf = new char[HD3_LEN_VAR_TYPE_VALUE];

snapshotsQueried[1].value.strBlob.nLenBuf = HD3_LEN_VAR_TYPE_VALUE;

nRet = sn3_query_snapshots(nRecNum, nTagIDs, snapshotsQueried, nErrorCodes);

if (RD_SUCCESS == nRet)

{

printf("query snapshots successful!\n");

}

else if (EC_HD_API_SAVE_SNAPSHOTS_FAILED == nRet)

{

for (i = 0; i < nRecNum; i ++)

{

printf("tag[%d] query snapshot failed, error code [%d]!\n", nTagIDs[i], nErrorCodes[i]);

}

}

else

{

printf("query snapshots failed, error code[%d]!\n", nRet);

nt3_disconnect();

for (i = 0; i < nRecNum; i ++)

{

if (HD3_TAG_TYPE_STRING == snapshotsSaved[i].nTagType||HD3_TAG_TYPE_BLOB == snapshotsSaved[i].nTagType)

{

delete[] snapshotsQueried[i].value.strBlob.pBuf;

snapshotsQueried[i].value.strBlob.pBuf = NULL;

}

}

return -1;

}

for (i = 0; i < nRecNum; i ++)

{

if (HD3_TAG_TYPE_STRING == snapshotsSaved[i].nTagType||HD3_TAG_TYPE_BLOB == snapshotsSaved[i].nTagType)

{

delete[] snapshotsQueried[i].value.strBlob.pBuf;

snapshotsQueried[i].value.strBlob.pBuf = NULL;

}

}

sn3_unregister_callback();

sn3_unregister_value_change_callback();

//disconnect

nt3_disconnect();

return 0;

}

//*/

©2015. All Rights Reserved.


sn3_query_snapshot

Navigation: C++ > 内存快照接口 >

sn3_query_snapshot

 Return to chapter overview

·函数

§快照数据：查询单点实时记录

int32 sn3_query_snapshot(

uint32 nTagID,

HD3Record* pRec

);

·参数

§nTagID

[in] TagID。

§pRec

[in] 被保存的实时记录。

·返回值

查询成功，返回RD_SUCCESS，查询失败返回其它错误码，见error_code.h。

·说明

* 如果为string或blob类型的Tag，必须进行如下赋值

* (a) 为HD3Record.value.strBlob.pBuf分配字节内存

* (b) 赋值HD3Record.value.strBlob.nLenBuf = 1000

记录结构体：

HD3Record

copycode !MISSING PHRASE 'COPYCODE'!

typedef struct

{

int32 nSec;

int16 nMsec;

uint16 nQuality;

enum HD3_TAG_TYPE nTagType;

struct

{

int8 nInt8;

int16 nInt16;

int32 nInt32;

float32 fFloat32;

float64 fFloat64;

int8 nDigital;

struct

{

char* pBuf;

uint16 nLenBuf;

}strBlob;

}value;

}HDRecord;

·记录长度：

TagType为String和Blob时，value.strBlob.pBuf由使用者来分配空间，分配的空间的大小为value.strBlob.nValueLen不能小于string或者Blob类型允许的最大长度LENGTH_VAR_TYPE_VALUE。

·举例

示例代码参见内存快照接口。

参见：

§sn3_query_snapshot

§sn3_query_snapshots

§sn3_save_disorder_snapshots

§sn3_save_tags_disorder_snapshots

§sn3_save_snapshot

§sn3_save_snapshots

§sn3_register_callback

§sn3_unregister_callback

§sn3_register_value_change_callback

§sn3_unregister_value_change_callback

©2015. All Rights Reserved.

©2015. All Rights Reserved.


sn3_query_snapshots

Navigation: C++ > 内存快照接口 >

sn3_query_snapshots

 Return to chapter overview

·函数

§查询多个普通点的实时记录

int32 sn3_query_snapshots(

int32 nRecNum,

const uint32* pTagIDArray,

HD3Record* pRecordArray,

int32* pErrCodeArray

);

·参数

§nRecNum

[in] 查询的实时记录的数量，不能超过65535。

§pTagIDArray

[in] TagID数组。

§pRecordArray

[out] 记录数组

§pErrCodeArray

[out] 错误码数组。

·返回值

查询成功，返回RD_SUCCESS，不是所有的都成功返回EC_HD_API_QUERY_SNAPSHOTS_FAILED。查询失败返回其它错误码，见error_code.h。

·说明

查询多个普通点的内存快照。返回RD_SUCCESS，表示所有的内存快照都查询成功，pErrCodeArray数组都是RD_SUCCESS，返回EC_HD_API_QUERY_SNAPSHOTS_FAILED，表明不是所有查询都成功，具体的错误码保存在pErrCodeArray中，返回其它错误码表明查询失败，具体的错误码保存在nErrorCode[]中。

* 如果为string或blob类型的Tag，必须进行如下赋值

* (a) 为HD3Record.value.strBlob.pBuf分配字节内存

* (b) 赋值HD3Record.value.strBlob.nLenBuf = 1000

·举例

示例代码参见内存快照接口。

参见：

§sn3_query_snapshot

§sn3_query_snapshots

§sn3_save_disorder_snapshots

§sn3_save_tags_disorder_snapshots

§sn3_save_snapshot

§sn3_save_snapshots

§sn3_register_callback

§sn3_unregister_callback

§sn3_register_value_change_callback

§sn3_unregister_value_change_callback

©2015. All Rights Reserved.


sn3_save_disorder_snapshots

Navigation: C++ > 内存快照接口 >

sn3_save_disorder_snapshots

 Return to chapter overview

·函数

§快照数据：保存单点乱序记录（批量接口）

int32 sn3_save_disorder_snapshots(

int32 nRecNum,

uint32 nTagID,

const HD3Record* pRecArray,

int32* pErrCodeArray

);

·参数

§nRecNum

[in] 记录条数,不能超过65535。

§nTagID

[in] Tag ID。

§pRecArray

[in] 记录数组。

§pErrCodeArray

[in] 错误码数组。

·返回值

保存成功，返回RD_SUCCESS，保存失败返回其它错误码，见error_code.h。

·说明

§该接口用来保存一个点的若干乱序记录到服务器。

§当记录时间小于快照时间时，该记录会作为归档记录插入到归档文件，内存快照不变。若在归档文件中有一条原始记录的时间与该记录的时间一样，该乱序记录会被丢弃，记录被丢弃时返回值仍然是RD_SUCCESS。

§当记录时间等于快照时间时，该记录会被丢弃，记录被丢弃时返回值仍然是0。

§当记录时间大于快照时间时，该记录会作为最新的记录存入服务器，同时该记录会作为内存快照保存到服务器。

§Record请参见sn3_save_snapshot

·举例

示例代码参见内存快照接口。

参见：

§sn3_query_snapshot

§sn3_query_snapshots

§sn3_save_disorder_snapshots

§sn3_save_tags_disorder_snapshots

§sn3_save_snapshot

§sn3_save_snapshots

§sn3_register_callback

§sn3_unregister_callback

§sn3_register_value_change_callback

§sn3_unregister_value_change_callback

©2015. All Rights Reserved.


sn3_save_tags_disorder_snapshots

Navigation: C++ > 内存快照接口 >

sn3_save_tags_disorder_snapshots

 Return to chapter overview

·函数

§快照数据：保存多点乱序记录（批量接口）

int32 sn3_save_disorder_snapshots(

int32 nRecNum,

cosnt uint32* pTagIDArray,

const HD3Record* pRecArray,

int32* pErrCodeArray

);

·参数

§nRecNum

[in] 记录条数,不能超过65535。

§pTagIDArray

[in] Tag ID数组。

§pRecArray

[in] 记录数组。

§pErrCodeArray

[in] 错误码数组。

·返回值

保存成功，返回RD_SUCCESS，保存失败返回其它错误码，见error_code.h。

·说明

§该接口用来保存多个点的若干乱序记录到服务器。

§当记录时间小于快照时间时，该记录会作为归档记录插入到归档文件，内存快照不变。若在归档文件中有一条原始记录的时间与该记录的时间一样，该乱序记录会被丢弃，记录被丢弃时返回值仍然是RD_SUCCESS。

§当记录时间等于快照时间时，该记录会被丢弃，记录被丢弃时返回值仍然是0。

§当记录时间大于快照时间时，该记录会作为最新的记录存入服务器，同时该记录会作为内存快照保存到服务器。

§Record请参见sn3_save_snapshot

·举例

示例代码参见内存快照接口。

参见：

§sn3_query_snapshot

§sn3_query_snapshots

§sn3_save_disorder_snapshots

§sn3_save_tags_disorder_snapshots

§sn3_save_snapshot

§sn3_save_snapshots

§sn3_register_callback

§sn3_unregister_callback

§sn3_register_value_change_callback

§sn3_unregister_value_change_callback

©2015. All Rights Reserved.


sn3_save_snapshot

Navigation: C++ > 内存快照接口 >

sn3_save_snapshot

 Return to chapter overview

·函数

§快照数据：保存单点实时记录

int32 sn3_save_snapshot(

uint32 nTagID,

HD3Record* pRec

);

·参数

§nTagID

[in] TagID。

§pRec

[in] 被保存的实时记录。

·返回值

查询成功，返回RD_SUCCESS，查询失败返回其它错误码，见error_code.h。

·说明

* 如果为string或blob类型的Tag，必须进行如下赋值

* (a) 为HD3Record.value.strBlob.pBuf分配字节内存

* (b) 赋值HD3Record.value.strBlob.nLenBuf = 1000

·记录结构体：

HD3Record

copycode!MISSING PHRASE 'COPYCODE'!

typedef struct

{

int32 nSec;

int16 nMsec;

uint16 nQuality;

enum HD3_TAG_TYPE nTagType;

struct

{

int8 nInt8;

int16 nInt16;

int32 nInt32;

float32 fFloat32;

float64 fFloat64;

int8 nDigital;

struct

{

char* pBuf;

uint16 nLenBuf;

}strBlob;

}value;

}HD3Record;

·记录长度：

TagType为String和Blob时，value.strBlob.pBuf由使用者来分配空间，分配的空间的大小为value.strBlob.nValueLen不能小于string或者Blob类型允许的最大长度LENGTH_VAR_TYPE_VALUE。

·举例

示例代码参见内存快照接口。

参见：

§sn3_query_snapshot

§sn3_query_snapshots

§sn3_save_disorder_snapshots

§sn3_save_tags_disorder_snapshots

§sn3_save_snapshot

§sn3_save_snapshots

§sn3_register_callback

§sn3_unregister_callback

§sn3_register_value_change_callback

§sn3_unregister_value_change_callback

©2015. All Rights Reserved.


sn3_save_snapshots

Navigation: C++ > 内存快照接口 >

sn3_save_snapshots

 Return to chapter overview

·函数

§保存多个点的实时记录（批量接口）

int32 sn3_save_snapshots(

int32 nRecNum,

const uint32* pTagIDArray,

const HD3Record* pRecArray,

int32* pErrCodeArray

);

·参数

nRecNum

[in] 实时记录的个数,不能超过65535。

pTagIDArray

[in] TagID的数组。

pRecArray

[in] 需要被保存的记录数组。

pErrCodeArray

[out] 错误码数组，表明每一条记录的是否保存成功。

·返回值

保存成功，返回RD_SUCCESS，不是所有的都成功返回EC_HD_API_SAVE_SNAPSHOTS_FAILED。保存失败返回其它错误码，见error_code.h。

·说明

§记录结构体：

HD3Record

copycode!MISSING PHRASE 'COPYCODE'!

typedef struct

{

int32 nSec;

int16 nMsec;

uint16 nQuality;

enum HD3_TAG_TYPE nTagType;

struct

{

int8 nInt8;

int16 nInt16;

int32 nInt32;

float32 fFloat32;

float64 fFloat64;

int8 nDigital;

struct

{

char* pBuf;

uint16 nLenBuf;

}strBlob;

}value;

}HD3Record;

§记录长度：

üTagType为String和Blob时，value.strBlob.pBuf由使用者来分配空间，分配的空间的大小为value.strBlob.nValueLen不能小于string或者Blob类型允许的最大长度LENGTH_VAR_TYPE_VALUE。

·举例

示例代码参见内存快照接口。

参见：

§sn3_query_snapshot

§sn3_query_snapshots

§sn3_save_disorder_snapshots

§sn3_save_tags_disorder_snapshots

§sn3_save_snapshot

§sn3_save_snapshots

§sn3_register_callback

§sn3_unregister_callback

§sn3_register_value_change_callback

§sn3_unregister_value_change_callback

©2015. All Rights Reserved.


sn3_register_callback

Navigation: C++ > 内存快照接口 >

sn3_register_callback

 Return to chapter overview

·函数

§注册数据回调通知

typedef void (*HD3SnapshotCallbackFunc)(hd3_in uint32 nTagID, hd3_in const HD3Record* pRecord);

int32 sn3_register_callback(

int32 nTagNum,

uint32* pTagIDArray,

HD3SnapshotCallbackFunc pfn

);

·参数

§nTagNum

[in] Tag个数。

§pTagIDArray

[in] TagID数组。

§pfn

[in] 数据回调函数，被注册点的快照更新后该回调函数会被调用。

·返回值

成功，返回RD_SUCCESS，查询失败返回其它错误码，见error_code.h。

·说明

调用该接口注册数据回调通知后，每当注册的点的快照更新时，注册的回调函数会被调用。回调函数的第一个参数是快照更新的点的ID，第二个参数是更新的快照。需要注意的是回调函数的实现中请不要再调用实时数据库的API以免引起多线程的问题。

·举例

示例代码参见内存快照接口。

参见：

§sn3_query_snapshot

§sn3_query_snapshots

§sn3_save_disorder_snapshots

§sn3_save_tags_disorder_snapshots

§sn3_save_snapshot

§sn3_save_snapshots

§sn3_register_callback

§sn3_unregister_callback

§sn3_register_value_change_callback

§sn3_unregister_value_change_callback


sn3_unregister_callback

Navigation: C++ > 内存快照接口 >

sn3_unregister_callback

 Return to chapter overview

·函数

§注销数据回调通知

int32 sn3_unregister_callback(

);

·参数

无。

·返回值

成功，返回RD_SUCCESS，查询失败返回其它错误码，见error_code.h。

·说明

调用该接口后，调用接口的程序之前注册的所有点会被注销掉，不再接收数据回调。

·举例

示例代码参见内存快照接口。

参见：

§sn3_query_snapshot

§sn3_query_snapshots

§sn3_save_disorder_snapshots

§sn3_save_tags_disorder_snapshots

§sn3_save_snapshot

§sn3_save_snapshots

§sn3_register_callback

§sn3_unregister_callback

§sn3_register_value_change_callback

§sn3_unregister_value_change_callback


sn3_register_value_change_callback

Navigation: C++ > 内存快照接口 >

sn3_register_value_change_callback

 Return to chapter overview

·函数

§注册值变化时数据回调通知

typedef void (*HD3SnapshotCallbackFunc)(hd3_in uint32 nTagID, hd3_in const HD3Record* pRecord);

int32 sn3_register_value_change_callback(

int32 nTagNum,

uint32* pTagIDArray,

HD3SnapshotCallbackFunc pfn

);

·参数

§nTagNum

[in] Tag个数。

§pTagIDArray

[in] TagID数组。

§pfn

[in] 值变化数据回调函数，被注册点的快照更新并且值发生变化时该回调函数会被调用。

·返回值

成功，返回RD_SUCCESS，查询失败返回其它错误码，见error_code.h。

·说明

调用该接口注册值变化数据回调通知后，每当注册的点的快照更新并且数据值发生变化时，注册的回调函数会被调用。回调函数的第一个参数是快照更新的点的ID，第二个参数是更新的快照。需要注意的是回调函数的实现中请不要再调用实时数据库的API以免引起多线程的问题。

·举例

示例代码参见内存快照接口。

参见：

§sn3_query_snapshot

§sn3_query_snapshots

§sn3_save_disorder_snapshots

§sn3_save_tags_disorder_snapshots

§sn3_save_snapshot

§sn3_save_snapshots

§sn3_register_callback

§sn3_unregister_callback

§sn3_register_value_change_callback

§sn3_unregister_value_change_callback


sn3_unregister_value_change_callback

Navigation: C++ > 内存快照接口 >

sn3_unregister_value_change_callback

 Return to chapter overview

·函数

§注销注册值变化数据回调通知

int32 sn3_unregister_callback(

);

·参数

无。

·返回值

成功，返回RD_SUCCESS，查询失败返回其它错误码，见error_code.h。

·说明

调用该接口后，调用接口的程序之前注册的所有点会被注销掉，不再接收数据回调。

·举例

示例代码参见内存快照接口。

参见：

§sn3_query_snapshot

§sn3_query_snapshots

§sn3_save_disorder_snapshots

§sn3_save_tags_disorder_snapshots

§sn3_save_snapshot

§sn3_save_snapshots

§sn3_register_callback

§sn3_unregister_callback

§sn3_register_value_change_callback

§sn3_unregister_value_change_callback


归档数据接口

Navigation: C++ >

归档数据接口

 Return to chapter overview

《归档数据接口》的主要内容包：

§ar3_query_raw_records

§ar3_query_raw_records_number

§ar3_query_specify_num_raw_recs

§ar3_query_interp_record_by_mode

§ar3_query_interp_records_by_mode

§ar3_query_tags_interp_records_by_mode

Archive Record

copycode !MISSING PHRASE 'COPYCODE'!

///* Archive Record Function

#include "hdKingAPI.h"

#include "error_code.h"

#include "data_types.h"

#include "hd3Struct.h"

#include <stdio.h>

#include <string.h>

#include <Windows.h>

int32 main()

{

int32 nRet = RD_SUCCESS;

HD3Connection conn;

HD3PtTagProp normalTag;

int32 nRecNum = 3;

HD3Record records[3];

uint32 nTagIDs[3];

int32 nErrorCodes[3];

int32 i = 0;

HD3Mask mask;

//connect

strcpy(conn.szAddress, "127.0.0.1");

conn.nPort = 5673;

conn.nTimeout = 3;

nRet = nt3_connect(&conn);

if (nRet != RD_SUCCESS)

{

printf("connect to server failed, error code[%d]!\n", nRet);

return -1;

}

printf("connect to server successful!\n");

//login

nRet = sc3_login("admin", "admin");

if (nRet != RD_SUCCESS)

{

printf("login failed, error code[%d]!\n", nRet);

return -1;

}

printf("login successful!\n");

//add tag

strcpy(normalTag.szTagName, "szNormalTag");

normalTag.nTagType = HD3_TAG_TYPE_INT32;

mask.nCommMask = HD3M_COMM_PROP_TAG_NAME | HD3M_COMM_PROP_TAG_TYPE;

mask.nExtMask = 0;

nRet = pt3_add_tag(&normalTag, &mask, "", &normalTag.nTagID);

if (nRet != RD_SUCCESS)

{

printf("add tag[%s] failed, error code [%d]!\n", normalTag.szTagName, nRet);

nt3_disconnect();

return -1;

}

printf("add tag[%s] successful!\n", normalTag.szTagName);

Sleep(30000);

// save snapshots

for (i = 0; i < nRecNum; i ++)

{

nTagIDs[i] = normalTag.nTagID;

records[i].nSec = 1 + i;

records[i].nMsec = 0;

records[i].nQuality = 192;

records[i].value.nInt32 = records[i].nSec;

}

nRet = sn3_save_snapshots(nRecNum, nTagIDs, records, nErrorCodes);

if (nRet != RD_SUCCESS)

{

printf("save snapshots failed, error code[%d]!\n", nRet);

nt3_disconnect();

return -1;

}

//query raw recs num

HD3TimeRegion timeRegion;

int32 nRecNumQueried;

timeRegion.left.nSec = 1;

timeRegion.left.nMsec = 0;

timeRegion.right.nSec = 36000;

timeRegion.right.nMsec = 0;

timeRegion.bLeftClosed = true;

timeRegion.bRightClosed = true;

nRet = ar3_query_raw_records_number(normalTag.nTagID, &timeRegion, &nRecNumQueried);

if (nRet != RD_SUCCESS)

{

printf("tag [id:%d] query raw records number failed, error code[%d]!\n", normalTag.nTagID, nRet);

nt3_disconnect();

return -1;

}

printf("tag [id:%d] query raw records number successful, nRecNum is %d in time area [%d s : %d ms] to [%d s : %d ms] !\n",

normalTag.nTagID, nRecNumQueried, timeRegion.left.nSec, timeRegion.left.nMsec, timeRegion.right.nSec, timeRegion.right.nMsec );

//query raw recs

HD3Record recordsQueried[2];

nRecNumQueried = 2;

do

{

nRet = ar3_query_raw_records(nTagIDs[0], &timeRegion, &nRecNumQueried, recordsQueried);

if (nRet != RD_SUCCESS)

{

printf("tag [id:%d] query raw records failed, error code[%d]!\n", normalTag.nTagID, nRet);

nt3_disconnect();

return -1;

}

for (i = 0; i < nRecNumQueried; i ++)

{

printf("tag [id:%d] record time [%d s : %d ms], quality [%d], value [%d]!\n",

normalTag.nTagID, recordsQueried[i].nSec, recordsQueried[i].nMsec,

recordsQueried[i].nQuality, recordsQueried[i].value.nInt32);

}

//reset end time

if (2 == nRecNumQueried)

{

timeRegion.right.nSec = recordsQueried[1].nSec;

timeRegion.right.nMsec = recordsQueried[1].nMsec;

if ( 0 == timeRegion.right.nMsec )

{

timeRegion.right.nSec --;

timeRegion.right.nMsec = 999;

}

else

{

timeRegion.right.nMsec --;

}

}

} while (2 == nRecNumQueried);

//query specify number records

timeRegion.left.nSec = 100;

timeRegion.left.nMsec = 0;

nRecNumQueried = 2;

nRet = ar3_query_specify_num_raw_recs(normalTag.nTagID, &timeRegion.left, true, &nRecNumQueried, recordsQueried);

if (nRet != RD_SUCCESS)

{

printf("tag [id:%d] query 2 records from time [%d s : %d ms] to the earlier time failed, error code[%d]!\n",

normalTag.nTagID, timeRegion.left.nSec, timeRegion.left.nMsec, nRet);

nt3_disconnect();

return -1;

}

printf("tag [id:%d] query 2 records from time [%d s : %d ms] to the earlier time successful!\n",

normalTag.nTagID, timeRegion.left.nSec, timeRegion.left.nMsec);

for (i = 0; i < 2; i ++)

{

printf("tag [id:%d] raw record time [%d s : %d ms], quality [%d], value [%d]!\n",

normalTag.nTagID, recordsQueried[i].nSec, recordsQueried[i].nMsec,

recordsQueried[i].nQuality, recordsQueried[i].value.nInt32);

}

//modify record

recordsQueried[0].value.nInt32 = 999;

nRet = ar3_modify_record(normalTag.nTagID, &recordsQueried[0]);

if (nRet != RD_SUCCESS)

{

printf("tag [id:%d] modify record failed, error code[%d]!\n", normalTag.nTagID, nRet);

nt3_disconnect();

return -1;

}

printf("tag [id:%d] modify record successful!\n", normalTag.nTagID);

//delete record

HD3Time hdTime;

hdTime.nSec = recordsQueried[0].nSec;

hdTime.nMsec = recordsQueried[0].nMsec;

nRet = ar3_delete_record(normalTag.nTagID, &hdTime);

if (nRet != RD_SUCCESS)

{

printf("tag [id:%d] delete record failed, error code[%d]!\n", normalTag.nTagID, nRet);

nt3_disconnect();

return -1;

}

printf("tag [id:%d] delete record successful!\n", normalTag.nTagID);

//query one interpolate rec by mode

recordsQueried[0].nSec = 1;

recordsQueried[0].nMsec = 500;

nRet = ar3_query_interp_record_by_mode(HD3_REC_INTERP_QUERY_MODE_LINEAR, normalTag.nTagID, &(recordsQueried[0]));

if (nRet != RD_SUCCESS)

{

printf("tag [id:%d] query interpolate record by mode failed, error code[%d]!\n", normalTag.nTagID, nRet);

nt3_disconnect();

return -1;

}

printf("tag [id:%d] query interpolate record by mode successful, time [%d s : %d ms], quality [%d], value [%d]!\n",

normalTag.nTagID, recordsQueried[0].nSec, recordsQueried[0].nMsec,

recordsQueried[0].nQuality, recordsQueried[0].value.nInt32);

//query interpolate records

recordsQueried[0].nSec = 1;

recordsQueried[0].nMsec = 300;

recordsQueried[1].nSec = 1;

recordsQueried[1].nMsec = 800;

nRet = ar3_query_interp_records_by_mode(HD3_REC_INTERP_QUERY_MODE_PREV, normalTag.nTagID, 2, recordsQueried, nErrorCodes);

if (RD_SUCCESS == nRet)

{

printf("query tag [id:%d] interpolate records by mode successful\n", normalTag.nTagID);

for (i = 0; i < 2; i ++)

{

printf("tag [id:%d] query interpolate records by mode successful, time [%d s : %d ms], quality [%d], value [%d]!\n",

normalTag.nTagID, recordsQueried[i].nSec, recordsQueried[i].nMsec,

recordsQueried[i].nQuality, recordsQueried[i].value.nInt32);

}

}

else if (EC_HD_API_QUERY_INTERP_REC_FAILED == nRet)

{

for (i = 0; i < 2; i ++)

{

if (RD_SUCCESS == nErrorCodes[i])

{

printf("tag [id:%d] query interpolate record time by mode [%d s : %d ms], quality [%d], value [%d]!\n",

normalTag.nTagID, recordsQueried[i].nSec, recordsQueried[i].nMsec,

recordsQueried[i].nQuality, recordsQueried[i].value.nInt32);

}

else

{

printf("tag [id:%d] query interpolate record failed, error code [%d], record time [%d s : %d ms]!\n",

normalTag.nTagID, nErrorCodes[i], recordsQueried[i].nSec, recordsQueried[i].nMsec);

}

}

}

else

{

printf("tag [id:%d] query interpolate record failed, error code[%d]!\n", normalTag.nTagID, nRet);

nt3_disconnect();

return -1;

}

//disconnect

nt3_disconnect();

return 0;

}

//*/

©2015. All Rights Reserved.


ar3_query_raw_records

Navigation: C++ > 归档数据接口 >

ar3_query_raw_records

 Return to chapter overview

·函数

§ar3_query_records函数用来查询某一Tag点一个时间段内的实际记录，该操作支持并发执行。

int32 ar3_query_raw_records(

uint32 nTagID,

const HD3TimeRegion* pRegion,

int32* pRecNum,

HD3Record* pRecArray

);

·参数

§nTagID

[in] TagID。

§pRegion

[in] 时间区间。

§pRecNum

[in,out] in：待查的记录数量。out：实际返回的记录的数量。若小于要查询的记录数量， 则表示该时间段的记录全部查完；若等于要查询的数量，则表示在该 时间段内还有记录没有查完，用户可以根据返回的最后一条记录的时间来重新设置结束时间，然后再次调用该接口来查询剩下的记录。记录个数不能超过65535。

§pRecArray

[out] 记录数组，返回的记录是按照时间戳从大到小排列的，例如records[0]比records[1]的时间要大。

·返回值

全部查询成功，返回RD_SUCCESS，查询失败返回错误码，见error_code.h。

·说明

1.查询一个Tag在一个时间段内的记录，该接口支持所有的数据类型。

2.该接口的时间戳精确到秒。例如：开始时间为“2001-1-1 08:08:08.111”，结束时间是为“2001-1-2 08:08:08.222”，查询到的记录是“2001-01-01 08:08:08.000”到“2001-01-02 08:08:08.000”范围内的原始记录。

3.如果为string或blob类型的Tag，必须进行如下赋值

4.(a) 为HD3Record.value.strBlob.pBuf分配字节内存

(b) 赋值HD3Record.value.strBlob.nLenBuf = 1000

·举例

示例代码参见归档数据接口。


ar3_query_raw_records_number

Navigation: C++ > 归档数据接口 >

ar3_query_raw_records_number

 Return to chapter overview

·函数

§查询一个普通点在一个时间段的原始记录的个数

int32 ar3_query_raw_records_number(

uint32 nTagID,

const HD3TimeRegion* pRegion,

int32* pnRecNum

);

·参数

§nTagID

[in] TagID。

§pRegion

[in] 时间范围。

§pRecNum

[out] 原始记录条数。

·返回值

查询成功，返回RD_SUCCESS。查询失败返回错误码，见error_code.h。

·说明

该接口用来查询某一Tag指定时间段内的原始记录条数。

·举例

示例代码参见归档数据接口。


ar3_query_specify_num_raw_recs

Navigation: C++ > 归档数据接口 >

ar3_query_specify_num_raw_recs

 Return to chapter overview

·函数

归档数据：查询指定个数的原始记录

int32 ar3_query_specify_num_raw_recs(

uint32 nTagID,

const HD3Time* pTime,

bool bHistorical,

int32* pQueryRecNum,

HD3Record* pRecArray

)

·参数

§nTagID

[in] TagID。

§pTime

[in] 指定的时间戳。

§bHistorical

[in] 是否为历史方向。true表示向后查（记录时间小于指定时间点的记录），false表示向前查询（记录时间大于指定时 间点的记录）

§pQueryRecNum

[in, out]in:记录数组大小，out：实际返回的记录条数，不能超过65535 。

§pRecArray

[out] 查询记录数组。

·返回值

查询成功，返回RD_SUCCESS。查询失败返回错误码，见error_code.h。

·说明

该接口用来查询某一Tag指定时间点前或后的多条记录。

·举例

示例代码参见归档数据接口。

参见：

§ar3_query_raw_records

§ar3_query_raw_records_number

§ar3_query_specify_num_raw_recs

§ar3_query_interp_record_by_mode

§ar3_query_interp_records_by_mode

§ar3_query_tags_interp_records_by_mode

©2015. All Rights Reserved.


ar3_query_interp_record_by_mode

Navigation: C++ > 归档数据接口 >

ar3_query_interp_record_by_mode

 Return to chapter overview

·函数

§根据插值类型的不同查询某一个普通点在某一时刻的插值记录

int32 ar3_query_interp_record_by_mode(

enum HD3_REC_INTER_QUERY_MODE nMode,

uint32 nTagID,

HD3Record* pRec

)

·参数

§nMode

[in]插值类型，值为1表示前向插值，即将某一个时刻之前最近的一条原始值作为改时刻的插值；值为0表示线性插值，即根据某一时刻之前的最近一条原始值和该时刻之后最近一条原始值来进行线性计算该时刻的插值。

§nTagID

[in] TagID。

§pRec

[in,out]in：插值时间戳，out：插值记录的值。

·返回值

查询成功返回RD_SUCCESS，查询失败返回错误码，见error_code.h。

·说明

§iHyperDB的8种数据类型都支持插值查询。

§插值时，选定的插值时刻，需要前后都有好的原始记录，方可插值，此外如果插值时间点正好等于原始记录的时间戳，则此数据也能插值得到；

§如果是最后一个点，那么在大于最后这点的时间戳的时刻进行插值是无法得到数据记录的，因为此时后面的原始数据时没有的，这种原理类似于线性函数两个点之间的插值，如果中间那个店（即插值点）的后一个点还没有原始数据，那么，这个点做插值，就无法插值成功。

§对于普通点，如果要获取某一秒的数据，一般插值会使用这一秒的999毫秒来进行插值。比如实际存储的两条记录时间戳为1'1ms, 2'1ms，如果用户想要获取2'时的数据，那么传进来进行插值的时间戳使用2'999ms，则基本上2'的数据都能被插值得到（在999ms之前的点都可以通过前点插值得到），因此一般建议插值时ms取为999ms。

·举例

示例代码参见归档数据接口。


ar3_query_interp_records_by_mode

Navigation: C++ > 归档数据接口 >

ar3_query_interp_records_by_mode

 Return to chapter overview

·函数

根据插值类型的不同查询一个点在若干时刻的插值记录

int32 ar3_query_interp_records_by_mode(

enum HD3_REC_INTER_QUERY_MODE nMode,

uint32 nTagID,

int32 nRecNum,

HD3Record* pRecArray,

int32* pErrCodeArray

);

·参数

hServer:

[in] 服务器句柄。

nMode

[in]插值类型，值为1表示前向插值，即将某一个时刻之前最近的一条原始值作为该时刻的插值；值为0表示线性插值，即根据某一时刻之前的最近一条原始值和该时刻之后最近一条原始值来进行线性计算该时刻的插值。

nTagID

[in] TagID。

nRecNum

[in]记录的条数。

records[]

[in,out]in：查询时间戳，out：返回记录的值。

nErrCodes[]

[out]每条记录的Errorcode array。

·返回值

查询成功返回RD_SUCCESS，查询失败返回错误码，见error_code.h。

·说明

§iHyperDB的8种数据类型都支持插值查询。

§插值时，选定的插值时刻，需要前后都有好的原始记录，方可插值，此外如果插值时间点正好等于原始记录的时间戳，则此数据也能插值得到；

§如果是最后一个点，那么在大于最后这点的时间戳的时刻进行插值是无法得到数据记录的，因为此时后面的原始数据时没有的，原理类似于线性函数两个点之间的插值，如果中间那个店（即插值点）的后一个点还没有原始数据，那么，这个点做插值，就无法插值成功。

§对于普通点而言，如果要获取某一秒的数据，一般插值会使用这一秒的999毫秒来进行插值。比如实际存储的两条记录时间戳为1'1ms, 2'1ms，如果用户想要获取2'时的数据，那么传进来进行插值的时间戳使用2'999ms，则基本上2'的数据都能被插值得到（在999ms之前的点都可以通过前点插值得到），因此一般建议插值时ms取为999ms。

·举例

示例代码参见归档数据接口。

参见：

§ar3_query_raw_records

§ar3_query_raw_records_number

§ar3_query_specify_num_raw_recs

§ar3_query_interp_record_by_mode

§ar3_query_interp_records_by_mode

§ar3_query_tags_interp_records_by_mode

©2015. All Rights Reserved.


ar3_query_tags_interp_records_by_mode

Navigation: C++ > 归档数据接口 >

ar3_query_tags_interp_records_by_mode

Return to chapter overview

·函数

§根据插值类型的不同查询某多个tag点在某些时刻的插值记录

int32 ar3_query_tags_interp_records_by_mode (

enum HD3_REC_INTER_QUERY_MODE nMode,

int32 nRecNum,

const uint32* pTagIDArray,

HD3Record* pRecArray,

int32* pErrCodeArray

)

·参数

§nMode：

[in]插值类型，值为1表示前向插值，即将某一个时刻之前最近的一条原始值作为改时刻的插值；值为0表示线性插值，即根据某一时刻之前的最近一条原始值和该时刻之后最近一条原始值来进行线性计算该时刻的插值。

§nRecNum：

[in] records元素个数。

§pTagIDArray

[in] 多个TagID，与records一一对应。

§pRecArray

[in,out]in：插值时间戳，out：插值记录的值。

§pErrCodeArray

[out]：错误码。

·返回值

查询成功返回RD_SUCCESS，查询失败返回错误码，见error_code.h。具体每个tag插值查询错误原因可能不同，具体需判断nErrCodes.

·说明

§iHyperDB的8种数据类型都支持插值查询。

§插值时，选定的插值时刻，需要前后都有好的原始记录，方可插值，此外如果插值时间点正好等于原始记录的时间戳，则此数据也能插值得到；

§如果是最后一个点，那么在大于最后这点的时间戳的时刻进行插值是无法得到数据记录的，因为此时后面的原始数据是没有的，这种原理类似于线性函数两个点之间的插值，如果中间那个点（即插值点）的后一个点还没有原始数据，那么，这个点做插值，就无法插值成功。

§对于普通点，如果要获取某一秒的数据，一般插值会使用这一秒的999毫秒来进行插值。比如实际存储的两条记录时间戳为1'1ms, 2'1ms，如果用户想要获取2'时的数据，那么传进来进行插值的时间戳使用2'999ms，则基本上2'的数据都能被插值得到（在999ms之前的点都可以通过前点插值得到），因此一般建议插值时ms取为999ms。

·举例

示例代码参见归档数据接口。

参见

§ar3_query_raw_records

§ar3_query_raw_records_number

§ar3_query_specify_num_raw_recs

§ar3_query_interp_record_by_mode

§ar3_query_interp_records_by_mode

§ar3_query_tags_interp_records_by_mode

©2015. All Rights Reserved.


Digitalset管理接口

Navigation: C++ >

Digitalset管理接口

 Return to chapter overview

《Digitalset管理接口》的主要内容包括：

§pt3_add_digitalset

§pt3_modify_digitalset

§pt3_delete_digitalset

§pt3_query_all_digitalset

§pt3_query_digitalset_state_name

§pt3_query_digitalset_all_state_infos

digital set

copycode !MISSING PHRASE 'COPYCODE'!

//*Digitalset Function

#include "hdKingAPI.h"

#include "error_code.h"

#include "data_types.h"

#include "hd3Struct.h"

#include <stdio.h>

#include <string.h>

int32 main()

{

int32 nRet = RD_SUCCESS;

HD3Connection conn;

int8 nStateNum=7;

const char* szDsName = "color";

HD3HANDLE hIter = NULL;

int32 nStateValues[7] = {1,2,3,4,5,6,7};

//connect

strcpy(conn.szAddress, "127.0.0.1");

conn.nPort = 5673;

conn.nTimeout = 3;

nRet = nt3_connect(&conn);

if (nRet != RD_SUCCESS)

{

printf("connect to server failed, error code[%d]!\n", nRet);

return -1;

}

printf("connect to server successful!\n");

//login

nRet = sc3_login("admin", "admin");

if (nRet != RD_SUCCESS)

{

printf("login failed, error code[%d]!\n", nRet);

return -1;

}

printf("login successful!\n");

//add digitalset

HD3DigitalSet hd3DigitalSet;

memset(&hd3DigitalSet, 0 , sizeof(hd3DigitalSet));

strcpy(hd3DigitalSet.szName, szDsName);

nRet = pt3_add_digitalset(&hd3DigitalSet);

if (nRet != RD_SUCCESS)

{

printf("add digitalset failed, error code[%d]!\n", nRet);

nt3_disconnect();

return -1;

}

printf("add digitalset[name:%s] successful!\n", szDsName);

//modify digitalset state name

HD3DsStateInfo* pStateArray = new HD3DsStateInfo[nStateNum];

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

{

pStateArray[i].nStateValue = i;

}

strcpy(pStateArray[0].szStateName, "red");

strcpy(pStateArray[1].szStateName, "orange");

strcpy(pStateArray[2].szStateName, "yellow");

strcpy(pStateArray[3].szStateName, "green");

strcpy(pStateArray[4].szStateName, "blue");

strcpy(pStateArray[5].szStateName, "indigo");

strcpy(pStateArray[6].szStateName, "violet");

nRet = pt3_modify_digitalset(&hd3DigitalSet, nStateNum, pStateArray);

if (nRet != RD_SUCCESS)

{

printf("modify digitalset failed, error code[%d]!\n", nRet);

delete[] pStateArray;

nt3_disconnect();

return -1;

}

delete[] pStateArray;

printf("modify digitalset successful!\n");

//get digital set state name by state id

HD3HANDLE hDsInfoIter = NULL;

HD3DsStateInfo stateInfo;

memset(&stateInfo, 0x00, sizeof(stateInfo));

nRet = pt3_query_digitalset_all_state_infos(&hd3DigitalSet, &hDsInfoIter);

if (nRet != RD_SUCCESS)

{

printf("pt_query_digitalset_state_infos successful!\n");

}

while(nRet == RD_SUCCESS)

{

nRet = ut3_get_item_step(hDsInfoIter, &stateInfo);

if(nRet != RD_SUCCESS)

{

break;

}

printf("DsInfo:%d,%d,%s\n", stateInfo.nStateID, stateInfo.nStateValue, stateInfo.szStateName);

}

ut3_free_handle(hDsInfoIter);

//query digitalset names

nRet = pt3_query_all_digitalsets(&hIter);

if (nRet != RD_SUCCESS)

{

printf("query digitalset names failed, error code[%d]!\n", nRet);

nt3_disconnect();

return -1;

}

HD3DigitalSet ds;

memset(&ds, 0, sizeof(ds));

while (true)

{

nRet = ut3_get_item_step(hIter, &ds);

if (RD_SUCCESS == nRet)

{

printf("query digitalset name [%s] successful !\n", ds.szName);

}

else if (EC_HD_API_QUERY_END == nRet)

{

printf("query digitalset names complete!\n");

break;

}

else

{

printf("query digitalset name failed, error code [%d]!\n", nRet);

break;

}

}

ut3_free_handle(hIter);

//query digitalset state name

nRet = pt3_query_digitalset_state_name(szDsName, 1, stateInfo.szStateName);

if (nRet != RD_SUCCESS)

{

printf("query digitalset state name failed, error code[%d]!\n", nRet);

nt3_disconnect();

return -1;

}

printf("query digitalset state name[%s] by id [%d] sccessful!\n", stateInfo.szStateName, 1);

//delete digitalset

nRet = pt3_delete_digitalset(szDsName);

if (nRet != RD_SUCCESS)

{

printf("delete digitalset[name: %s] failed, error code[%d]!\n", szDsName, nRet);

nt3_disconnect();

return -1;

}

printf("delete digitalset[name: %s] sccessful!\n", szDsName);

//disconnect

nt3_disconnect();

return 0;

}

//*/

©2015. All Rights Reserved.


pt3_add_digitalset

Navigation: C++ > Digitalset管理接口 >

pt3_add_digitalset

 Return to chapter overview

·函数

§新增一个数字状态集。

int32 pt3_add_digitalset(

const HD3DigitalSet* pDigitalSet

);

·参数

§pDigitalSet

[in] 数字量状态集。

·返回值

添加成功，返回RD_SUCCESS，添加失败返回错误码，见error_code.h

·说明

建立一个新的数字量状态集时，首先要为它添加一个独一无二的状态集名，以后对该数字量状态集的访问就需要通过状态集名来访问。该接口在服务器中建立一个空的状态集，调用pt3_modify_digitalset可以给该状态集填充状态。

·举例

示例代码参见Digitalset管理接口。

·参见：

§pt3_add_digitalset

§pt3_modify_digitalset

§pt3_delete_digitalset

§pt3_query_all_digitalset

§pt3_query_digitalset_state_name

§pt3_query_digitalset_all_state_infos

©2015. All Rights Reserved.


pt3_modify_digitalset

Navigation: C++ > Digitalset管理接口 >

pt3_modify_digitalset

 Return to chapter overview

·函数

§修改指定数字状态集的所有状态名

int32 pt3_modify_digitalset(

const HD3DigitalSet* pDigitalSet,

int32 nStateNum,

const HD3DsStateInfo* pStateArray

);

·参数

§pDigitalSet

[in] 数字量状态集。

§nStateNum

[in] 状态个数

§pStateArray

[in] 数字量状态

·返回值

修改成功，返回RD_SUCCESS，修改失败返回错误码，见error_code.h

·说明

调用该接口会在服务器将原来的状态名全部删除并修改为新的状态名。

·举例

示例代码参见Digitalset管理接口。

参见：

§pt3_add_digitalset

§pt3_modify_digitalset

§pt3_delete_digitalset

§pt3_query_all_digitalset

§pt3_query_digitalset_state_name

§pt3_query_digitalset_all_state_infos

©2015. All Rights Reserved.


pt3_delete_digitalset

Navigation: C++ > Digitalset管理接口 >

pt3_delete_digitalset

 Return to chapter overview

·函数

§删除数字量状态集

int32 pt3_delete_digitalset(

const char* szDigitalSetName

);

·参数

§szDigitalSetName

[in] 数字量状态集名称。

·返回值

删除成功，返回RD_SUCCESS，删除失败返回错误码，见error_code.h

·说明

删除一个数字量状态集。

·举例

示例代码参见Digitalset管理接口。

参见：

§pt3_add_digitalset

§pt3_modify_digitalset

§pt3_delete_digitalset

§pt3_query_all_digitalset

§pt3_query_digitalset_state_name

§pt3_query_digitalset_all_state_infos

©2015. All Rights Reserved.


pt3_query_all_digitalsets

Navigation: C++ > Digitalset管理接口 >

pt3_query_all_digitalsets

 Return to chapter overview

·函数

§查询所有数字状态集的名称。

int32 pt3_query_add_digitalsets(

HDHANDLE* phResultSet

);

·参数

§phResultSet

[out] 查询迭代器。

·返回值

查询成功，返回RD_SUCCESS和查询迭代器。查询失败返回其它错误码，见error_code.h。

·说明

§调用该接口成功后会获得一个查询迭代器的句柄，然后调用ut3_get_item_step接口，传入迭代器句柄和分配的空间(char[HD3_LEN_DIGITAL_SET_NAME])，返回RD_SUCCESS就可以获得第一个数字量状态集的名称，再调用ut3_get_item_step返回RD_SUCCESS就可以获得第二个数字量状态集的名称。如此循环的查询直到调用ut3_get_item_step返回错误码为EC_HD_API_QUERY_END表明所有的数字量状态集都查询完毕了。查询完毕后调用ut3_free_iterator方法来释放迭代器。

·举例

示例代码参见Digitalset管理接口。

参见：

§pt3_add_digitalset

§pt3_modify_digitalset

§pt3_delete_digitalset

§pt3_query_all_digitalset

§pt3_query_digitalset_state_name

§pt3_query_digitalset_all_state_infos

©2015. All Rights Reserved.


pt3_query_digitalset_state_name

Navigation: C++ > Digitalset管理接口 >

pt3_query_digitalset_state_name

 Return to chapter overview

·函数

§根据数字量状态集的状态ID查询状态名称

int32 pt3_query_digitalset_state_name(

const char* szDSName,

int32 nStateValue,

char* szDSStateName

);

·参数

§szDSName

[in] 数字量状态集名称。

§nStateValue

[in] 数字量状态集的状态值。

§szDSStateName

[out] 查询到的状态名。

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h。

·说明

Digital类型的Tag的值的采集和存储都是用数字来表示的，如果将这些数字展示给用户，用户可能不知道它表示什么意思，例如名为“color”状态集包含7种状态依次是：red,oranger,yellow,green,blue,indigo,violet;分别用0，1，2，3，4，5，6来表示。调用该接口可以直观的将这些数字的含义呈现出来。输入3，你将会得到一个名为“green”的状态名。

·举例

示例代码参见Digitalset管理接口。

参见：

§pt3_add_digitalset

§pt3_modify_digitalset

§pt3_delete_digitalset

§pt3_query_all_digitalset

§pt3_query_digitalset_state_name

§pt3_query_digitalset_all_state_infos

©2015. All Rights Reserved.


pt3_query_digitalset_all_state_infos

Navigation: C++ > Digitalset管理接口 >

pt3_query_digitalset_all_state_infos

 Return to chapter overview

·函数

§查询指定数字状态集的状态名

int32 pt3_query_digitalset_all_state_infos(

const HD3DigitalSet* pDigitalSet,

HD3HANDLE* phResultSet

);

·参数

§pDigitalSet

[in] 数字量状态集。

§phResultSet

[out] 查询迭代器。

·返回值

查询成功，返回RD_SUCCESS和查询迭代器。查询失败返回其它错误码，见error_code.h。

·说明

调用成功后会获得一个查询迭代器的句柄，然后调用ut3_get_item_step，传入迭代器句柄和数字量状态值，返回RD_SUCCESS就可以获得状态名。查询完毕后调用ut3_free_handle方法来释放迭代器。

·举例

示例代码参见Digitalset管理接口。

参见：

§pt3_add_digitalset

§pt3_modify_digitalset

§pt3_delete_digitalset

§pt3_query_all_digitalset

§pt3_query_digitalset_state_name

§pt3_query_digitalset_all_state_infos

©2015. All Rights Reserved.


采集器管理接口

Navigation: C++ >

采集器管理接口

 Return to chapter overview

《采集器管理接口》的主要接口分为：

·采集器

§ct3_add_collector

§ct3_modify_collector

§ct3_delete_collector

§ct3_query_collectors_status

§ct3_update_collector_status

§ct3_query_all_collectors

§ct3_query_collector

§ct3_query_collector_id_by_name

·设备接口

§ct3_add_device

§ct3_delete_device

§ct3_query_device

§ct3_query_device_id_by_name

§ct3_query_devices_of_collector

§ct3_modify_device

§ct3_update_device_status

§ct3_query_devices_status

·扫描组

§ct3_add_scan_group

§ct3_delete_scan_group

§ct3_query_scan_group

§ct3_query_scan_group_id_by_name

§ct3_query_scan_groups_of_device

§ct3_modify_scan_group

©2015. All Rights Reserved.


采集器

Navigation: C++ > 采集器管理接口 >

采集器

 Return to chapter overview

·《采集器》中的接口主要包括：

§ct3_add_collector

§ct3_modify_collector

§ct3_delete_collector

§ct3_query_collectors_status

§ct3_update_collector_status

§ct3_query_all_collectors

§ct3_query_collector

§ct3_query_collector_id_by_name

collector

copycode !MISSING PHRASE 'COPYCODE'!

//*Collector Function

#include "hdKingAPI.h"

#include "error_code.h"

#include "hd3Struct.h"

#include <stdio.h>

#include <string.h>

#include <time.h>

#include <Windows.h>

int32 main()

{

int32 nRet = RD_SUCCESS;

HD3Connection conn;

HD3HANDLE hIter = NULL;

uint32 nCollectorID = 0;

HD3Collector hdCollectors[3];

HD3Collector hdCollector;

int32 i = 0;

int32 nCollectorNum = 2;

HD3Time hdTime;

for (i = 0; i < nCollectorNum; ++i)

{

memset(&hdCollectors[i], 0, sizeof(HD3Collector));

}

memset(&hdCollector, 0, sizeof(HD3Collector));

for (i = 0; i < nCollectorNum; ++i)

{

sprintf(hdCollectors[i].szName, "collector%d", i);

hdCollectors[i].nType = HD3_COLLECTOR_TYPE_OPC;

sprintf(hdCollectors[i].szDescription, "name: %s, type: %d", hdCollectors[i].szName, hdCollectors[i].nType);

strncpy(hdCollectors[i].szExtParam, "***", 3);

}

//connect

strcpy(conn.szAddress, "127.0.0.1");

conn.nPort = 5673;

conn.nTimeout = 3;

nRet = nt3_connect(&conn);

if (nRet != RD_SUCCESS)

{

printf("connect to server failed, error code[%d]!\n", nRet);

return -1;

}

//login

nRet = sc3_login("admin", "admin");

if (nRet != RD_SUCCESS)

{

printf("login failed, error code[%d]!\n", nRet);

return -1;

}

printf("login successful!\n");

uint32 nID = 0;

// add collector

for (i = 0; i < nCollectorNum; ++i)

{

nRet = ct3_add_collector(&hdCollectors[i], &nID);

if (nRet != RD_SUCCESS)

{

printf("add collector[name:%s] failed, error code [%d]!\n", hdCollectors[i].szName, nRet);

nt3_disconnect();

return -1;

}

printf("add collector[name:%s] successful!\n", hdCollectors[i].szName);

}

//query collector id by name, query collector, modify collector

for (i = 0; i < nCollectorNum; ++i)

{

nRet = ct3_query_collector_id_by_name(hdCollectors[i].szName, &nCollectorID);

if (nRet != RD_SUCCESS)

{

printf("query collector id by name[%s] failed, error code [%d]!\n", hdCollectors[i].szName, nRet);

nt3_disconnect();

return -1;

}

printf("query collector id by name[%s] successful, collector id [%d].\n", hdCollectors[i].szName, nCollectorID);

nRet = ct3_query_collector(nCollectorID, &hdCollectors[i]);

if (nRet != RD_SUCCESS)

{

printf("query collector [id:%d] failed, error code [%d]!\n", nCollectorID, nRet);

nt3_disconnect();

return -1;

}

printf("query collector [id:%d] successful.\n", nCollectorID);

nRet = ct3_modify_collector(nCollectorID, &hdCollectors[i]);

if (nRet != RD_SUCCESS)

{

printf("modify collector [id:%d] failed, error code [%d]!\n", nCollectorID, nRet);

nt3_disconnect();

return -1;

}

printf("modify collector [id:%d] successful.\n", nCollectorID);

Sleep(30000);

hdTime.nSec = (int32)time(NULL);

hdTime.nMsec = 0;

//DATA_QUALITY_VALUE_CT_BOOTTING

nRet = ct3_update_collector_status(nCollectorID, HD3_QUALITY_CT_BOOTING, 100, &hdTime);

if(nRet != RD_SUCCESS)

{

printf("Failed to update collector status, error code[%d]!\n", nRet);

return -1;

}

printf("update collector status successful.\n");

HD3CtStatusInfo ctStatusInfo;

int32 nErr = 0;

nRet = ct3_query_collectors_status(1, &nCollectorID, &ctStatusInfo, &nErr);

if(nRet != RD_SUCCESS)

{

printf("failed to query collector status, error code[%d]!\n", nRet);

return -1;

}

printf("query collector status successful.\n");

}

//query all collector

nRet = ct3_query_all_collectors(&hIter);

if (nRet != RD_SUCCESS)

{

printf("query all collectors failed, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

printf("query all collectors successful!\n");

while (true)

{

memset(&hdCollector, 0, sizeof(HD3Collector));

nRet = ut3_get_item_step(hIter, &hdCollector);

if (RD_SUCCESS == nRet)

{

printf("Query one collector [name:%s] successful!\n", hdCollector.szName);

}

else if (EC_HD_API_QUERY_END == nRet)

{

printf("query all collector complete!\n");

break;

}

else

{

printf("query collector failed, error code [%d]!\n", nRet);

break;

}

}

ut3_free_handle(hIter);

// delete collector

for (i = 0; i < nCollectorNum; ++i)

{

nRet = ct3_delete_collector(hdCollectors[i].nID);

if (nRet != RD_SUCCESS)

{

printf("delete collector failed, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

printf("delete collector [id:%d] successful.\n", hdCollectors[i].nID);

}

//disconnect

nt3_disconnect();

return 0;

}

//*/

©2015. All Rights Reserved.


ct3_add_collector

Navigation: C++ > 采集器管理接口 > 采集器 >

ct3_add_collector

 Return to chapter overview

·函数

§添加一个采集器

int32 ct3_add_collector(

hd3_in const HD3Collector* pCollector,

hd3_out uint32* pnCollectorID);

·参考

§pCollector

[in] 采集器结构体指针。

§pCollector

[out] 采集器ID。

·返回值

用户登录成功，返回RD_SUCCESS。添加返回其它错误码，见error_code.h

·说明

无

·举例

示例代码参见采集器。

参见：

§ct3_add_collector

§ct3_modify_collector

§ct3_delete_collector

§ct3_query_collectors_status

§ct3_update_collector_status

§ct3_query_all_collectors

§ct3_query_collector

§ct3_query_collector_id_by_name

©2015. All Rights Reserved.


ct3_modify_collector

Navigation: C++ > 采集器管理接口 > 采集器 >

ct3_modify_collector

 Return to chapter overview

·函数

修改采集器的属性

int32 ct3_modify_collector(

hd3_in uint32 nCollectorID,

hd3_in const HD3Collector* pCollector

);

·参数

§hServer

[in] 服务器句柄。

§nCollectorID

[in] 采集器ID。

§pCollector

[in] 采集器

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h。

·举例

示例代码参见采集器。

参见：

§ct3_add_collector

§ct3_modify_collector

§ct3_delete_collector

§ct3_query_collectors_status

§ct3_update_collector_status

§ct3_query_all_collectors

§ct3_query_collector

§ct3_query_collector_id_by_name

©2015. All Rights Reserved.


ct3_delete_collector

Navigation: C++ > 采集器管理接口 > 采集器 >

ct3_delete_collector

 Return to chapter overview

·函数

§删除一个采集器

int32 ct3_delete_collector(hd3_in uint32 nCollectorID);

·参数

§nCollectorID

[in] 采集器ID

·返回值

删除成功，返回RD_SUCESS， 删除失败，返回其他错误码，见error_code.h

·举例

示例代码参见采集器。

参见：

§ct3_add_collector

§ct3_modify_collector

§ct3_delete_collector

§ct3_query_collectors_status

§ct3_update_collector_status

§ct3_query_all_collectors

§ct3_query_collector

§ct3_query_collector_id_by_name

©2015. All Rights Reserved.


ct3_query_collector_status

Navigation: C++ > 采集器管理接口 > 采集器 >

ct3_query_collector_status

 Return to chapter overview

·函数

§查询指定采集器状态

int32 ct3_query_collectors_status(

hd3_in int32 nNum,

hd3_in const uint32* pCollectorIDArray,

hd3_out HD3CtStatusInfo* pStatusArray,

hd3_out int32* pErrArray

);

·参数

§nNum

[in] 采集器个数

§pCollectorIDArray

[in] 采集器ID数组

§pStatusArray

[out] 状态信息数组

§pErrArray

[out] 错误码数组

·返回值

添加成功，返回RD_SUCEESS。添加失败返回错误码，见error_code.h。

·举例

示例代码参见采集器。

参见：

§ct3_add_collector

§ct3_modify_collector

§ct3_delete_collector

§ct3_query_collectors_status

§ct3_update_collector_status

§ct3_query_all_collectors

§ct3_query_collector

§ct3_query_collector_id_by_name

©2015. All Rights Reserved.


ct3_update_collector_status

Navigation: C++ > 采集器管理接口 > 采集器 >

ct3_update_collector_status

 Return to chapter overview

·函数

§更新采集器状态

int32 ct3_update_collector_status(

hd3_in uint32 nCollectorID,

hd3_in uint16 nQuality,

hd3_in int32 nActiveTagNum,

hd3_in const HD3Time* pTime

);

·参数

§nCollectorID

[in] 采集器ID

§nQuality

[in] 采集器状态

采集器状态有如下取值

DATA_QUALITY_VALUE_CT_BOOTTING // 正在启动

DATA_QUALITY_VALUE_CT_ACTIVE // 活动

DATA_QUALITY_VALUE_CT_SHUTDOWN // 未启动

DATA_QUALITY_VALUE_CT_TIMEOUT // 超时

更新状态为正在启动，会自动检查采集器下的所有点的实时记录是否为停机记录，如果不是，添加一条停机记录。

更新状态为未启动，会自动为采集器下的所有设备添加一条未连接的记录，自动为采集器下的所有点添加一条停机记录

§nActiveTag

[in]活动点数

§pTime

[in]更新时间

·返回值

添加成功，返回RD_SUCEESS。添加失败返回错误码，见error_code.h。

·举例

示例代码参见采集器。

参见：

§ct3_add_collector

§ct3_modify_collector

§ct3_delete_collector

§ct3_query_collectors_status

§ct3_update_collector_status

§ct3_query_all_collectors

§ct3_query_collector

§ct3_query_collector_id_by_name

©2015. All Rights Reserved.


ct3_query_all_collectors

Navigation: C++ > 采集器管理接口 > 采集器 >

ct3_query_all_collectors

 Return to chapter overview

·函数

§查询所有的采集器

int32 ct3_query_all_collectors(hd3_out HD3HANDLE* phResultSet);

·参数

§pIter

[out] 查询迭代器, 取结果项: ut3_get_item_step(hResultSet, HD3Collector*);

·返回值

§查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h。

·举例

§示例代码参见采集器。

参见：

§ct3_add_collector

§ct3_modify_collector

§ct3_delete_collector

§ct3_query_collectors_status

§ct3_update_collector_status

§ct3_query_all_collectors

§ct3_query_collector

§ct3_query_collector_id_by_name

©2015. All Rights Reserved.


ct3_query_collector

Navigation: C++ > 采集器管理接口 > 采集器 >

ct3_query_collector

 Return to chapter overview

·函数

§查询一个采集器

int32 ct3_query_collector(

hd3_in uint32 nCollectorID,

hd3_out HD3Collector* pCollector

);

·参数

§nCollectorID

[in] 采集器ID

§pCollector

[out] 查询到的采集器

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h。

·举例

示例代码参见采集器。

参见：

§ct3_add_collector

§ct3_modify_collector

§ct3_delete_collector

§ct3_query_collectors_status

§ct3_update_collector_status

§ct3_query_all_collectors

§ct3_query_collector

§ct3_query_collector_id_by_name

©2015. All Rights Reserved.


ct3_query_collector_id_by_name

Navigation: C++ > 采集器管理接口 > 采集器 >

ct3_query_collector_id_by_name

 Return to chapter overview

·函数

§通过采集器的名字查询采集器的ID

int32 ct3_query_collector_id_by_name(

hd3_in const char* szCollectorName,

hd3_out uint32* pnCollecotrID

);

·参数

§szCollectorName

[in] 采集器名字。

§pnCollectorID

[out] 查询到的采集器ID

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h。

·举例

示例代码参见采集器。

参见：

§ct3_add_collector

§ct3_modify_collector

§ct3_delete_collector

§ct3_query_collectors_status

§ct3_update_collector_status

§ct3_query_all_collectors

§ct3_query_collector

§ct3_query_collector_id_by_name

©2015. All Rights Reserved.


设备接口

Navigation: C++ > 采集器管理接口 >

设备接口

 Return to chapter overview

《设备接口》中的接口主要包括：

§ct3_add_device

§ct3_delete_device

§ct3_query_device

§ct3_query_device_id_by_name

§ct3_query_devices_of_collector

§ct3_modify_device

§ct3_update_device_status

§ct3_query_devices_status

device

copycode !MISSING PHRASE 'COPYCODE'!

//*Device Function

#include "hdKingAPI.h"

#include "error_code.h"

#include "hd3Struct.h"

#include <stdio.h>

#include <string.h>

#include <time.h>

#include <Windows.h>

int32 main()

{

int32 nRet = RD_SUCCESS;

HD3Connection conn;

HD3HANDLE hIter = NULL;

int32 nTryTime = 3;

uint32 nCollectorID = 0;

uint32 nDeviceID = 0;

HD3Collector hdCollector;

HD3Device hdDevice;

HD3Device hdDevices[3];

int32 i = 0;

int32 nDeviceNum = 3;

HD3Time hdTime;

memset(&hdCollector, 0, sizeof(HD3Collector));

memset(&hdDevice, 0, sizeof(HD3Device));

for (i = 0; i < 3; ++i)

{

memset(&hdDevices[i], 0, sizeof(HD3Device));

}

strncpy(hdCollector.szName, "collector", strlen("collector"));

hdCollector.nType = HD3_COLLECTOR_TYPE_OPC;

sprintf(hdCollector.szDescription, "name: %s, type: %d", hdCollector.szName, hdCollector.nType);

strncpy(hdCollector.szExtParam, "***", 3);

//connect

strcpy(conn.szAddress, "127.0.0.1");

conn.nPort = 5673;

conn.nTimeout = 3;

nRet = nt3_connect(&conn);

if (nRet != RD_SUCCESS)

{

printf("connect to server failed, error code[%d]!\n", nRet);

return -1;

}

//login

nRet = sc3_login("admin", "admin");

if (nRet != RD_SUCCESS)

{

printf("login failed, error code[%d]!\n", nRet);

return -1;

}

printf("login successful!\n");

//add collector

uint32 nID=0;

nRet = ct3_add_collector(&hdCollector, &nID);

if (nRet != RD_SUCCESS)

{

printf("add collector[name:%s] failed, error code [%d]!\n", hdCollector.szName, nRet);

nt3_disconnect();

return -1;

}

printf("add collector[name:%s] successful!\n", hdCollector.szName);

//query collector id

nRet = ct3_query_collector_id_by_name(hdCollector.szName, &nCollectorID);

if (nRet != RD_SUCCESS)

{

printf("query collector id by name[%s] failed, error code [%d]!\n", hdCollector.szName, nRet);

nt3_disconnect();

return -1;

}

printf("query collector id by name[%s] successful, collector id [%d].\n", hdCollector.szName, nCollectorID);

// add device

for (i = 0; i < nDeviceNum; ++i)

{

sprintf(hdDevices[i].szName, "device%d", i);

hdDevices[i].nPort = 5678;

hdDevices[i].nTimeout = 15;

hdDevices[i].nCollectorID = nCollectorID;

hdDevices[i].nTryTime = nTryTime;

sprintf(hdDevices[i].szAddr, "%d.%d.%d.%d", i, i, i, i);

sprintf(hdDevices[i].szDescription, "name: %s, collector id: %d", hdDevices[i].szName, hdDevices[i].nCollectorID);

strncpy(hdDevices[i].szExtParam, "***", 3);

}

for (i = 0; i < nDeviceNum; ++i)

{

nRet = ct3_add_device(&hdDevices[i], &hdDevices[i].nID);

if (nRet != RD_SUCCESS)

{

printf("add device[name:%s] failed, error code [%d]!\n", hdDevices[i].szName, nRet);

nt3_disconnect();

return -1;

}

printf("add device[name:%s] successful!\n", hdDevices[i].szName);

}

//query device id , query device, modify device

for (i = 0; i < nDeviceNum; ++i)

{

nRet = ct3_query_device_id_by_name(nCollectorID, hdDevices[i].szName, &nDeviceID);

if (nRet != RD_SUCCESS)

{

printf("query device id by name[%s] failed, error code [%d]!\n", hdDevices[i].szName, nRet);

nt3_disconnect();

return -1;

}

printf("query device id by name[%s] successful, device id [%d].\n", hdDevices[i].szName, nDeviceID);

nRet = ct3_query_device(nDeviceID, &hdDevices[i]);

if (nRet != RD_SUCCESS)

{

printf("query device [id:%d] failed, error code [%d]!\n", nDeviceID, nRet);

nt3_disconnect();

return -1;

}

printf("query device [id:%d] successful.\n", nDeviceID);

nRet = ct3_modify_device(nDeviceID, &hdDevices[i]);

if (nRet != RD_SUCCESS)

{

printf("modify device [id:%d] failed, error code [%d]!\n", nDeviceID, nRet);

nt3_disconnect();

return -1;

}

printf("modify device [id:%d] successful.\n", nDeviceID);

Sleep(30000);

// Update status

hdTime.nSec = (int32)time(NULL);

hdTime.nMsec = 0;

nRet = ct3_update_device_status(nDeviceID, HD3_QUALITY_DEVICE_CONN, 100, &hdTime);

if(nRet != RD_SUCCESS)

{

printf("failed to update device status, error code[%d]!\n", nRet);

return -1;

}

printf("update device status successful.\n");

HD3CtStatusInfo ctStatusInfo;

int32 nErr = 0;

nRet = ct3_query_devices_status(1, &nDeviceID, &ctStatusInfo, &nErr);

if(nRet != RD_SUCCESS)

{

printf("failed to query device status, error code[%d]!\n", nRet);

return -1;

}

printf("query device status successful.\n");

}

//query devices belong to the collector

nRet = ct3_query_devices_of_collector(nCollectorID, &hIter);

if (nRet != RD_SUCCESS)

{

printf("query all device of collector[id: %d] failed, error code [%d]!\n", nCollectorID, nRet);

nt3_disconnect();

return -1;

}

printf("query all device of collector[id: %d] successful!\n", nCollectorID);

while (true)

{

memset(&hdDevice, 0, sizeof(HD3Device));

nRet = ut3_get_item_step(hIter, &hdDevice);

if (RD_SUCCESS == nRet)

{

printf("Query one device [name:%s] successful!\n", hdCollector.szName);

}

else if (EC_HD_API_QUERY_END == nRet)

{

printf("query all device complete!\n");

break;

}

else

{

printf("query device failed, error code [%d]!\n", nRet);

break;

}

}

ut3_free_handle(hIter);

//delete device

for (i = 0; i < 3; ++i)

{

nRet = ct3_delete_device(hdDevices[i].nID);

if (nRet != RD_SUCCESS)

{

printf("delete device failed, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

printf("delete device [id:%d] successful.\n", hdDevices[i].nID);

}

//disconnect

nt3_disconnect();

return 0;

}

//*/

©2015. All Rights Reserved.


ct3_add_device

Navigation: C++ > 采集器管理接口 > 设备接口 >

ct3_add_device

 Return to chapter overview

·函数

§添加一个设备

int32 ct3_add_device(

hd3_in const HD3Device* pDevice,

hd3_out uint32* pnDeviceID

);

·参数

§pDevice

[in] 新增设备。

§pnDeviceID

[out] 设备ID。

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h。

·举例

示例代码参见设备接口。

参见

§ct3_add_device

§ct3_delete_device

§ct3_query_device

§ct3_query_device_id_by_name

§ct3_query_devices_of_collector

§ct3_modify_device

§ct3_update_device_status

§ct3_query_devices_status

©2015. All Rights Reserved.


ct3_delete_device

Navigation: C++ > 采集器管理接口 > 设备接口 >

ct3_delete_device

 Return to chapter overview

·函数

§删除一个设备

int32 ct3_delete_device(hd3_in uint32 nDeviceID);

·参数

§nDeviceID

[in] 设备ID。

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h。

·举例

示例代码参见设备接口。

参见

§ct3_add_device

§ct3_delete_device

§ct3_query_device

§ct3_query_device_id_by_name

§ct3_query_devices_of_collector

§ct3_modify_device

§ct3_update_device_status

§ct3_query_devices_status

©2015. All Rights Reserved.


ct3_query_device

Navigation: C++ > 采集器管理接口 > 设备接口 >

ct3_query_device

 Return to chapter overview

·函数

§查询一个设备

int32 ct3_query_device(

hd3_in uint32 nDeviceID,

hd3_out HD3Device* pDevice

);

·参数

§nDeviceID

[in] 设备ID。

§pDevice

[out] 设备。

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h。

·举例

示例代码参见设备接口。

参见

§ct3_add_device

§ct3_delete_device

§ct3_query_device

§ct3_query_device_id_by_name

§ct3_query_devices_of_collector

§ct3_modify_device

§ct3_update_device_status

§ct3_query_devices_status

©2015. All Rights Reserved.


ct3_query_device_id_by_name

Navigation: C++ > 采集器管理接口 > 设备接口 >

ct3_query_device_id_by_name

 Return to chapter overview

·函数

§通过设备的名字查询设备的ID

int32 ct3_query_device_id_by_name(

hd3_in uint32 nCollectorID,

hd3_in const char* szDeviceName,

hd3_out uint32* pnDeviceID

);

·参数

§nCollectorID

[in] 设备所在采集器的ID。

§szDeviceName

[in] 设备名称。

§pnDeviceID

[out] 设备ID

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h。

·举例

示例代码参见设备接口。

参见

§ct3_add_device

§ct3_delete_device

§ct3_query_device

§ct3_query_device_id_by_name

§ct3_query_devices_of_collector

§ct3_modify_device

§ct3_update_device_status

§ct3_query_devices_status

©2015. All Rights Reserved.


ct3_query_devices_of_collector

Navigation: C++ > 采集器管理接口 > 设备接口 >

ct3_query_devices_of_collector

 Return to chapter overview

·函数

§查询一个采集器下所有的设备

int32 ct3_query_devices_of_collector(

hd3_in uint32 nCollectorID,

hd3_out HD3HANDLE* phResultSet

);

·参数

§nCollectorID

[in] 设备所在采集器的ID。

§phResultSet

[hd3_out] 查询迭代器。

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h。

·举例

示例代码参见设备接口。

参见

§ct3_add_device

§ct3_delete_device

§ct3_query_device

§ct3_query_device_id_by_name

§ct3_query_devices_of_collector

§ct3_modify_device

§ct3_update_device_status

§ct3_query_devices_status

©2015. All Rights Reserved.


ct3_modify_device

Navigation: C++ > 采集器管理接口 > 设备接口 >

ct3_modify_device

 Return to chapter overview

·函数

§修改一个设备

int32 ct3_modify_device(

hd3_in uint32 nDeviceID,

hd3_in const HD3Device* pDevice

);

·参数

§nDeviceID

[in] 设备的ID。

§pDevice

[in] 设备。

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h。

·举例

示例代码参见设备接口。

参见

§ct3_add_device

§ct3_delete_device

§ct3_query_device

§ct3_query_device_id_by_name

§ct3_query_devices_of_collector

§ct3_modify_device

§ct3_update_device_status

§ct3_query_devices_status

©2015. All Rights Reserved.


ct3_update_device_status

Navigation: C++ > 采集器管理接口 > 设备接口 >

ct3_update_device_status

 Return to chapter overview

·函数

§更新设备状态

int32 ct3_update_device_status(

hd3_in uint32 nDeviceID,

hd3_in uint16 nQuality,

hd3_in int32 nActiveTagNum,

hd3_in const HD3Time* pTime

);

·参数

§nDeviceID

[in] 设备的ID

§nQuality

[in] 状态

§nActiveTag

[in] 活动点个数

§pTime

[in]更新时间

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h。

·举例

示例代码参见设备接口。

参见

§ct3_add_device

§ct3_delete_device

§ct3_query_device

§ct3_query_device_id_by_name

§ct3_query_devices_of_collector

§ct3_modify_device

§ct3_update_device_status

§ct3_query_devices_status

©2015. All Rights Reserved.


ct3_query_devices_status

Navigation: C++ > 采集器管理接口 > 设备接口 >

ct3_query_devices_status

 Return to chapter overview

·函数

§查询指定设备状态

int32 ct3_query_devices_status(

hd3_in int32 nNum,

hd3_in const uint32* pDeviceIDArray,

hd3_out HD3CtStatusInfo* pStatusArray,

hd3_out int32* pErrArray

);

·参数

§nNum

[in] 采集器个数

§pDeviceIDArray

[in] 状态信息

§pStatusArray

[in] 状态信息

§pErrArray

[out] 错误码

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h。

·举例

示例代码参见设备接口。

参见

§ct3_add_device

§ct3_delete_device

§ct3_query_device

§ct3_query_device_id_by_name

§ct3_query_devices_of_collector

§ct3_modify_device

§ct3_update_device_status

§ct3_query_devices_status

©2015. All Rights Reserved.


扫描组

Navigation: C++ > 采集器管理接口 >

扫描组

 Return to chapter overview

《扫描组》中的接口主要包括：

§ct3_add_scan_group

§ct3_delete_scan_group

§ct3_query_scan_group

§ct3_query_scan_group_id_by_name

§ct3_query_scan_groups_of_device

§ct3_modify_scan_group

scangroup

copycode !MISSING PHRASE 'COPYCODE'!

///*ScanGroup Function

#include "hdKingAPI.h"

#include "error_code.h"

#include "hd3Struct.h"

#include <stdio.h>

#include <string.h>

int32 main()

{

int32 nRet = RD_SUCCESS;

HD3Connection conn;

HD3HANDLE hIter = NULL;

int32 nTryTime = 3;

uint32 nCollectorID = 0;

uint32 nDeviceID = 0;

uint32 nScanGroupID = 0;

HD3Collector hdCollector;

HD3Device hdDevice;

HD3ScanGroup hdScanGroup;

HD3ScanGroup hdScanGroups[3];

int32 i = 0;

int32 nScanGroupNum = 3;

memset(&hdCollector, 0, sizeof(HD3Collector));

memset(&hdDevice, 0, sizeof(HD3Device));

memset(&hdScanGroup, 0, sizeof(HD3ScanGroup));

for (i = 0; i < 3; ++i)

{

memset(&hdScanGroups[i], 0, sizeof(HD3ScanGroup));

}

strncpy(hdCollector.szName, "collector", strlen("collector"));

hdCollector.nType = HD3_COLLECTOR_TYPE_OPC;

sprintf(hdCollector.szDescription, "name: %s, type: %d", hdCollector.szName, hdCollector.nType);

strncpy(hdCollector.szExtParam, "***", 3);

//connect

strcpy(conn.szAddress, "127.0.0.1");

conn.nPort = 5673;

conn.nTimeout = 3;

nRet = nt3_connect(&conn);

if (nRet != RD_SUCCESS)

{

printf("connect to server failed, error code[%d]!\n", nRet);

return -1;

}

//login

nRet = sc3_login("admin", "admin");

if (nRet != RD_SUCCESS)

{

printf("login failed, error code[%d]!\n", nRet);

return -1;

}

printf("login successful!\n");

//add collector

nRet = ct3_add_collector(&hdCollector, &nCollectorID);

if (nRet != RD_SUCCESS)

{

printf("add collector[name:%s] failed, error code [%d]!\n", hdCollector.szName, nRet);

nt3_disconnect();

return -1;

}

printf("add collector[name:%s] successful!\n", hdCollector.szName);

//query collector id

nRet = ct3_query_collector_id_by_name(hdCollector.szName, &nCollectorID);

if (nRet != RD_SUCCESS)

{

printf("query collector id by name[%s] failed, error code [%d]!\n", hdCollector.szName, nRet);

nt3_disconnect();

return -1;

}

printf("query collector id by name[%s] successful, collector id [%d].\n", hdCollector.szName, nCollectorID);

//add device

strncpy(hdDevice.szName, "device", strlen("device"));

hdDevice.nPort = conn.nPort;

hdDevice.nTimeout = conn.nTimeout;

hdDevice.nCollectorID = nCollectorID;

hdDevice.nTryTime = nTryTime;

sprintf(hdDevice.szAddr, "%d.%d.%d.%d", i, i, i, i);

sprintf(hdDevice.szDescription, "name: %s, collector id: %d", hdDevice.szName, hdDevice.nCollectorID);

strncpy(hdDevice.szExtParam, "***", 3);

nRet = ct3_add_device(&hdDevice, &nDeviceID);

if (nRet != RD_SUCCESS)

{

printf("add device[name:%s] failed, error code [%d]!\n", hdDevice.szName, nRet);

nt3_disconnect();

return -1;

}

printf("add device[name:%s] successful!\n", hdDevice.szName);

//query device id

nRet = ct3_query_device_id_by_name(nCollectorID, hdDevice.szName, &nDeviceID);

if (nRet != RD_SUCCESS)

{

printf("query device id by name[%s] failed, error code [%d]!\n", hdDevice.szName, nRet);

nt3_disconnect();

return -1;

}

printf("query device id by name[%s] successful, device id [%d].\n", hdDevice.szName, nDeviceID);

//add scan group

for (i = 0; i < nScanGroupNum; ++i)

{

sprintf(hdScanGroups[i].szName, "scan_group%d", i);

hdScanGroups[i].nDeviceID = nDeviceID;

hdScanGroups[i].nPeriod = 10;

hdScanGroups[i].nPhase = 3;

hdScanGroups[i].nScanType = HD3_SCAN_TYPE_MIN;

hdScanGroups[i].nDataAddr = 10000;

hdScanGroups[i].nDataLen = 100;

sprintf(hdScanGroups[i].szDescrption, "name: %s, device id: %d", hdScanGroups[i].szName, hdScanGroups[i].nDeviceID);

strncpy(hdScanGroups[i].szExtParam, "***", 3);

}

for (i = 0; i < nScanGroupNum; ++i)

{

nRet = ct3_add_scan_group(&hdScanGroups[i], &nScanGroupID);

if (nRet != RD_SUCCESS)

{

printf("add scan group[name:%s] failed, error code [%d]!\n", hdScanGroups[i].szName, nRet);

nt3_disconnect();

return -1;

}

printf("add scan group[name:%s] successful!\n", hdScanGroups[i].szName);

}

//query scan group id, query scan group, modify scan group

for (i = 0; i < nScanGroupNum; ++i)

{

nRet = ct3_query_scan_group_id_by_name(nDeviceID, hdScanGroups[i].szName, &nScanGroupID);

if (nRet != RD_SUCCESS)

{

printf("query scan group id by name[%s] failed, error code [%d]!\n", hdScanGroups[i].szName, nRet);

nt3_disconnect();

return -1;

}

printf("query scan group id by name[%s] successful, scan group id [%d].\n", hdScanGroups[i].szName, nScanGroupID);

nRet = ct3_query_scan_group(nScanGroupID, &hdScanGroups[i]);

if (nRet != RD_SUCCESS)

{

printf("query scan group [id:%d] failed, error code [%d]!\n", nScanGroupID, nRet);

nt3_disconnect();

return -1;

}

printf("query scan group [id:%d] successful.\n", nScanGroupID);

nRet = ct3_modify_scan_group(nScanGroupID, &hdScanGroups[i]);

if (nRet != RD_SUCCESS)

{

printf("modify scan group [id:%d] failed, error code [%d]!\n", nScanGroupID, nRet);

nt3_disconnect();

return -1;

}

printf("modify scan group [id:%d] successful.\n", nScanGroupID);

}

// query scan group of device

nRet = ct3_query_scan_groups_of_device(nDeviceID, &hIter);

if (nRet != RD_SUCCESS)

{

printf("query all scan group of device[id: %d] failed, error code [%d]!\n", nDeviceID, nRet);

nt3_disconnect();

return -1;

}

printf("query all scan group of device[id: %d] successful!\n", nDeviceID);

while (true)

{

memset(&hdScanGroup, 0, sizeof(HD3ScanGroup));

nRet = ut3_get_item_step(hIter, &hdScanGroup);

if (RD_SUCCESS == nRet)

{

printf("Query one scan group [name:%s] successful!\n", hdScanGroup.szName);

}

else if (EC_HD_API_QUERY_END == nRet)

{

printf("query all scan group complete!\n");

break;

}

else

{

printf("query scan group failed, error code [%d]!\n", nRet);

break;

}

}

ut3_free_handle(hIter);

//delete scan group

for (i = 0; i < nScanGroupNum; ++i)

{

nRet = ct3_delete_scan_group(hdScanGroups[i].nID);

if (nRet != RD_SUCCESS)

{

printf("delete scan group failed, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

printf("delete scan group [id:%d] successful.\n", hdScanGroups[i].nID);

}

//disconnect

nt3_disconnect();

return 0;

}

//*/

©2015. All Rights Reserved.


ct3_add_scan_group

Navigation: C++ > 采集器管理接口 > 扫描组 >

ct3_add_scan_group

 Return to chapter overview

·函数

§添加一个扫描组

int32 ct3_add_scan_group(

hd3_in const HD3ScanGroup* pScanGroup,

hd3_out uint32* pnScanGroupID

);

·参数

§pScanGroup

[in] 扫描组。

§pnScanGroupID

[in] 扫描组ID。

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h。

·举例

示例代码参见扫描组。

参见：

§ct3_add_scan_group

§ct3_delete_scan_group

§ct3_query_scan_group

§ct3_query_scan_group_id_by_name

§ct3_query_scan_groups_of_device

§ct3_modify_scan_group

©2015. All Rights Reserved.


ct3_delete_scan_group

Navigation: C++ > 采集器管理接口 > 扫描组 >

ct3_delete_scan_group

 Return to chapter overview

·函数

§删除一个扫描组

int32 ct3_delete_scan_group(hd3_in uint32 nScanGroupID);

·参数

§nScanGroupID

[in] 扫描组ID。

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h。

·举例

示例代码参见扫描组。

参见：

§ct3_add_scan_group

§ct3_delete_scan_group

§ct3_query_scan_group

§ct3_query_scan_group_id_by_name

§ct3_query_scan_groups_of_device

§ct3_modify_scan_group

©2015. All Rights Reserved.


ct3_query_scan_group

Navigation: C++ > 采集器管理接口 > 扫描组 >

ct3_query_scan_group

 Return to chapter overview

·函数

§查询一个扫描组

int32 ct3_query_scan_group(

hd3_in uint32 nScanGroupID,

hd3_out HD3ScanGroup* pScanGroup

);

·参数

§nScanGroupID

[in] 扫描组ID。

§pScanGroup

[out] 扫描组

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h。

·举例

示例代码参见扫描组。

参见：

§ct3_add_scan_group

§ct3_delete_scan_group

§ct3_query_scan_group

§ct3_query_scan_group_id_by_name

§ct3_query_scan_groups_of_device

§ct3_modify_scan_group

©2015. All Rights Reserved.


ct3_query_scan_group_id_by_name

Navigation: C++ > 采集器管理接口 > 扫描组 >

ct3_query_scan_group_id_by_name

 Return to chapter overview

·函数

§通过扫描组的名字查询扫描组ID

int32 ct3_query_scan_group_id_by_name(

hd3_in uint32 nDeviceID,

hd3_in const char* szScanGroupName,

hd3_out uint32* pnScanGroupID

);

·参数

§nDeviceID

[in] 扫描组所在设备的ID。

§szScanGroupName

[in] 扫描组名称

§pnScanGroupID

[out] 扫描组ID

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h。

·举例

示例代码参见扫描组。

参见：

§ct3_add_scan_group

§ct3_delete_scan_group

§ct3_query_scan_group

§ct3_query_scan_group_id_by_name

§ct3_query_scan_groups_of_device

§ct3_modify_scan_group

©2015. All Rights Reserved.


ct3_query_scan_groups_of_device

Navigation: C++ > 采集器管理接口 > 扫描组 >

ct3_query_scan_groups_of_device

 Return to chapter overview

·函数

§查询一个设备下的所有扫描组

int32 ct3_query_scan_groups_of_device(

hd3_in uint32 nDeviceID,

hd3_out HD3HANDLE* phResultSet

);

·参数

§nDeviceID

[in] 扫描组所在设备的ID。

§pIter

[in] 查询迭代器, 取结果项: ut3_get_item_stemp(hResultSet, HD3ScanGroup*).

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h。

·举例

示例代码参见扫描组。

·参见：

§ct3_add_scan_group

§ct3_delete_scan_group

§ct3_query_scan_group

§ct3_query_scan_group_id_by_name

§ct3_query_scan_groups_of_device

§ct3_modify_scan_group

©2015. All Rights Reserved.


ct3_modify_scan_group

Navigation: C++ > 采集器管理接口 > 扫描组 >

ct3_modify_scan_group

 Return to chapter overview

·函数

§修改一个扫描组

int32 ct3_modify_scan_group(

hd3_in uint32 nScanGroupID,

hd3_in const HD3ScanGroup* pScanGroup

);

·参数

§nScanGroupID

[in] 扫描组的ID。

§pScanGroup

[in] 扫描组

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h。

·举例

示例代码参见扫描组。

参见：

§ct3_add_scan_group

§ct3_delete_scan_group

§ct3_query_scan_group

§ct3_query_scan_group_id_by_name

§ct3_query_scan_groups_of_device

§ct3_modify_scan_group

©2015. All Rights Reserved.


权限管理接口

Navigation: C++ >

权限管理接口

 Return to chapter overview

《权限管理接口》主要内容包括：

·用户与组

§sc3_login

§sc3_add_user

§sc3_modify_password

§sc3_reset_password

§sc3_modify_user_desc

§sc3_delete_user

§sc3_add_group

§sc3_add_user_to_group

§sc3_modify_group_desc

§sc3_delete_group

§sc3_query_all_users

§sc3_query_members_of_group

§sc3_query_all_groups

§sc3_query_current_user_name

§sc3_query_groups_of_user

§sc3_delete_user_from_group

·信任

§sc3_add_trust

§sc3_delete_trust

§sc3_query_all_trusts

·数据库安全

·sc_modify_manage_security

·sc_query_manage_security

security

copycode !MISSING PHRASE 'COPYCODE'!

///*Security Function

#include "hdKingAPI.h"

#include "error_code.h"

#include <stdio.h>

#include <string.h>

int32 main()

{

int32 nRet = RD_SUCCESS;

HD3Connection conn;

HD3SecUser secUser;

HD3SecGroup secGroup;

HD3SecItem secItem;

HD3_SC_ITEM_TYPE nSecurityItemType = HD3_SC_ITEM_TYPE_MIN;

int32 i = 0;

HD3HANDLE hIter = NULL;

const int32 USER_COUNT = 3;

const int32 GROUP_COUNT = 3;

const int32 TRUST_COUNT = 3;

HD3SecUser *pUser = new HD3SecUser[USER_COUNT];

memset(pUser, 0x00, sizeof(HD3SecUser) * USER_COUNT);

HD3SecGroup *pGroup = new HD3SecGroup[GROUP_COUNT];

memset(pGroup, 0x00, sizeof(HD3SecGroup) * GROUP_COUNT);

HD3SecTrust *pTrust = new HD3SecTrust[TRUST_COUNT];

memset(pTrust, 0x00, sizeof(HD3SecTrust) * TRUST_COUNT);

//connect

strcpy(conn.szAddress, "127.0.0.1");

conn.nPort = 5673;

conn.nTimeout = 3;

nRet = nt3_connect(&conn);

if (nRet != RD_SUCCESS)

{

printf("connect to server failed, error code[%d]!\n", nRet);

return -1;

}

printf("connect to server successful!\n");

//login

nRet = sc3_login("admin", "admin");

if (nRet != RD_SUCCESS)

{

printf("login failed, error code[%d]!\n", nRet);

return -1;

}

printf("login successful!\n");

//add users, modify user desc

for (i = 0; i < USER_COUNT; i ++)

{

sprintf(pUser[i].szUserName, "userName_%d", i);

sprintf(pUser[i].szPasswd, "passWord", i);

sprintf(pUser[i].szUserDesc, "userDesc_%d", i);

nRet = sc3_add_user(&pUser[i]);

if (nRet != RD_SUCCESS)

{

printf("add user[name:%s] failed, error code[%d]!\n", pUser[i].szUserName, nRet);

return -1;

}

printf("add user successful!\n");

//modify user desc

sprintf(pUser[i].szUserDesc, "userDescModified_%d", i);

nRet = sc3_modify_user_desc(pUser[i].szUserName, pUser[i].szUserDesc);

if (nRet != RD_SUCCESS)

{

printf("modify user[name:%s] desc[%s] failed, error code[%d]!\n", pUser[i].szUserName, pUser[i].szUserDesc, nRet);

return -1;

}

printf("modify user desc successful!\n");

}

//query all user

nRet = sc3_query_all_users(&hIter);

if (nRet != RD_SUCCESS)

{

printf("query all user failed, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

while (true)

{

nRet = ut3_get_item_step(hIter, &secUser);

if (RD_SUCCESS == nRet)

{

printf("query user successful, user name is %s!\n", secUser.szUserName);

}

else if (EC_HD_API_QUERY_END == nRet)

{

printf("query user complete!\n");

break;

}

else

{

printf("query user failed, error code [%d]!\n", nRet);

break;

}

}

ut3_free_handle(hIter);

//add trust trust

HD3SecTrust hdSecTrust;

for (i = 0; i < TRUST_COUNT; i ++)

{

sprintf(pTrust[i].szStartIP, "%d.%d.%d.%d", i, i, i, i);

sprintf(pTrust[i].szEndIP, "%d.%d.%d.%d", i, i, i, i);

sprintf(pTrust[i].szTrustName, "%d.%d.%d.%d", i, i, i, i);

strcpy(pTrust[i].szUserName, "admin");

nRet = sc3_add_trust(pTrust + i);

if (nRet != RD_SUCCESS)

{

printf("add trust[name:%s] failed, start ip[%s] end ip[%s] user name[%s], error code[%d]!\n",

pTrust[i].szTrustName, pTrust[i].szStartIP, pTrust[i].szEndIP, pTrust[i].szUserName, nRet);

return -1;

}

printf("add trust successful successful!\n");

}

//query all trust

nRet = sc3_query_all_trusts(&hIter);

if (nRet != RD_SUCCESS)

{

printf("query all trust failed, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

while (true)

{

nRet = ut3_get_item_step(hIter, &hdSecTrust);

if (RD_SUCCESS == nRet)

{

printf("query trust successful, trust name[%s] start ip[%s] end ip[%s] user name[%s]!\n",

hdSecTrust.szTrustName, hdSecTrust.szStartIP, hdSecTrust.szEndIP, hdSecTrust.szUserName);

}

else if (EC_HD_API_QUERY_END == nRet)

{

printf("query trusts complete!\n");

break;

}

else

{

printf("query trust failed, error code [%d]!\n", nRet);

break;

}

}

ut3_free_handle(hIter);

//add group , modify group desc

for (i = 0; i < GROUP_COUNT; i ++)

{

//add group

sprintf(pGroup[i].szGroupName, "groupName_%d", i);

sprintf(pGroup[i].szGroupDesc, "groupDesc_%d", i);

nRet = sc3_add_group(&pGroup[i]);

if (nRet != RD_SUCCESS)

{

printf("add group[name:%s] failed, error code[%d]!\n", pGroup[i].szGroupName, nRet);

return -1;

}

printf("add group successful!\n");

//modify group desc

sprintf(pGroup[i].szGroupDesc, "groupDescModified_%d", i);

nRet = sc3_modify_group_desc(pGroup[i].szGroupName, pGroup[i].szGroupDesc);

if (nRet != RD_SUCCESS)

{

printf("modify group[name:%s] desc[%s] failed, error code[%d]!\n", pGroup[i].szGroupName, pGroup[i].szGroupDesc, nRet);

return -1;

}

printf("modify group desc successful!\n");

}

//query all group

nRet = sc3_query_all_groups(&hIter);

if (nRet != RD_SUCCESS)

{

printf("query all group failed, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

while (true)

{

nRet = ut3_get_item_step(hIter, &secGroup);

if (RD_SUCCESS == nRet)

{

printf("query group successful, group name is %s!\n", secGroup.szGroupName);

}

else if (EC_HD_API_QUERY_END == nRet)

{

printf("query group complete!\n");

break;

}

else

{

printf("query group failed, error code [%d]!\n", nRet);

break;

}

}

ut3_free_handle(hIter);

//add users to group

for (i = 0; i < USER_COUNT; i ++)

{

nRet = sc3_add_user_to_group(pUser[i].szUserName, pGroup[i].szGroupName);

if (nRet != RD_SUCCESS)

{

printf("add user to group failed, error code[%d]!\n", nRet);

return -1;

}

printf("add user to group successful!\n");

}

//query all members of group

nRet = sc3_query_members_of_group(pGroup[0].szGroupName, &hIter);

if (nRet != RD_SUCCESS)

{

printf("query user of group[name:%s] failed, error code[%d]!\n", pGroup[0].szGroupName, nRet);

return -1;

}

while (true)

{

nRet = ut3_get_item_step(hIter, &secUser);

if (RD_SUCCESS == nRet)

{

printf("query user[name:%s] of group[name:%s] succeed!\n", secUser.szUserName, pGroup[0].szGroupName);

}

else if (EC_HD_API_QUERY_END == nRet)

{

printf("query member of group[name:%s] complete!\n", pGroup[0].szGroupName);

break;

}

else

{

printf("query member of group[name:%s] failed, error code[%d]!\n", pGroup[0].szGroupName, nRet);

break;

}

}

ut3_free_handle(hIter);

//query all group of user

nRet = sc3_query_groups_of_user(pUser[0].szUserName, &hIter);

if (nRet != RD_SUCCESS)

{

printf("query groups of user[name:%s] failed, error code[%d]!\n", pUser[0].szUserName, nRet);

return -1;

}

while (true)

{

nRet = ut3_get_item_step(hIter, &secGroup);

if (RD_SUCCESS == nRet)

{

printf("query group[name:%s] of user[name:%s] succeed!\n", secGroup.szGroupName, pUser[0].szUserName);

}

else if (EC_HD_API_QUERY_END == nRet)

{

printf("query group of user[name:%s] complete!\n", pUser[0].szUserName);

break;

}

else

{

printf("query group of user[name:%s] failed, error code[%d]!\n", pUser[0].szUserName, nRet);

break;

}

}

ut3_free_handle(hIter);

//query tag manage security

nSecurityItemType = HD3_SC_ITEM_TYPE_TAG;

nRet = sc3_query_manage_security(nSecurityItemType, &secItem);

if (nRet != RD_SUCCESS)

{

printf("query tag manage security failed, error code[%d]!\n", nRet);

nt3_disconnect();

return -1;

}

printf("query tag security item successfully, own group[name:%s], operate group[name:%s]!\n",

secItem.szOwnGroupName, secItem.szOperateGroupName);

//query group manage security

nSecurityItemType = HD3_SC_ITEM_TYPE_GROUP;

nRet = sc3_query_manage_security(nSecurityItemType, &secItem);

if (nRet != RD_SUCCESS)

{

printf("query group manage security failed, error code[%d]!\n", nRet);

nt3_disconnect();

return -1;

}

printf("query group security item successfully, own group[name:%s], operate group[name:%s]!\n",

secItem.szOwnGroupName, secItem.szOperateGroupName);

//modify tag manage security

nSecurityItemType = HD3_SC_ITEM_TYPE_TAG;

strcpy(secItem.szOwnGroupName, pGroup[0].szGroupName);

strcpy(secItem.szOperateGroupName, pGroup[0].szGroupName);

secItem.nSecurity = 53;

nRet = sc3_modify_manage_security(nSecurityItemType, &secItem);

if (nRet != RD_SUCCESS)

{

printf("modify tag manage security failed, error code[%d]!\n", nRet);

nt3_disconnect();

return -1;

}

printf("modify Tag security item successfully!\n");

//modify group manage security

nSecurityItemType = HD3_SC_ITEM_TYPE_GROUP;

strcpy(secItem.szOwnGroupName, pGroup[0].szGroupName);

strcpy(secItem.szOperateGroupName, pGroup[0].szGroupName);

secItem.nSecurity = 53;

nRet = sc3_modify_manage_security(nSecurityItemType, &secItem);

if (nRet != RD_SUCCESS)

{

printf("modify group manage security failed, error code[%d]!\n", nRet);

nt3_disconnect();

return -1;

}

printf("modify Group security item successfully!\n");

// delete user from group

for (i = 0; i < USER_COUNT; i ++)

{

nRet = sc3_delete_user_from_group(pUser[i].szUserName, pGroup[i].szGroupName);

if (nRet != RD_SUCCESS)

{

printf("delete user[name:%s] from group[name:%s] failed, error code[%d]!\n",

pUser[i].szUserName, pGroup[i].szGroupName, nRet);

return -1;

}

printf("delete user[name:%s] from group[name:%s] successful!\n", pUser[i].szUserName, pGroup[i].szGroupName);

}

//delete user

for (i = 0; i < USER_COUNT; i ++)

{

nRet = sc3_delete_user(pUser[i].szUserName);

if (nRet != RD_SUCCESS)

{

printf("delete user[name:%s] failed, error code[%d]!\n", pUser[i].szUserName, nRet);

return -1;

}

printf("delete user[name:%s] successful!\n", pUser[i].szUserName);

}

//delete group

for (i = 0; i < GROUP_COUNT; i ++)

{

nRet = sc3_delete_group(pGroup[i].szGroupName);

if (nRet != RD_SUCCESS)

{

printf("delete group[name:%s] failed, error code[%d]!\n", pGroup[i].szGroupName, nRet);

return -1;

}

printf("delete group[name:%s] successful!\n", pGroup[i].szGroupName);

}

//delete trust

for (i = 0; i < TRUST_COUNT; i ++)

{

nRet = sc3_delete_trust(pTrust[i].szTrustName);

if (nRet != RD_SUCCESS)

{

printf("delete trust[name:%s] failed, error code[%d]!\n", pTrust[i].szTrustName, nRet);

return -1;

}

printf("delete trust[name:%s] successful!\n", pTrust[i].szTrustName);

}

//get current user name

char szCurrentUserName[HD3_LEN_USER_NAME];

nRet = sc3_query_current_user_name(HD3_LEN_USER_NAME, szCurrentUserName);

if (nRet != RD_SUCCESS)

{

printf("query current user name failed, error code[%d]!\n", nRet);

return -1;

}

printf("query current user name successful, current uer name :%s!\n", szCurrentUserName);

//modify pass word

nRet = sc3_modify_password("admin", "admin", "szNewPassWord");

if (nRet != RD_SUCCESS)

{

printf("modify user[name:admin] password failed, error code[%d]!\n", nRet);

return -1;

}

printf("modify user[name:admin] password successful!\n");

//reset password

nRet = sc3_reset_password("admin", "admin");

if (nRet != RD_SUCCESS)

{

printf("reset user[name:admin] password failed, error code[%d]!\n", nRet);

return -1;

}

printf("reset user[name:admin] password successful!\n");

//disconnect

nt3_disconnect();

return 0;

}

//*/

©2015. All Rights Reserved.


用户与组

Navigation: C++ > 权限管理接口 >

用户与组

 Return to chapter overview

《用户与组》中的主要接口包括：

§sc3_login

§sc3_add_user

§sc3_modify_password

§sc3_reset_password

§sc3_modify_user_desc

§sc3_delete_user

§sc3_add_group

§sc3_add_user_to_group

§sc3_modify_group_desc

§sc3_delete_group

§sc3_query_all_users

§sc3_query_members_of_group

§sc3_query_all_groups

§sc3_query_current_user_name

§sc3_query_groups_of_user

§sc3_delete_user_from_group

用户与组权限管理包含iHyperDB数据库系统权限管理中用户与组的管理。

·数据结构

/** iHyperDB 权限管理: 用户 */

typedef struct _HDSecUser

{

char szUserName[HD_LEN_SEC_USER_NAME];

char szPasswd[HD_LEN_SEC_PASSWORD];

char szUserDesc[HD_LEN_SEC_USER_DESC];

}HDSecUser;

/** iHyperDB 权限管理: 组 */

typedef struct _HDSecGroup

{

char szGroupName[HD_LEN_SEC_GROUP_NAME];

char szGroupDesc[HD_LEN_SEC_GROUP_DESC];

}HDSecGroup;

注意：

1.创建用户与组的所有信息均可以自行设定，但是最大长度由相应的限制，具体HD_LEN_SEC_USER_NAME、HD_LEN_SEC_PASSWORD、HD_LEN_SEC_USER_DESC、HD_LEN_SEC_GROUP_NAME、HD_LEN_SEC_GROUP_DESC指定。

2.密码字段由于安全考虑最短有效长度为5位字符，且限定为字母、数字、以及0~9按键对应的特殊字符(英文半角模式)。

3.除描述字段外，其余字段均不可以为空。

4.一个用户可以包含在一个或多个组中，默认的超级用户“admin”包含在“admin”组中。

©2015. All Rights Reserved.


sc3_login

Navigation: C++ > 权限管理接口 > 用户与组 >

sc3_login

 Return to chapter overview

·函数

§在一台服务器上用户登录

int32 sc3_login(

hd3_in const char* szUserName,

hd3_in const char* szPassword

);

·参数

§szUserName

[in] 用户名称。

§szPassWord

[in] 用户密码。

·返回值

用户登录成功，返回RD_SUCCESS。添加返回其它错误码，见error_code.h

·举例

示例代码参见权限管理接口。

参见：

§sc3_login

§sc3_add_user

§sc3_modify_password

§sc3_reset_password

§sc3_modify_user_desc

§sc3_delete_user

§sc3_add_group

§sc3_add_user_to_group

§sc3_modify_group_desc

§sc3_delete_group

§sc3_query_all_users

§sc3_query_members_of_group

§sc3_query_all_groups

§sc3_query_current_user_name

§sc3_query_groups_of_user

§sc3_delete_user_from_group

©2015. All Rights Reserved.


sc3_add_user

Navigation: C++ > 权限管理接口 > 用户与组 >

sc3_add_user

 Return to chapter overview

·函数

§在一台服务器上添加一个用户

int32 sc3_add_user(hd3_in const HD3SecUser* pUser);

·参数

§pUser

[in] 用户信息。

·返回值

添加用户成功，返回RD_SUCCESS。添加返回其它错误码，见error_code.h

·举例

示例代码参见权限管理接口。

参见：

§sc3_login

§sc3_add_user

§sc3_modify_password

§sc3_reset_password

§sc3_modify_user_desc

§sc3_delete_user

§sc3_add_group

§sc3_add_user_to_group

§sc3_modify_group_desc

§sc3_delete_group

§sc3_query_all_users

§sc3_query_members_of_group

§sc3_query_all_groups

§sc3_query_current_user_name

§sc3_query_groups_of_user

§sc3_delete_user_from_group

©2015. All Rights Reserved.


sc3_modify_password

Navigation: C++ > 权限管理接口 > 用户与组 >

sc3_modify_password

 Return to chapter overview

·函数

§在一台服务器上修改用户密码

int32 sc3_modify_password(

hd3_in const char* szUserName,

hd3_in const char* szOldPassword,

hd3_in const char* szNewPassword

);

·参数

§szUserName

[in] 用户名称。

§szOldPassWord

[in] 用户原密码。

§szNewPassWord

[in] 用户新密码。

·返回值

修改密码成功，返回RD_SUCCESS。添加返回其它错误码，见error_code.h

·举例

示例代码参见权限管理接口。

参见：

§sc3_login

§sc3_add_user

§sc3_modify_password

§sc3_reset_password

§sc3_modify_user_desc

§sc3_delete_user

§sc3_add_group

§sc3_add_user_to_group

§sc3_modify_group_desc

§sc3_delete_group

§sc3_query_all_users

§sc3_query_members_of_group

§sc3_query_all_groups

§sc3_query_current_user_name

§sc3_query_groups_of_user

§sc3_delete_user_from_group

©2015. All Rights Reserved.


sc3_reset_password

Navigation: C++ > 权限管理接口 > 用户与组 >

sc3_reset_password

 Return to chapter overview

·函数

§在一台服务器上重置用户密码

int32 sc3_reset_password(

hd3_in const char* szUserName,

hd3_in const char* szNewPassword

);

·参数

§szUserName

[in] 用户名称。

§szNewPassWord

[in] 用户新密码。

·说明

重置密码功能需要特定的权限，具体由安全数据库管理概述设置。

举例

示例代码参见权限管理接口。

参见：

§sc3_login

§sc3_add_user

§sc3_modify_password

§sc3_reset_password

§sc3_modify_user_desc

§sc3_delete_user

§sc3_add_group

§sc3_add_user_to_group

§sc3_modify_group_desc

§sc3_delete_group

§sc3_query_all_users

§sc3_query_members_of_group

§sc3_query_all_groups

§sc3_query_current_user_name

§sc3_query_groups_of_user

§sc3_delete_user_from_group

©2015. All Rights Reserved.


sc3_modify_user_desc

Navigation: C++ > 权限管理接口 > 用户与组 >

sc3_modify_user_desc

 Return to chapter overview

·函数

§在一台服务器上修改一个用户描述

int32 sc3_modify_user_desc(

hd3_in const char* szUserName,

hd3_in const char* szNewUserDesc

);

·参数

szUserName

[in] 用户名称。

szNewUserDesc

[in] 用户新描述。

·返回值

修改用户描述成功，返回RD_SUCCESS。添加返回其它错误码，见error_code.h

·举例

示例代码参见权限管理接口。

参见：

§sc3_login

§sc3_add_user

§sc3_modify_password

§sc3_reset_password

§sc3_modify_user_desc

§sc3_delete_user

§sc3_add_group

§sc3_add_user_to_group

§sc3_modify_group_desc

§sc3_delete_group

§sc3_query_all_users

§sc3_query_members_of_group

§sc3_query_all_groups

§sc3_query_current_user_name

§sc3_query_groups_of_user

§sc3_delete_user_from_group

©2015. All Rights Reserved.


sc3_delete_user

Navigation: C++ > 权限管理接口 > 用户与组 >

sc3_delete_user

 Return to chapter overview

·函数

§在一台服务器上删除一个用户

int32 sc3_delete_user(hd3_in const char* szUserName);

·参数

szUserName

[in] 用户名称。

·返回值

删除用户成功，返回RD_SUCCESS。添加返回其它错误码，见error_code.h

·举例

示例代码参见权限管理接口。

参见：

§sc3_login

§sc3_add_user

§sc3_modify_password

§sc3_reset_password

§sc3_modify_user_desc

§sc3_delete_user

§sc3_add_group

§sc3_add_user_to_group

§sc3_modify_group_desc

§sc3_delete_group

§sc3_query_all_users

§sc3_query_members_of_group

§sc3_query_all_groups

§sc3_query_current_user_name

§sc3_query_groups_of_user

§sc3_delete_user_from_group

©2015. All Rights Reserved.


sc3_add_group

Navigation: C++ > 权限管理接口 > 用户与组 >

sc3_add_group

 Return to chapter overview

·函数

§在一台服务器上添加一个组

int32 sc3_add_group(hd3_in const HD3SecGroup* pGroup);

·参数

pGroup

[in] 组信息。

·返回值

添加组成功，返回RD_SUCCESS。添加返回其它错误码，见error_code.h

·举例

示例代码参见权限管理接口。

参见：

§sc3_login

§sc3_add_user

§sc3_modify_password

§sc3_reset_password

§sc3_modify_user_desc

§sc3_delete_user

§sc3_add_group

§sc3_add_user_to_group

§sc3_modify_group_desc

§sc3_delete_group

§sc3_query_all_users

§sc3_query_members_of_group

§sc3_query_all_groups

§sc3_query_current_user_name

§sc3_query_groups_of_user

§sc3_delete_user_from_group

©2015. All Rights Reserved.


sc3_add_user_to_group

Navigation: C++ > 权限管理接口 > 用户与组 >

sc3_add_user_to_group

 Return to chapter overview

·函数

§在一台服务器上添加一个用户到组

int32 sc3_add_user_to_group(

hd3_in const char* szUserName,

hd3_in const char* szGroupName

);

·参数

§szUserName

[in] 用户名称。

§szGroupName

[in] 组名称。

·返回值

添加用户到组成功，返回RD_SUCCESS。添加返回其它错误码，见error_code.h

·举例

示例代码参见权限管理接口。

参见：

§sc3_login

§sc3_add_user

§sc3_modify_password

§sc3_reset_password

§sc3_modify_user_desc

§sc3_delete_user

§sc3_add_group

§sc3_add_user_to_group

§sc3_modify_group_desc

§sc3_delete_group

§sc3_query_all_users

§sc3_query_members_of_group

§sc3_query_all_groups

§sc3_query_current_user_name

§sc3_query_groups_of_user

§sc3_delete_user_from_group

©2015. All Rights Reserved.


sc3_modify_group_desc

Navigation: C++ > 权限管理接口 > 用户与组 >

sc3_modify_group_desc

 Return to chapter overview

·函数

§在一台服务器上修改一个组描述

int32 sc3_modify_group_desc(

hd3_in const char* szGroupName,

hd3_in const char* szNewGroupDesc

);

·参数

§szGroupName

[in] 组名称。

§szNewGroupDesc

[in] 组新描述。

·返回值

修改组描述成功，返回RD_SUCCESS。添加返回其它错误码，见error_code.h

·举例

示例代码参见权限管理接口。

参见：

§sc3_login

§sc3_add_user

§sc3_modify_password

§sc3_reset_password

§sc3_modify_user_desc

§sc3_delete_user

§sc3_add_group

§sc3_add_user_to_group

§sc3_modify_group_desc

§sc3_delete_group

§sc3_query_all_users

§sc3_query_members_of_group

§sc3_query_all_groups

§sc3_query_current_user_name

§sc3_query_groups_of_user

§sc3_delete_user_from_group

©2015. All Rights Reserved.


sc3_delete_group

Navigation: C++ > 权限管理接口 > 用户与组 >

sc3_delete_group

 Return to chapter overview

·函数

§在一台服务器上删除一个组

int32 sc3_delete_group(hd3_in const char* szGroupName);

·参数

§szGroupName

[in] 组名称。

·返回值

删除组成功，返回RD_SUCCESS。添加返回其它错误码，见error_code.h

·举例

示例代码参见权限管理接口。

参见：

§sc3_login

§sc3_add_user

§sc3_modify_password

§sc3_reset_password

§sc3_modify_user_desc

§sc3_delete_user

§sc3_add_group

§sc3_add_user_to_group

§sc3_modify_group_desc

§sc3_delete_group

§sc3_query_all_users

§sc3_query_members_of_group

§sc3_query_all_groups

§sc3_query_current_user_name

§sc3_query_groups_of_user

§sc3_delete_user_from_group

©2015. All Rights Reserved.


sc3_query_all_groups

Navigation: C++ > 权限管理接口 > 用户与组 >

sc3_query_all_groups

 Return to chapter overview

·函数

§在一台服务器上查询所有组

int32 sc3_query_all_groups(hd3_in HD3HANDLE* phResultSet);

·参数

§phResultSet

[out] 查询迭代器。取结果项: ut3_get_item_step(hResultSet, HD3SecGroup*)

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h。

·说明

调用该接口成功后会获得一个查询迭代器的句柄，然后调用ut_get_item_step接口，传入迭代器句柄和分配的内存空间(HDSecGroup*)，返回RD_SUCCESS就可以获得第一个组，再调用ut_get_item_step返回RD_SUCCESS就可以获得第二个组。如此循环的查询直到调用ut_get_item_step返回错误码为EC_HD_API_QUERY_END表明所有的组都查询完毕了。查询完毕后调用ut_free_iterator方法来释放迭代器。

·举例

示例代码参见权限管理接口。

参见：

§sc3_login

§sc3_add_user

§sc3_modify_password

§sc3_reset_password

§sc3_modify_user_desc

§sc3_delete_user

§sc3_add_group

§sc3_add_user_to_group

§sc3_modify_group_desc

§sc3_delete_group

§sc3_query_all_users

§sc3_query_members_of_group

§sc3_query_all_groups

§sc3_query_current_user_name

§sc3_query_groups_of_user

§sc3_delete_user_from_group

©2015. All Rights Reserved.


sc3_query_all_users

Navigation: C++ > 权限管理接口 > 用户与组 >

sc3_query_all_users

 Return to chapter overview

·函数

§在一台服务器上查询所有用户

int32 sc3_query_all_users(hd3_out HD3HANDLE* phResultSet);

·参数

§phResultSet

[out] 查询迭代器。取结果项: ut3_get_item_stemp(hResultSet, HD3SecUser*)。

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h。

·说明

调用该接口成功后会获得一个查询迭代器的句柄，然后调用ut_get_item_step接口，传入迭代器句柄和分配的内存空间(HDSecUser*)，返回RD_SUCCESS就可以获得第一个用户，再调用ut_get_item_step返回RD_SUCCESS就可以获得第二个用户。如此循环的查询直到调用ut_get_item_step返回错误码为EC_HD_API_QUERY_END表明所有的用户都查询完毕了。查询完毕后调用ut_free_iterator方法来释放迭代器。

·举例

示例代码参见权限管理接口。

参见：

§sc3_login

§sc3_add_user

§sc3_modify_password

§sc3_reset_password

§sc3_modify_user_desc

§sc3_delete_user

§sc3_add_group

§sc3_add_user_to_group

§sc3_modify_group_desc

§sc3_delete_group

§sc3_query_all_users

§sc3_query_members_of_group

§sc3_query_all_groups

§sc3_query_current_user_name

§sc3_query_groups_of_user

§sc3_delete_user_from_group

©2015. All Rights Reserved.


sc3_query_members_of_group

Navigation: C++ > 权限管理接口 > 用户与组 >

sc3_query_members_of_group

 Return to chapter overview

·函数

§在一台服务器上查询一个组包含的所有用户

int32 sc3_query_members_of_group(

hd3_in const char* szGroupName,

hd3_out HD3HANDLE* phResultSet

);

·参数

§szGroupName

[in] 组名称。

§phResultSet

[out] 查询迭代器。ut3_get_item_step(hResultSet, HD3SecUser*)。

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h。

·说明

调用该接口成功后会获得一个查询迭代器的句柄，然后调用ut_get_item_step接口，传入迭代器句柄和分配的内存空间(HDSecUser*)，返回RD_SUCCESS就可以获得第一个用户，再调用ut_get_item_step返回RD_SUCCESS就可以获得第二个用户。如此循环的查询直到调用ut_get_item_step返回错误码为EC_HD_API_QUERY_END表明所有的用户都查询完毕了。查询完毕后调用ut_free_iterator方法来释放迭代器。

·举例

示例代码参见权限管理接口。

参见：

§sc3_login

§sc3_add_user

§sc3_modify_password

§sc3_reset_password

§sc3_modify_user_desc

§sc3_delete_user

§sc3_add_group

§sc3_add_user_to_group

§sc3_modify_group_desc

§sc3_delete_group

§sc3_query_all_users

§sc3_query_members_of_group

§sc3_query_all_groups

§sc3_query_current_user_name

§sc3_query_groups_of_user

§sc3_delete_user_from_group

©2015. All Rights Reserved.


sc3_query_current_user_name

Navigation: C++ > 权限管理接口 > 用户与组 >

sc3_query_current_user_name

 Return to chapter overview

·函数

§在一台服务器上查询当前登录的用户

int32 sc3_query_current_user_name(

hd3_in int32 nLen,

hd3_out char* szUserName

);

·参数

§nLen

[in] 用户名称缓冲区长度。

§szUserName

[out] 用户名称。

·返回值

查询成功，返回RD_SUCCESS。添加返回其它错误码，见error_code.h

·说明

待查询的用户名所占的内存由外部分配后调用API。

·举例

示例代码参见权限管理接口。

参见：

§sc3_login

§sc3_add_user

§sc3_modify_password

§sc3_reset_password

§sc3_modify_user_desc

§sc3_delete_user

§sc3_add_group

§sc3_add_user_to_group

§sc3_modify_group_desc

§sc3_delete_group

§sc3_query_all_users

§sc3_query_members_of_group

§sc3_query_all_groups

§sc3_query_current_user_name

§sc3_query_groups_of_user

§sc3_delete_user_from_group

©2015. All Rights Reserved.


sc3_query_groups_of_user

Navigation: C++ > 权限管理接口 > 用户与组 >

sc3_query_groups_of_user

 Return to chapter overview

·函数

在一台服务器上查询一个用户所隶属于的所有组

int32 sc3_query_groups_of_user(

hd3_in const char* szUserName,

hd3_out HD3HANDLE* phResultSet

);

·参数

szUserName

[in] 用户名称。

phResultSet

[out] 查询迭代器。 取结果项: ut3_get_item_step(hResultSet, HD3SecGroup*).

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h。

·说明

调用该接口成功后会获得一个查询迭代器的句柄，然后调用ut_get_item_step接口，传入迭代器句柄和分配的内存空间(HDSecGroup*)，返回RD_SUCCESS就可以获得第一个组，再调用ut_get_item_step返回RD_SUCCESS就可以获得第二个组。如此循环的查询直到调用ut_get_item_step返回错误码为EC_HD_API_QUERY_END表明所有的组都查询完毕了。查询完毕后调用ut_free_iterator方法来释放迭代器。

·举例

示例代码参见权限管理接口。

参见：

§sc3_login

§sc3_add_user

§sc3_modify_password

§sc3_reset_password

§sc3_modify_user_desc

§sc3_delete_user

§sc3_add_group

§sc3_add_user_to_group

§sc3_modify_group_desc

§sc3_delete_group

§sc3_query_all_users

§sc3_query_members_of_group

§sc3_query_all_groups

§sc3_query_current_user_name

§sc3_query_groups_of_user

§sc3_delete_user_from_group

©2015. All Rights Reserved.


sc3_delete_user_from_group

Navigation: C++ > 权限管理接口 > 用户与组 >

sc3_delete_user_from_group

 Return to chapter overview

·函数

§在一台服务器上从组中删除一个用户

int32 sc3_delete_user_from_group(

hd3_in const char* szUserName,

hd3_in const char* szGroupName

);

·参数

§szUserName

[in] 用户名称。

§szGroupName

[in] 组名称。

·返回值

从组中删除用户成功，返回RD_SUCCESS。添加返回其它错误码，见error_code.h

·举例

示例代码参见权限管理接口。

参见：

§sc3_login

§sc3_add_user

§sc3_modify_password

§sc3_reset_password

§sc3_modify_user_desc

§sc3_delete_user

§sc3_add_group

§sc3_add_user_to_group

§sc3_modify_group_desc

§sc3_delete_group

§sc3_query_all_users

§sc3_query_members_of_group

§sc3_query_all_groups

§sc3_query_current_user_name

§sc3_query_groups_of_user

§sc3_delete_user_from_group

©2015. All Rights Reserved.


信任

Navigation: C++ > 权限管理接口 >

信任

 Return to chapter overview

《信任》中的主要接口包括：

§sc3_add_trust

§sc3_delete_trust

§sc3_query_all_trusts

某一些客户端的访问无须使用用户帐号登陆，即可拥有特定的权限。通过将IP范围段与用户之间进行关联来实现这个功能，添加信任时，可以设置起始IP和终止IP，使其对应一位用户。

·数据定义

/** iHyperDB 权限管理: 信任 */

typedef struct _HDSecTrust

{

char szTrustName[HD_LEN_SEC_TRUST_NAME];

char szStartIp[HD_LEN_SEC_IP_ADDRESS];

char szEndIp[HD_LEN_SEC_IP_ADDRESS];

char szUserName[HD_LEN_SEC_USER_NAME];

}HDSecTrust;

注意：

1.创建信任时所有信息均可以自行指定，但是最大长度有相应的限制，具体HD_LEN_SEC_TRUST_NAME、HD_LEN_SEC_IP_ADDRESS、HD_LEN_SEC_USER_NAME指定。

2.不同的信任之间在IP指定时不能有交集。

3.对应的用户必须是服务器已有用户。

©2015. All Rights Reserved.


sc3_add_trust

Navigation: C++ > 权限管理接口 > 信任 >

sc3_add_trust

 Return to chapter overview

·函数

§在一台服务器上添加一个信任

int32 sc3_add_trust(hd3_in const HD3SecTrust* pSecTrust);

·参数

§pSecTrust

[in] 信任结构体。

·返回值

添加成功，返回RD_SUCCESS。添加返回其它错误码，见error_code.h

·举例

示例代码参见权限管理接口。

参见：

§sc3_add_trust

§sc3_delete_trust

§sc3_query_all_trusts

©2015. All Rights Reserved.


sc3_delete_trust

Navigation: C++ > 权限管理接口 > 信任 >

sc3_delete_trust

 Return to chapter overview

·函数

§在一台服务器上删除一个信任

int32 sc3_delete_trust(hd3_in const char* szTrustName);

·参数

§szTrustName

[in] 信任名称。

·返回值

删除成功，返回RD_SUCCESS。添加返回其它错误码，见error_code.h

·举例

示例代码参见权限管理接口。

参见：

§sc3_add_trust

§sc3_delete_trust

§sc3_query_all_trusts

©2015. All Rights Reserved.


sc3_query_all_trusts

Navigation: C++ > 权限管理接口 > 信任 >

sc3_query_all_trusts

 Return to chapter overview

·函数

§在一台服务器上查询所有信任

int32 sc3_query_all_trusts(hd3_out HD3HANDLE* phResultSet);

·参数

§phResultSet

[out] 查询迭代器。取结果项: ut3_get_item_step(hResultSet, HD3SecTrust*)。

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h。

·说明

调用该接口成功后会获得一个查询迭代器的句柄，然后调用ut_get_item_step接口，传入迭代器句柄和分配的内存空间(HDSecTrust*)，返回RD_SUCCESS就可以获得第一个信任，再调用ut_get_item_step返回RD_SUCCESS就可以获得第二个信任。如此循环的查询直到调用ut_get_item_step返回错误码为EC_HD_API_QUERY_END表明所有的信任都查询完毕了。查询完毕后调用ut_free_iterator方法来释放迭代器。

·举例

示例代码参见权限管理接口。

参见：

§sc3_add_trust

§sc3_delete_trust

§sc3_query_all_trusts

©2015. All Rights Reserved.


数据库安全

Navigation: C++ > 权限管理接口 >

数据库安全

 Return to chapter overview

《数据库安全》中包括的接口主要有：

·sc_modify_manage_security

·sc_query_manage_security

安全数据库管理可以对权限管理中组权限和Tag权限进行统一配置，均以为单位设定。

· 数据结构

/** iHyperDB 权限管理: 安全数据库项:如Tag点、用户组等 */

typedef struct _HDSecItem

{

char szOwnGroupName[HD_LEN_SEC_GROUP_NAME];

char szOperateGroupName[HD_LEN_SEC_GROUP_NAME];

int8 nSecurity;

}HDSecItem;

注意：

1.权限分为“拥有组”、“操作组”、“其他组”三部分。

2.修改安全项时相关信息均可以自行指定，但是最大长度有相应的限制，具体HD_LEN_SEC_GROUP_NAME和权限字段的特点指定。

3.权限有“无”、“只读”、“读写”三种，二进制分别表示为00、01、11。因此权限nSecurity值实际满足一个8位二进制形式的限制。

4.在调用安全数据库管理相关权限时需要用户指定操作类型，目前包含以下四种宏定义的操作。

//global security items

#define GLOBAL_SC_ITEM_MODIFY_TAG 0

#define GLOBAL_SC_ITEM_MODIFY_GROUP 1

#define GLOBAL_SC_ITEM_QUERY_TAG 2

#define GLOBAL_SC_ITEM_QUERY_GROUP 3

©2015. All Rights Reserved.


sc3_modify_manage_security

Navigation: C++ > 权限管理接口 > 数据库安全 >

sc3_modify_manage_security

 Return to chapter overview

·函数

§在一台服务器上修改安全数据库项

int32 sc3_modify_manage_security(

hd3_in enum HD3_SC_ITEM_TYPE nItemType,

hd3_in const HD3SecItem* pSecItem

);

·参数

§nItemType

[in] 安全数据库项类型。

§pSecItem

[out] 安全数据库项结构体。

·返回值

修改成功，返回RD_SUCCESS。添加返回其它错误码，见error_code.h

·说明

安全项类型见安全数据库管理概述说明或hdAPI.h。

·举例

示例代码参见权限管理接口。

参见：

·sc_modify_manage_security

·sc_query_manage_security

©2015. All Rights Reserved.


sc3_query_manage_security

Navigation: C++ > 权限管理接口 > 数据库安全 >

sc3_query_manage_security

 Return to chapter overview

·函数

§在一台服务器上查询安全数据库项

int32 sc3_query_manage_security(

hd3_in enum HD3_SC_ITEM_TYPE nItemType,

hd3_out HD3SecItem* pSecItem

);

·参数

§nItemType

[in] 安全数据库项类型。

§pSecItem

[out] 安全数据库项结构体。

·返回值

添加成功，返回RD_SUCCESS。添加返回其它错误码，见error_code.h

·说明

待查询的安全项所占的内存由外部分配后调用API，安全项类型见安全数据库管理概述说明或hdAPI.h。

·举例

示例代码参见权限管理接口。

参见：

·sc_modify_manage_security

·sc_query_manage_security

©2015. All Rights Reserved.


授权项

Navigation: C++ > 权限管理接口 >

授权项

 Return to chapter overview

《授权项》中的主要接口包括：

§sc3_add_auth_item

§sc3_delete_auth_item

§sc3_modify_auth_item

§sc3_add_auth_item_to_group

§sc3_delete_auth_tem_from_group

§sc3_query_all_auth_item

§sc3_query_auth_items_of_group

§sc3_query_groups_of_auth_item

§sc3_query_auth_of_user

用户可以自己通过授权项定义授权而不影响已经配置好的用户与组的功能。通过添加授权项并把授权项加入组，这个组中的所有用户就拥有这个授权项的权限了。

authitem

copycode !MISSING PHRASE 'COPYCODE'!

//*Auth Item Function

#include "hdKingAPI.h"

#include "error_code.h"

#include <stdio.h>

#include <string.h>

int32 main()

{

int32 nRet = RD_SUCCESS;

HD3Connection conn;

HD3SecGroup secGroup;

HD3SecAuthItem secAuthItem;

int32 i = 0;

int32 nAuth = 0;

HD3HANDLE hIter = NULL;

const int32 USER_COUNT = 3;

const int32 GROUP_COUNT = 3;

const int32 AUTH_ITEM_COUNT = 3;

HD3SecUser users[USER_COUNT];

HD3SecGroup groups[GROUP_COUNT];

HD3SecAuthItem authItems[AUTH_ITEM_COUNT];

//connect

strcpy(conn.szAddress, "127.0.0.1");

conn.nPort = 5673;

conn.nTimeout = 3;

nRet = nt3_connect(&conn);

if (nRet != RD_SUCCESS)

{

printf("connect to server failed, error code[%d]!\n", nRet);

return -1;

}

printf("connect to server successful!\n");

//login

nRet = sc3_login("admin" , "admin");

if (nRet != RD_SUCCESS)

{

printf("login server failed, error code[%d]!\n", nRet);

return -1;

}

printf("login server successful!\n");

//add users

for (i = 0; i < USER_COUNT; i ++)

{

sprintf(users[i].szUserName, "userName_%d", i);

sprintf(users[i].szPasswd, "passWord", i);

sprintf(users[i].szUserDesc, "userDesc_%d", i);

nRet = sc3_add_user(users + i);

if (nRet != RD_SUCCESS)

{

printf("add user[name:%s] failed, error code[%d]!\n", users[i].szUserName, nRet);

return -1;

}

printf("add user successful!\n");

}

//add auth items

for (i = 0; i < AUTH_ITEM_COUNT; i ++)

{

sprintf(authItems[i].szName, "authItemName_%d", i);

sprintf(authItems[i].szDesc, "authItemDesc_%d", i);

authItems[i].nAuth = 0;

nRet = sc3_add_auth_item(authItems + i);

if (nRet != RD_SUCCESS)

{

printf("add auth item[name:%s] failed, error code[%d]!\n", authItems[i].szName, nRet);

return -1;

}

printf("add auth item successful!\n");

sprintf(authItems[i].szDesc, "authItemDesc_%d_modified", i);

nRet = sc3_modify_auth_item(authItems + i);

if (nRet != RD_SUCCESS)

{

printf("modify auth item[name:%s] failed, error code[%d]!\n", authItems[i].szName, nRet);

return -1;

}

printf("modify auth item successful!\n");

}

//query all auth items

nRet = sc3_query_all_auth_items(&hIter);

if (nRet != RD_SUCCESS)

{

printf("query sc_query_all_auth_items failed, error code[%d]!\n", nRet);

return -1;

}

while (true)

{

nRet = ut3_get_item_step(hIter, &secAuthItem);

if (RD_SUCCESS == nRet)

{

printf("query auth item[name:%s] succeed!\n", secAuthItem.szName);

}

else if (EC_HD_API_QUERY_END == nRet)

{

printf("query auth item complete!\n");

break;

}

else

{

printf("query auth item failed, error code[%d]!\n", nRet);

break;

}

}

ut3_free_handle(hIter);

//add group

for (i = 0; i < GROUP_COUNT; i ++)

{

//add group

sprintf(groups[i].szGroupName, "groupName_%d", i);

sprintf(groups[i].szGroupDesc, "groupDesc_%d", i);

nRet = sc3_add_group(groups + i);

if (nRet != RD_SUCCESS)

{

printf("add group[name:%s] failed, error code[%d]!\n", groups[i].szGroupDesc, nRet);

return -1;

}

printf("add group successful!\n");

}

//add auth item to group

for (i = 0; i < USER_COUNT; i ++)

{

nRet = sc3_add_auth_item_to_group(authItems[i].szName, groups[i].szGroupName);

if (nRet != RD_SUCCESS)

{

printf("sc_add_auth_item_to_group failed, error code[%d]!\n", nRet);

return -1;

}

printf("sc_add_auth_item_to_group successful!\n");

}

//query all auth items of group

nRet = sc3_query_auth_items_of_group(groups[0].szGroupName, &hIter);

if (nRet != RD_SUCCESS)

{

printf("query user of group[name:%s] failed, error code[%d]!\n", groups[0].szGroupName, nRet);

return -1;

}

while (true)

{

nRet = ut3_get_item_step(hIter, &secAuthItem);

if (RD_SUCCESS == nRet)

{

printf("query auth item[name:%s] of group[name:%s] succeed!\n", secAuthItem.szName, groups[0].szGroupName);

}

else if (EC_HD_API_QUERY_END == nRet)

{

printf("query auth item of group[name:%s] complete!\n", groups[0].szGroupName);

break;

}

else

{

printf("query auth item of group[name:%s] failed, error code[%d]!\n", groups[0].szGroupName, nRet);

break;

}

}

ut3_free_handle(hIter);

//query all group of auth item

nRet = sc3_query_groups_of_auth_item(authItems[0].szName, &hIter);

if (nRet != RD_SUCCESS)

{

printf("query sc_query_groups_of_auth_item [name:%s] failed, error code[%d]!\n", authItems[0].szName, nRet);

return -1;

}

while (true)

{

nRet = ut3_get_item_step(hIter, &secGroup);

if (RD_SUCCESS == nRet)

{

printf("query group[name:%s] of auth item[name:%s] succeed!\n", secGroup.szGroupName, authItems[0].szName);

}

else if (EC_HD_API_QUERY_END == nRet)

{

printf("query group of auth item[name:%s] complete!\n", authItems[0].szName);

break;

}

else

{

printf("query group of auth item[name:%s] failed, error code[%d]!\n", authItems[0].szName, nRet);

break;

}

}

ut3_free_handle(hIter);

//query user's auth

nRet = sc3_query_auth_of_user(users[0].szUserName, authItems[0].szName, &nAuth);

if (nRet != RD_SUCCESS)

{

printf("query sc_query_auth_of_user failed, error code[%d], user[%s], auth item name[%s]\n", nRet, users[0].szUserName, authItems[0].szName);

return -1;

}

printf("query sc_query_auth_of_user successful\n");

// delete auth item from group

for (i = 0; i < USER_COUNT; i ++)

{

nRet = sc3_delete_auth_item_from_group(authItems[i].szName, groups[i].szGroupName);

if (nRet != RD_SUCCESS)

{

printf("delete auth item[name:%s] from group[name:%s] failed, error code[%d]!\n",

authItems[i].szName, groups[i].szGroupName, nRet);

return -1;

}

printf("delete auth item[name:%s] from group[name:%s] successful!\n", authItems[i].szName, groups[i].szGroupName);

}

//delete auth item

for (i = 0; i < AUTH_ITEM_COUNT; i ++)

{

nRet = sc3_delete_auth_item(authItems[i].szName);

if (nRet != RD_SUCCESS)

{

printf("delete auth item[name:%s] failed, error code[%d]!\n", authItems[i].szName, nRet);

return -1;

}

printf("delete auth item[name:%s] successful!\n", authItems[i].szName);

}

//disconnect

nt3_disconnect();

return 0;

}

©2015. All Rights Reserved.


sc3_add_auth_item

Navigation: C++ > 权限管理接口 > 授权项 >

sc3_add_auth_item

 Return to chapter overview

·函数

§在一台服务器上添加一个用户

int32 sc3_add_auth_item(hd3_in const HD3SecAuthItem* pAuthItem);

·参数

§pAuthItem

[in] 授权项信息。

·返回值

添加授权项成功，返回RD_SUCCESS。添加返回其它错误码，见error_code.h

·举例

示例代码参见授权项。

参见：

§sc3_add_auth_item

§sc3_delete_auth_item

§sc3_modify_auth_item

§sc3_add_auth_item_to_group

§sc3_delete_auth_tem_from_group

§sc3_query_all_auth_item

§sc3_query_auth_items_of_group

§sc3_query_groups_of_auth_item

§sc3_query_auth_of_user

©2015. All Rights Reserved.


sc3_delete_auth_item

Navigation: C++ > 权限管理接口 > 授权项 >

sc3_delete_auth_item

 Return to chapter overview

·函数

§在一台服务器上删除一个用户

int32 sc3_delete_auth_item(hd3_in const char* szName);

·参数

szName

[in] 授权项名称。

·返回值

删除授权项成功，返回RD_SUCCESS。添加返回其它错误码，见error_code.h

·举例

示例代码参见授权项。

参见：

§sc3_add_auth_item

§sc3_delete_auth_item

§sc3_modify_auth_item

§sc3_add_auth_item_to_group

§sc3_delete_auth_tem_from_group

§sc3_query_all_auth_item

§sc3_query_auth_items_of_group

§sc3_query_groups_of_auth_item

§sc3_query_auth_of_user

©2015. All Rights Reserved.


sc3_modify_auth_item

Navigation: C++ > 权限管理接口 > 授权项 >

sc3_modify_auth_item

 Return to chapter overview

·函数

§在一台服务器上修改一个组描述

int32 sc3_modify_auth_item(hd3_in const HD3SecAuthItem* pAuthItem);

·参数

§pAuthItem

[in] 授权项信息。

·返回值

修改授权项信息成功，返回RD_SUCCESS。添加返回其它错误码，见error_code.h

·举例

示例代码参见授权项。

参见：

§sc3_add_auth_item

§sc3_delete_auth_item

§sc3_modify_auth_item

§sc3_add_auth_item_to_group

§sc3_delete_auth_tem_from_group

§sc3_query_all_auth_item

§sc3_query_auth_items_of_group

§sc3_query_groups_of_auth_item

§sc3_query_auth_of_user

©2015. All Rights Reserved.


sc3_add_auth_item_to_group

Navigation: C++ > 权限管理接口 > 授权项 >

sc3_add_auth_item_to_group

 Return to chapter overview

·函数

§在一台服务器上添加一个用户到组

int32 sc3_add_auth_item_to_group(

hd3_in const char* szAuthItemName,

hd3_in const char* szGroupName

);

·参数

§szAuthItemName

[in] 授权项名称。

§szGroupName

[in] 组名称。

·返回值

添加用户到组成功，返回RD_SUCCESS。添加返回其它错误码，见error_code.h

·举例

示例代码参见授权项。

参见：

§sc3_add_auth_item

§sc3_delete_auth_item

§sc3_modify_auth_item

§sc3_add_auth_item_to_group

§sc3_delete_auth_tem_from_group

§sc3_query_all_auth_item

§sc3_query_auth_items_of_group

§sc3_query_groups_of_auth_item

§sc3_query_auth_of_user

©2015. All Rights Reserved.


sc3_delete_auth_item_from_group

Navigation: C++ > 权限管理接口 > 授权项 >

sc3_delete_auth_item_from_group

 Return to chapter overview

·函数

§在一台服务器上从组中删除一个用户

int32 sc3_delete_auth_item_from_group(

hd3_in const char* szAuthItemName,

hd3_in const char* szGroupName

);

·参数

§szAuthItemName

[in] 授权项名称。

§szGroupName

[in] 组名称。

·返回值

从组中删除授权项成功，返回RD_SUCCESS。添加返回其它错误码，见error_code.h

·举例

示例代码参见授权项。

参见：

§sc3_add_auth_item

§sc3_delete_auth_item

§sc3_modify_auth_item

§sc3_add_auth_item_to_group

§sc3_delete_auth_tem_from_group

§sc3_query_all_auth_item

§sc3_query_auth_items_of_group

§sc3_query_groups_of_auth_item

§sc3_query_auth_of_user

©2015. All Rights Reserved.


sc3_query_all_auth_item

Navigation: C++ > 权限管理接口 > 授权项 >

sc3_query_all_auth_item

 Return to chapter overview

·函数

§在一台服务器上查询所有用户

int32 sc3_query_all_auth_items(hd3_out HD3HANDLE* phResultSet);

·参数

§phResultSet

[out] 查询迭代器。取结果项: ut3_get_item_stemp(hResultSet, HD3SecAuthItem*)。

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h。

·说明

调用该接口成功后会获得一个查询迭代器的句柄，然后调用ut_get_item_step接口，传入迭代器句柄和分配的内存空间(HD3SecAuthItem*)，返回RD_SUCCESS就可以获得第一个授权项，再调用ut_get_item_step返回RD_SUCCESS就可以获得第二个授权项。如此循环的查询直到调用ut_get_item_step返回错误码为EC_HD_API_QUERY_END表明所有的用户都查询完毕了。查询完毕后调用ut_free_iterator方法来释放迭代器。

·举例

示例代码参见授权项。

参见：

§sc3_add_auth_item

§sc3_delete_auth_item

§sc3_modify_auth_item

§sc3_add_auth_item_to_group

§sc3_delete_auth_tem_from_group

§sc3_query_all_auth_item

§sc3_query_auth_items_of_group

§sc3_query_groups_of_auth_item

§sc3_query_auth_of_user

©2015. All Rights Reserved.


sc3_query_auth_items_of_group

Navigation: C++ > 权限管理接口 > 授权项 >

sc3_query_auth_items_of_group

 Return to chapter overview

·函数

§在一台服务器上查询一个组包含的所有授权项

int32 sc3_query_auth_items_of_group(

hd3_in const char* szGroupName,

hd3_out HD3HANDLE* phResultSet

);

·参数

§szGroupName

[in] 组名称。

§phResultSet

[out] 查询迭代器。ut3_get_item_step(hResultSet, HD3SecAuthItem*)。

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h。

·说明

调用该接口成功后会获得一个查询迭代器的句柄，然后调用ut_get_item_step接口，传入迭代器句柄和分配的内存空间(HD3SecAuthItem*)，返回RD_SUCCESS就可以获得第一个授权项，再调用ut_get_item_step返回RD_SUCCESS就可以获得第二个授权项。如此循环的查询直到调用ut_get_item_step返回错误码为EC_HD_API_QUERY_END表明所有的用户都查询完毕了。查询完毕后调用ut_free_iterator方法来释放迭代器。

·举例

示例代码参见授权项。

参见：

§sc3_add_auth_item

§sc3_delete_auth_item

§sc3_modify_auth_item

§sc3_add_auth_item_to_group

§sc3_delete_auth_tem_from_group

§sc3_query_all_auth_item

§sc3_query_auth_items_of_group

§sc3_query_groups_of_auth_item

§sc3_query_auth_of_user

©2015. All Rights Reserved.


sc3_query_groups_of_auth_item

Navigation: C++ > 权限管理接口 > 授权项 >

sc3_query_groups_of_auth_item

 Return to chapter overview

·函数

在一台服务器上查询一个用户所隶属于的所有组

int32 sc3_query_groups_of_auth_item(

hd3_in const char* szAuthItemName,

hd3_out HD3HANDLE* phResultSet

);

·参数

szAuthItemName

[in] 用户名称。

phResultSet

[out] 查询迭代器。 取结果项: ut3_get_item_step(hResultSet, HD3SecGroup*).

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h。

·说明

调用该接口成功后会获得一个查询迭代器的句柄，然后调用ut_get_item_step接口，传入迭代器句柄和分配的内存空间(HDSecGroup*)，返回RD_SUCCESS就可以获得第一个组，再调用ut_get_item_step返回RD_SUCCESS就可以获得第二个组。如此循环的查询直到调用ut_get_item_step返回错误码为EC_HD_API_QUERY_END表明所有的组都查询完毕了。查询完毕后调用ut_free_iterator方法来释放迭代器。

·举例

示例代码参见授权项。

参见：

§sc3_add_auth_item

§sc3_delete_auth_item

§sc3_modify_auth_item

§sc3_add_auth_item_to_group

§sc3_delete_auth_tem_from_group

§sc3_query_all_auth_item

§sc3_query_auth_items_of_group

§sc3_query_groups_of_auth_item

§sc3_query_auth_of_user

©2015. All Rights Reserved.


sc3_query_auth_of_user

Navigation: C++ > 权限管理接口 > 授权项 >

sc3_query_auth_of_user

 Return to chapter overview

·函数

在一台服务器上查询一个用户所隶属于的所有组

int32 sc3_query_auth_of_user(

hd3_in const char* szUserName,

hd3_in const char* szAuthItemName,

hd3_out int32* pnAuth

);

·参数

szUserName

[in] 用户名称。

szAuthItemName

[in] 授权项名称。

pnAuth

[out] 权限值.

·返回值

查询成功，返回RD_SUCCESS。查询失败返回其它错误码，见error_code.h。

·说明

·举例

示例代码参见授权项。

参见：

§sc3_add_auth_item

§sc3_delete_auth_item

§sc3_modify_auth_item

§sc3_add_auth_item_to_group

§sc3_delete_auth_tem_from_group

§sc3_query_all_auth_item

§sc3_query_auth_items_of_group

§sc3_query_groups_of_auth_item

§sc3_query_auth_of_user

©2015. All Rights Reserved.


管理功能接口

Navigation: C++ >

管理功能接口

 Return to chapter overview

《管理功能接口》主要内容包括

·ut3_set_charset

·ut3_get_charset

·ut3_set_request_timeout

·ut3_set_connection_checking_cycle

·ut3_get_item_step

·ut3_free_handle

·ut3_get_server_time_ms

·ut3_convert_sec_to_rdtime

·ut3_convert_rdtime_to_sec

utility

copycode !MISSING PHRASE 'COPYCODE'!

///*Utility Function

#include "hdKingAPI.h"

#include "error_code.h"

#include "data_types.h"

#include "hd3Struct.h"

#include <stdio.h>

#include <string.h>

int32 main()

{

int32 nRet = RD_SUCCESS;

HD3Connection conn;

HD3PtTagProp normalTag;

HD3PtTagProp tagQuery;

HD3FilterItemSet filterSet;

HD3FilterItem filterItem[2];

HD3Mask mask;

HD3HANDLE hIter = NULL;

int32 i = 0;

HD3_CHARSET charset;

int64 nServerTimeMs = 0;

//connect

strcpy(conn.szAddress, "127.0.0.1");

conn.nPort = 5673;

conn.nTimeout = 3;

nRet = nt3_connect(&conn);

if (nRet != RD_SUCCESS)

{

printf("connect to server failed, error code[%d]!\n", nRet);

return -1;

}

printf("connect to server successful!\n");

//login

nRet = sc3_login("admin", "admin");

if (nRet != RD_SUCCESS)

{

printf("login failed, error code[%d]!\n", nRet);

return -1;

}

printf("login successful!\n");

//get set charset

charset = HD3_SYS;

ut3_set_charset(charset);

printf("set charset unicode success.\n");

charset = ut3_get_charset();

printf("get charset unicode success.\n");

//set time out

ut3_set_request_timeout(5);

printf("set timeout successful!\n");

//set connection cycle

ut3_set_connection_checking_cycle(10);

printf("set connection checking cycle successful!\n");

//get server ms

nRet = ut3_get_server_ms_time(&nServerTimeMs);

if (nRet != RD_SUCCESS)

{

printf("get server ms time failed, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

printf("get server ms time successful!\n");

//convert time

HD3TimeStamp abTime;

int32 nSec = 1;

nRet = ut3_convert_sec_to_rdtime(nSec, &abTime);

if (nRet != RD_SUCCESS)

{

printf("convert sec to rdtime failed, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

printf("convert sec to rdtime successful!\n");

nRet = ut3_convert_rdtime_to_sec(&abTime, &nSec);

if (nRet != RD_SUCCESS)

{

printf("convert rdtime to sec failed, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

printf("convert rdtime to sec successful!\n", nRet);

//add tag

strcpy(normalTag.szTagName, "szNormalTag");

normalTag.nTagType = HD3_TAG_TYPE_INT32;

mask.nCommMask = HD3M_COMM_PROP_TAG_NAME | HD3M_COMM_PROP_TAG_TYPE;

mask.nExtMask = 0;

nRet = pt3_add_tag(&normalTag, &mask, "", &normalTag.nTagID);

if (nRet != RD_SUCCESS)

{

printf("add tag[%s] failed, error code [%d]!\n", normalTag.szTagName, nRet);

nt3_disconnect();

return -1;

}

printf("add tag[%s] successful!\n", normalTag.szTagName);

//query tags by condition

filterItem[0].nItemID = HD3_TAG_COL_COMM_PROP_TAG_NAME;

filterItem[0].nRelation = HD3_RELATION_LIKE;

strcpy(filterItem[0].szValue, "*");

filterItem[1].nItemID = HD3_TAG_COL_COMM_PROP_TAG_TYPE;

filterItem[1].nRelation = HD3_RELATION_EQUAL;

sprintf(filterItem[1].szValue, "%d", HD3_TAG_TYPE_INT32);

filterSet.nSize = 2;

filterSet.pItem = filterItem;

mask.nCommMask = HD3M_ALL;

mask.nExtMask = HD3M_ALL;

nRet = pt3_query_tags_cond(&filterSet, &mask, &hIter);

if (nRet != RD_SUCCESS)

{

printf("tag_query_tags_cond, error code [%d]!\n", nRet);

nt3_disconnect();

return -1;

}

while (true)

{

nRet = ut3_get_item_step(hIter, &tagQuery);

if (RD_SUCCESS == nRet)

{

printf("query tag successful, tag name is %s, tag id is %d!\n", tagQuery.szTagName, tagQuery.nTagID);

}

else if (EC_HD_API_QUERY_END == nRet)

{

printf("query tag complete!");

break;

}

else

{

printf("query tag failed, error code [%d]!", nRet);

break;

}

}

ut3_free_handle(hIter);

//disconnect

nt3_disconnect();

return 0;

}

//*/

©2015. All Rights Reserved.


ut3_set_charset

Navigation: C++ > 管理功能接口 >

ut3_set_charset

 Return to chapter overview

·函数

§ 设置与hdAPI交互的中文编码格式

int32 ut3_set_charset(

enum HD3_CHARSET charset

);

·参数

§charset

[in] 字符集枚举量

·返回值

设置成功，返回RD_SUCCESS。失败返回其它错误码，见error_code.h

·说明

typedef enum _HD3_CHARSET{

HD3_CHARSET_SYS, // 系统默认字符集

HD3_CHARSET_ANSI, // ANSI字符集，包含GB2312,GBK,GB1830

HD3_CHARSET_UNICODE // Unicode字符集

}HD3_CHARSET;

处理中文字符串的接口都受该接口影响。本接口调用不依赖任意其它接口，可随时调用。

本接口调用后即生效，多线程情况下，本接口调用时刻后的其它hdKingAPI调用都将应用本次字符编码设置。

hdKingAPI默认接受的字符编码为HD3_CHARSET_SYS，在通常范围的机器上其与HD3_CHARSET_ANSI等价。

·举例

示例代码参见管理功能接口。

参见：

·ut3_set_charset

·ut3_get_charset

·ut3_set_request_timeout

·ut3_set_connection_checking_cycle

·ut3_get_item_step

·ut3_free_handle

·ut3_get_server_time_ms

·ut3_convert_sec_to_rdtime

·ut3_convert_rdtime_to_sec

©2015. All Rights Reserved.


ut3_get_charset

Navigation: C++ > 管理功能接口 >

ut3_get_charset

 Return to chapter overview

·函数

§获取与hdAPI交互的中文编码格式

enum HD3_CHARSET ut3_get_charset(

);

·参数

无

·返回值

设置成功，返回RD_SUCCESS。失败返回其它错误码，见error_code.h

·说明

见ut3_set_charset说明

·举例

示例代码参见管理功能接口。

参见：

·ut3_set_charset

·ut3_get_charset

·ut3_set_request_timeout

·ut3_set_connection_checking_cycle

·ut3_get_item_step

·ut3_free_handle

·ut3_get_server_time_ms

·ut3_convert_sec_to_rdtime

·ut3_convert_rdtime_to_sec

©2015. All Rights Reserved.


ut3_set_request_timeout

Navigation: C++ > 管理功能接口 >

ut3_set_request_timeout

 Return to chapter overview

·函数

§设置数据请求超时时间

int32 ut3_set_request_timeout(

int32 nTimeout

);

·参数

§nTimeout

[in] 数据访问超时时间，单位为秒。

·返回值

设置成功，返回RD_SUCCESS。失败返回其它错误码，见error_code.h

·说明

凡是与iHyperDB服务器交互的接口都有一个超时时间，已便网络或者服务器出现异常时能等待指定时间后退出。iHyperDB超时时间分为两种，一种是连接超时，一种是数据访问超时。

连接超时是指连接iHyperDB服务器时的超时时间，与网络相关的接口的超时时间是连接超时，它们只与服务器的网络模块相关，与服务器的其它模块没有数据交互，接口nt3_connect的超时时间是连接超时，该超时时间由用户自己指定。单位为秒。

与iHyperDB服务器端的除网络模块外的其它模块有数据交互的接口的超时时间都是数据访问超时，如pt3_add_tag等接口，调用ut3_set_request_timeout设置超时时间(如3秒)后，再调用p t3_add_tag向服务器添加一个tag，如果网络异常或者服务器忙碌无法提供服务时，在该超时时间结束(3秒)后，接口返回一个超时的错误码。

与服务器有数据交互的接口都有受到该超时时间的影响。

如果不调用该接口，会有一个默认的数据超时时间，超时时间为10秒。

·举例

示例代码参见管理功能接口。

参见：

·ut3_set_charset

·ut3_get_charset

·ut3_set_request_timeout

·ut3_set_connection_checking_cycle

·ut3_get_item_step

·ut3_free_handle

·ut3_get_server_time_ms

·ut3_convert_sec_to_rdtime

·ut3_convert_rdtime_to_sec

©2015. All Rights Reserved.


ut3_set_connection_checking_cycle

Navigation: C++ > 管理功能接口 >

ut3_set_connection_checking_cycle

 Return to chapter overview

·函数

§设置间隔时间，用于定期检查API与后台服务的连接

void ut3_set_connection_checking_cycle(hd3_in int32 nInterval);

·参数

§nInterval

[in] 间隔时间，用于定期检查API与后台服务的连接，单位为秒。

·返回值

无

·说明

·举例

示例代码参见管理功能接口。

参见：

·ut3_set_charset

·ut3_get_charset

·ut3_set_request_timeout

·ut3_set_connection_checking_cycle

·ut3_get_item_step

·ut3_free_handle

·ut3_get_server_time_ms

·ut3_convert_sec_to_rdtime

·ut3_convert_rdtime_to_sec

©2015. All Rights Reserved.


ut3_get_item_step

Navigation: C++ > 管理功能接口 >

ut3_get_item_step

 Return to chapter overview

·函数

§获取结果项

int32 ut3_get_item_step(

HD3HANDLE hResultSet,

void* pItem

);

·参数

§hResultSet

[in] 迭代器句柄。

§pItem

[in] 结果项。

·返回值

查询成功，返回RD_SUCCESS，迭代器指向的内容通过参数pItem传出。EC_HD_API_QUERY_END,表明查询结束，失败返回其它错误码，见error_code.h

·说明

该接口需要配合其它查询接口一起使用，某些查询的接口如果查询成功会返回一个迭代器句柄，不断的调用ut3_get_item_step可以将要查询的内容一个一个全部取出来直到返回EC_HD_API_QUERY_END或者其它错误码。

参数pItem，根据调用的查询接口的不同，pItem指向不同的类型。例如调用a m3_query_group_child_groups得到一个迭代器句柄，再调用ut3_get_item_step查询子组ID时，pItem为一个指向uint32类型的指针。调用am_query_tags_cond得到一个迭代器句柄，再调用ut3_get_item_step查询报警点属性时，pItem为一个指向HD3AlarmTagProp结构的指针。

使用完成后需要调用ut3_free_handle来释放迭代器。

·举例

示例代码参见管理功能接口。

参见：

·ut3_set_charset

·ut3_get_charset

·ut3_set_request_timeout

·ut3_set_connection_checking_cycle

·ut3_get_item_step

·ut3_free_handle

·ut3_get_server_time_ms

·ut3_convert_sec_to_rdtime

·ut3_convert_rdtime_to_sec

©2015. All Rights Reserved.


ut3_free_handle

Navigation: C++ > 管理功能接口 >

ut3_free_handle

 Return to chapter overview

·函数

§释放迭代器

void ut3_free_handle(

HD3HANDLE hResultSet

);

·参数

§hResultSet

[in] 迭代器句柄。

·返回值

无

·说明

调用某些接口获得迭代器句柄，再调用ut3_get_item_step，最后需要调用ut3_get_item_step来释放迭代器。

·举例

示例代码参见管理功能接口。

·参见：

·ut3_set_charset

·ut3_get_charset

·ut3_set_request_timeout

·ut3_set_connection_checking_cycle

·ut3_get_item_step

·ut3_free_handle

·ut3_get_server_time_ms

·ut3_convert_sec_to_rdtime

·ut3_convert_rdtime_to_sec

©2015. All Rights Reserved.


ut3_convert_sec_to_rdtime

Navigation: C++ > 管理功能接口 >

ut3_convert_sec_to_rdtime

 Return to chapter overview

·函数

§将时间从秒格式转换成HD时间戳

void ut3_convert_sec_to_rdtime(

int32 nSec,

HD3TimeStamp* pRDTime

);

·参数

§nSec

[in] 秒

§pRDTime

[in] HD时间戳

·返回值

错误码，如果成功则返回RD_SUCCESS.

·举例

示例代码参见管理功能接口。

参见：

·ut3_set_charset

·ut3_get_charset

·ut3_set_request_timeout

·ut3_set_connection_checking_cycle

·ut3_get_item_step

·ut3_free_handle

·ut3_get_server_time_ms

·ut3_convert_sec_to_rdtime

·ut3_convert_rdtime_to_sec

©2015. All Rights Reserved.


ut3_convert_rdtime_to_sec

Navigation: C++ > 管理功能接口 >

ut3_convert_rdtime_to_sec

 Return to chapter overview

·函数

§将时间从秒格式转换成HD时间戳

void ut3_convert_rdtime_to_sec(

HD3TimeStamp* pTime,

int32* pnSec

);

·参数

§pTime

[in] HD时间戳

§pnSec

[in] 秒

·返回值

错误码，如果成功则返回RD_SUCCESS.

·举例

示例代码参见管理功能接口。

参见：

·ut3_set_charset

·ut3_get_charset

·ut3_set_request_timeout

·ut3_set_connection_checking_cycle

·ut3_get_item_step

·ut3_free_handle

·ut3_get_server_time_ms

·ut3_convert_sec_to_rdtime

·ut3_convert_rdtime_to_sec

©2015. All Rights Reserved.


ut3_get_server_time_ms

Navigation: C++ > 管理功能接口 >

ut3_get_server_time_ms

 Return to chapter overview

·函数

§ 获取服务器的机器时间，单位为毫秒

int32 ut3_get_server_ms_time(hd3_out int64* pMsTime);

·参数

§pMsTime

[out] 服务器时间

·返回值

成功，返回RD_SUCCESS。失败返回其它错误码，见error_code.h

·说明

服务器时间是一个相对时间，表示从1970年1月1日0:00:00开始的毫秒数

·举例

示例代码参见管理功能接口。

参见：

·ut3_set_charset

·ut3_get_charset

·ut3_set_request_timeout

·ut3_set_connection_checking_cycle

·ut3_get_item_step

·ut3_free_handle

·ut3_get_server_time_ms

·ut3_convert_sec_to_rdtime

·ut3_convert_rdtime_to_sec

©2015. All Rights Reserved.


Java

JavaSDK使用概述

Navigation: »No topics above this level«

JavaSDK使用概述

 Return to chapter overview

目前所提供的JavaSDK接口包括以下内容

·连接管理

·Tag点管理

·记录查询接口

·记录存储接口

·统计分析接口

·报警相关

·用户相关

·API接口

示例代码放在安装目录\samples\java

各个模块所提供的具体接口内容，请查看对应章节内容。

在SDK安装目录下的library文件夹和executable中有需要的jar包和jni的hdDataSDK动态库以及依赖的C动态库，将该文件夹下的所有jar文件添加到Java工程编译路径中。

使用实时数据库JavaSDK编码调用的一般步骤如下

示例

//获取连接

HDDataServer server = HDServerFactory.getHDDataServer(serverip, port);

HDDataConnection conn = HDConnectionFactory.getHDDataConnection(server);

//获取各个模块的操作工具对象

HDTagManager tagManager = conn.getTagManager();

//整理调用参数

int tagID = 1;

//调用接口

HDBasicTag basicTag = tagManager.getBasicTagById(tagID);

//结束

JavaSDK记录日志使用log4j，可以在工程的log4j.properties设置输出日志级别

log4j.logger.com.baosight.hdsdk=DEBUG,stdout,rollingfile


java接口2.4到3.5版本的升级说明

Navigation: Java >

java接口2.4到3.5版本的升级说明

 Return to chapter overview

接口2.4升级到3.5，由于2.4是单机版、3.0是分布式版本，接口做了合并和修改,新的接口动态库名称为hd-datasdk-3.5.0.jar

1.层次结构的变化

原来HdSDK里的内容移动到com.baosight.hdjni下

2.连接和断开

新接口的HDDataServer增加了备机的ip和端口号，删除了资源管理和重连的接口

2.4 | 3.6
public static HDDataConnection getHDDataConnection(HDDataServer server) | public static HDDataConnection getHDDataConnection(HDDataServer server)
public static HDDataConnection getHDDataConnection(HDDataServer server, String userName, String userPwd) | public static HDDataConnection getHDDataConnection(HDDataServer server, String userName, String userPwd)
public static HDResourceConnection getHDResourceConnection(HDResourceServer server | 无
public static HDDataConnection reconnectHDDataConnection(HDDataServer server) | 无

3.数据查询接口的主要变化：

a.返回的List<HDRecord>变为带有错误码的pair，用来表示这条记录是否可用

b.传入参数原来用数组表示的,统一修改为List类型

c.批量查询接口增加一个名为errCode的返回参数，用来表示查询是全部成功或者是部分成功。用户在使用时，应该先判断此参数，如果全部成功，则不需要挨个判断返回的记录值；如果部分成功，还需要对单条记录对应的错误码一一进行判断。

d.批量查询接口，取消withError参数

数据查询的新旧接口对照

2.4 | 3.5
getRawRecordsCount(…) queryTagRawRecordsByCount(…) queryTagHisRawRecords(…) querySnapshotByTagID(…) | 相同
List<HDRecord> queryTagsHisInterRecordByMode(int[] tagIDs, Date interpTime, HDInterpolationMode mode) | List<ImmutablePair<HDRecord, Integer>> queryTagsHisInterRecordByMode(List<Integer> tagIDs, Date interpTime, HDInterpolationMode mode, HDErrcode errcode)
List<HDRecord> queryTagHisInterRecordsByMode(int tagID, Date startTime, Date endTime, long intervalInMs, HDInterpolationMode mode, boolean withError) | List<ImmutablePair<HDRecord,Integer>> queryTagHisInterRecordsByMode(int tagID, Date startTime, Date endTime, long intervalInMs, HDInterpolationMode mode, HDErrcode errCode)
List<HDRecord> queryTagHisInterRecordsByModeAscending(int tagID, Date startTime, Date endTime, long intervalInMs, HDInterpolationMode mode, boolean withError) | List<ImmutablePair<HDRecord,Integer>> queryTagHisInterRecordsByModeAscending(int tagID, Date startTime, Date endTime, long intervalInMs, HDInterpolationMode mode, HDErrcode errCode)
List<HDRecord> queryTagHisInterRecords(int tagID, Date startTime, Date endTime, long intervalInMs) | List<ImmutablePair<HDRecord,Integer>> queryTagHisInterRecords(int tagID, Date startTime, Date endTime, long intervalInMs, HDErrcode errCode)
List<HDRecord> querySnapshotsByIDs(int[] tagIDs, int[] errCodesOut) | List<ImmutablePair<HDRecord, Integer>> querySnapshotsByIDs(List<Integer> tagIDs, HDErrcode errCode)
List<HDRecord> queryTagHisInterRecordsByMode(int tagID, HDInterpolationMode mode, int nRecNum, HDRecord[] HDRecords ) | List<ImmutablePair<HDRecord, Integer>> queryTagHisInterRecordsByMode(int tagID, HDInterpolationMode mode, int nRecNum, List<HDRecord> hdRecords , HDErrcode errCode)

4.统计接口的变化

2.4版本的统计接口分为最大值、最小值等几个，在3.5版本统一改为一个整体的统计接口。其中可以指定statsType是某一种统计类型，支持的统计类型由原来的5种增加到了24种。

统计接口新旧对比

2.4 | 3.6
getTagMax（…） getTagMeanByWeightmode（…） getTagMin（…） getTagPercentGood（…） getTagSum(…) | double getTagStats(int tagID, HDStatsType statsType, Date startTime, Date endTime, HDSampleType sampleType, int samplePeriod, int sampleOffset, double extParam1, double extParam2, String szFilterExpr, int nFilterFailMode)

5.Tag点接口的变化

a.增加扩展属性掩码

b.批量查询返回的点带有独立的错误码，同时增加判断是否全部成功的返回码

c.增加分页查询接口

d.增加适合于全部类型点的条件查询接口

2.4 | 3.6
void addBasicTag(HDBasicTag basicTag, final long mask) | void addBasicTag(HDBasicTag basicTag, final long mask, final long extmask)
void addAlarmTag(HDAlarmTag alarmTag, final long mask) | void addAlarmTag(HDAlarmTag alarmTag, final long mask, final long extmask)
void deleteAlarmTagById(int tagId) | 同
void deleteAlarmTagByName(String tagName) | 同
void deleteBasicTagById(int tagId) | 同
void deleteBasicTagByName(String tagName) | 同
HDAlarmTag getAlarmTagById(int tagId) | 同
HDAlarmTag getAlarmTagByName(String tagName) | 同
HDBasicTag getBasicTagById(int tagId) | 同
HDBasicTag getBasicTagByName(String tagName) | 同
HDTagDataType getTagDataType(int tagID) | 同
int getTagIDByTagName(String tagName) | 同
List<Integer> getTagIDsByTagNames(List<String> tagNameList, int [] errorCodesOut) | List<ImmutablePair<Integer,Integer>> getTagIDsByTagNames(List<String> tagNameList,HDErrcode errCode)
boolean isTagNameExist(String tagName) | 同
void modifyAlarmTag(HDAlarmTag aTag, final long mask) | void modifyAlarmTag(HDAlarmTag aTag, final long mask, final long extmask)
void modifyBasicTag(HDBasicTag basicTag, final long mask) | void modifyBasicTag(HDBasicTag basicTag, final long mask, final long extmask)
List<HDBasicTag> queryBasicTagsByConds(HDQueryTagCondition[] queryConditions, long returnPropMask) | List<HDBasicTag> queryBasicTagsByConds(List<HDQueryTagCondition> queryConditions, long returnPropMask, long nExtPropMask)
List<HDBasicTag> queryBasicTagsSimple( String tagName, String tagDesc, HDTagDataType dataTypeCond, boolean fuzzy) | 同
 | List<HDCommTag> queryTagsByConds(List<HDQueryTagCondition> queryConditions, long tagClassMask, long propMask)
 | List<HDCommTag> querySpecifyPageTagsByConds(List<HDQueryTagCondition> queryConditions, int limit, int offset, long TagClassMask, long PropMask)
 | int queryTagNumCond(HDTagClass tagClass, List<HDQueryTagCondition> queryConditions)

6.存数据接口的变化

a.传入参数数组改为List

b.saveSnapshots接口增加判断是否全部成功的接口，每一条记录对应的错误码作为返回值返回

7.报警接口的变化

a.传入参数数组改为List

b.HdTime结构体重命名为HDJniTime

c.新增报警回调接口

void acknowledgeAlarm(int nAlarmTagID, HdTime alarmTime) | void acknowledgeAlarm(int nAlarmTagID, HDJniTime alarmTime)
void commentAlarm( int nAlarmTagID, HdTime alarmTime, String strComment) | void commentAlarm( int nAlarmTagID, HDJniTime alarmTime, String strComment)
Map<Integer, List<HDAlarmRecord>> queryAlarmGroupRecords(int nAlarmGroupID, HdAlarmQuery queryCond, long nMask) | 同
Map<Integer, List<HDAlarmRecord>> queryAlarmRecords(int[] alarmTagIDs, HdAlarmQuery alarmQuery, long resultPropMask) | Map<Integer, List<HDAlarmRecord>> queryAlarmRecords(List<Integer> alarmTagIDs, HdAlarmQuery alarmQuery, long resultPropMask)
HDAlarmRecord queryAlarmSnapshot(int nAlarmTagID, long nPropMask) | 同
Map<Integer, HDAlarmRecord> queryAlarmSnapshots(int[] alarmTagIDs, long nMask) | Map<Integer, HDAlarmRecord> queryAlarmSnapshots(List<Integer> alarmTagIDs, long nMask)
Map<Integer, List<HDAlarmRecord>> queryAllAlarmRecordsByTime(int[] alarmTagIDs, Date startTime, Date endTime) | Map<Integer, List<HDAlarmRecord>> queryAllAlarmRecordsByTime(List<Integer> alarmTagIDs, Date startTime, Date endTime)
 | List<HDAlarmRecord> GetAlarmcallback()
 | int registerAmCallback()
 | List<HDAlarmRecord> transAlarmlist(int num,List<HDJniAlarmRecord> sourceAlarmlist)


连接管理

Navigation: Java >

连接管理

 Return to chapter overview

类文件：

com.baosight.hdsdk.HDServerFactory

com.baosight.hdsdk.HDConnectionFactory

接口：

·获取实时数据库

·建立连接

·释放连接

·登录服务器


获取实时数据库

Navigation: Java > 连接管理 >

获取实时数据库

 Return to chapter overview

·函数：

public static HDDataServer getHDDataServer(String serverIp, int port,String serverBakIp, int bakport)

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
serverIp | String | 主机ip |
port | int | 主机端口 |
serverBakIp | String | 备机ip | 空字符串
bakport | int | 备机端口 | 0

·返回值：

返回值类型 | 返回值说明
HDDataServer |

·说明：

该接口用于获取由该IP和端口指定的实时数据库服务器类的实例化对象

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.domain.data.HDBasicTag;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

public class IhdJavaSdkExample {

   public static void main(String[] args) {

       // 设置服务器信息

      String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


建立连接

Navigation: Java > 连接管理 >

建立连接

 Return to chapter overview

·函数：

public static HDDataConnection getHDDataConnection(HDDataServer server) throws HDSdkException

参数：

参数名称 | 数据类型 | 参数说明 | 默认值
server | HDDataServer | 实时数据库服务器类的实例化对象 |

·返回值：

返回值类型 | 返回值说明
HDDataConnection |

·异常：

当方法执行出错时，向上抛出HDSdkException异常

·说明：

该接口用于建立并获取实时数据库的数据连接。

调用getHDDataConnection后，不管调用是否成功，接口内部会开启自动重连的线程，调用者可以不用再调用getHDDataConnection，只要保证getHDDataConnection和dispose成对使用即可。

如果调用者需要调用getHDDataConnection直到成功为止，那么失败后再次调用getHDDataConnection前必须先调用dispose

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.domain.data.HDBasicTag;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

public class IhdJavaSdkExample {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

          dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


释放连接

Navigation: Java > 连接管理 >

释放连接

 Return to chapter overview

·函数：

public void dispose() throws HDSdkException

·异常：

当方法执行出错时，向上抛出HDSdkException异常

·说明：

该接口用于关闭数据库连接、释放内存。

需要和getHDDataConnection成对使用。

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.domain.data.HDBasicTag;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

public class IhdJavaSdkExample {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

          dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


登录服务器

Navigation: Java > 连接管理 >

登录服务器

 Return to chapter overview

·函数：

public void loginToServer(String userName, String userPwd) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
userName | String | 用户名 |
userPwd | String | 密码 |

·异常：

当方法执行出错时，向上抛出HDSdkException异常

·说明：

该接口用于登录实时数据库服务器。

注：

1）必须建立到服务器的连接之后进行登录操作，否则抛出异常。

2）对于服务端配置了权限的点或者记录进行SDK调用需要按照实际所需的权限进行登录（即调用该接口），如果未进行登录操作，而直接调用需要权限验证的接口，则将会抛出异常。

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.domain.data.HDBasicTag;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

public class IhdJavaSdkExample {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

          dataConn.loginToServer("admin", "admin");

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


Tag点管理

Navigation: Java >

Tag点管理

 Return to chapter overview

类文件：

com.baosight.hdsdk.HDTagManager

接口：

·添加普通点

·添加报警点配置

·根据Tag名称删除Tag点

·根据TagID删除点

·根据Tag名称删除报警点

·修改普通Tag属性

·根据TagID获取普通类型Tag对象

·根据Tag名称获取普通类型Tag对象

·根据TagID获取报警点对象

·根据Tag名称获取报警点对象

·修改报警点属性

·判断Tag名称是否存在

·根据多个tag名查询tagid

·根据Tag名称获取TagID,可查询各种类型Tag

·简单查询普通Tag点，指定tag名称、描述、数据类型以及是否模糊查询来过滤tag点，名称为空字符串且设置模糊，则查询全部

·根据查询条件查询所有普通类型Tag点

·根据TagID获取其数据类型

·查询所有Tag点属性

·查询数字量状态集名称列表

·根据名称查询数字量状态集具体信息

·根据点名列表查询普通点属性信息

示例：

·调用IHD java sdk接口缓存tagid示例程序及说明

©2015. All Rights Reserved.


添加普通点

Navigation: Java > Tag点管理 >

添加普通点

 Return to chapter overview

·函数：

public void addBasicTag(HDBasicTag basicTag, final long mask, final long extmask) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
basicTag | HDBasicTag | 所要添加的普通点对象，该对象必须至少设置名称、Tag类别、Tag数据类型三个属性 |
mask | long | 所要添加Tag点的属性掩码 可参考HDBasicTagPropMask类 |
extmask | long | 所要添加Tag点的扩展属性掩码，主要是采集相关的属性 |

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于添加一个普通点到数据库中。

根据点属性以及实时数据库的配置进行添加，可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.HDTagManager;

import com.baosight.hdsdk.common.HDBasicTagPropMask;

import com.baosight.hdsdk.domain.data.HDBasicTag;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

public class IhdJavaSdkExample {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

          HDTagManager tm = dataConn.getTagManager();

           HDBasicTag basicTag = new HDBasicTag();

           basicTag.setName("tag1");

           long mask = HDBasicTagPropMask.TAG_PROP_TAG_NAME | HDBasicTagPropMask.TAG_PROP_TAG_CLASS |

                   HDBasicTagPropMask.TAG_PROP_TAG_TYPE ;

           long extMask = 0L;

           tm.addBasicTag(basicTag, mask, extMask);

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


添加报警点配置

Navigation: Java > Tag点管理 >

添加报警点配置

 Return to chapter overview

·函数：

public void addAlarmTag(HDAlarmTag alarmTag, final long mask, final long extmask) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
alarmTag | HDAlarmTag | 所要添加的报警点对象，该对象必须至少设置名称、Tag类别、Tag数据类型、源点四个属性 |
mask | long | 所要添加Tag点的属性掩码 可参考HDBasicTagPropMask类 |
extmask | long | 所要添加Tag点的扩展属性掩码 可参考HDAlarmTagPropMask类 |

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于添加一个报警点到数据库中。

根据点属性以及实时数据库的配置进行添加，可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.HDTagManager;

import com.baosight.hdsdk.common.HDAlarmTagPropMask;

import com.baosight.hdsdk.common.HDBasicTagPropMask;

import com.baosight.hdsdk.domain.alarm.HDAlarmTag;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

public class IhdJavaSdkExample {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDTagManager tm = dataConn.getTagManager();

          HDAlarmTag alarmTag = new HDAlarmTag();

           alarmTag.setName("alarmTag1");

           long mask = HDBasicTagPropMask.TAG_PROP_TAG_NAME | HDBasicTagPropMask.TAG_PROP_TAG_CLASS |

                   HDBasicTagPropMask.TAG_PROP_TAG_TYPE;

           long extMask = HDAlarmTagPropMask.TAG_PROP_SOURCE_TAG;

           tm.addAlarmTag(alarmTag, mask, extMask);

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


根据Tag名称删除Tag点

Navigation: Java > Tag点管理 >

根据Tag名称删除Tag点

 Return to chapter overview

·函数：

public void deleteBasicTagByName(String tagName) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
tagName | String | tag点名称 |

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于从数据库中根据名称删除一个Tag点。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.HDTagManager;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

public class IhdJavaSdkExample {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDTagManager tm = dataConn.getTagManager();

          tm.deleteBasicTagByName("tag1");

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


根据TagID删除点

Navigation: Java > Tag点管理 >

根据TagID删除点

 Return to chapter overview

·函数：

public void deleteTagById(int tagId) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
tagId | int | tag点id |

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于从数据库中根据tag点id删除一个tag点（可以是各种类型）。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.HDTagManager;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

public class IhdJavaSdkExample {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDTagManager tm = dataConn.getTagManager();

          tm.deleteTagById(1);

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


根据Tag名称删除报警点

Navigation: Java > Tag点管理 >

根据Tag名称删除报警点

 Return to chapter overview

·函数：

public void deleteAlarmTagByName(String tagName) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
tagName | String | 报警点名称 |

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于从数据库中根据报警点名称删除一个报警点。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.HDTagManager;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

public class IhdJavaSdkExample {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDTagManager tm = dataConn.getTagManager();

          tm.deleteAlarmTagByName("alarmTag1");

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


修改普通Tag属性

Navigation: Java > Tag点管理 >

修改普通Tag属性

 Return to chapter overview

·函数：

public void modifyBasicTag(HDBasicTag basicTag, final long mask, final long extmask) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
basicTag | HDBasicTag | 所要修改的普通点对象，该对象必须包含TagID，并必须至少包含一个修改的属性项 |
mask | long | 所要添加Tag点的属性掩码 可参考HDBasicTagPropMask类 |
extmask | long | 所要添加Tag点的扩展属性掩码 |

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于修改数据库中一个普通点属性。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.HDTagManager;

import com.baosight.hdsdk.common.HDBasicTagPropMask;

import com.baosight.hdsdk.domain.data.HDBasicTag;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

public class IhdJavaSdkExample {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDTagManager tm = dataConn.getTagManager();

          HDBasicTag basicTag = new HDBasicTag();

           basicTag.setId(1);

           basicTag.setDeviceName("device1");

           long mask = HDBasicTagPropMask.TAG_PROP_DEVICE_NAME;

           long extMask = 0L;

           tm.modifyBasicTag(basicTag, mask, extMask);

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


根据TagID获取普通类型Tag对象

Navigation: Java > Tag点管理 >

根据TagID获取普通类型Tag对象

 Return to chapter overview

·函数：

public HDBasicTag getBasicTagById(int tagId) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
tagId | int | tag点id |

·返回值：

返回值类型 | 返回值说明
HDBasicTag |

·异常：

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于根据TagID获取普通类型Tag对象。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.HDTagManager;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

public class IhdJavaSdkExample {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDTagManager tm = dataConn.getTagManager();

          HDBasicTag basicTag = tm.getBasicTagById(0);

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


根据Tag名称获取普通类型Tag对象

Navigation: Java > Tag点管理 >

根据Tag名称获取普通类型Tag对象

 Return to chapter overview

·函数：

public HDBasicTag getBasicTagByName(String tagName) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
tagName | String | tag点名称 |

·返回值：

返回值类型 | 返回值说明
HDBasicTag |

·异常：

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于根据tag点名称获取普通类型Tag对象。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.HDTagManager;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

public class IhdJavaSdkExample {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDTagManager tm = dataConn.getTagManager();

          HDBasicTag basicTag = tm.getBasicTagByName("tag1");

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


根据TagID获取报警点对象

Navigation: Java > Tag点管理 >

根据TagID获取报警点对象

 Return to chapter overview

·函数：

public HDAlarmTag getAlarmTagById(int tagId) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
tagId | int | tag点id |

·返回值：

返回值类型 | 返回值说明
HDAlarmTag |

·异常：

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于根据tag点id获取报警点对象。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.HDTagManager;

import com.baosight.hdsdk.domain.alarm.HDAlarmTag;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

public class IhdJavaSdkExample {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDTagManager tm = dataConn.getTagManager();

          HDAlarmTag hdAlarmTag = tm.getAlarmTagById(0);

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


根据Tag名称获取报警点对象

Navigation: Java > Tag点管理 >

根据Tag名称获取报警点对象

 Return to chapter overview

·函数：

public HDAlarmTag getAlarmTagByName(String tagName) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
tagName | String | tag点名称 |

·返回值：

返回值类型 | 返回值说明
HDAlarmTag |

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于根据tag点名称获取报警点对象。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.HDTagManager;

import com.baosight.hdsdk.domain.alarm.HDAlarmTag;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

public class IhdJavaSdkExample {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDTagManager tm = dataConn.getTagManager();

          HDAlarmTag hdAlarmTag = tm.getAlarmTagByName("tag1");

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


修改报警点属性

Navigation: Java > Tag点管理 >

修改报警点属性

 Return to chapter overview

·函数：

public void modifyAlarmTag(HDAlarmTag aTag, final long mask, final long extmask) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
aTag | HDAlarmTag | 所要修改的报警点,必须最少TagID，至少包含一个修改的属性项, 报警条件test和动作类型action需配对修改 |
mask | long | 所要添加Tag点属性对应的基本掩码 |
extmask | long | 所要添加Tag点的扩展属性掩码 |

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于修改报警点属性。

创建日期，修改日期，报警点ID，报警点名称和报警点类型不允许修改。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.HDTagManager;

import com.baosight.hdsdk.common.HDAlarmTagPropMask;

import com.baosight.hdsdk.domain.alarm.HDAlarmTag;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

public class IhdJavaSdkExample {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDTagManager tm = dataConn.getTagManager();

          HDAlarmTag alarmTag = new HDAlarmTag();

           alarmTag.setId(1);

           alarmTag.setDesc("报警点1");

           long mask = HDAlarmTagPropMask.TAG_PROP_DESCRIPTOR;

           long extMask = 0L;

           tm.modifyAlarmTag(alarmTag, mask, extMask);

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


判断Tag名称是否存在

Navigation: Java > Tag点管理 >

判断Tag名称是否存在

 Return to chapter overview

·函数：

public boolean isTagNameExist(String tagName) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
tagName | String | tag点名称 |

·返回值：

返回值类型 | 返回值说明
boolean | 存在返回true，不存在返回false

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于判断tag点名称是否存在。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.HDTagManager;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

public class IhdJavaSdkExample {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDTagManager tm = dataConn.getTagManager();

          boolean tagExist = tm.isTagNameExist("tag1");

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


根据多个tag名查询tagid

Navigation: Java > Tag点管理 >

根据多个tag名查询tagid

 Return to chapter overview

·函数：

public List<ImmutablePair<Integer,Integer>> getTagIDsByTagNames(List<String> tagNameList,HDErrcode errCode) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
tagNameList | List<String> | tag名列表 |
errCode | HDErrcode | 根据错误码判断是全部成功还是部分成功 |

·返回值：

返回值类型 | 返回值说明
List<ImmutablePair<Integer,Integer>> | 返回TagID和对应的错误码<TagID,ErrorCode>

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于根据多个tag名查询tagid。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.HDTagManager;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

import com.baosight.hdjni.HDErrcode;

import org.apache.commons.lang3.tuple.ImmutablePair;

import java.util.ArrayList;

import java.util.List;

public class IhdJavaSdkExample {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDTagManager tm = dataConn.getTagManager();

          List<String> tagNameList = new ArrayList<>();

           tagNameList.add("tag1");

           tagNameList.add("tag2");

           HDErrcode errCode = new HDErrcode();

           List<ImmutablePair<Integer,Integer>> returnList = tm.getTagIDsByTagNames(tagNameList, errCode);

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


根据Tag名称获取TagID,可查询各种类型Tag

Navigation: Java > Tag点管理 >

根据Tag名称获取TagID,可查询各种类型Tag

 Return to chapter overview

·函数：

public int getTagIDByTagName(String tagName) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
tagName | String | tag点名称 |

·返回值：

返回值类型 | 返回值说明
int | 查询到的TagID

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

根据Tag名称获取TagID,可查询各种类型Tag。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.HDTagManager;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

public class IhdJavaSdkExample {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDTagManager tm = dataConn.getTagManager();

          int tagId = tm.getTagIDByTagName("tag1");

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


简单查询普通Tag点，指定tag名称、描述、数据类型以及是否模糊查询来过滤tag点，名称为空字符串且设置模糊，则查询全部

Navigation: Java > Tag点管理 >

简单查询普通Tag点，指定tag名称、描述、数据类型以及是否模糊查询来过滤tag点，名称为空字符串且设置模糊，则查询全部

 Return to chapter overview

·函数：

public List<HDBasicTag> queryBasicTagsSimple (String tagName, String tagDesc, HDTagDataType dataTypeCond, boolean fuzzy) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
tagName | String | tag点名称 |
tagDesc | String | tag点描述 |
dataTypeCond | HDTagDataType | 所要进行过滤的数据类型条件（fuzzy[是否模糊查询]不起作用） |
fuzzy | boolean | 是否模糊查询 |

·返回值：

返回值类型 | 返回值说明
List<HDBasicTag> | 返回的普通点属性包括ID、名称、描述和数据类型

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于简单查询普通Tag点，指定tag名称、描述、数据类型以及是否模糊查询来过滤tag点，名称为空字符串且设置模糊，则查询全部。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.HDTagManager;

import com.baosight.hdsdk.common.HDTagDataType;

import com.baosight.hdsdk.domain.data.HDBasicTag;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

public class IhdJavaSdkExample {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDTagManager tm = dataConn.getTagManager();

          List<HDBasicTag> BasicTagList = tm.queryBasicTagsSimple("tag1", "普通点1", HDTagDataType.ALL, true);

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


根据查询条件查询所有普通类型Tag点

Navigation: Java > Tag点管理 >

根据查询条件查询所有普通类型Tag点

 Return to chapter overview

·函数：

public List<HDBasicTag> queryBasicTagsByConds(List<HDQueryTagCondition> queryConditions, long returnPropMask, long nExtPropMask) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
queryConditions | List<HDQueryTagCondition> | 查询条件列表，各个条件之间AND关系 |
returnPropMask | long | tag基本属性掩码，用来指定返回哪些属性 |
nExtPropMask | long | tag扩展属性掩码，用来指定返回哪些属性 |

·返回值：

返回值类型 | 返回值说明
List<HDBasicTag> | 返回查询到的List

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于根据查询条件查询所有普通类型Tag点。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.HDTagManager;

import com.baosight.hdsdk.common.*;

import com.baosight.hdsdk.domain.data.HDBasicTag;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

import java.util.ArrayList;

import java.util.List;

public class IhdJavaSdkExample {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDTagManager tm = dataConn.getTagManager();

          HDQueryTagCondition hdqueryCondition = new HDQueryTagCondition();

           hdqueryCondition.setQueryRelation(HDQueryRelation.LIKE);

           hdqueryCondition.setTagPropID((byte)HDBasicTagPropMask.TAG_COL_TAG_NAME);

           hdqueryCondition.setQueryValue("*");

           List<HDQueryTagCondition> hdqueryCondition_list = new ArrayList<HDQueryTagCondition>();

           hdqueryCondition_list.add(hdqueryCondition);

           long hdtag_class_mask = HDBasicTagPropMask.TAG_PROP_TAGID | HDBasicTagPropMask.TAG_PROP_TAG_NAME |

                   HDBasicTagPropMask.TAG_PROP_DESCRIPTOR ;

           List<HDBasicTag> ret = tm.queryBasicTagsByConds(hdqueryCondition_list, hdtag_class_mask, 0L);

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


根据TagID获取其数据类型

Navigation: Java > Tag点管理 >

根据TagID获取其数据类型

 Return to chapter overview

·函数：

public HDTagDataType getTagDataType(int tagID) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
tagID | int | tag点id |

·返回值：

返回值类型 | 返回值说明
HDTagDataType | 数据类型

·异常：

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于根据TagID获取其数据类型。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.HDTagManager;

import com.baosight.hdsdk.common.*;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

public class IhdJavaSdkExample {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDTagManager tm = dataConn.getTagManager();

          HDTagDataType type = tm.getTagDataType(0);

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


查询所有Tag点属性

Navigation: Java > Tag点管理 >

查询所有Tag点属性

 Return to chapter overview

·函数：

public List<HDCommTag> queryTagsByConds(List<HDQueryTagCondition> queryConditions, long tagClassMask, long propMask) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
queryConditions | List<HDQueryTagCondition> | 查询条件列表，各个条件之间AND关系 |
tagClassMask | long | tag扩展类型属性掩码，用来查询那些种类tag点,掩码使用HDTagClassMask类 |
propMask | long | tag基本属性掩码，用来指定返回哪些属性,掩码使用HDCommTagPropMask类 |

·返回值：

返回值类型 | 返回值说明
List<HDCommTag> | 返回tag点属性列表

·异常：

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于根据查询条件和掩码查询并返回所有符合的Tag点属性。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.HDTagManager;

import com.baosight.hdsdk.common.*;

import com.baosight.hdsdk.domain.data.HDCommTag;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

import java.util.ArrayList;

import java.util.List;

public class IhdJavaSdkAPI {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDTagManager tm = dataConn.getTagManager();

          HDQueryTagCondition hdqueryCondition = new HDQueryTagCondition();

           hdqueryCondition.setQueryRelation(HDQueryRelation.LIKE);

           hdqueryCondition.setTagPropID((byte) HDBasicTagPropMask.TAG_COL_TAG_NAME);

           hdqueryCondition.setQueryValue("*");

           List<HDQueryTagCondition> hdqueryCondition_list = new ArrayList<HDQueryTagCondition>();

           hdqueryCondition_list.add(hdqueryCondition);

           long tagClassMask = HDTagClassMask.HD3_TAG_CLASS_BASIC | HDTagClassMask.HD3_TAG_CLASS_ALARM;

           long propMask = HDCommTagPropMask.TAG_PROP_TAGID | HDCommTagPropMask.TAG_PROP_TAG_NAME |

                   HDCommTagPropMask.TAG_PROP_DESCRIPTOR ;

           List<HDCommTag> ret = tm.queryTagsByConds(hdqueryCondition_list, tagClassMask, propMask);

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


查询数字量状态集名称列表

Navigation: Java > Tag点管理 >

查询数字量状态集名称列表

 Return to chapter overview

·函数：

public List<String> queryDigitalSetNameList() throws HDSdkException

·返回值：

返回值类型 | 返回值说明
List<String> | 数字量状态集的名称列表

·异常：

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于查询并返回数字量状态集的名称列表。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.HDTagManager;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

import java.util.List;

public class IhdJavaSdkExample {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDTagManager tm = dataConn.getTagManager();

          List<String> digitalSetNameList = tm.queryDigitalSetNameList();

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


根据名称查询数字量状态集具体信息

Navigation: Java > Tag点管理 >

根据名称查询数字量状态集具体信息

 Return to chapter overview

·函数：

public Map<Integer, String> queryDigitalSetStateInfo(String digitalSetName) throws HDSdkException

·返回值：

返回值类型 | 返回值说明
Map<Integer, String> | 数字量状态集具体信息

·异常：

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于根据名称查询数字量状态集具体信息，格式为一个状态值和状态名构成的Map。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.HDTagManager;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

import java.util.Map;

public class IhdJavaSdkExample {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDTagManager tm = dataConn.getTagManager();

          String digitalSetName = "dsn1";

           Map<Integer, String> digitalSetNameList = (Map<Integer, String>) tm.queryDigitalSetNameList(digitalSetName);

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


根据点名列表查询普通点属性信息

Navigation: Java > Tag点管理 >

根据点名列表查询普通点属性信息

 Return to chapter overview

·函数：

public Map<HDJniBasicTagProp, Integer> queryBasicTagsInfoByName(List<String> tagNameList) throws HDSdkException

·参数

参数名称 | 数据类型 | 参数说明 | 默认值
tagNameList | List<String> | tag点名称列表 |

·返回值：

返回值类型：

Map<HDJniBasicTagProp, Integer>

返回值说明：

返回tag点属性映射，key为tag点属性对象，value为该点的错误码

返回结构体实例及详解：

HDJniBasicTagProp对象中包含 | Integer对象
m_tagName：点名 | 当前时刻值的查询错误码，如果查询成功，值为0.
m_tagID：点ID
m_tagType：点数据类型
dataType：点类型

·异常：

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于根据提供的点名列表查询普通点属性。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.HDTagManager;

import com.baosight.hdjni.HDJniBasicTagProp;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

import java.util.ArrayList;

import java.util.List;

import java.util.Map;

public class IhdJavaSdkAPI {

public static void main(String[] args) {

String serverIP = "168.2.237.1";

String bakIp = "168.2.237.2";

HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

HDDataConnection hdconn = null;

try {

hdconn = HDConnectionFactory.getHDDataConnection(server);

hdconn.loginToServer("admin", "admin");

System.out.println("连接已建立");

List<String> tagNameList = new ArrayList<>();

tagNameList.add("hdsys_cpu_0");

tagNameList.add("hdsys_mem_0");

HDTagManager tm = new HDTagManager(hdconn);

Map<HDJniBasicTagProp, Integer> resultMap = tm.queryBasicTagsInfoByName(tagNameList);

hdconn.dispose();

} catch (HDSdkException e) {

e.printStackTrace();

}

}

}


调用IHD java sdk接口缓存tagid示例程序及说明

Navigation: Java > Tag点管理 >

调用IHD java sdk接口缓存tagid示例程序及说明

 Return to chapter overview

·函数：

本示例程序通过周期性的tag点表版本号比对来更新java内存缓存中的点表。

·详情：

步骤一

根据IP地址、端口、用户名、密码参数创建ihd连接并登录。如连接成功建立，则调用查询tag点表版本号方法；如连接异常，直接返回，终止程序运行。

步骤二

在查询tag点表版本号方法中，实例化Runnable对象（即周期任务），初始化线程池（任务执行周期可根据需要自行设置）。在周期任务中，比较接口返回的点表版本号和内存中的版本号，如版本号有变化，则调用查询普通点方法。

步骤三

在查询普通点方法中，根据需求设置查询条件，之后查询返回普通点表，并根据tag名称更新内存缓存中的普通点对象（对象为ConcurrentHashMap，其中key为tag名称，value为tag对象，包含tagid属性）。

步骤四

系统停止运行时，（通常指停止tomcat），需要在对应方法中调用stopThreadPoolExecutor和closeConnection方法来停止线程池并关闭ihd连接，以防止内存泄漏。


Tag记录查询接口

Navigation: Java >

Tag记录查询接口

 Return to chapter overview

类文件：

com.baosight.hdsdk.HDDataProvider

接口：

·查询时间段内的记录总数

·按照记录条数和起始时间查询Tag点原始记录

·查询Tag点在某时间段内的原始记录

·根据不同插值类型,查询多个tag在某个时间点的插值记录

·根据不同插值类型，查询Tag点的历史插值记录，查询结果按时间倒序返回

·以不同插值算法，查询Tag点的历史插值记录,查询结果按时间正序返回

·查询Tag点的历史插值记录

·根据TagID查询snapshot记录

·批量查询快照记录

·以不同插值算法，查询Tag点的历史插值记录，返回特定时刻的历史差值记录

©2015. All Rights Reserved.


查询时间段内的记录总数

Navigation: Java > 记录查询接口 >

查询时间段内的记录总数

 Return to chapter overview

·函数：

public int getRawRecordsCount(int tagID, Date startTime, Date endTime) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
tagID | int | tag点id |
startTime | Date | 起始时间 |
endTime | Date | 终止时间 |

·返回值：

返回值类型 | 返回值说明
int | 记录条数

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于根据TagID、起始时间、终止时间获时间段内的记录总数。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDDataProvider;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

public class IhdJavaSdkQueryTagVal {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDDataProvider dp = new HDDataProvider(dataConn);

          SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

           Date startTime = dateFormat.parse("2025-01-01 12:00:00");

           Date endTime = dateFormat.parse("2025-01-01 13:00:00");

           int count = dp.getRawRecordsCount(1, startTime, endTime);

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       } catch (ParseException e) {

           throw new RuntimeException(e);

       }

   }

}


按照记录条数和起始时间查询Tag点原始记录

Navigation: Java > 记录查询接口 >

按照记录条数和起始时间查询Tag点原始记录

 Return to chapter overview

·函数：

public List<HDRecord> queryTagRawRecordsByCount(int tagID, Date startTime, boolean backward, int recordCount) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
tagID | int | tag点id |
startTime | Date | 起始时间 |
backward | boolean | 向前还是向后查询；true-向后查询(查询出的记录时间小于起始时间)；false-向前查询(记录时间大于起始时间) |
recordCount | int | 所要查询的总条数，必须在1~65535之间 |

·返回值：

返回值类型 | 返回值说明
List<HDRecord> | Tag点原始记录

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常（总条数必须在1-65535之间）

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于按照记录条数和起始时间查询Tag点原始记录，总条数必须在1-65535之间。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDDataProvider;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.domain.data.HDRecord;

import com.baosight.hdsdk.exception.HDSdkException;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.List;

public class IhdJavaSdkQueryTagVal {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDDataProvider dp = new HDDataProvider(dataConn);

          SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

           Date startTime = dateFormat.parse("2025-01-01 12:00:00");

           List<HDRecord> RECORDlIST = dp.queryTagRawRecordsByCount(1, startTime, true, 100);

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       } catch (ParseException e) {

           throw new RuntimeException(e);

       }

   }

}


查询Tag点在某时间段内的原始记录

Navigation: Java > 记录查询接口 >

查询Tag点在某时间段内的原始记录

 Return to chapter overview

·函数：

public List<HDRecord> queryTagHisRawRecords(int tagID, Date startTime, Date endTime) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
tagID | int | tag点id |
startTime | Date | 起始时间 |
endTime | Date | 终止时间 |

·返回值：

返回值类型 | 返回值说明
List<HDRecord> | 记录列表，按照时间最新排列靠前排序

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于查询Tag点在某时间段内的原始记录，如果该时间段记录超过65535条记录，则只返回65535条。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDDataProvider;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.domain.data.HDRecord;

import com.baosight.hdsdk.exception.HDSdkException;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.List;

public class IhdJavaSdkQueryTagVal {

   // 查询Tag点在某时间段内的原始记录当前尝试次数

   private static int currentTry = 1;

   // 查询Tag点在某时间段内的原始记录最大尝试次数

   private static final int maxTries = 3;

   public void queryTagHisRawRecords() {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDDataProvider dp = new HDDataProvider(dataConn);

          SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

           Date startTime = dateFormat.parse("2025-01-01 12:00:00");

           Date endTime = dateFormat.parse("2025-01-01 13:00:00");

           List<HDRecord> rawRecordsList = new ArrayList<>();

           while(true) {

               List<HDRecord> tempRawRecordList = dp.queryTagHisRawRecords(1, startTime, endTime);

               rawRecordsList.addAll(tempRawRecordList);

               if (tempRawRecordList.size() == 65535) { // 时间范围内记录条数超出65535，以最后一条记录的timestamp作为endTime继续查询

                   endTime = dateFormat.parse(tempRawRecordsList.get(65534).getTimeStampStr());

               } else {

                   break;

               }

           }

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

           try { // 查历史值异常后，休眠三秒进行重试

               System.out.println("【查询Tag点在某时间段内的原始记录】接口第" + currentTry + "次调用失败， 执行重试");

               Thread.sleep(3000);

               currentTry ++;

               if (currentTry <= maxTries) {

                   queryTagHisRawRecords();

               } else {

                   System.out.println("【查询Tag点在某时间段内的原始记录】接口重试调用已达" + maxTries + "次， 查询失败");

                   currentTry = 1; // 接口调用当前尝试次数复位

               }

           } catch (InterruptedException ex) {

               ex.printStackTrace();

           }

       } catch (ParseException e) {

           throw new RuntimeException(e);

       }

   }

}


根据不同插值类型,查询多个tag在某个时间点的插值记录

Navigation: Java > 记录查询接口 >

根据不同插值类型,查询多个tag在某个时间点的插值记录

 Return to chapter overview

·函数：

public List<ImmutablePair<HDRecord, Integer>> queryTagsHisInterRecordByMode(List<Integer> tagIDs, Date interpTime,HDInterpolationMode mode, HDErrcode errcode) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
tagIDs | List<Integer> | tag点id列表 |
interpTime | Date | 插值时间点 |
mode | HDInterpolationMode | 插值方式，参考HDInterpolationMode 可选值: HDInterpolationMode.FORWARD 前向插值方式（当前时刻有值，则取当前时刻的值，当前时刻无值，则取前一个时刻的值） HDInterpolationMode.INVALID 无效插值方式 HDInterpolationMode.LINEAR 线性插值方式（当前时刻有值，则取当前时刻的值，当前时刻无值，则根据前一个时刻的值和后一个时刻的值计算线性值） |
errcode | HDErrcode | 查询结果的总体错误码,可以根据本参数判断是否为部分成功 |

·返回值：

返回值类型 | 返回值说明
List<ImmutablePair<HDRecord, Integer>> | 返回查询到的记录和对应的错误码

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于根据不同插值类型,查询多个tag在某个时间点的插值记录。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDDataProvider;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.common.HDInterpolationMode;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.domain.data.HDRecord;

import com.baosight.hdsdk.exception.HDSdkException;

import org.apache.commons.lang3.tuple.ImmutablePair;

import com.baosight.hdjni.HDErrcode;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

public class IhdJavaSdkQueryTagVal {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDDataProvider dp = new HDDataProvider(dataConn);

          List<Integer> tagIDsList = new ArrayList<>();

           tagIDsList.add(1);

           tagIDsList.add(2);

           SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

           Date interpTime = dateFormat.parse("2025-01-01 12:00:00");

           HDErrcode errCode = new HDErrcode();

           List<ImmutablePair<HDRecord, Integer>> interRecordsList = dp.queryTagsHisInterRecordByMode(tagIDsList, interpTime, HDInterpolationMode.FORWARD, errCode);

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       } catch (ParseException e) {

           throw new RuntimeException(e);

       }

   }

}


根据不同插值类型，查询Tag点的历史插值记录，查询结果按时间倒序返回

Navigation: Java > 记录查询接口 >

根据不同插值类型，查询Tag点的历史插值记录，查询结果按时间倒序返回

 Return to chapter overview

·函数：

public List<ImmutablePair<HDRecord,Integer>> queryTagHisInterRecordsByMode(int tagID, Date startTime, Date endTime, long intervalInMs, HDInterpolationMode mode, HDErrcode errCode) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
tagId | int | tag点id |
startTime | Date | 起始时间 |
endTime | Date | 终止时间 |
intervalInMs | long | 插值时间间隔，单位毫秒 |
mode | HDInterpolationMode | 插值方式，参考HDInterpolationMode 可选值: HDInterpolationMode.FORWARD 前向插值方式（当前时刻有值，则取当前时刻的值，当前时刻无值，则取前一个时刻的值） HDInterpolationMode.INVALID 无效插值方式 HDInterpolationMode.LINEAR 线性插值方式（当前时刻有值，则取当前时刻的值，当前时刻无值，则根据前一个时刻的值和后一个时刻的值计算线性值） |
errcode | HDErrcode | 查询结果的总体错误码,可以根据本参数判断是否为部分成功 |

·返回值：

返回值类型 | 返回值说明
List<ImmutablePair<HDRecord,Integer>> | 返回查询到的记录和对应的错误码

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于根据不同插值类型，查询Tag点的历史插值记录，查询结果按时间倒序返回。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDDataProvider;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.common.HDInterpolationMode;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.domain.data.HDRecord;

import com.baosight.hdsdk.exception.HDSdkException;

import org.apache.commons.lang3.tuple.ImmutablePair;

import com.baosight.hdjni.HDErrcode;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.List;

public class IhdJavaSdkQueryTagVal {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDDataProvider dp = new HDDataProvider(dataConn);

          SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

           Date startTime = dateFormat.parse("2025-01-01 12:00:00");

           Date endTime = dateFormat.parse("2025-01-01 13:00:00");

           HDErrcode errCode = new HDErrcode();

           List<ImmutablePair<HDRecord, Integer>> interRecordsList = dp.queryTagHisInterRecordsByMode(1, startTime, endTime, 1000, HDInterpolationMode.FORWARD, errCode);

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       } catch (ParseException e) {

           throw new RuntimeException(e);

       }

   }

}


以不同插值算法，查询Tag点的历史插值记录,查询结果按时间正序返回

Navigation: Java > 记录查询接口 >

以不同插值算法，查询Tag点的历史插值记录,查询结果按时间正序返回

 Return to chapter overview

·函数：

public List<ImmutablePair<HDRecord,Integer>> queryTagHisInterRecordsByModeAscending(int tagID, Date startTime, Date endTime, long intervalInMs, HDInterpolationMode mode, HDErrcode errCode) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
tagId | int | tag点id |
startTime | Date | 起始时间 |
endTime | Date | 终止时间 |
intervalInMs | long | 插值时间间隔，单位毫秒 |
mode | HDInterpolationMode | 插值方式，参考HDInterpolationMode 可选值: HDInterpolationMode.FORWARD 前向插值方式（当前时刻有值，则取当前时刻的值，当前时刻无值，则取前一个时刻的值） HDInterpolationMode.INVALID 无效插值方式 HDInterpolationMode.LINEAR 线性插值方式（当前时刻有值，则取当前时刻的值，当前时刻无值，则根据前一个时刻的值和后一个时刻的值计算线性值） |
errcode | HDErrcode | 查询结果的总体错误码,可以根据本参数判断是否为部分成功 |

·返回值：

返回值类型 | 返回值说明
List<ImmutablePair<HDRecord,Integer>> | 返回查询到的记录和对应的错误码

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于以不同插值算法，查询Tag点的历史插值记录,查询结果按时间正序返回。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDDataProvider;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.common.HDInterpolationMode;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.domain.data.HDRecord;

import com.baosight.hdsdk.exception.HDSdkException;

import org.apache.commons.lang3.tuple.ImmutablePair;

import com.baosight.hdjni.HDErrcode;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.List;

public class IhdJavaSdkQueryTagVal {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDDataProvider dp = new HDDataProvider(dataConn);

          SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

           Date startTime = dateFormat.parse("2025-01-01 12:00:00");

           Date endTime = dateFormat.parse("2025-01-01 13:00:00");

           HDErrcode errCode = new HDErrcode();

           List<ImmutablePair<HDRecord, Integer>> interRecordsList = dp.queryTagHisInterRecordsByModeAscending(1, startTime, endTime, 1000, HDInterpolationMode.FORWARD, errCode);

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       } catch (ParseException e) {

           throw new RuntimeException(e);

       }

   }

}


查询Tag点的历史插值记录

Navigation: Java > 记录查询接口 >

查询Tag点的历史插值记录

 Return to chapter overview

·函数：

public List<ImmutablePair<HDRecord,Integer>> queryTagHisInterRecords(int tagID, Date startTime, Date endTime, long intervalInMs, HDErrcode errCode) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
tagId | int | tag点id |
startTime | Date | 起始时间 |
endTime | Date | 终止时间 |
intervalInMs | long | 插值时间间隔，单位毫秒 |
errcode | HDErrcode | 查询结果的总体错误码,可以根据本参数判断是否为部分成功 |

·返回值：

返回值类型 | 返回值说明
List<ImmutablePair<HDRecord,Integer>> | 返回查询到的记录列表和对应的错误码，按照时间倒序排列（endTime的序列索引值较小）

·异常：

参数为空或者开始时间大于结束时间或者取值间隔小于等于0；如果数据记录个数超过65535，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于查询Tag点的历史插值记录，默认调用后台的线性插值算法。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDDataProvider;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.common.HDInterpolationMode;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.domain.data.HDRecord;

import com.baosight.hdsdk.exception.HDSdkException;

import org.apache.commons.lang3.tuple.ImmutablePair;

import com.baosight.hdjni.HDErrcode;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.List;

public class IhdJavaSdkQueryTagVal {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDDataProvider dp = new HDDataProvider(dataConn);

          SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

           Date startTime = dateFormat.parse("2025-01-01 12:00:00");

           Date endTime = dateFormat.parse("2025-01-01 13:00:00");

           HDErrcode errCode = new HDErrcode();

           List<ImmutablePair<HDRecord, Integer>> interRecordsList = dp.queryTagHisInterRecords(1, startTime, endTime, 1000, errCode);

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       } catch (ParseException e) {

           throw new RuntimeException(e);

       }

   }

}


根据TagID查询snapshot记录

Navigation: Java > 记录查询接口 >

根据TagID查询snapshot记录

 Return to chapter overview

·函数：

public HDRecord querySnapshotByTagID(int tagID) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
tagId | int | tag点id |

·返回值：

返回值类型 | 返回值说明
HDRecord | 返回快照数据记录

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于根据TagID查询snapshot记录。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDDataProvider;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.domain.data.HDRecord;

import com.baosight.hdsdk.exception.HDSdkException;

public class IhdJavaSdkQueryTagVal {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDDataProvider dp = new HDDataProvider(dataConn);

          HDRecord hdRecord = dp.querySnapshotByTagID(1);

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

}


批量查询快照记录

Navigation: Java > 记录查询接口 >

批量查询快照记录

 Return to chapter overview

·函数：

public List<ImmutablePair<HDRecord, Integer>> querySnapshotsByIDs(List<Integer> tagIDs, HDErrcode errCode) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
tagIDs | List<Integer> | tag点id列表 |
errcode | HDErrcode | [out]总体错误码，用来判断部分成功 |

·返回值：

返回值类型 | 返回值说明
List<ImmutablePair<HDRecord, Integer>> | 实时记录和对应的错误码，按照ID数组顺序

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于批量查询快照记录。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdjni.HDErrcode;

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDDataProvider;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.domain.data.HDRecord;

import com.baosight.hdsdk.exception.HDSdkException;

import org.apache.commons.lang3.tuple.ImmutablePair;

import java.util.ArrayList;

import java.util.List;

public class IhdJavaSdkQueryTagVal {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDDataProvider dp = new HDDataProvider(dataConn);

          List<Integer> tagIDsList = new ArrayList<>();

           tagIDsList.add(1);

           tagIDsList.add(2);

           HDErrcode errCode = new HDErrcode();

           List<ImmutablePair<HDRecord, Integer>> snapshotsList = dp.querySnapshotsByIDs(tagIDsList, errCode);

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

}


以不同插值算法，查询Tag点的历史插值记录，返回特定时刻的历史差值记录

Navigation: Java > 记录查询接口 >

以不同插值算法，查询Tag点的历史插值记录，返回特定时刻的历史差值记录

 Return to chapter overview

·函数：

public List<ImmutablePair<HDRecord, Integer>> queryTagHisInterRecordsByMode(int tagID, HDInterpolationMode mode, int nRecNum, List<HDRecord> hdRecords , HDErrcode errCode) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
tagId | int | tag点id |
mode | HDInterpolationMode | 插值方式，参考HDInterpolationMode 可选值: HDInterpolationMode.FORWARD 前向插值方式（当前时刻有值，则取当前时刻的值，当前时刻无值，则取前一个时刻的值） HDInterpolationMode.LINEAR 线性插值方式（当前时刻有值，则取当前时刻的值，当前时刻无值，则根据前一个时刻的值和后一个时刻的值计算线性值） |
hdRecords | List<HDRecord> | 所要查询的记录List 所要写入的记录对象，必须设置索要查询的记录时间 |
errcode | HDErrcode | 查询结果的总体错误码,可以根据本参数判断是否为部分成功 |

·返回值：

返回值类型：

List<ImmutablePair<HDRecord,Integer>>

返回值说明：

返回查询历史插值记录结果和对应的错误码。

返回结构体实例及详解：

HDRecord对象中包含 | 返回值说明
second：当前查询时刻的秒参数 | 当前时刻值的查询错误码，如果查询成功，值为0.
microSecond：当前查询时刻的毫秒参数
quality：tag点数据质量
dataType：tag点数据类型
valueStr：tag点值，如查询出错，则为错误码
belongTagID：tagid

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于以不同插值算法，查询Tag点的历史插值记录，返回特定时刻的历史差值记录。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdjni.HDErrcode;

import com.baosight.hdsdk.common.*;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.domain.data.HDRecord;

import com.baosight.hdsdk.exception.HDSdkException;

import org.apache.commons.lang3.tuple.ImmutablePair;

import java.util.ArrayList;

import java.util.List;

public class IhdJavaSdkQueryTagVal {

   public static void main(String[] args) {

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection hdconn = null;

       try {

           hdconn = HDConnectionFactory.getHDDataConnection(server);

           hdconn.loginToServer("admin", "admin");

          HDErrcode errCode = new HDErrcode();

           List<HDRecord> hdRecordList = new ArrayList<>();

           HDDataProvider dp = new HDDataProvider(hdconn);

           // 此示例模拟了单点查询100个时刻的值

           long second = 1739858220L;

           for (int i = 0; i < 100; i ++) {

               HDRecord hdRecord = new HDRecord();

               hdRecord.setSecond(second);

               short microSecond = 0;

               hdRecord.setMicroSecond(microSecond);

               hdRecordList.add(hdRecord);

               second++;

           }

           List<ImmutablePair<HDRecord, Integer>> snapshotsList = dp.queryTagHisInterRecordsByMode(1, HDInterpolationMode.FORWARD, hdRecordList, errCode);

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


记录存储

Navigation: Java >

记录存储

 Return to chapter overview

类文件:

com.baosight.hdsdk.HDDataWriter

接口：

·根据Tag名称写入Tag记录

·写入Tag点记录值

·批量写入记录

·修改原始值

·乱序写入Tag点记录值

·乱序写入多个Tag点记录

©2015. All Rights Reserved.


根据Tag名称写入Tag记录

Navigation: Java > 记录存储接口 >

根据Tag名称写入Tag记录

 Return to chapter overview

·函数：

public void saveSnapshotByName(String tagName, HDRecord snapRecord) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
tagName | String | tag点名称 |
snapRecord | HDRecord | 所要写入的记录对象，必须设置数据类型、数据质量、记录时间和值 |

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于根据Tag名称写入Tag记录。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDDataWriter;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.domain.data.HDRecord;

import com.baosight.hdsdk.exception.HDSdkException;

import java.util.Date;

public class IhdJavaSdkWriteTagVal {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDDataWriter dw = new HDDataWriter(dataConn);

          HDRecord record = new HDRecord();

           Date now = new Date();

           record.setSecond(now.getTime() / 1000);

           record.setQuality(192);       //此处数据质量必须为192

           record.setValueStr("1");

           dw.saveSnapshotByName("tag1", record);

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


写入Tag点记录值

Navigation: Java > 记录存储接口 >

写入Tag点记录值

 Return to chapter overview

·函数：

public void saveSnapshot(int tagID, HDRecord snapRecord) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
tagID | int | tag点id |
snapRecord | HDRecord | 所要写入的记录对象，必须设置数据类型、数据质量、记录时间和值 |

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于写入Tag点记录值，注：如果记录的数据类型与TagID的数据类型不一致，将使用各数据类型的默认值进行写入。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDDataWriter;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.domain.data.HDRecord;

import com.baosight.hdsdk.exception.HDSdkException;

import java.util.Date;

public class IhdJavaSdkWriteTagVal {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDDataWriter dw = new HDDataWriter(dataConn);

          HDRecord record = new HDRecord();

           Date now = new Date();

           record.setSecond(now.getTime() / 1000);

           record.setQuality(192);       //此处数据质量必须为192

           record.setValueStr("1");

           dw.saveSnapshot(1, record);

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


批量写入记录

Navigation: Java > 记录存储接口 >

批量写入记录

 Return to chapter overview

·函数：

public List<Integer> saveSnapshots(List<Integer> tagIDArray, List<HDRecord> snapRecords, HDErrcode errCode) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
tagIDArray | List<Integer> | 所要写入的ID序列 |
snapRecords | List<HDRecord> | 所要写入的记录数组 |
errCode | HDErrcode | [out]用来判断成功或者部分成功的错误码 |

·返回值

返回值类型 | 返回值说明
List<Integer> | 与每一条记录对应的错误码

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于批量写入记录。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdjni.HDErrcode;

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDDataWriter;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.domain.data.HDRecord;

import com.baosight.hdsdk.exception.HDSdkException;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

public class IhdJavaSdkWriteTagVal {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDDataWriter dw = new HDDataWriter(dataConn);

          List<Integer> tagIDArray = new ArrayList<>();

           tagIDArray.add(1);

           tagIDArray.add(2);

           List<HDRecord> HDRecordList = new ArrayList<>();

           for (int i = 1; i <= 2; i ++) {

               HDRecord record = new HDRecord();

               Date now = new Date();

               record.setSecond(now.getTime() / 1000);

               record.setQuality(192);       //此处数据质量必须为192

               record.setValueStr("" + i);

               HDRecordList.add(record);

           }

           List<Integer> errCodeList = dw.saveSnapshots(tagIDArray, HDRecordList, new HDErrcode());

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


修改原始值

Navigation: Java > 记录存储接口 >

修改原始值

 Return to chapter overview

·函数：

public void modifyRawRecord(int tagID, HDRecord newRecord) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
tagID | int | 所要写入的TagID |
newRecord | HDRecord | 所要写入的记录对象，必须设置数据质量、记录时间和值 |

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于修改原始值。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDDataWriter;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.domain.data.HDRecord;

import com.baosight.hdsdk.exception.HDSdkException;

import java.util.Date;

public class IhdJavaSdkWriteTagVal {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDDataWriter dw = new HDDataWriter(dataConn);

          HDRecord record = new HDRecord();

           Date now = new Date();

           record.setSecond(now.getTime() / 1000);

           record.setQuality(192);       //此处数据质量必须为192

           record.setValueStr("2");

           dw.modifyRawRecord(1, record);

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


乱序写入多个Tag点记录

Navigation: Java > 记录存储接口 >

乱序写入多个Tag点记录

 Return to chapter overview

·函数：

public List<Integer> saveTagsDisorderSnapshots(List<Integer> tagIDArray, List<HDRecord> snapRecords, HDErrcode errCode) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
tagIDArray | List<Integer> | 所要写入的TagID列表 |
snapRecords | List<HDRecord> | 所要写入的记录数组 所要写入的记录对象，必须设置数据质量、记录时间和值 |
errCode | HDErrcode | 用于判断全部成功还是部分成功 |

·返回值

返回值类型 | 返回值说明
List<Integer> | 与每一条记录对应的错误码

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于乱序写入多个Tag点记录值。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdjni.HDErrcode;

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDDataWriter;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.domain.data.HDRecord;

import com.baosight.hdsdk.exception.HDSdkException;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

public class IhdJavaSdkWriteTagVal {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDDataWriter dw = new HDDataWriter(dataConn);

          List<Integer> tagIDArray = new ArrayList<>();

           tagIDArray.add(1);

           tagIDArray.add(2);

           List<HDRecord> HDRecordList = new ArrayList<>();

           for (int i = 1; i <= 2; i ++) {

               HDRecord record = new HDRecord();

               Date now = new Date();

               record.setSecond(now.getTime() / 1000);

               record.setQuality(192);       //此处数据质量必须为192

               record.setValueStr("" + i);

               HDRecordList.add(record);

           }

           List<Integer> errCodeList = dw.saveTagsDisorderSnapshots(tagIDArray, HDRecordList, new HDErrcode());

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


乱序写入Tag点记录值

Navigation: Java > 记录存储接口 >

乱序写入Tag点记录值

 Return to chapter overview

·函数：

public void saveDisorderSnapshots(int tagID, List<HDRecord> snapRecords) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
tagID | int | 所要写入的TagID |
snapRecords | List<HDRecord> | 所要写入的记录数组 所要写入的记录对象，必须设置数据质量、记录时间和值 |

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于乱序写入Tag点记录值。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDDataWriter;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.domain.data.HDRecord;

import com.baosight.hdsdk.exception.HDSdkException;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

public class IhdJavaSdkWriteTagVal {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDDataWriter dw = new HDDataWriter(dataConn);

          List<HDRecord> snapRecords = new ArrayList<>();

           for (int i = 1; i <= 2; i ++) {

               HDRecord record = new HDRecord();

               Date now = new Date();

               record.setSecond(now.getTime() / 1000);

               record.setQuality(192);       //此处数据质量必须为192

               record.setValueStr("" + i);

               snapRecords.add(record);

           }

           dw.saveDisorderSnapshots(1, snapRecords);

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


统计分析接口

Navigation: Java >

统计分析接口

 Return to chapter overview

类文件:

com.baosight.hdsdk.HDDataAnalysis

接口：

·包括所有统计计算的总接口


包括所有统计计算的总接口

Navigation: Java > 统计分析接口 >

包括所有统计计算的总接口

 Return to chapter overview

·函数：

public double getTagStats(int tagID, HDStatsType statsType, Date startTime, Date endTime,HDSampleType sampleType, int samplePeriod, int sampleOffset,double extParam1, double extParam2, String szFilterExpr, int nFilterFailMode) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
tagID | int | 所要计算的TagID |
statsType | HDStatsType | 统计类型 |
startTime | Date | 开始时间，闭区间 |
endTime | Date | 结束时间，开区间 |
sampleType | HDSampleType | 采样类型： 原始记录，线性插值，前向插值。 |
samplePeriod | int | 采样周期： 采样类型为插值时，插值点的间隔为nPeriod, 单位为秒。 采样类型不是插值时，该参数可设为0。 |
sampleOffset | int | 采样偏移量： 采样模式为插值时，插值点为startTime+nOffset,startTime+nOffset+nPeriod, 单位为秒。 不使用偏移量时，该参数可设为0。 采样类型不是插值时，该参数可设为0。 |
extParam1 | double | 参数一： 计数和计时的参数, 值变化的参数，区间变化的第一个参数，在区间不在区间的第一个参数。 统计类型不是计时或者计数时，该参数可设为0。 |
extParam2 | double | 参数二： 计数和计时的参数，区间变化的第二个参数，在区间不在区间的第二个参数。 统计类型不是计时或者计数时，该参数可设为0。 |
szFilterExpr | String | 数据过滤表达式。不使用过滤表达式时，该参数可设为空字符串。 |
nFilterFailMode | int | 过滤失败时对采样数据的处理，0为过滤采样数据，1为不过滤采样数据。不使用过滤表达式时，该参数可设为0。 |
useBadValue | boolean | 是否使用bad value |

·返回值

返回值类型 | 返回值说明
double | 统计结果

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于所有统计计算操作。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDDataAnalysis;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.common.HDSampleType;

import com.baosight.hdsdk.common.HDStatsType;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

public class Calculate {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDDataAnalysis da = new HDDataAnalysis(dataConn);

          int tagID = 1;

           SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

           Date startTime = dateFormat.parse("2025-01-01 12:00:00");

           Date endTime = dateFormat.parse("2025-01-01 13:00:00");

           int samplePeriod = 10;

           int sampleOffset = 10;

           double extParam1 = 0.0;

           double extParam2 = 0.0;

           String szFilterExpr = "";

           int nFilterFailMode = 0;

           boolean useBadValue = true;

           double result = da.getTagStats(tagID, HDStatsType.HD_STATS_TYPE_MAX, startTime, endTime, HDSampleType.HD_STATS_SAMPLE_TYPE_RAW, samplePeriod, sampleOffset, extParam1, extParam2, szFilterExpr, nFilterFailMode, useBadValue);

           dataConn.dispose();

       } catch (HDSdkException | ParseException e) {

           e.printStackTrace();

       }

   }

}


报警相关

Navigation: Java >

报警相关

 Return to chapter overview

类文件：

com.baosight.hdsdk.HDAlarmManager

接口：

·根据报警时间确认报警

·根据报警时间注释报警记录

·根据起止时间查询所有报警

·查询实时数据库历史报警记录

·查询某个报警点的最新报警记录

·查询多个报警点的最新报警记录

·查询某个报警组下报警记录


根据报警时间确认报警

Navigation: Java > 报警相关 >

根据报警时间确认报警

 Return to chapter overview

·函数：

public void acknowledgeAlarm(int nAlarmTagID, HDJniTime alarmTime) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
nAlarmTagID | int | 报警点TagID |
alarmTime | HDJniTime | 报警时间 |

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于根据报警时间确认报警。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdjni.HDJniTime;

import com.baosight.hdsdk.HDAlarmManager;

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

public class IhdJavaSdkAlarm {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDAlarmManager am = new HDAlarmManager(dataConn);

          SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

           Date date = dateFormat.parse("2025-01-01 12:00:00");

           HDJniTime time = HDJniTime.valueOf(date);

           am.acknowledgeAlarm(1, time);

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       } catch (ParseException e) {

           throw new RuntimeException(e);

       }

   }

}


根据报警时间注释报警记录

Navigation: Java > 报警相关 >

根据报警时间注释报警记录

 Return to chapter overview

·函数：

public void commentAlarm( int nAlarmTagID, HDJniTime alarmTime, String strComment) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
nAlarmTagID | int | 报警点TagID |
alarmTime | HDJniTime | 报警时间 |
strComment | String | 报警注释字符串 |

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于根据报警时间注释报警记录。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdjni.HDJniTime;

import com.baosight.hdsdk.HDAlarmManager;

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

public class IhdJavaSdkAlarm {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDAlarmManager am = new HDAlarmManager(dataConn);

          SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

           Date date = dateFormat.parse("2025-01-01 12:00:00");

           HDJniTime time = HDJniTime.valueOf(date);

           am.commentAlarm(1, time, "this is alarm1");

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       } catch (ParseException e) {

           throw new RuntimeException(e);

       }

   }

}


根据起止时间查询所有报警

Navigation: Java > 报警相关 >

根据起止时间查询所有报警

 Return to chapter overview

·函数：

public Map<Integer, List<HDAlarmRecord>> queryAllAlarmRecordsByTime(List<Integer> alarmTagIDs, Date startTime, Date endTime) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
alarmTagIDs | List<Integer> | 所要查詢的报警点ID数组 |
startTime | Date | 所要查询开始时间 |
endTime | Date | 所要查询结束时间 |

·返回值

返回值类型 | 返回值说明
Map<Integer, List<HDAlarmRecord>> | 该报警记录的所有属性

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于根据起止时间查询所有报警（确认/未确认；恢复/未恢复；注释/未注释；各个优先级；各个类型）。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDAlarmManager;

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.domain.alarm.HDAlarmRecord;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

import java.util.Map;

public class IhdJavaSdkAlarm {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDAlarmManager am = new HDAlarmManager(dataConn);

          List<Integer> alarmTagIDs = new ArrayList<>();

           alarmTagIDs.add(1);

           alarmTagIDs.add(2);

           SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

           Date startTime = dateFormat.parse("2025-01-01 12:00:00");

           Date endTime =  dateFormat.parse("2025-01-01 13:00:00");

           Map<Integer, List<HDAlarmRecord>> resultMap = am.queryAllAlarmRecordsByTime(alarmTagIDs, startTime, endTime);

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       } catch (ParseException e) {

           throw new RuntimeException(e);

       }

   }

}


查询实时数据库历史报警记录

Navigation: Java > 报警相关 >

查询实时数据库历史报警记录

 Return to chapter overview

·函数：

public Map<Integer, List<HDAlarmRecord>> queryAlarmRecords(List<Integer> alarmTagIDs, HdAlarmQuery alarmQuery, long resultPropMask) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
alarmTagIDs | List<Integer> | 所要查詢的报警点ID数组 |
alarmQuery | HdAlarmQuery | 查询条件对象，包含了起止时间、恢复、报警类型、是否确认等 |
resultPropMask | long | 所要返回的报警记录的属性掩码，请参照HDAlarmRecordPropMask类 |

·返回值

返回值类型 | 返回值说明
Map<Integer, List<HDAlarmRecord>> | 报警点ID与对应的报警记录列表的Map

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于根据起止时间查询所有报警（确认/未确认；恢复/未恢复；注释/未注释；各个优先级；各个类型）。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDAlarmManager;

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.domain.alarm.HDAlarmRecord;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

import java.util.ArrayList;

import java.util.List;

import java.util.Map;

public class IhdJavaSdkAlarm {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDAlarmManager am = new HDAlarmManager(dataConn);

          List<Integer> alarmTagIDs = new ArrayList<>();

           alarmTagIDs.add(1);

           alarmTagIDs.add(2);

           HdAlarmQuery hdAlarmQuery = new HdAlarmQuery();

           hdAlarmQuery.nTypeMask = HDAlarmRecordPropMask.MASK_ALARM_TYPE_HIGH;

           long resultPropMask = HDAlarmRecordPropMask.ALARM_PRIORITY_FIRST;

           Map<Integer, List<HDAlarmRecord>> resultMap = am.queryAlarmRecords(alarmTagIDs, hdAlarmQuery, resultPropMask);

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


查询某个报警点的最新报警记录

Navigation: Java > 报警相关 >

查询某个报警点的最新报警记录

 Return to chapter overview

·函数：

public HDAlarmRecord queryAlarmSnapshot(int nAlarmTagID, long nPropMask) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
nalarmTagID | int | 报警点TagID |
nPropMask | long | Tag点的属性掩码，可参考HDAlarmRecordPropMask类 |

·返回值

返回值类型 | 返回值说明
HDAlarmRecord | 返回报警点的最新报警记录

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于查询某个报警点的最新报警记录。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDAlarmManager;

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.common.HDAlarmRecordPropMask;

import com.baosight.hdsdk.domain.alarm.HDAlarmRecord;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

public class IhdJavaSdkAlarm {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDAlarmManager am = new HDAlarmManager(dataConn);

          long nPropMask = HDAlarmRecordPropMask.MASK_ALARM_PRIORITY_FIRST;

           HDAlarmRecord hdAlarmRecord = am.queryAlarmSnapshot(1, nPropMask);

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


查询多个报警点的最新报警记录

Navigation: Java > 报警相关 >

查询多个报警点的最新报警记录

 Return to chapter overview

·函数：

public Map<Integer, HDAlarmRecord> queryAlarmSnapshots(List<Integer> alarmTagIDs, long nMask) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
alarmTagIDs | List<Integer> | 报警点TagIDs |
nMask | long | Tag点的属性掩码，可参考HDAlarmRecordPropMask类 |

·返回值

返回值类型 | 返回值说明
Map<Integer, HDAlarmRecord> | 返回报警点的最新报警记录

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于查询多个报警点的最新报警记录。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDAlarmManager;

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.common.HDAlarmRecordPropMask;

import com.baosight.hdsdk.domain.alarm.HDAlarmRecord;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

import java.util.ArrayList;

import java.util.List;

import java.util.Map;

public class IhdJavaSdkAlarm {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDAlarmManager am = new HDAlarmManager(dataConn);

          List<Integer> alarmTagIDs = new ArrayList<>();

           alarmTagIDs.add(1);

           alarmTagIDs.add(2);

           long nMask = HDAlarmRecordPropMask.MASK_ALARM_PRIORITY_FIRST;

           Map<Integer, HDAlarmRecord> hdAlarmRecordList = am.queryAlarmSnapshots(alarmTagIDs, nMask);

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


查询某个报警组下报警记录

Navigation: Java > 报警相关 >

查询某个报警组下报警记录

 Return to chapter overview

·函数：

public Map<Integer, List<HDAlarmRecord>> queryAlarmGroupRecords(int nAlarmGroupID, HdAlarmQuery queryCond, long nMask) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
nAlarmGroupID | int | 报警组id |
queryCond | HdAlarmQuery | 查询条件结构体 |
nMask | long | Tag属性对应的掩码，可参考HDAlarmRecordPropMask类 |

·返回值

返回值类型 | 返回值说明
Map<Integer, List<HDAlarmRecord>> | 返回某个报警组下的的报警记录

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于查询某个报警组下报警记录。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdjni.HdAlarmQuery;

import com.baosight.hdsdk.HDAlarmManager;

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.common.HDAlarmRecordPropMask;

import com.baosight.hdsdk.domain.alarm.HDAlarmRecord;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

import java.util.List;

import java.util.Map;

public class IhdJavaSdkAlarm {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDAlarmManager am = new HDAlarmManager(dataConn);

          HdAlarmQuery hdAlarmQuery = new HdAlarmQuery();

           hdAlarmQuery.nTypeMask = HDAlarmRecordPropMask.MASK_ALARM_TYPE_HIGH;

           long nMask = HDAlarmRecordPropMask.ALARM_PRIORITY_FIRST;

           Map<Integer, List<HDAlarmRecord>> resultMap = am.queryAlarmGroupRecords(1, hdAlarmQuery, nMask);

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


用户相关接口

Navigation: Java >

用户相关接口

 Return to chapter overview

类文件:

com.baosight.hdsdk.HDUserManager

接口：

·添加用户

·删除用户

·修改用户密码

·修改用户描述

·获取所有系统用户对象，用户对象内容包含用户名和描述

·重置用户密码

·获取当前连接的登录用户名

·添加分组

·根据分组名称删除该分组

·修改分组描述

·添加用户到分组

·从分组中删除用户

·获取分组下的所有用户

·获取系统所有分组

·获取该用户所属的所有分组


添加用户

Navigation: Java > 用户相关 >

添加用户

 Return to chapter overview

·函数：

public void addUser(HDUser newUser) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
newUser | HDUser | 所要添加的用户对象 |

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于所要添加的用户对象。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.HDUserManager;

import com.baosight.hdsdk.base.HDUser;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

public class IhdJavaSdkUser {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDUserManager um = new HDUserManager(dataConn);

          HDUser newUser = new HDUser("user1", "123456", "user1");

           um.addUser(newUser);

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


删除用户

Navigation: Java > 用户相关 >

删除用户

 Return to chapter overview

·函数：

public void deleteUser(String userName) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
userName | String | 所要删除的用户名称不能为空，长度不能超过31个字节长度 |

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于删除用户。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.HDUserManager;

import com.baosight.hdsdk.base.HDUser;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

public class IhdJavaSdkUser {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDUserManager um = new HDUserManager(dataConn);

          um.deleteUser("user1");

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


修改用户密码

Navigation: Java > 用户相关 >

修改用户密码

 Return to chapter overview

·函数：

public void modifyUserPassword(String userName, String userOldPwd, String userNewPwd) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
userName | String | 所要修改的用户名 |
userOldPwd | String | 旧密码 |
userNewPwd | String | 新密码 |

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于修改用户密码，只有该用户为当前登录用户，才可以修改自己的密码。

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.HDUserManager;

import com.baosight.hdsdk.base.HDUser;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

public class IhdJavaSdkUser {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDUserManager um = new HDUserManager(dataConn);

          um.modifyUserPassword("user1", "123456", "654321");

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


修改用户描述

Navigation: Java > 用户相关 >

修改用户描述

 Return to chapter overview

·函数：

public void modifyUserDescription(String userName, String userNewDesc) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
userName | String | 用户名称 |
userNewDesc | String | 用户描述 |

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于修改用户描述。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.HDUserManager;

import com.baosight.hdsdk.base.HDUser;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

public class IhdJavaSdkUser {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDUserManager um = new HDUserManager(dataConn);

          um.modifyUserDescription("user1", "user1");

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


获取所有系统用户对象，用户对象内容包含用户名和描述

Navigation: Java > 用户相关 >

获取所有系统用户对象，用户对象内容包含用户名和描述

 Return to chapter overview

·函数：

public List<HDUser> getAllUsers() throws HDSdkException

·返回值：

返回值类型 | 返回值说明
List<HDUser> | 系统用户列表

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于获取所有系统用户对象，用户对象内容包含用户名和描述。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.HDUserManager;

import com.baosight.hdsdk.base.HDUser;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

import java.util.List;

public class IhdJavaSdkUser {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDUserManager um = new HDUserManager(dataConn);

          List<HDUser> userList = um.getAllUsers();

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


重置用户密码

Navigation: Java > 用户相关 >

重置用户密码

 Return to chapter overview

·函数：

public void resetUserPassword(String userName, String userNewPwd) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
userName | String | 用户名不能为空 不能超过长度限制 |
userNewPwd | String | 密码不能为空 不能超过长度限制 |

·异常：

当参数出现错误或参数不符合要求时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于重置用户密码。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.HDUserManager;

import com.baosight.hdsdk.base.HDUser;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

public class IhdJavaSdkUser {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDUserManager um = new HDUserManager(dataConn);

          um.resetUserPassword("user1", "123456")

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


获取当前连接的登录用户名

Navigation: Java > 用户相关 >

获取当前连接的登录用户名

 Return to chapter overview

·函数：

public String getCurrentLogUserName() throws HDSdkException

·返回值：

返回值类型 | 返回值说明
String | 当前登录用户名

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于获取当前连接的登录用户名。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.HDUserManager;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

public class IhdJavaSdkUser {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDUserManager um = new HDUserManager(dataConn);

          String cuUserName = um.getCurrentLogUserName();

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


添加分组

Navigation: Java > 用户相关 >

添加分组

 Return to chapter overview

·函数：

public void addGroup(HDGroup hdGroup) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
hdGroup | HDGroup | 分组对象 |

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于添加分组。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.HDUserManager;

import com.baosight.hdsdk.base.HDGroup;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

public class IhdJavaSdkUser {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDUserManager um = new HDUserManager(dataConn);

          HDGroup hdGroup = new HDGroup("group1", "desc1");

           um.addGroup(hdGroup);

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


根据分组名称删除该分组

Navigation: Java > 用户相关 >

根据分组名称删除该分组

 Return to chapter overview

·函数：

public void deleteGroup(String groupNameToDel) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
groupNameToDel | String | 要删除的分组名，不能为空 |

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于根据分组名称删除该分组。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.HDUserManager;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

public class IhdJavaSdkUser {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDUserManager um = new HDUserManager(dataConn);

          um.deleteGroup("group1");

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


修改分组描述

Navigation: Java > 用户相关 >

修改分组描述

 Return to chapter overview

·函数：

public void modifyGroupDesc(String groupName, String groupNewDesc) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
groupName | String | 所要修改的分组名称，不能为空 |
groupNewDesc | String | 新的描述 |

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于修改分组描述。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.HDUserManager;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

public class IhdJavaSdkUser {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDUserManager um = new HDUserManager(dataConn);

          um.modifyGroupDesc("group1", "desc2");

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


添加用户到分组

Navigation: Java > 用户相关 >

添加用户到分组

 Return to chapter overview

·函数：

public void addUserToGroup(String userName, String groupName) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
userName | String | 所要添加的用户名，不能为空 |
groupName | String | 所要添加的分组名，不能为空 |

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于添加用户到分组。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.HDUserManager;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

public class IhdJavaSdkUser {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDUserManager um = new HDUserManager(dataConn);

          um.addUserToGroup("user1", "group1");

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


从分组中删除用户

Navigation: Java > 用户相关 >

从分组中删除用户

 Return to chapter overview

·函数：

public void deleteUserFromGroup(String userName, String groupName) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
userName | String | 所要删除的用户名 |
groupName | String | 分组名 |

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于从分组中删除用户。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.HDUserManager;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

public class IhdJavaSdkUser {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDUserManager um = new HDUserManager(dataConn);

          um.deleteUserFromGroup("user1", "group1");

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


获取分组下的所有用户

Navigation: Java > 用户相关 >

获取分组下的所有用户

 Return to chapter overview

·函数：

public List<HDUser> getUsersOfGroup(String groupName) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
groupName | String | 分组名称 |

·返回值

返回值类型 | 返回值说明
List<HDUser> | 返回分组下的所有用户列表

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于获取分组下的所有用户。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.HDUserManager;

import com.baosight.hdsdk.base.HDUser;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

import java.util.List;

public class IhdJavaSdkUser {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDUserManager um = new HDUserManager(dataConn);

          List<HDUser> userListOfGroup = um.getUsersOfGroup("group1");

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


获取系统所有分组

Navigation: Java > 用户相关 >

获取系统所有分组

 Return to chapter overview

·函数：

public List<HDGroup> getAllGroups() throws HDSdkException

·返回值：

返回值类型 | 返回值说明
List<HDGroup> | 返回所有分组列表

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于获取系统所有分组。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.HDUserManager;

import com.baosight.hdsdk.base.HDGroup;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

import java.util.List;

public class IhdJavaSdkUser {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDUserManager um = new HDUserManager(dataConn);

          List<HDGroup> allGroupList = um.getAllGroups();

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


获取该用户所属的所有分组

Navigation: Java > 用户相关 >

获取该用户所属的所有分组

 Return to chapter overview

·函数：

public List<HDGroup> queryAllGroupsOfUser(String userName) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
userName | String | 用户名 |

·返回值：

返回值类型 | 返回值说明
List<HDGroup> | 返回用户所属的分组列表

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于获取该用户所属的所有分组。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.HDUserManager;

import com.baosight.hdsdk.base.HDGroup;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

import java.util.List;

public class IhdJavaSdkUser {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDUserManager um = new HDUserManager(dataConn);

          List<HDGroup> allGroupsOfCurrentUser = um.queryAllGroupsOfUser("userName");

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


API接口

Navigation: Java >

API接口

 Return to chapter overview

接口：

·设置API超时参数接口

·设置请求数据条数

·异步批量写入记录


设置API超时参数接口

Navigation: Java > API接口 >

设置API超时参数接口

 Return to chapter overview

·函数：

public void setTimeoutSec(int timeoutSec) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
timeoutSec | int | 接口超时时间，单位为秒 |

·异常：

当参数出现错误时，向上抛出IllegalArgumentException异常

当后台查询出错时，向上抛出HDSdkException异常

·说明：

该接口用于设置API超时参数接口（默认超时时间为5，不建议将超时时间设置得过大，如某些特殊场景需要将超时时间设大，建议在执行完查询逻辑后，将超时时间恢复为默认值）。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

public class IhdJavaSdkAPI {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

          dataConn.setTimeoutSec(10);

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


设置请求数据条数

Navigation: Java > API接口 >

设置请求数据条数

 Return to chapter overview

·函数：

public void setRequestCacheCapacity (int nCapacity) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
nCapacity | int | 查询数据条数 |

·说明：

该接口用于设置查询请求的数据条数（默认请求数据条数为1000条）。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.exception.HDSdkException;

public class IhdJavaSdkAPI {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

          dataConn.setRequestCacheCapacity (50000);

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


异步批量写入记录

Navigation: Java > API接口 >

异步批量写入记录

 Return to chapter overview

·函数：

public void saveSnapshotsNowait(List<Integer> tagIDArray, List<HDRecord> snapRecords, HDErrcode errCode) throws HDSdkException

·参数：

参数名称 | 数据类型 | 参数说明 | 默认值
tagIDArray | List<Integer> | 所要写入的id序列 |
snapRecords | List<HDRecord> | 所要写入的记录数组 |
errCode | HDErrcode | [out]用来判断成功或者部分成功的错误码 |

·异常：

当后台写入出错时，向上抛出HDSdkException异常

·说明：

该接口用于异步批量写入记录。

可能需要先进行登录操作，请参考HDDataConnection类

·示例代码：

注： 标记为红色的代码行为当前接口的调用

import com.baosight.hdjni.HDErrcode;

import com.baosight.hdsdk.HDConnectionFactory;

import com.baosight.hdsdk.HDDataWriter;

import com.baosight.hdsdk.HDServerFactory;

import com.baosight.hdsdk.domain.data.HDDataConnection;

import com.baosight.hdsdk.domain.data.HDDataServer;

import com.baosight.hdsdk.domain.data.HDRecord;

import com.baosight.hdsdk.exception.HDSdkException;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

public class IhdJavaSdkAPI {

   public static void main(String[] args) {

       // 设置服务器信息

       String serverIP = "168.2.237.1";

       String bakIp = "168.2.237.2";

       HDDataServer server = HDServerFactory.getHDDataServer(serverIP,5673,bakIp,5673);

       HDDataConnection dataConn = null;

       try {

           dataConn = HDConnectionFactory.getHDDataConnection(server);

           dataConn.loginToServer("admin", "admin");

           HDDataWriter dw = new HDDataWriter(dataConn);

          List<Integer> tagIDArray = new ArrayList<>();

           tagIDArray.add(1);

           tagIDArray.add(2);

           HDRecord record = new HDRecord();

           Date now = new Date();

           record.setSecond(now.getTime() / 1000);

           record.setQuality(192);       //此处数据质量必须为192

           record.setValueStr("1");

           List<HDRecord> hdRecordList = new ArrayList<>();

           hdRecordList.add(record);

           dw.saveSnapshots(tagIDArray, hdRecordList, new HDErrcode());

           dataConn.dispose();

       } catch (HDSdkException e) {

           e.printStackTrace();

       }

   }

}


CSharp

Navigation: »No topics above this level«

CSharp

 Return to chapter overview

目前所提供的实时数据库CSharpSDK接口包括以下内容

·连接管理

·Tag点管理

·记录查询

·记录存储

·统计分析

·报警相关

·用户相关

各个模块所提供的具体接口内容，请查看对应章节内容。

CSharpSDK使用方法简介：安装完成的SDK在executable文件夹中，将该文件夹下的iHDCSharpSDK.

dll加入到Csharp工程的引用路径中。

·使用实时数据库CSharpSDK编码调用的一般步骤如下

使用实时数据库CSharpSDK编码调用的一般步骤

//获取连接

HDDataServer server = new HDDataServer(serverip, port);

HDDataConnection conn = HDConnectionFactory.getHDDataConnection(server);

//获取各个模块的操作工具对象

HDTagManager tagManager = conn.getTagManager();

//整理调用参数

int tagID = 1;

//调用接口

HDBasicTag basicTag = tagManager.getBasicTagById(tagID);

//结束


连接管理

Navigation: CSharp >

连接管理

 Return to chapter overview

类文件：com.baosight.hdsdk.HDConnectionManager

·创建连接

public void ConnectToServer(HDConnection conn)

说明：

创建到服务器的连接

参数：

conn：连接对象。创建方式为new HDConnection(mainaddress,mainport,backaddress, backport, timeout);

异常抛出：

建立连接失败，抛出异常

示例：

HDConnectionManager connmgr = new HDConnectionManager();

HDConnection conn = new HDConnection("127.0.0.1", 5673, "", 5673, 10); // 主备ip分别是实际的真实的ip地址，主备ip初始化固定，与ihdb的活动和非活动状态无关。

connmgr.ConnectToServer(conn);

·登录服务器

public void LoginToServer(string username, string password)

说明：

登陆服务器

参数：

username：用户名

password：密码

异常抛出：

登陆失败，抛出异常

示例：

String username = "admin";

String userpwd = "admin";

connmgr.LoginToServer(username, userpwd);

·断开连接

public void DisconnectFromServer();

说明：

断开连接

参数：

无

示例：

HDConnectionManager connmgr = new HDConnectionManager();

HDConnection conn = new HDConnection("127.0.0.1", 5673, "", 5673, 10);

connmgr.ConnectToServer(conn);

connmgr.DisconnectFromServer();


Tag点管理

Navigation: CSharp >

Tag点管理

 Return to chapter overview

类文件：com.baosight.hdsdk.HDTagManager

·添加普通tag点

public void addBasicTag(HDTag ptTag, HDMask mask)

/// 添加tag点

/// </summary>

/// <param name="ptTag">所要添加的Tag对象</param>

/// <param name="mask">Tag属性掩码对象</param>

·根据TagID删除tag

public void deleteTagById(uint tagID);

/// 根据TagID删除tag

/// </summary>

/// <param name="tagID">TAG点的id</param>

·根据Tag名称删除Tag点

public void deleteTagByName(string tagName);

/// 根据Tag名称删除Tag点

/// </summary>

/// <param name="tagName">tag点名称</param>

·根据TagID获取普通Tag对象

public HDTag getBasicTagById(uint tagID);

/// 根据TagID获取普通Tag对象

/// </summary>

/// <param name="tagID">普通tag点的id</param>

/// <returns>普通tag点对象</returns>

·根据Tag名称获取普通Tag对象

public HDTag getBasicTagByName(string tagName);

/// 根据Tag名称获取Tag对象

/// </summary>

/// <param name="tagID">普通tag点的名称</param>

/// <returns>普通tag点对象</returns>

·修改Tag点

public void modifyBasicTag(HDTag basicTag, HDMask mask);

/// 修改Tag对象

/// </summary>

/// <param name="basicTag">用于修改的tag对象</param>

/// <param name="mask">对应到修改属性的掩码对象</param>

·判断Tag名称是否存在在系统中

public bool isTagNameExist(string tagName);

/// <summary>

/// 判断Tag名称是否存在

/// </summary>

/// <param name="tagName">要判断的tag名</param>

/// <returns>true=存在；false=不存在</returns>

·根据查询条件查询所有普通类型Tag点

public List<HDTag> queryBasicTagsByConds(HDQueryTagCondition[] queryConditions, HDMask mask)

/// <summary>

/// 根据查询条件查询所有普通类型Tag点

/// </summary>

/// <param name="queryConditions">查询条件对象数组，各个条件之间AND关系</param>

/// <param name="returnPropMask">返回的tag属性掩码对象，用来指定返回哪些属性</param>

/// <returns>查询到的普通类型Tag点列表</returns>

·根据Tag名称获取TagID

public uint getTagIDByTagName(string tagName);

/// <summary>

///更加tag名称获取tagid

/// </summary>

/// <param name="tagName">tag名称</param>

/// <returns>tagid</returns>

·根据TagID获取Tag数据类型

public HDTagDataType getTagDataType(uint tagID);

/// <summary>

/// 根据TagID获取其数据类型

/// </summary>

/// <param name="tagID">tag点id</param>

/// <returns>tag点类型</returns>

©2015. All Rights Reserved.


记录查询接口

Navigation: CSharp >

记录查询接口

 Return to chapter overview

类文件：com.baosight.hdsdk.HDDataProvider

·查询Tag点原始记录

public List<HDDataRecord> QueryRawRecords(uint tagID, HDTimeRegion timeregion)

/// 查询Tag点原始记录

/// </summary>

/// <param name="tagID">TagID</param>

/// <param name="startTime">起始时间</param>

/// <param name="endTime">终止时间</param>

/// <returns>返回记录列表</returns>

·根据不同的插值算法查询历史插值记录

public List<KeyValuePair<HDDataRecord,int>> QueryInterpRecordsByMode(uint tagID, DateTime startTime, DateTime endTime, long intervalInMs, HDInterpolationMode mode, ref int nErrCode)

/// <param name="tagID">TagID</param>

/// <param name="startTime">起始时间</param>

/// <param name="endTime">结束时间</param>

/// <param name="intervalInMs">取值间隔毫秒</param>

/// <param name="mode">插值方式</param>

/// <param name="nErrCode">值为0表示全部成功，值为HDSdkConstants.QUERY_INTERP_RECORD_FAILED_PARTLY表示部分成功</param>

/// <returns>返回记录和该条记录错误码的列表</returns>

·根据不同的插值算法查询多个tag点某个时间点的插值记录

public List<KeyValuePair<HDDataRecord,int>> QueryTagsInterpRecordByMode(uint[] nTagIDs, DateTime interpTime, HDInterpolationMode mode, ref int nErrCode)

/// public static extern int QueryTagsInterpRecordsByMode(IntPtr serverHandle, byte interpMode, ref uint nTagIDs, int recNum, ref HDRecord records, ref int errCodes);

/// </summary>

/// <param name="nTagIDs">多个TagID</param>

/// <param name="interpTime">插值时间</param>

/// <param name="mode">插值类型，值为1表示前向插值，即将某一个时刻之前最近的一条原始值作为改时刻的插值；

/// 值为0表示线性插值，即根据某一时刻之前的最近一条原始值和该时刻之后最近一条原始值来进行线性计算该时刻的插值</param>

/// <param name="nErrCode">值为0表示全部成功，值为HDSdkConstants.QUERY_INTERP_RECORD_FAILED_PARTLY表示部分成功</param>

/// <returns>返回记录和该条记录错误码的列表</returns>

·查询Tag点snapshot记录

public List<KeyValuePair<HDDataRecord, int>> QuerySnapshotsByTagID(uint[] nTagIDs, ref int nErrCode)

/// <param name="nTagIDs"></param>

/// <param name="nErrCode">值为0表示全部成功，值为HDSdkConstants.SAVE_SNAPSHOTS_FAILED_PARTLY表示部分成功</param>

/// <returns>返回记录和该条记录错误码的列表

</returns>

·查询Tag点在某时间段内的原始记录个数

public int GetRawRecordsCount(uint tagID, HDTimeRegion timeregion)

/// <param name="tagID"></param>

/// <param name="startTime"></param>

/// <param name="endTime"></param>

/// <returns>返回记录总数</returns>

·按照记录条数和起始时间查询Tag点原始记录

public List<HDDataRecord> QueryRawRecordsByCount(uint tagID, DateTime startTime, bool backward, int recordCount)

/// <param name="tagID">TagID</param>

/// <param name="startTime">起始时间</param>

/// <param name="backward">向前还是向后查询；true-向后查询；false-向前查询</param>

/// <param name="recordCount">所要查询的记录总条数，必须在1~65535之间</param>

/// <returns>返回查询到的记录列表</returns>

©2015. All Rights Reserved.


记录存储接口

Navigation: CSharp >

记录存储接口

 Return to chapter overview

类文件:com.baosight.hdsdk.HDDataWriter

·写入一个Tag点记录值

public void saveSnapshot(UInt32 tagID, HDDataRecord snapRecord)

/// <param name="tagID">所要写入的TagID</param>

/// <param name="snapRecord">所要写入的记录值</param>

·写入多个Tag点记录值

public int saveTagsSnapshots(uint[] tagIDArray, HDDataRecord[] snapRecords, ref int errCodes)

/// <param name="tagIDArray">所要写入的TagID</param>

/// <param name="snapRecords">所要写入的记录值</param>

/// <param name="errCodes">值为0表示全部成功，值为HDSdkConstants.SAVE_SNAPSHOTS_FAILED_PARTLY表示部分成功</param>

·修改Tag点记录值,不存在的时间点修改会抛异常

public void modifyRawRecord(UInt32 tagID, HDDataRecord newRecord)

/// <param name="tagID">所要写入的TagID</param>

/// <param name="newRecord">所要写入的记录值</param>

·乱序写入Tag点记录值

public int saveDisorderSnapshots(uint tagID, HDDataRecord[] snapRecords, ref int errCodes)

/// <param name="tagID">所要写入的TagID</param>

/// <param name="snapRecords">所要写入的记录值数组</param>

/// <param name="errCodes">值为0表示全部成功，值为HDSdkConstants.SAVE_SNAPSHOTS_FAILED_PARTLY表示部分成功</param>

·乱序写入多个Tag点记录值

public int saveTagsDisorderSnapshots(uint[] tagIDArray, HDDataRecord[] snapRecords,ref int errCodes)

/// <param name="tagIDArray">所要写入的TagID数组</param>

/// <param name="snapRecords">所要写入的记录值数组</param>

/// <param name="snapRecords">所要写入的记录值数组</param>

/// <param name="errCodes">值为0表示全部成功，值为HDSdkConstants.SAVE_SNAPSHOTS_FAILED_PARTLY表示部分成功</param>


统计分析接口

Navigation: CSharp >

统计分析接口

 Return to chapter overview

类文件:com.baosight.hdsdk.HDDataAnalysis

·数据分析接口

public double getTagStatsCalc(uint tagID, HDStRelatedParam pParam);

说明：

对一个tag点的数据进行统计

参数：

tagID：要统计的tag点的id

pParam：统计参数。可以通过以下方法进行设置

public void SetExtParam1(double param1);

public void SetExtParam2(double param2);

//设置过滤表达式

public void SetFilterExpr(string expr);

//设置丢弃坏点的方式

public void SetFilterFailedMode(HDStatsDropBadMode dropbadmode);

//设置统计时间偏移

public void SetOffSet(int offset);

//设置置信度

public void SetPercentGood(float percentgood);

//设置采样周期

public void SetPeriod(int period);

//设置采样方式

public void SetSampleType(HDSampleMode samplemode);

//设置统计方式

public void SetStatsType(HDStatsType type);

//设置统计的时间区间

public void SetTimeRegionParam(int timeregionnum, HDTimeRegion[] timeregion);

©2015. All Rights Reserved.


报警相关

Navigation: CSharp >

报警相关

 Return to chapter overview

·添加报警点

public void addAlarmTag(HDAlarmTag alarmTag, HDMask mask);

/// <summary>

/// 添加报警点

/// </summary>

/// <param name="alarmTag">报警点对象</param>

/// <param name="mask">需设置属性掩码对象</param>

/// <returns></returns>

·根据报警点名称查询报警点对象

public HDAlarmTag getAlarmTagByName(string tagName)

/// <summary>

/// 根据名称查询报警点对象

/// </summary>

/// <param name="tagName">报警点名称</param>

/// <returns>报警点对象</returns>

·修改报警Tag对象

public void modifyAlarmTag(HDAlarmTag alarmTag, HDMask mask)

/// <summary>

/// 修改报警Tag对象

/// 注意只有部分属性修改有效，对应mask如下

/// TAG_PROP_DESCRIPTOR -- Tag描述

/// TAG_PROP_TEST1 -- 报警条件1

/// TAG_PROP_ACTION1 -- 报警事件1

/// TAG_PROP_TEST2 -- 报警条件2

/// TAG_PROP_ACTION2 -- 报警事件2

/// TAG_PROP_TEST3 -- 报警条件3

/// TAG_PROP_ACTION3 -- 报警事件3

/// TAG_PROP_TEST4 -- 报警条件4

/// TAG_PROP_ACTION4 -- 报警事件4

/// TAG_PROP_VALUE_DEADBAND -- 值死区

/// TAG_PROP_TIME_DEADBAND -- 时间死区

/// TAG_PROP_ALARM_GROUP_ID -- 报警点所属报警组对应的id

/// </summary>

/// <param name="alarmTag">报警点对象</param>

/// <param name="mask">要修改的属性的掩码对象</param>

·根据id查询报警点

public HDAlarmTag getAlarmTagById(uint tagID);

/// <summary>

/// 根据id查询报警点

/// </summary>

/// <param name="tagID">报警点ID</param>

/// <returns>报警点对象</returns>

©2015. All Rights Reserved.


用户相关

Navigation: CSharp >

用户相关

 Return to chapter overview

类文件:com.baosight.hdsdk.HDUserManager

·添加用户

public void addUser(HDUser newUser)

/// <summary>

/// 添加用户

/// @throws HDSdkException 当后台添加用户报错抛出该异常

/// </summary>

/// <param name="newUser">所要添加的用户对象</param>

·删除用户

public void deleteUser(string userName)

/// <summary>

/// 删除用户

/// </summary>

/// <param name="userName">用户名称</param>

·修改用户密码

public void modifyUserPassword(string userName, string userOldPwd, string userNewPwd)

/// <summary>

/// 修改用户密码

/// </summary>

/// <param name="userName">用户名称</param>

/// <param name="userOldPwd">旧密码</param>

/// <param name="userNewPwd">新密码</param>

·修改用户描述

public void modifyUserDescription(string userName, string userNewDesc)

/// <summary>

/// 修改用户描述

/// </summary>

/// <param name="userName"></param>

/// <param name="userNewDesc"></param>

·获取所有系统用户对象，用户对象内容包含用户名和描述

public List<HDUser> getAllUsers()

/// <summary>

/// 获取所有用户

/// </summary>

/// <returns>用户对象列表</returns>

·获取当前连接的登录用户名

public string getCurrentLogUserName()

/// <summary>

/// 获取当前登录用户名

/// </summary>

/// <returns>当前登录用户名</returns>

©2015. All Rights Reserved.


2.4到3.0接口差别

Navigation: CSharp >

2.4到3.0接口差别

 Return to chapter overview

·类文件：com.baosight.hdsdk.HDConnectionFactroy变更为com.baosight.hdsdk.HDConnectionManager

o创建连接接口buildConnection(HDServer server)变为ConnectToServer(HDConnection conn);

o去掉getHDDataConnection

o断开连接接口变为DisconnectFromServer

·去掉类文件：com.baosight.hdsdk.domain.res.HDResourceConnection

·addBasicTag(HDBasicTag basicTag, long mask)变更参数为addBasicTag(HDTag ptTag, HDMask mask)

·deleteBasicTagById(uint tagID)变更名字为public void deleteTagById(uint tagID);

·deleteBasicTagByName(String tagName)变更名字为deleteTagByName(string tagName);

·modifyBasicTag(HDBasicTag basicTag, long mask)变更参数为modifyBasicTag(HDTag basicTag, HDMask mask);

·queryBasicTagsByConds(HDQueryTagCondition[] queryConditions, long returnPropMask)变更参数为public List<HDTag> queryBasicTagsByConds(HDQueryTagCondition[] queryConditions, HDMask mask);

·addAlarmTag(HDAlarmTag alarmTag, long mask)变更参数为addAlarmTag(HDAlarmTag alarmTag, HDMask mask);

·modifyAlarmTag(HDAlarmTag alarmTag, long mask)变更参数为modifyAlarmTag(HDAlarmTag alarmTag, HDMask mask)

·QueryTagHisRawRecords(uint tagID, DateTime startTime, DateTime endTime)变更参数为QueryTagHisRawRecords(uint tagID, HDTimeRegion timeregion)

·GetRawRecordsCount(uint tagID, DateTime startTime, DateTime endTime)变更参数为GetRawRecordsCount(uint tagID, HDTimeRegion timeregion)

·去掉getTagMean，getTagSum，getTagMin，getTagMax,改为统一接口getTagStatsCalc.


Server类管理

Navigation: Python >

Server类管理

 Return to chapter overview

©2015. All Rights Reserved.


Server模块

Navigation: Python > Server类管理 >

Server模块

 Return to chapter overview

·Server模块(server.py)

v 类定义

方法：

v 连接实时数据库

v 断开实时数据库

v 设置实时数据库连接的超时时间

v 登录实时数据库

·数字量集模块(digitalset.py) 类：DigitalSet

Server类的实例

·数字量集管理模块(digitalsetmgr.py) 类：DigitalSetMgr

Server类的实例

·举例

import unittest

from server import *

from digitalset import *

from digitalsetmgr import *

from datetime import time

class DigitalSetTestCase(unittest.TestCase):

def setUp(self):

self.server = Server('168.2.237.97', 5678)

#self.server = Server('127.0.0.1', 5678)

self.server.connect(2)

self.server.login('admin', 'admin')

def tearDown(self):

self.server.disconnect()

def test_add_digtal_set(self):

digsetmgr = digitalsetmgr.DigitalSetMgr(self.myServer.myServer)

try:

ret = digsetmgr.delete_digitalset('中午')

except :

print "delete digital set 错误"

ret = digsetmgr.add_digitalset('中午')

unittest.TestCase.assertEqual(self,RIGHT, ret)

digset = digsetmgr.get_digitalset('中午')

unittest.TestCase.assertNotEqual(self, None, digset)

print digset.name

stateDict = {-1:'off',0:'pending',1:'打开'}

setList = digsetmgr.get_digitalsets()

i = 2

# 测试内存中的中文字符串写入DB是否正常

for sele in setList:

stateDict[i]=sele.name

i+=1

ret = digset.save_DigitalSetStateInfos(stateDict)

unittest.TestCase.assertEqual(self,RIGHT, ret)

stateList = digset.query_DigitalSetStateInfos()

unittest.TestCase.assertNotEqual(self, None, stateList)

for ele in stateList:

print ele.szStateName,ele.nStateValue


类定义

Navigation: Python > Server类管理 > Server模块 >

类定义

 Return to chapter overview

·类定义

class Server:

def __init__(self, address, port, bakaddress='', bakport=0):

self.address = address

self.port = port

self.bakaddress = bakaddress

self.bakport = bakport

·类参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
address | 主机IP地址 | 数字型 |
port | 主机连接端口 | 字符串型 |
bakaddress | 备用IP地址 | 数字型 | 空字符串
bakport | 备用连接端口 | 字符串型 | 0

·实例化

self.myServer = server.Server('127.0.0.1', 5673, '', 5673)


连接实时数据库

Navigation: Python > Server类管理 > Server模块 >

连接实时数据库

 Return to chapter overview

·方法定义

connect(self, timeout = 3, bakeaddress = '', bakeport = 0)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
timeout | 连接超时时间 | 数字型 | 3秒
bakaddress | 备用IP地址 | 数字型 | 空字符串
bakport | 备用连接端口 | 字符串型 | 0

·方法调用

self.myServer = server.Server('127.0.0.1', 5673, '', 5673)

self.myServer.connect()


断开实时数据库

Navigation: Python > Server类管理 > Server模块 >

断开实时数据库

 Return to chapter overview

·方法定义

disconnect(self)

·方法调用

self.myServer = server.Server('127.0.0.1', 5673, '', 5673)

self.myServer.disconnect()


设置实时数据库连接的超时时间

Navigation: Python > Server类管理 > Server模块 >

设置实时数据库连接的超时时间

 Return to chapter overview

·方法定义

self_request_timeout(self, timeout = 3)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
timeout | 连接超时时间 | 数字型 | 3秒

·异常

如果调用失败，抛出hyperdb.HDError异常

·方法调用

self.myServer = server.Server('127.0.0.1', 5673, '', 5673)

self.myServer.self_request_timeout(timeout=10)


登录实时数据库

Navigation: Python > Server类管理 > Server模块 >

登录实时数据库

 Return to chapter overview

·方法定义

login(self, username, password)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
username | 用户名 | 字符串型 |
password | 密码 | 字符串型 |

·异常

如果登陆失败，抛出hyperdb.HDError异常；

如果参数错误，抛出TypeError异常

·方法调用

self.myServer = server.Server('127.0.0.1', 5673, '', 5673)

self.myServer.login('admin', 'admin')


Tag类管理

Navigation: Python >

Tag类管理

 Return to chapter overview

©2015. All Rights Reserved.


tag模块

Navigation: Python > Tag类管理 >

tag模块

 Return to chapter overview

·tag模块（tag.py）

类：

CommonTag

Tag继承于CommTag

方法：

v 批量保存多个点的内存快照列表

v 根据tagID和对应的类型列表，获取对应的内存快照列表

v 根据插值模式、tagID列表，tagType列表，时间戳列表，获取对应的批量插值记录

v 根据开始和结束时间形成的时间范围，查询归档的原始值的迭代器，通过该迭代器防止在大数据量的情况下对服务端查询造成性能压力

v 按照指定方向、时间点和记录数查询归档记录的原始值

v 以线性插值或者前向插值的模式获取一个指定时刻的插值记录

v 以线性插值或者前向插值的模式获取指定时刻列表的插值记录列表

v 根据开始和结束时间形成的时间范围，查询时间范围内的归档原始值的总数

v 修改归档数据的记录

v 保存乱序数据到一个tag点的内存快照，即把时间戳小于内存快照的数据插入到实时数据库系统中

·举例

import unittest

from server import *

from tagmgr import *

from tag import *

from record import *

from datetime import time

class TagTestCase(unittest.TestCase):

def setUp(self):

self.server = Server('168.2.237.97', 5678)

#self.server = Server('127.0.0.1', 5678)

self.server.connect(2)

self.server.login('admin', 'admin')

def tearDown(self):

self.server.disconnect()

def test_getRawRecords(self):

tag1 = self.tag_mgr.get_tag('hdsys_cpu')

dt = datetime.now()

endTime = hyperdb.HDTime()

endTime.nSec = c_int32(int(time.mktime(dt.timetuple()))-100)

endTime.nMsec = c_int16(dt.microsecond/1000)

startTime = hyperdb.HDTime()

startTime.nSec = endTime.nSec - 1000000

startTime.nMsec = endTime.nMsec

iterate=tag1.get_rawRecords_Iterate_ByTimeScope(startTime,endTime)

record = iterate.get_next_record()

count = 0

while(record):

count += 1

record = iterate.get_next_record()

if((count- (count/1000)*1000) == 0 ):

print 'count is ' + str(count) + ' value is '+ record.value

print count

unittest.TestCase.assertEqual(self,True, (count>0))

def test_getInterRecords(self):

tag1 = self.tag_mgr.get_tag('hdsys_cpu')

dt = datetime.now()

queryTime = hyperdb.HDTime()

queryTime.nSec = c_int32(int(time.mktime(dt.timetuple()))-10)

queryTime.nMsec = c_int16(dt.microsecond/1000)

ret=tag1.get_inter_record_by_mode(0,queryTime)

print 'line inerp value is '+ret.value

ret=tag1.get_inter_record_by_mode(1,queryTime)

print 'prev inerp value is '+ret.value

unittest.TestCase.assertEqual(self,True, (ret != None))


批量保存多个点的内存快照列表

Navigation: Python > Tag类管理 > tag模块 >

批量保存多个点的内存快照列表

 Return to chapter overview

·方法定义

save_snapshots(self, snapshots_list)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
snapshots_list | 内存快照列表，[(tagid, snapshot), ...]，元素为record.Record类型，对于数字状态集digitalset, Record的属性value应该为数字状态集digitalset的状态ID(state id)。列表个数不超过65535。 Record对象结构体： { sec: 数字类型 msec: 数字类型 tagType: 枚举型 quality: 数字类型 value: 数字类型 } | record.Record类型的list |

·异常

如果调用失败，抛出hyperdb.HDError异常

如果参数错误，抛出HDParaError异常

·方法调用

def SaveSnapshots(self): tagnames = []

hdrecord_list = []

snapshot_list = []

for i in range(10, 20):

tagnames.append('tag_int16_' + str(i))

for tagname in tagnames:

try:

self.myTag = self.myTagMgr.get_tag(tagname)

except Exception as e:

print(e)

hdrecord = record.Record(int(time.strftime('%m%d%H%M%S', time.localtime())), 0)

hdrecord.tagtype = self.myTag.tagtype

hdrecord.quality = 192

hdrecord.value = random.randint(0, 10)

hdrecord_list.append(hdrecord)

try:

ret = self.myTagMgr.get_tagIDs(tagnames)

except Exception as e:

print("get_tagIDs error: ", e.errcode)

for i in range(10):

snapshot_list.append((ret[1][i], hdrecord_list[i]))

try:

self.myTag.save_snapshots(snapshot_list)

except Exception as e:

print("save_snapshots error: ", e.errcode)

else:

print("saving snapshots succeeds")


根据tagID和对应的类型列表，获取对应的内存快照列表

Navigation: Python > Tag类管理 > tag模块 >

根据tagID和对应的类型列表，获取对应的内存快照列表

 Return to chapter overview

·方法定义

get_snapshots(self, nTagIDs,strTagTypes)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
nTagIDs | tagID的列表，列表个数不超过65535 | 数字类型的list |
strTagTypes | tagType的列表（e.g. 'int8'） | 字符串型的list |

·异常

如果调用失败，抛出hyperdb.HDError异常

如果参数错误，抛出HDParaError异常

·返回值

一个包含总的错误码（ hyperdb.hd_sucess 或 hyperdb.EC_HD_API_QUE RY_SNAPSHOTS_FAILED）、内存快照列表和错误码列表的tuple

·方法调用

def GetSnapshots(self):

tagnames = []

tagtypes = []

for i in range(10, 20):

tagnames.append('tag_int16_' + str(i))

try:

ret = self.myTagMgr.get_tagIDs(tagnames)

except Exception as e:

print("get_tagIDs error: ", e.errcode)

else:

print("getting tagIDs succeeds")

tagIDs = ret[1] len_tagnames = len(tagnames)

for i in range(len_tagnames):

tagtypes.append(self.myTagMgr.get_tagType(tagIDs[i]))

try:

ret1 = self.myTag.get_snapshots(tagIDs, tagtypes)

except Exception as e:

print("get_snapshots error: ", e.errcode)

else:

print("getting snapshots succeeds")

reclist = ret1[1]

len_reclist = len(reclist)

for i in range(len_reclist):

print("snapshot quality: ", reclist[i].quality, "snapshot value: ", reclist[i].value,", timestamp: ", reclist[i].sec, "snapsh ot type: ", reclist[i].tagtype)


根据插值模式、tagID列表，tagType列表，时间戳列表，获取对应的批量插值记录

Navigation: Python > Tag类管理 > tag模块 >

根据插值模式、tagID列表，tagType列表，时间戳列表，获取对应的批量插值记录

 Return to chapter overview

·方法定义

get_inter_records_multitags_by_mode(self,mode,nTagIDs,strTagTy pes,times)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
mode | 插值模式。插值类型：值为1表示前向插值，即将某一个时刻之前最近的一条原始值作为改时刻的插值；值为0表示线性插值，即根据某一时刻之前的最近一条原始值和该时刻之后最近一条原始值来进行线性计算该时刻的插值。 | 数字类型 |
nTagIDs | tagID的列表，列表个数不超过65535 | 数字型的list |
strTagTypes | tagType的列表，tagType为字符串，如’int8’ | 字符串型的list |
times | 插值的时间戳列表，与datetime,or HDTime同类型 | datetime或HDTime的list |

·异常

如果调用失败，抛出hyperdb.HDError异常

如果参数错误，抛出HDParaError异常

·返回值

一个包含总的错误码（ hyperdb.hd_sucess 或 hyperdb.EC_HD_API_QUERY_INTERP_REC_FAILED）、HDRecord类型的记录列表和错误码列表的tuple

·方法调用

def GetInterRecordsMultitagsByMode(self):

tagnames = []

for i in range(10, 20):

tagnames.append('tag_int16_' + str(i))

try:

ret = self.myTagMgr.get_tagIDs(tagnames)

except Exception as e:

print("get_tagIDs error: ", e.errcode)

tagIDs = ret[1]

try:

snapshots_ret = self.myDateProvider.get_snapshot_by_IDs(tagIDs)

except Exception as e:

print("get_snapshot_by_IDs error: ", e.errcode)

snapshots = snapshots_ret[1]

tagtypes = []

times = []

for i_hdrecord in snapshots:

tagtypes.append(i_hdrecord.tagtype)

for i in range(10):

self.dattime = datetime.datetime(2023, 10, 17, 13, 53, 37)

times.append(self.dattime)

recret = self.myTag.get_inter_records_multitags_by_mode(mode=1, nTagIDs=tagIDs, strTagTypes=tagtypes, times=times)

hdrecord_ret = recret[1]

for i in range(len(tagnames)):

print(tagnames[i], ":snapshot quality: ", hdrecord_ret[i].quality, "snapshot value: ", hdrecord_ret[i].value, ", timestamp: ",hdrecord_ret[i].sec)


根据开始和结束时间形成的时间范围，查询归档的原始值的迭代器，通过该迭代器防止在大数据量的情况下对服务端查询造成性能压力

Navigation: Python > Tag类管理 > tag模块 >

根据开始和结束时间形成的时间范围，查询归档的原始值的迭代器，通过该迭代器防止在大数据量的情况下对服务端查询造成性能压力

 Return to chapter overview

·方法定义

get_rawRecords_Iterate_ByTimeScope(self, starttime, endtime)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
starttime | 开始时间 | datetime 或者 HDTime 类型 |
endtime | 结束时间 | datetime 或者 HDTime 类型 |

·返回值

RecordIterate的迭代器（没有查询到结果则返回值rec为None），使用get_next_record()方法获取下一个record记录

·注意事项

设置查询时间区间，默认左开右闭

·方法调用

def GetRawRecordsIterateByTimeScope(self):

tagname = "tag_int16_10"

tag_self = self.myTagMgr.get_tag(tagname)

sttime = datetime.datetime(2023, 10, 17, 15, 50, 0)

edtime = datetime.datetime(2023, 10, 17, 15, 52, 0)

iter_record = tag_self.get_rawRecords_Iterate_ByTimeScope(starttime=sttime, endtime=edtime)

while True:

rec = iter_record.get_next_record()

## 没有查询到结果则返回值rec为None

if rec is None:

break

print("snapshot quality: ", rec.quality, "snapshot value: ",rec.value, ", timestamp: ", rec.sec)


按照指定方向、时间点和记录数查询归档记录的原始值

Navigation: Python > Tag类管理 > tag模块 >

按照指定方向、时间点和记录数查询归档记录的原始值

 Return to chapter overview

·方法定义

get_rawRecords_BySpecifyNum(self,timestamp,nQueryNum,bLes sThanQueryTime)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
timestamp | 查询的时间点 | datetime或者HDTime类型 |
nQueryNum | 待查询的记录数，不能超过65535条记录 | 数字型 |
bLessThanQueryTime | 查询的方向，True则，查询的数据的时间戳小于等于查询时间点；否则大于等于查询的时间点 | 布尔型 |

·异常

如果调用失败，抛出hyperdb.HDError异常

如果参数错误，抛出HDParaError异常

·返回值

元组（实际查询的记录数，查询记录列表）。其中，查询记录类型为record.HDRecord

·方法调用

def GetRawRecordsBySpecifyNum(self):

tagname = "tag_int16_10"

tag_self = self.myTagMgr.get_tag(tagname)

time_stamp = datetime.datetime(2023, 10, 17, 15, 54, 40)

num_query = 10

ret = tag_self.get_rawRecords_BySpecifyNum(timestamp=time_stamp, nQueryNum=num_query, bLessThanQueryTime=True)

len_rec = len(ret[1])

print("The num of records:", ret[0])

for i in range(len_rec):

print("snapshot quality: ", ret[1][i].quality, "snapshot value: ",ret[1][i].value, ", timestamp: ", ret[1][i].sec)


以线性插值或者前向插值的模式获取一个指定时刻的插值记录

Navigation: Python > Tag类管理 > tag模块 >

以线性插值或者前向插值的模式获取一个指定时刻的插值记录

 Return to chapter overview

·方法定义

get_inter_record_by_mode(self, mode, timestamp)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
timestamp | 插值时刻 | datetime类型 |
mode | 插值模式（0，线性LINEAR；1，前向PREV），后续插值模式均同此模式。插值类型：值为1表示前向插值，即将某一个时刻之前最近的一条原始值作为改时刻的插值；值为0表示线性插值，即根据某一时刻之前的最近一条原始值和该时刻之后最近一条原始值来进行线性计算该时刻的插值。 | 数字型 |

·异常

如果调用失败，抛出hyperdb.HDError异常

如果参数错误，抛出ArgumentError异常

·返回值

record.Record对象的实例

·方法调用

def GetInterRecordByMode(self):

tagname = 'tag_int16_10'

try:

self.myTag = self.myTagMgr.get_tag(tagname)

except Exception as e:

print(e)

self.dattime = datetime.datetime(2023, 10, 16, 15, 10, 35, 0)

try:

## mode：0/1 -> LINEAR/PREV

hdrecord = self.myTag.get_inter_record_by_mode(0, timestamp=self.dattime)

except Exception as e:

print("get_inter_record_by_mode error: ", e.errcode)

time.sleep(10)

try:

## mode：0/1 -> LINEAR/PREV

hdrecord = self.myTag.get_inter_record_by_mode(0, timestamp=self.dattime)

except Exception as e:

print("get_inter_record_by_mode error: ", e.errcode)

time.sleep(10)

try:

## mode：0/1 -> LINEAR/PREV

hdrecord = self.myTag.get_inter_record_by_mode(0, timestamp=self.dattime)

except Exception as e:

print("get_inter_record_by_mode error: ", e.errcode)

else:

print("snapshot quality: ", hdrecord.quality, "snapshot value: ", hdrecord.value, ", timestamp: ",hdrecord.sec)

else:

print("snapshot quality: ", hdrecord.quality, "snapshot value: ",hdrecord.value, ", timestamp: ",hdrecord.sec)

else:

print("snapshot quality: ", hdrecord.quality, "snapshot value: ", hdrecord.value, ", timestamp: ", hdrecord.sec)


以线性插值或者前向插值的模式获取指定时刻列表的插值记录列表

Navigation: Python > Tag类管理 > tag模块 >

以线性插值或者前向插值的模式获取指定时刻列表的插值记录列表

 Return to chapter overview

·方法定义

get_inter_records_by_mode(self, mode, times)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
times | 值时刻列表，列表个数不超过65535，列表元素类型和datetime类型相同 | datetime类型的list |
mode | 插值模式（0，线性LINEAR；1，前向PREN）。插值类型：值为1表示前向插值，即将某一个时刻之前最近的一条原始值作为改时刻的插值；值为0表示线性插值，即根据某一时刻之前的最近一条原始值和该时刻之后最近一条原始值来进行线性计算该时刻的插值。 | 数字型 |

·异常

如果调用失败，抛出hyperdb.HDError异常

如果参数错误，抛出ArgumentError异常

·返回值

一个包含总的错误码（ hyperdb.hd_sucess 或 hyperdb.EC_HD_API_QUERY_INTERP_REC_FAILED）、HDRecord类型的记录列表和错误码列表的tuple

·方法调用

def GetInterRecordsByMode(self):

tagname = 'tag_int16_10'

try:

self.myTag = self.myTagMgr.get_tag(tagname)

except Exception as e:

print(e)

times = []

for second in [5, 15, 25, 35, 45, 55]:

self.dattime = datetime.datetime(2023, 10, 16, 15, 11, second)

times.append(self.dattime)

try:

## mode：0/1 -> LINEAR/PREV

ret = self.myTag.get_inter_records_by_mode(0, times)

hdrecords = ret[1]

except Exception as e:

print("get_inter_records_by_mode error: ", e.errcode)

else:

for hdrecord in hdrecords:

print("snapshot quality: ", hdrecord.quality, "snapshot value: ",hdrecord.value, ", timestamp: ",hdrecord.sec)


根据开始和结束时间形成的时间范围，查询时间范围内的归档原始值的总数

Navigation: Python > Tag类管理 > tag模块 >

根据开始和结束时间形成的时间范围，查询时间范围内的归档原始值的总数

 Return to chapter overview

·方法定义

get_raw_records_number(self, starttime, endtime)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
starttime | 开始时间 | datetime 类型 |
endtime | 结束时间 | datetime 类型 |

·异常

如果调用失败，抛出hyperdb.HDError异常

如果参数错误，抛出ArgumentError异常

·返回值

记录个数

·方法调用

def GetRawRecordsNumber(self):

tagname = 'tag_int16_10'

try:

self.myTag = self.myTagMgr.get_tag(tagname)

except Exception as e:

print(e)

sttime = datetime.datetime(2023, 10, 16, 15, 11, 40)

edtime=datetime.datetime(2023, 10, 16, 15, 13, 50)

num_hdrecored = self.myTag.get_raw_records_number(starttime=sttime, endtime=edtime)

print("number of hdrecords in (", sttime, ", ", edtime, "]: ", n um_hdrecored)


修改归档数据的记录

Navigation: Python > Tag类管理 > tag模块 >

修改归档数据的记录

 Return to chapter overview

·方法定义

modify_record(self, new_record)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
new_record | 用来更新旧记录的新的记录 | record.Record类型 |

·异常

如果调用失败，抛出hyperdb.HDError异常

如果参数错误，抛出ArgumentError异常

·返回值

hyperdb.hd_sucess

·注意事项

1. 只有属性质量'quality'和值'value'能够被修改

2.修改最新的一条历史记录，在“历史记录查询”中的记录已经被修改，但是在“实时记录查询”中的记录没有被修改原因：历史值和实时值是存储在两个不同的存储空间，modify_record只是修改的历史值

3.参数new_record类型为record.Record，而record.Record()的参数se c是指时间戳（时间从年到秒），msec也是指时间戳（毫秒）

·方法调用

def ModifyRecord(self):

tagname = 'tag_int16_10'

tag_self = self.myTagMgr.get_tag(tagname)

time_modify = "2023-10-17 15:14:30"

# 先转换为时间数组

time_modify = time.strptime(time_modify, "%Y-%m-%d %H:%M:%S")

# 转换为时间戳

time_modify = int(time.mktime(time_modify))

hdrecord = record.Record(time_modify, 0)

hdrecord.value = 20

hdrecord.quality = 100

hdrecord.tagtype = 'int8'

try:

tag_self.modify_record(hdrecord)

except Exception as e:

print("modify_record error:", e.errcode)

else:

print("modifying the record succeeds")


保存乱序数据到一个tag点的内存快照，即把时间戳小于内存快照的数据插入到实时数据库系统中

Navigation: Python > Tag类管理 > tag模块 >

保存乱序数据到一个tag点的内存快照，即把时间戳小于内存快照的数据插入到实时数据库系统中

 Return to chapter overview

·方法名

save_disorder_snapshots(self, snapshots)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
snapshots | 记录列表 | record.Record类型 |

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

hyperdb.hd_sucess

·方法调用

def SaveDisorderSnapshots(self):

tagname = "tag_int16_10"

time_stamp = []

snapshot_list = []

tag_self = self.myTagMgr.get_tag(tagname)

for sec in [0, 10, 20, 30, 40, 50]:

time_rec = "2023-10-18 08:55:" + str(sec)

# 先转换为时间数组

time_rec = time.strptime(time_rec, "%Y-%m-%d %H:%M:%S")

# 转换为时间戳

time_stamp.append(int(time.mktime(time_rec)))

len_time_stamp = len(time_stamp)

for i in range(len_time_stamp):

hdrecord = record.Record(time_stamp[i], 0)

hdrecord.tagtype = tag_self.tagtype

hdrecord.quality = random.randint(182, 192)

hdrecord.value = random.randint(0, 10)

snapshot_list.append(hdrecord)

try:

tag_self.save_disorder_snapshots(snapshots=snapshot_list)

except Exception as e:

print("save_snapshots error", e.errcode)

else:

print("saving disordered snapshots succeeds")


TagMgr类管理

Navigation: Python >

TagMgr类管理

 Return to chapter overview


tagmgr模块

Navigation: Python > TagMgr类管理 >

tagmgr模块

 Return to chapter overview

·tagmgr模块(tagmgr.py)

类：

TagMgr

方法：

v 新增tag

v 获取Tag对象

v 根据tagID获取tagType

v 删除指定tagname的tag点

v 按照查询条件查找满足条件的普通点的迭代器

v 批量新增普通点

v 批量修改普通点属性

v 批量新增统计点

v 批量修改统计点属性

v 批量新增计算点

v 批量修改计算点属性

v 批量新增报警点

v 批量修改报警点属性

v 按照查询条件查找满足条件的统计点的迭代器

v 按照查询条件查找满足条件的计算点的迭代器

v 按照查询条件查找满足条件报警点的迭代器

·举例

import unittest

from server import *

from tagmgr import *

from tag import *

from record import *

from datetime import time

class TagMgrTestCase(unittest.TestCase):

def setUp(self):

self.server = Server('168.2.237.97', 5678)

#self.server = Server('127.0.0.1', 5678)

self.server.connect(2)

self.server.login('admin', 'admin')

def tearDown(self):

self.server.disconnect()

def test_snapshots_opt(self):

tag_mgr = tagmgr.TagMgr(self.myServer.myServer)

try:

ret = tag_mgr.delete_tag('tagSn1')

ret = tag_mgr.delete_tag('tagSn2')

except :

print "delete tag 错误"

ret = tag_mgr.add_tag(tagname = 'tagSn1', tagtype = 'int16')

unittest.TestCase.assertEqual(self,RIGHT, ret)

ret = tag_mgr.add_tag(tagname = 'tagSn2', tagtype = 'int32')

unittest.TestCase.assertEqual(self,RIGHT, ret)

tag1 = tag_mgr.get_tag('tagSn1')

tag2 = tag_mgr.get_tag('tagSn2')

snapshots = []

hdRecord1 = record.Record(1000, 0)

hdRecord1.quality = 192

hdRecord1.tagtype = 'int16'

hdRecord1.value = '123'

hdRecord2 = record.Record(2000, 0)

hdRecord2.quality = 192

hdRecord2.tagtype = 'int32'

hdRecord2.value = '234'

dest_snapshot_list = []

dest_snapshot_list.append((tag1.tagid,hdRecord1))

dest_snapshot_list.append((tag2.tagid,hdRecord2))

tag_mgr.save_snapshots(dest_snapshot_list)

tagIDs = []

strTagTypes = []

tagIDs.append(tag1.tagid)

tagIDs.append(tag2.tagid)

strTagTypes.append('int16')

strTagTypes.append('int32')

result = tag_mgr.get_snapshots(tagIDs,strTagTypes)

num = 2

ret = result[0]

for i in range(count*2):

print result[1][i].value,' and rtn code is',result[2][i]

if(result[2][i] != hyperdb.hd_sucess):

ret = result[2][i]

unittest.TestCase.assertEqual(self,RIGHT, ret)

#测试批量插值数据接口

def test_ar_query_tags_interp_records_by_mode_query(self):

tag_mgr = tagmgr.TagMgr(self.myServer.myServer)

tag1 = tag_mgr.get_tag('hdsys_cpu')

tag2 = tag_mgr.get_tag('hdsys_mem')

tagIDs = []

strTagTypes = []

dt = datetime.now()

hdTime = hyperdb.HDTime()

hdTime.nSec = c_int32(int(time.mktime(dt.timetuple())))

hdTime.nMsec = c_int16(dt.microsecond/1000)

times = []

count = 2000

for i in range (count):

tagIDs.append(tag1.tagid)

strTagTypes.append('int8')

newTime = hyperdb.HDTime()

newTime.nSec = hdTime.nSec - i*5-100

times.append(newTime)

for i in range (count):

tagIDs.append(tag2.tagid)

strTagTypes.append('int8')

newTime = hyperdb.HDTime()

newTime.nSec = hdTime.nSec - i*5 -100

times.append(newTime)

result = tag_mgr.get_inter_records_multitags_by_mode(1, tagIDs,strTagTypes,times)

ret = result[0]

for i in range(count*2):

print result[1][i].value,' and rtn code is',result[2][i]

if(result[2][i] != hyperdb.hd_sucess):

ret = result[2][i]

unittest.TestCase.assertEqual(self,RIGHT, ret)


新增tag

新增tag新增tag

Navigation: Python > TagMgr类管理 > tagmgr模块 >

新增tag新增tag

 Return to chapter overview

·方法定义

add_tag(self, **attributes)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
**attributes | 属性字典，例如'tagname = 'python',tagtype = 'int8', descriptor = 'pythontest'等，其余属性参见hyperdb.TagProp，其中tagname和tagtype是必填项，其他可使用系统缺省值 | 字典类型 |

·异常

如果调用失败，抛出hyperdb.HDError异常

如果参数错误，抛出ArgumentError异常

·返回值

hyperdb.hd_sucess

·方法调用

def AddTag(self):

attr = {'tagname': 'testtag', 'tagtype': 'int8'}

try:

self.myTagMgr.add_tag(**attr)

except Exception as e:

print("add_tag error: ", e.errcode)

else:

print("adding tag succeeds")


获取Tag对象

Navigation: Python > TagMgr类管理 > tagmgr模块 >

获取Tag对象

 Return to chapter overview

·方法定义

get_tag(self, tagname)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
tagname | 标签名称 | 字符串类型 |

·异常

如果调用失败，抛出hyperdb.HDError异常

如果参数错误，抛出TypeError异常

·返回值

Tag对象

·方法调用

def GetTag(self):

tagname = "testtag"

try:

tag_self = self.myTagMgr.get_tag(tagname=tagname)

except Exception as e:

print("get_tag error", e.errcode)

else:

print("getting tag:", tag_self.tagname, " succeeds")


根据tagID获取tagType

Navigation: Python > TagMgr类管理 > tagmgr模块 >

根据tagID获取tagType

 Return to chapter overview

·方法定义

get_tagType(self, tagID)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
tagID | 标签的ID | 数字类型 |

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

tag的类型（例如 ‘int8’），返回值类型为string

·方法调用

def GetTagType(self):

tagname = ["testtag"]

try:

tag_ID = self.myTagMgr.get_tagIDs(tagnames=tagname)

except Exception as e:

print("get_tagIDs error", e.errcode)

try:

tag_type = self.myTagMgr.get_tagType(tagID=tag_ID[1][0])

except Exception as e:

print("get_tagType error", e.errcode)

else:

print("getting tag_type:", tag_type, " succeeds")


删除指定tagname的tag点

Navigation: Python > TagMgr类管理 > tagmgr模块 >

删除指定tagname的tag点

 Return to chapter overview

·方法定义

delete_tag(self, tagname)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
tagname | tag点名 | 字符串类型 |

·异常

如果调用失败，抛出hyperdb.HDError异常

如果参数错误，抛出TypeError异常

·返回值

hyperdb.hd_sucess

·方法调用

def DeleteTag(self):

tagname = "testtag"

try:

self.myTagMgr.delete_tag(tagname=tagname)

except Exception as e:

print("delete_tag error:", e.errcode)

else:

print("deleting tag succeeds")


按照查询条件查找满足条件的普通点的迭代器

Navigation: Python > TagMgr类管理 > tagmgr模块 >

按照查询条件查找满足条件的普通点的迭代器

 Return to chapter overview

·方法定义

query_tags_cond(self, conds)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
conds | 查询条件的列表，每个查询条件是一个三元组，形如[('ta gname','like','test'),('tagtype','=','int8')]。通过本接口得到迭代器后通过iterate.ge t_next()获取点的属性 | 由三元组构成的list |

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

返回Iterate的对象

·注意事项

1.三元组第一个元素为属性项ID，标志该查询条件针对的某一个具体属性

属性项ID：

属性项ID | 代表的Tag属性项
archiving | bArchiving
changedate | nChangeDate
changer | szChanger
collectorid | nCollectorID
collectorname | szCollectorName
compdev | fCompDev
compmaxtime | nCompMax
comptype | nCompType
creationdate | nCreationDate
creator | szCreator
dataorder | nDataOrder
descriptor | szDescriptor
deviceid | nDeviceID
devicename | szDeviceName
digitalset | nDigitalSet
engunit | szEngUnits
excdev | fExcMin？
excmaxtime | fExcMax
instrumentaddress | szInstrumentAddress
instrumentaddresstype | nInstrumentAddressType
minvalue | fMinValue
param1 | nParam1
param2 | nParam2
param3 | nParam3
param4 | nParam4
param5 | nParam5
recaccess | nRecAccess
recnormalgroup | szRecGroup
recownergroup | szRecOwner
scan | bScan
scangroupid | nScanGroupID
scangroupname | szScanGroupName
span | fSpan
tagaccess | nTagAccess
tagavaliable | nTagAvaliable
tagclass | nTagClass
tagid | nTagID
tagname | szTagName
tagnormalgroup | szTagGroup
tagownergroup | szTagOwner
tagtype | nTagType

2.三元组第二个元素为属性项查询关系

属性项查询关系：

属性项查询关系 | 含义
= | 等于
<> | 不等于
> | 大于
< | 小于
>= | 大于或者等于
<= | 小于或者等于
like | 模糊查询，“*”表示多字符模糊查询， “？”表示单字符模糊查询

3.三元组第三个元素为属性项的值，用字符串表示

·方法调用

def QueryTagsCond(self):

# conds = [('tagname', 'like', '*int16*')]

# conds = [('tagtype', '=', 'int32')]

conds = [('tagid', '>=', '13')]

try:

ret = self.myTagMgr.query_tags_cond(conds=conds)

except Exception as e:

print("query_tags_cond error", e.errcode)

else:

print("querying tags by conditions succeeds")

while True:

hdrec = ret.get_next()

if hdrec is None:

break

else:

print("tag's name: ", hdrec.tagname)


批量新增普通点

Navigation: Python > TagMgr类管理 > tagmgr模块 >

批量新增普通点

 Return to chapter overview

·方法定义

add_tags(self, props)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
props | 多个点属性列表，列表元素为每个点的属性字典。 例如： [{'tagname': 'tag0','tagtype': 'int32'}, {'tagname': 'tag1','tagtype': 'int32'}] | 字典类型的list |

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

hyperdb.hd_sucess

·方法调用

def AddTags(self):

attr = [{'tagname': 'tag_int16_30', 'tagtype': 'int8'},

{'tagname': 'tag_int16_31', 'tagtype': 'int8'},

{'tagname': 'tag_int16_32', 'tagtype': 'int8'},

{'tagname': 'tag_int16_33', 'tagtype': 'int8'},

{'tagname': 'tag_int16_34', 'tagtype': 'int8'},

{'tagname': 'tag_int16_35', 'tagtype': 'int8'},

{'tagname': 'tag_int16_36', 'tagtype': 'int8'},

{'tagname': 'tag_int16_37', 'tagtype': 'int8'},

{'tagname': 'tag_int16_38', 'tagtype': 'int8'},

{'tagname': 'tag_int16_39', 'tagtype': 'int8'}]

try:

self.myTagMgr.add_tags(attr)

except Exception as e:

print("add_tags error: ", e.errcode)

else:

print("adding tags succeeds")


批量修改普通点属性

Navigation: Python > TagMgr类管理 > tagmgr模块 >

批量修改普通点属性

 Return to chapter overview

·方法定义

modify_tags_attributes(self, props)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
props | 多个点属性列表，列表元素为每个点的属性字典。 | 字典类型的list |

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

hyperdb.hd_sucess

·注意事项

属性字典必须遵循特定的格式,例如：

[

{'tagname':'tag0',

'descriptor':'123321'

},

{'tagname':'tag1',

'descriptor':'234432'

}

]

tagname被用来定位被修改的tag点。

有些属性无法修改,例如 'tagname'，具体参考iHyperDB中的Tag属性页面。

·方法调用

def ModifyTagsAttributes(self):

tagnames = ['tag_int16_10', 'tag_int16_11']

try:

tag1 = self.myTagMgr.get_tag(tagname=tagnames[0])

except Exception as e:

print("get_tagIDs error: ", e.errcode)

try:

tag2 = self.myTagMgr.get_tag(tagname=tagnames[1])

except Exception as e:

print("get_tagIDs error: ", e.errcode)

print("tagname: ", tag1.tagname, "descriptor: ", tag1.descriptor,"tagname: ", tag2.tagname, "descriptor: ", tag2.descriptor) props = [{'tagname': 'tag_int16_10', 'descriptor': 'haha'},{'tagname': 'tag_int16_11', 'descriptor': 'hahaha'}]

try:

self.myTagMgr.modify_tags_attributes(props=props)

except Exception as e:

print("modify_tags_attributes error: ", e.errcode)

else:

print("modifying tags' attributes succeeds")

try:

tag1 = self.myTagMgr.get_tag(tagname=tagnames[0])

except Exception as e:

print("get_tagIDs error: ", e.errcode)

try:

tag2 = self.myTagMgr.get_tag(tagname=tagnames[1])

except Exception as e:

print("get_tagIDs error: ", e.errcode)

print("tagname: ", tag1.tagname, "descriptor: ", tag1.descriptor,"tagname: ", tag2.tagname, "descriptor: ", tag2.descriptor)


批量新增统计点

Navigation: Python > TagMgr类管理 > tagmgr模块 >

批量新增统计点

 Return to chapter overview

·方法定义

add_stats_tags(self, props)

·方法参数说明

参数名 | 参数说明 | 参数类型 | 默认值
props | 多个点属性列表，列表元素为每个点的属性字典。例如： [ {'tagname': 'sttag0', 'tagtype': 'float64', 'szSourceTagName':'srctag', 'nSampleStartDate': 0, 'nSampleInterval':10, 'nSampleMode':0, 'nStatsType': 0, 'nCalcPeriod':1, 'nScanPeriod':10, 'nSampleType':0, 'nSampleStartDate':1 }, {'tagname': 'sttag1', 'tagtype': 'float64', 'szSourceTagName':'srctag', 'nSampleStartDate': 0, 'nSampleInterval':10, 'nSampleMode':0, 'nStatsType': 0, 'nCalcPeriod':2, 'nScanPeriod':10, 'nSampleType':0, 'nSampleStartDate':1 } ] 注： 1.输入的字典属性dictionary attributes应该包括StatsTagProp的参数 2.创建统计点之前，确保普通点的存在，例如：上述例子中的“src tag” | 字典类型的list |

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

hyperdb.hd_sucess

·方法调用

def AddStatsTags(self):

props = [{'tagname': 'sttag0',

'tagtype': 'float64',

'szSourceTagName':'srctag',

'nSampleStartDate': 0,

'nSampleInterval':10,

'nSampleMode':0,

'nStatsType': 0,

'nCalcPeriod':1,

'nScanPeriod':10,

'nSampleType':0,

'nSampleStartDate':1

},{'tagname': 'sttag1',

'tagtype': 'float64',

'szSourceTagName':'srctag',

'nSampleStartDate': 0,

'nSampleInterval':10,

'nSampleMode':0,

'nStatsType': 0,

'nCalcPeriod':2,

'nScanPeriod':10,

'nSampleType':0,

'nSampleStartDate':1 }]

try:

tagids = self.myTagMgr.add_stats_tags(props=props)

except Exception as e:

print("add_stats_tags error: ", e.errcode)

else:

print("adding stats tags succeeds")


批量修改统计点属性

Navigation: Python > TagMgr类管理 > tagmgr模块 >

批量修改统计点属性

 Return to chapter overview

·方法定义

modify_stats_tag_attributes(self, props)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
props | 多个点属性列表，列表元素为每个点的属性字典。 | 字典类型的list |

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

hyperdb.hd_sucess

·注意事项

属性字典必须遵循特定的格式,例如：

[

{'tagname':'sttag0',

'descriptor' :'123',

},

{'tagname':'sttag1',

'descriptor' :'234',

}

]

tagname被用来定位被修改的tag点。有些属性无法修改,例如 'tagname'，具体参考iHyperDB中的Tag属性页面。

·方法调用

def ModifyStatsTagAttributes(self):

props = [{'tagname': 'sttag0', 'descriptor': '123'},

{'tagname': 'sttag1', 'descriptor': '234'}]

tagnames = ['sttag0', 'sttag1']

try:

tag1 = self.myTagMgr.get_tag(tagname=tagnames[0])

except Exception as e:

print("get_tag error: ", e.errcode)

try:

tag2 = self.myTagMgr.get_tag(tagname=tagnames[1])

except Exception as e:

print("get_tag error: ", e.errcode)

print("tagname: ", tag1.tagname, "descriptor: ", tag1.descriptor,"tagname: ", tag2.tagname, "descriptor: ", tag2.descriptor)

try:

self.myTagMgr.modify_stats_tag_attributes(props=props)

except Exception as e:

print("modify_stats_tag_attributes error: ", e.errcode)

else:

print("modifying stats tags' attributes succeeds")

try:

tag1 = self.myTagMgr.get_tag(tagname=tagnames[0])

except Exception as e:

print("get_tag error: ", e.errcode)

try:

tag2 = self.myTagMgr.get_tag(tagname=tagnames[1])

except Exception as e:

print("get_tag error: ", e.errcode)

print("tagname: ", tag1.tagname, "descriptor: ", tag1.descriptor,"tagname:",tag2.tagname, "descriptor: ", tag2.descriptor)


批量新增计算点

Navigation: Python > TagMgr类管理 > tagmgr模块 >

批量新增计算点

 Return to chapter overview

·方法定义

add_calc_tags(self, props)

·方法参数说明

参数名 | 参数说明 | 参数类型 | 默认值
props | 多个点属性列表，列表元素为每个点的属性字典。 例如： [{'tagname': 'catag0', 'tagtype': 'int32', 'szCalcExpr': '\'srctag\'+1', 'szSourceTagName':'srctag', 'nCalcMode' : 0, 'nCalcPeriod' :5 },{'tagname': 'catag1', 'tagtype': 'int32', 'szCalcExpr': '\'srctag\'+1', 'szSourceTagName':'srctag', 'nCalcMode' : 0, 'nCalcPeriod' :5 }] | 字典类型的list |

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

hyperdb.hd_sucess

·注意事项

1.输入的字典属性dictionary attributes应该包括CalcTagProp的参数。

2.创建计算点之前，确保普通点的存在，例如：上述例子中的“s rctag”。

·方法调用

def AddCalcTags(self):

props = [{'tagname': 'catag0',

'tagtype': 'int32',

'szCalcExpr': '\'srctag\'+1',

'szSourceTagName':'srctag',

'nCalcMode' : 0,

'nCalcPeriod' :5

},{'tagname': 'catag1',

'tagtype': 'int32',

'szCalcExpr': '\'srctag\'+1',

'szSourceTagName':'srctag',

'nCalcMode' : 0,

'nCalcPeriod' :5

}]

try:

tagcalcids = self.myTagMgr.add_calc_tags(props=props)

except Exception as e:

print("add_calc_tags error: ", e.errcode)

else:

print("adding calc tags succeeds")


批量修改计算点属性

Navigation: Python > TagMgr类管理 > tagmgr模块 >

批量修改计算点属性

 Return to chapter overview

·方法定义

modify_calc_tag_attributes(self, props)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
props | 多个点属性列表，列表元素为每个点的属性字典。 | 字典类型的list |

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

hyperdb.hd_sucess

·注意事项

属性字典必须遵循特定的格式,例如：

[

{'tagname':'catag0',

'nCalcPeriod' :6,

'szCalcExpr': '\'srctag\'+2',

'descriptor':'123321'

},

{'tagname':'catag1',

'nCalcPeriod' :7,

'szCalcExpr': '\'srctag\'+3',

'descriptor':'234432' }

]

tagname被用来定位被修改的tag点。有些属性无法修改,例如 'tagname'，具体参考iHyperDB中的Tag属性页面。

·方法调用

def ModifyCalcTagAttributes(self):

props = [{'tagname':'catag0',

'nCalcPeriod' :6,

'szCalcExpr': '\'srctag\'+2',

'descriptor':'123321'

},

{'tagname':'catag1',

'nCalcPeriod' :7,

'szCalcExpr': '\'srctag\'+3',

'descriptor':'234432' }]

tagnames = ['catag0', 'catag1']

try:

tag1 = self.myTagMgr.get_tag(tagname=tagnames[0])

except Exception as e:

print("get_tag error: ", e.errcode)

try:

tag2 = self.myTagMgr.get_tag(tagname=tagnames[1])

except Exception as e:

print("get_tag error: ", e.errcode)

print("tagname: ", tag1.tagname, "descriptor: ", tag1.descriptor,"tagname: ", tag2.tagname, "descriptor: ", tag2.descriptor)

try:

self.myTagMgr.modify_calc_tag_attributes(props=props)

except Exception as e:

print("modify_calc_tag_attributes error: ", e.errcode)

else:

print("modifying calc tags' attributes succeeds")

try:

tag1 = self.myTagMgr.get_tag(tagname=tagnames[0])

except Exception as e:

print("get_tag error: ", e.errcode)

try:

tag2 = self.myTagMgr.get_tag(tagname=tagnames[1])

except Exception as e:

print("get_tag error: ", e.errcode)

print("tagname: ", tag1.tagname, "descriptor: ", tag1.descriptor,"tagname: ", tag2.tagname, "descriptor: ", tag2.descriptor)


批量新增报警点

Navigation: Python > TagMgr类管理 > tagmgr模块 >

批量新增报警点

 Return to chapter overview

·方法定义

add_alarm_tags(self, props)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
props | 多个点属性列表，列表元素为每个点的属性字典。 例如： [{'tagname': 'amtag0', 'tagtype': 'int32', 'sourcetagname': 'int8' },{'tagname': 'amtag1', 'tagtype': 'int32', 'sourcetagname': 'int8' }] | 字典类型的list |

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

hyperdb.hd_sucess

·注意事项

1.输入的字典属性dictionary attributes应该包括AlarmTagProp的参数

2.创建计算点之前，确保普通点的存在，例如：上述例子中的“'int8'”

·方法调用

def AddAlarmTags(self):

props = [{'tagname': 'amtag0',

'tagtype': 'int32',

'sourcetagname': 'int8'

},

{'tagname': 'amtag1',

'tagtype': 'int32',

'sourcetagname': 'int8'

}]

try:

tagalarmids = self.myTagMgr.add_alarm_tags(props=props)

except Exception as e:

print("add_alarm_tags error: ", e.errcode)

else:

print("adding alarm tags succeeds")


批量修改报警点属性

Navigation: Python > TagMgr类管理 > tagmgr模块 >

批量修改报警点属性

 Return to chapter overview

·方法定义

modify_alarm_tags_attributes(self, props)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
props | 多个点属性列表，列表元素为每个点的属性字典。 | 字典类型的list |

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

hyperdb.hd_sucess

·注意事项

属性字典必须遵循特定的格式,例如：

[

{'tagname': 'amtag0', 'descriptor': 'hahaha'},

{'tagname': 'amtag1', 'descriptor': 'aaaaaa'}

]

tagname被用来定位被修改的tag点。有些属性无法修改,例如 'tagname'，具体参考iHyperDB中的Tag属性页面。

·方法调用

def ModifyAlarmTagsAttributes(self):

props = [{'tagname': 'amtag0', 'descriptor': 'hahaha'},

{'tagname': 'amtag1', 'descriptor': 'aaaaaa'}]

tagnames = ['amtag0', 'amtag1']

try:

tag1 = self.myTagMgr.get_tag(tagname=tagnames[0])

except Exception as e:

print("get_tag error: ", e.errcode)

try:

tag2 = self.myTagMgr.get_tag(tagname=tagnames[1])

except Exception as e:

print("get_tag error: ", e.errcode)

print("tagname: ", tag1.tagname, "descriptor: ", tag1.descriptor,"tagname: ", tag2.tagname, "descriptor: ", tag2.descriptor)

try:

self.myTagMgr.modify_alarm_tags_attributes(props=props)

except Exception as e:

print("modify_alarm_tags_attributes error: ", e.errcode)

else:

print("modifying alarm tags' attributes succeeds")

try:

tag1 = self.myTagMgr.get_tag(tagname=tagnames[0])

except Exception as e:

print("get_tag error: ", e.errcode)

try:

tag2 = self.myTagMgr.get_tag(tagname=tagnames[1])

except Exception as e:

print("get_tag error: ", e.errcode)

print("tagname: ", tag1.tagname, "descriptor: ", tag1.descriptor,"tagname: ", tag2.tagname, "descriptor: ", tag2.descriptor)


按照查询条件查找满足条件的统计点的迭代器

Navigation: Python > TagMgr类管理 > tagmgr模块 >

按照查询条件查找满足条件的统计点的迭代器

 Return to chapter overview

·方法定义

query_stats_tags_cond(self, conds)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
conds | 查询条件的列表，每个查询条件是一个三元组，形如[('tag name','like','test'),('tagtype','=','int8')]。通过本接口得到迭代器后通过iterate.get _next()获取点的属性 | 三元组类型的list |

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

Iterate的对象

·注意事项

1.三元组第一个元素为属性项ID，标志该查询条件针对的某一个具体属性

2.三元组第二个元素为属性项查询关系

3.三元组第三个元素为属性项的值，用字符串表示

·方法调用

def QueryStatsTagsCond(self):

conds = [('tagname', 'like', '*tag*'),

('tagtype', '=', 'float64'),

('tagid', '=', '649')]

try:

ret = self.myTagMgr.query_stats_tags_cond(conds=conds)

except Exception as e:

print("query_stats_tags_cond error", e.errcode)

else:

print("querying stats tags by conditions succeeds")

while True:

hdrec = ret.get_next()

if hdrec is None:

break

else:

print("tag's name: ", hdrec.tagname)


按照查询条件查找满足条件的计算点的迭代器

Navigation: Python > TagMgr类管理 > tagmgr模块 >

按照查询条件查找满足条件的计算点的迭代器

 Return to chapter overview

·方法定义

query_calc_tags_cond(self, conds)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
conds | 查询条件的列表，每个查询条件是一个三元组，形如[('t agname','like','test'),('tagtype','=','int8')]。通过本接口得到迭代器后通过iterate. get_next()获取点的属性。 | 三元组类型的list |

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

Iterate的对象

·注意事项

1.三元组第一个元素为属性项ID，标志该查询条件针对的某一个具体属性

2.三元组第二个元素为属性项查询关系

3.三元组第三个元素为属性项的值，用字符串表示

·方法调用

def QueryCalcTagsCond(self):

conds = [('tagname', 'like', '*tag*'),

('tagtype', '=', 'int32')]

try:

ret = self.myTagMgr.query_calc_tags_cond(conds=conds)

except Exception as e:

print("query_calc_tags_cond error", e.errcode)

else:

print("querying calc tags by conditions succeeds")

while True:

hdrec = ret.get_next()

if hdrec is None:

break

else:

print("tag's name: ", hdrec.tagname)


按照查询条件查找满足条件报警点的迭代器

Navigation: Python > TagMgr类管理 > tagmgr模块 >

按照查询条件查找满足条件报警点的迭代器

 Return to chapter overview

·方法定义

query_alarm_tags_cond(self, conds)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
conds | 查询条件的列表，每个查询条件是一个三元组，形如[('t agname','like','test')]。通过本接口得到迭代器后通过iterate.get_next()获取点的属性 | 三元组类型的list |

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

Iterate的对象

·注意事项

1.三元组第一个元素为属性项ID，标志该查询条件针对的某一个具体属性

2.三元组第二个元素为属性项查询关系

3.三元组第三个元素为属性项的值，用字符串表示

4.报警点的类型为digital不能修改，无法根据tagtype来获取报警点

·方法调用

def QueryAlarmTagsCond(self):

conds = [('tagname', 'like', '*tag*')]

try:

ret = self.myTagMgr.query_alarm_tags_cond(conds=conds)

except Exception as e:

print("query_alarm_tags_cond error", e.errcode)

else:

print("querying alarm tags by conditions succeeds")

while True:

hdrec = ret.get_next()

if hdrec is None:

break

else:

print("tag's name: ", hdrec.tagname)


权限管理

Navigation: Python >

权限管理

 Return to chapter overview


权限管理模块

Navigation: Python > 权限管理 >

权限管理模块

 Return to chapter overview

·权限管理模块，包括(user.py, security.py securitymgr.py,group.py)

类 | 方法
Security |
Trust |
hdUser | 修改密码 重置密码 添加用户到组 把用户从组中删除 修改用户的描述 查询用户所在的所有组
SecurityMgr | 获取tag权限 获取组权限 修改tag权限 修改组权限 添加信任 删除信任 获取所有的信任
UserGroup | 添加用户（python） 删除用户（python） 获取所有用户


修改密码

Navigation: Python > 权限管理 > 权限管理模块 >

修改密码

 Return to chapter overview

·方法定义

modify_password(self, oldpsw, newpsw)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
oldpsw | 老的密码 | 字符串类型 |
newpsw | 新密码 | 字符串类型 |

·异常

如果调用失败，抛出hyperdb.HDError异常

如果参数错误，抛出ArgumentError异常

·返回值

hyperdb.hd_sucess

·方法调用

def ModifyPassword(self, old_password, new_password):

self.myhdUser = hdUser.User(name='admin', desc='admin')

try:

self.myhdUser.modify_password(oldpsw=old_password,newpsw=newpassword)

except Exception as e:

print("modify_password error: ", e.errcode)

else:

print("modifying password succeeds")


重置密码

Navigation: Python > 权限管理 > 权限管理模块 >

重置密码

 Return to chapter overview

·方法定义

reset_password(self, newpsw)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
newpsw | 新密码 | 字符串类型 |

·异常

如果调用失败，抛出hyperdb.HDError异常

如果参数错误，抛出ArgumentError异常

·返回值

hyperdb.hd_sucess

·方法调用

def ResetPassword(self, new_password):

self.myhdUser = hdUser.User(name='admin', desc='admin')

try:

self.myhdUser.reset_password(newpsw=new_password)

except Exception as e:

print("reset_password error: ", e.errcode)

else:

print("resetting password succeeds")


添加用户到组

Navigation: Python > 权限管理 > 权限管理模块 >

添加用户到组

 Return to chapter overview

·方法定义

add_group_membership(self,groupname)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
groupname | 组名 | 字符串类型 |

·异常

如果调用失败，抛出hyperdb.HDError异常

如果参数错误，抛出ArgumentError异常

·返回值

hyperdb.hd_sucess

·注意事项

使用前，确保存在一个用户和一个组

·方法调用

def AddGroupMembership(self, group_name):

self.myhdUser = hdUser.User(name='haha', desc='haha')

try:

self.myhdUser.add_group_membership(groupname=group_name)

except Exception as e:

print("add_group_membership error: ", e.errcode)

else:

print("adding group membership succeeds")


把用户从组中删除

Navigation: Python > 权限管理 > 权限管理模块 >

把用户从组中删除

 Return to chapter overview

·方法定义

delete_group_membership(self,groupname)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
groupname | 组名 | 字符串类型 |

·异常

如果调用失败，抛出hyperdb.HDError异常

如果参数错误，抛出ArgumentError异常

·返回值

hyperdb.hd_sucess

·方法调用

def DeleteGroupMembership(self, group_name):

self.myhdUser = hdUser.User(name='haha', desc='haha')

try:

self.myhdUser.delete_group_membership(groupname=group_name)

except Exception as e:

print("delete_group_membership error: ", e.errcode)

else:

print("deleting group membership succeeds")


修改用户的描述

Navigation: Python > 权限管理 > 权限管理模块 >

修改用户的描述

 Return to chapter overview

·方法定义

modify_user_desc(newdesc)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
newdesc | 新描述 | 字符串类型 |

·异常

如果调用失败，抛出hyperdb.HDError异常

如果参数错误，抛出ArgumentError异常

·返回值

hyperdb.hd_sucess

·方法调用

def modify_user_desc(self, new_description):

self.myhdUser = hdUser.User(name='haha', desc='haha')

try:

self.myhdUser.modify_user_desc(newdesc=new_description)

except Exception as e:

print("modify_user_desc error: ", e.errcode)

else:

print("modifying user desc succeeds")


查询用户所在的所有组

Navigation: Python > 权限管理 > 权限管理模块 >

查询用户所在的所有组

 Return to chapter overview

·方法定义

get_member_groups(self, username)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
username | 用户名 | 字符串类型 |

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

用户所在组的迭代器

·注意事项

使用get_next()方法获取每一条记录，当获取记录结束时get_next() 返回’None’

·方法调用

def GetMemberGroups(self):

self.myhdUser = hdUser.User(name='haha', desc='haha')

try:

ret = self.myhdUser.get_member_groups()

except Exception as e:

print("get_member_groups error: ", e.errcode)

else:

print("getting member groups succeeds")

while True:

mem_group = ret.get_next()

if mem_group is None:

break

else:

print("The member group is :", mem_group.name)


获取tag权限

Navigation: Python > 权限管理 > 权限管理模块 >

获取tag权限

 Return to chapter overview

·方法定义

get_tag_security(self)

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

Security类的对象

·方法调用

def GetTagSecurity(self):

try:

ret_secitem = self.myServer.security_mgr.get_tag_security()

except Exception as e:

print("get_tag_security error: ", e.errcode)

else:

print("getting tag security succeeds")

print("tag security' owngroupname:", ret_secitem.owngroupname,"tag security' operategroupname:", ret_secitem.operategroupname,"tag security' securitylevel:", ret_secitem.securitylevel)


获取组权限

Navigation: Python > 权限管理 > 权限管理模块 >

获取组权限

 Return to chapter overview

·方法定义

get_tag_security(self)

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

Security类的对象

·方法调用

def GetGroupSecurity(self):

try:

ret_secitem = self.myServer.security_mgr.get_group_security()

except Exception as e:

print("get_group_security error: ", e.errcode)

else:

print("getting group security succeeds")

print("group security' owngroupname:", ret_secitem.owngroupname,"group security' operategroupname:", ret_secitem.operategroupname,"group security' securitylevel:", ret_secitem.securitylevel)


修改tag权限

Navigation: Python > 权限管理 > 权限管理模块 >

修改tag权限

 Return to chapter overview

·方法定义

modify_tag_security(self,secitem)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
secitem | tag新的权限 | 字符串类型 |

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

RecordIterate的迭代器

·注意事项：

1.使用get_next()方法获取每一条记录，当获取记录结束时get_next() 返回’None’

2.secitem的属性secitem.securitylevel的取值

·方法调用

def ModifyTagSecurity(self):

try:

ret_secitem_org = self.myServer.security_mgr.get_tag_security()

except Exception as e:

print("getting tag security error: ", e.errcode)

else:

print("getting tag security succeeds")

print("tag security' owngroupname:",ret_secitem_org.owngroupname,"tag security' operategroupname:", ret_secitem_org.operategroupname,"tag security' securitylevel:", ret_secitem_org.securitylevel)

ret_secitem_mdf = security.Security(owngroupname='admin', operategroupname='administer', securitylevel=53)

try:

self.myServer.security_mgr.modify_tag_security(secitem=ret_secitem_mdf)

except Exception as e:

print("modify_tag_security error: ", e.errcode)

else:

print("modifying tag security succeeds")

try:

ret_secitem = self.myServer.security_mgr.get_tag_security()

except Exception as e:

print("getting tag security error: ", e.errcode)

else:

print("getting tag security succeeds")

print("tag security' owngroupname:", ret_secitem.owngroupname,"tag security' operategroupname:", ret_secitem.operategroupname,"tag security' securitylevel:", ret_secitem.securitylevel)


修改组权限

Navigation: Python > 权限管理 > 权限管理模块 >

修改组权限

 Return to chapter overview

·方法定义

modify_group_security(self,secitem)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
secitem | 修改后的组权限 | 字符串类型 |

·异常

如果调用失败，抛出hyperdb.HDError异常

如果参数错误，抛出HDParaError异常

·返回值

元组（实际查询的记录数，查询记录列表）其中，查询记录类型为record.HDRecord,以下关于记录的数据类型均同此类型

·注意事项：

secitem的属性secitem.securitylevel的取值：

21：所属组权限：无，操作组权限：无，其他组权限：无；

53：所属组权限：有，操作组权限：无，其他组权限：无；

61：所属组权限：有，操作组权限：有，其他组权限：无；

63：所属组权限：有，操作组权限：有，其他组权限：有；

权限大小：所属组≥操作组≥其他组

·方法调用

def ModifyGroupSecurity(self):

try:

ret_secitem_org = self.myServer.security_mgr.get_group_security()

except Exception as e:

print("getting group security error: ", e.errcode)

else:

print("getting group security succeeds")

print("group security'owngroupname:",ret_secitem_org.owngroupname,"group security'operategroupname:",ret_secitem_org.operategroupname,"group security' securitylevel:", ret_secitem_org.securitylevel)

ret_secitem_mdf=security.Security(owngroupname='admin',operategroupname='administer', securitylevel=61)

try:

self.myServer.security_mgr.modify_group_security(secitem=ret_secitem_mdf)

except Exception as e:

print("modify_group_security error: ", e.errcode)

else:

print("modifying group security succeeds")

try:

ret_secitem = self.myServer.security_mgr.get_group_security()

except Exception as e:

print("getting group security error: ", e.errcode)

else:

print("getting group security succeeds")

print("group security' owngroupname:", ret_secitem.owngroupname,"group security'operategroupname:",ret_secitem.operategroupname,"group security' securitylevel:", ret_secitem.securitylevel)


添加信任

Navigation: Python > 权限管理 > 权限管理模块 >

添加信任

 Return to chapter overview

·方法定义

add_trust(self, name,startip, endip,username)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
name | 信任名称 | 字符串类型 |
startip | 开始ip | 字符串类型 |
enip | 结束ip | 字符串类型 |
username | 用户名 | 字符串类型 |

·异常

如果调用失败，抛出hyperdb.HDError异常

如果参数错误，抛出ArgumentError异常

·返回值

hyperdb.hd_sucess

·方法调用

def AddTrust(self):

trust_name = 'haha'

trust_startip = '127.0.0.1'

trust_endip = '127.0.0.121'

trust_username = 'admin'

try:

self.myServer.security_mgr.add_trust(name=trust_name,startip=trust_startip, endip=trust_endip, username=trust_username)

except Exception as e:

print("add_trust error: ", e.errcode)

else:

print("adding trust succeeds")


删除信任

Navigation: Python > 权限管理 > 权限管理模块 >

删除信任

 Return to chapter overview

·方法定义

delete_trust(self, name)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
name | 信任名称 | 字符串类型 |

·异常

如果调用失败，抛出hyperdb.HDError异常

如果参数错误，抛出ArgumentError异常

·返回值

hyperdb.hd_sucess

·方法调用

def DeleteTrust(self):

try:

self.myServer.security_mgr.delete_trust(name='haha')

except Exception as e:

print("delete_trust error: ", e.errcode)

else:

print("deleting trust succeeds")


获取所有的信任

Navigation: Python > 权限管理 > 权限管理模块 >

获取所有的信任

 Return to chapter overview

·方法定义

get_all_trusts(self)

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

所有信任的迭代器

·注意事项：

使用get_next()方法获取每一条记录，当获取记录结束时get_next()返回’None’

·方法调用

def GetAllTrust(self):

try:

ret_iter = self.myServer.security_mgr.get_all_trusts()

except Exception as e:

print("get_all_trusts error: ", e.errcode)

else:

print("getting all trusts succeeds")

while True:

trust_rec = ret_iter.get_next()

if trust_rec is None:

break

else:

print("The trust' name : ", trust_rec.name,"The trust' start_ip : ", trust_rec.start_ip,"The trust' end_ip : ", trust_rec.end_ip,"The trust' user_name : ", trust_rec.user_name)


添加用户（python）

Navigation: Python > 权限管理 > 权限管理模块 >

添加用户（python）

 Return to chapter overview

·方法定义

add_user(self, name, psw, desc)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
name | 用户名 | 字符串类型 |
psw | 密码 | 字符串类型 |
desc | 描述 | 字符串类型 |

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

hyperdb.hd_sucess

·方法调用

def AddUser(self, name, password, description):

try:

self.myUsergroupMgr.add_user(name=name, psw=password, desc=description)

except Exception as e:

print("add_user error: ", e.errcode)

else:

print("adding user succeeds")


删除用户（python）

Navigation: Python > 权限管理 > 权限管理模块 >

删除用户（python）

 Return to chapter overview

·方法定义

delete_user(self,name)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
name | 用户名 | 字符串类型 |

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

hyperdb.hd_sucess

·方法调用

def DeleteUser(self):

try:

self.myUsergroupMgr.delete_user(name='haha')

except Exception as e:

print("delete_user error: ", e.errcode)

else:

print("deleting user succeeds")


获取所有用户

Navigation: Python > 权限管理 > 权限管理模块 >

获取所有用户

 Return to chapter overview

·方法定义

get_all_users(self)

·异常

如果调用失败，抛出hyperdb.HDError异常

如果参数错误，抛出HDParaError异常

·返回值

用户的迭代器

·注意事项：

使用get_next()方法获取每一条记录，当获取记录结束时get_next() 返回’None’

·方法调用

def GetAllUsers(self):

try:

ret_iter = self.myUsergroupMgr.get_all_users()

except Exception as e:

print("get_all_users error: ", e.errcode)

else:

print("getting all users succeeds")

while True:

users_rec = ret_iter.get_next()

if users_rec is None:

break

else:

print("The user's name: ", users_rec.name,"The user's description: ", users_rec.desc)


报警组管理

Navigation: Python >

报警组管理

 Return to chapter overview


报警组管理模块

Navigation: Python > 报警组管理 >

报警组管理模块

 Return to chapter overview

·报警组管理模块，包括(alarmgroup.py, alarmgroupmgr.py)

类 | 方法
AlarmGroup | 获取报警组的子组 获取报警组下面的tag点 修改报警组描述 修改报警组名称 修改报警组到新的父组下面
AlarmGroupMgr | 添加报警组 删除报警组 获取第一层级的报警组


获取报警组的子组

Navigation: Python > 报警组管理 > 报警组管理模块 >

获取报警组的子组

 Return to chapter overview

·方法定义

get_alarm_childgroups(self)

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

报警组的迭代器

·注意事项

使用get_next()方法获取每一条记录，当获取记录结束时get_next()返回’None’

·方法调用

def GetAlarmChildgroups(self):

name_aCg = 'default'

id_aCg = 1

desc_aCCg = 'default'

pID_aCg = 0

self.myAlarmGroup = alarmgroup.AlarmGroup(name=name_aCg,id=id_aCg,description=desc_aCCg, parentid=pID_aCg)

try:

iter_alCGs = self.myAlarmGroup.get_alarm_childgroups()

except Exception as e:

print("get_alarm_childgroups error: ", e.errcode)

else:

print("getting alarm child groups succeeds")

while True:

alCG = iter_alCGs.get_next()

if alCG is None:

break

else:

print("The alarm group' name: ", alCG.name, "\t"

"The alarm group' description: ", alCG.description, "\t"

"The alarm group' id: ", alCG.id, "\t"

"The alarm group' parentid: ", alCG.parentid)


获取报警组下面的tag点

Navigation: Python > 报警组管理 > 报警组管理模块 >

获取报警组下面的tag点

 Return to chapter overview

·方法定义

get_alarm_tags(self)

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

报警组下点的迭代器

·注意事项

使用get_next()方法获取每一条记录，当获取记录结束时 get_next()返回‘None’

·方法调用

def GetAlarmTags(self): self.myAlarmgroup =

alarmgroup.AlarmGroup(name='default', id=1, description='default', parentid=0)

try:

ret_iter = self.myAlarmgroup.get_alarm_tags()

except Exception as e:

print("get_alarm_tags error: ", e.errcode)

else:

print("getting alarm tags succeeds")

while True:

alatag_rec = ret_iter.get_next()

if alatag_rec is None:

break

else:

print("The alarm tag's name: ", alatag_rec.tagname)


修改报警组描述

Navigation: Python > 报警组管理 > 报警组管理模块 >

修改报警组描述

 Return to chapter overview

·方法定义

modify_description(self, newdesc)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
newdesc | 新的描述 | 字符串类型 |

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

hyperdb.hd_sucess

·方法调用

def ModifyDescription(self, alCG_name, alCG_description, alCG_id, alCG_pa rentid):

newdesc_alG = 'curry30'

self.myAlarmGroup = alarmgroup.AlarmGroup(name=alCG_name[0],id=alCG_id[0], description=alCG_description[0], parentid=alCG_parentid [0])

try:

self.myAlarmGroup.modify_description(newdesc=newdesc_alG)

except Exception as e:

print("modify_description error: ", e.errcode)

else:

print("modifying description succeeds")


修改报警组名称

Navigation: Python > 报警组管理 > 报警组管理模块 >

修改报警组名称

 Return to chapter overview

·方法定义

modify_name(self,newname)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
newname | 新的名称 | 字符串类型 |

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

hyperdb.hd_sucess

·方法调用

def ModifyName(self, alCG_name, alCG_description, alCG_id, alCG_parenti d):

newdname_alG = 'curry30'

self.myAlarmGroup = alarmgroup.AlarmGroup(name=alCG_name[0],id=alCG_id[0], description=alCG_description[0], parentid=alCG_parentid [0])

try:

self.myAlarmGroup.modify_name(newname=newdname_alG)

except Exception as e:

print("modify_name error: ", e.errcode)

else:

print("modifying name succeeds")


修改报警组到新的父组下面

Navigation: Python > 报警组管理 > 报警组管理模块 >

修改报警组到新的父组下面

 Return to chapter overview

·方法定义

modify_parentgroup(self,parentid)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
parentid | 新的父组id | 数字类型 |

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

hyperdb.hd_sucess

·注意事项

使用前，确保存在一个用户和一个组

·方法调用

def ModifyParentgroup(self, alCG_name, alCG_description, alCG_id, alCG_pa rentid):

newPgid_alG = alCG_id[1]

self.myAlarmGroup = alarmgroup.AlarmGroup(name=alCG_name[0],id=alCG_id[0], description=alCG_description[0], parentid=alCG_parentid[0])

try:

self.myAlarmGroup.modify_parentgroup(parentid=newPgid_alG)

except Exception as e:

print("modify_parentgroup error: ", e.errcode)

else:

print("modifying parentgroup succeeds")


添加报警组

Navigation: Python > 报警组管理 > 报警组管理模块 >

添加报警组

 Return to chapter overview

·方法定义

add_alarmgroup(self, name, desc, parentid = 0)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
name | 名称 | 字符串类型 |
desc | 描述 | 字符串类型 |
parentid | 父组id，它是您要在其下添加警报组的组id。当您没有提供父组id的值时，父组id默认值为0，否则您需要提供具体的父组id。您也可以通过获取第一层级组去获取他们的子组以获取父组id | 数字类型 | 0

·异常

如果调用失败，抛出hyperdb.HDError异常

如果参数错误，抛出ArgumentError异常

·返回值

hyperdb.hd_sucess

·方法调用

def AddAlarmGroup(self):

name_alG = ['ha', 'haha', 'hei', 'heihei']

desc_alG = ['ha', 'haha', 'hei', 'heihei']

parentid_alG = [0, 1, 0, 1]

try:

for i in range(4):

self.myAlarmGroupMgr.add_alarmgroup(name=name_alG[i], desc=desc_alG[i], parentid=parentid_alG[i])

except Exception as e:

print("add_alarmgroup error: ", e.errcode)

else:

print("adding alarm group succeeds")


删除报警组

Navigation: Python > 报警组管理 > 报警组管理模块 >

删除报警组

 Return to chapter overview

·方法定义

delete_alarmgroup(self, groupname, parentid)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
groupname | 组名 | 数字类型 |
parentid | 父组id，它是您要在其下添加警报组的组id。当您没有提供父组id的值时，父组id默认值为0，否则您需要提供具体的父组id。您也可以通过获取第一层级组去获取他们的子组以获取父组id | 数字类型 |

·异常

如果调用失败，抛出hyperdb.HDError异常

如果参数错误，抛出ArgumentError异常

·返回值

hyperdb.hd_sucess

·注意事项

删除的组下面不能有子组

·方法调用

def DeleteAlarmGroup(self):

name_alG = ['ha', 'haha', 'hei', 'heihei']

parentid_alG = [0, 1, 0, 1]

try:

for i in range(4):

self.myAlarmGroupMgr.delete_alarmgroup(groupname=name_alG[i], parentid=parentid_alG[i])

except Exception as e:

print("delete_alarmgroup error: ", e.errcode)

else:

print("deleting alarm group succeeds")


获取第一层级的报警组

Navigation: Python > 报警组管理 > 报警组管理模块 >

获取第一层级的报警组

 Return to chapter overview

·方法定义

get_top_level_alarmgroups(self)

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

报警组的数组

·方法调用

def GetTopLevelAlarmgroups(self):

try:

alGs = self.myAlarmGroupMgr.get_top_level_alarmgroups()

except Exception as e:

print("get_top_level_alarmgroups error: ", e.errcode)

else:

print("getting top level alarmgroups succeeds")

len_alGs = len(alGs)

for i in range(len_alGs):

print("The alarm group' name: ", alGs[i].name, "\t"

"The alarm group' description: ", alGs[i].description, "\t"

"The alarm group' id: ", alGs[i].id, "\t

"The alarm group' parentid: ", alGs[i].parentid)


采集器管理

Navigation: Python >

采集器管理

 Return to chapter overview


采集器管理模块

Navigation: Python > 采集器管理 >

采集器管理模块

 Return to chapter overview

·采集器管理模块，包括(collectormgr.py)

类 | 方法
CollectorMgr | 添加采集器 删除采集器 获取所有的采集器 根据名字获取采集器 修改采集器
ScanGroup |
Device | 添加扫描组 删除扫描组 获取所有扫描组 根据名字获取扫描组 修改扫描组
Collector | 添加设备 删除设备 获取所有设备 根据名字获取设备 修改设备


添加采集器

Navigation: Python > 采集器管理 > 采集器管理模块 >

添加采集器

 Return to chapter overview

·方法定义

add_collector(name,collectortype,desc,extparam)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
name | 采集器名称 | 字符串类型 |
collectortype | 采集器类型 | 字符串类型 |
desc | 描述 | 字符串类型 |
extparam | 扩展参数 | 字符串类型 |

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

hyperdb.hd_sucess


删除采集器

Navigation: Python > 采集器管理 > 采集器管理模块 >

删除采集器

 Return to chapter overview

·方法定义

delete_collector(name)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
name | 采集器名称 | 字符串类型 |

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

hyperdb.hd_sucess


获取所有的采集器

Navigation: Python > 采集器管理 > 采集器管理模块 >

获取所有的采集器

 Return to chapter overview

·方法定义

get_all_collectors()

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

采集器的迭代器


根据名字获取采集器

Navigation: Python > 采集器管理 > 采集器管理模块 >

根据名字获取采集器

 Return to chapter overview

·方法定义

get_collector(name)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
name | 采集器名称 | 字符串类型 |

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

采集器对象


修改采集器

Navigation: Python > 采集器管理 > 采集器管理模块 >

修改采集器

 Return to chapter overview

·方法定义

modify_collector(id,name,collectortype,description,extparam)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
name | 采集器名称 | 字符串类型 |
collectortype | 采集器类型 | 字符串类型 |
description | 描述 | 字符串类型 |
extparam | 扩展参数 | 字符串类型 |

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

hyperdb.hd_sucess


添加扫描组

Navigation: Python > 采集器管理 > 采集器管理模块 >

添加扫描组

 Return to chapter overview

·方法定义

add_scan_group(name,period,phrase,scantype,dataaddr,datalen,description,extparam)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
name | 采集器名称 | 字符串类型 |
period | 周期 | 数字类型 |
phrase | 相位 | 字符串类型 |
scantype | 扫描类型 | 字符串类型 |
dataaddr | 数据地址 | 字符串类型 |
datalen | 数据长度 | 数字类型 |
description | 描述 | 字符串类型 |
extparam | 扩展参数，使用缓存和刷新频率的组合，例如：“1，2000” | 字符串类型 |

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

hyperdb.hd_sucess


删除扫描组

Navigation: Python > 采集器管理 > 采集器管理模块 >

删除扫描组

 Return to chapter overview

·方法定义

delete_scan_group(scangroupname)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
scangroupname | 名称 | 字符串类型 |

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

hyperdb.hd_sucess


获取所有扫描组

Navigation: Python > 采集器管理 > 采集器管理模块 >

获取所有扫描组

 Return to chapter overview

·方法定义

get_scan_groups()

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

扫描组的迭代器


根据名字获取扫描组

Navigation: Python > 采集器管理 > 采集器管理模块 >

根据名字获取扫描组

 Return to chapter overview

·方法定义

get_scan_group(name)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
name | 名称 | 字符串类型 |

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

扫描组对象


修改扫描组

Navigation: Python > 采集器管理 > 采集器管理模块 >

修改扫描组

 Return to chapter overview

·方法定义

modify_scan_group(id,name,period,phrase,scantype,dataaddr,datalen,description,extparam)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
id | 采集器id | 数字类型 |
name | 名称 | 字符串类型 |
period | 周期 | 数字类型 |
phrase | 相位 | 字符串类型 |
scantype | 扫描类型 | 字符串类型 |
dataaddr | 数据地址 | 字符串类型 |
datalen | 数据长度 | 数字类型 |
description | 描述 | 字符串类型 |
extparam | 扩展参数，使用缓存和刷新频率的组合，例如：“1，2000” | 字符串类型 |

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

hyperdb.hd_sucess


添加设备

Navigation: Python > 采集器管理 > 采集器管理模块 >

添加设备

 Return to chapter overview

·方法定义

add_device(name, addr, port, trytime, timeout, extparam, isprimary, description)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
name | 名称 | 字符串类型 |
addr | 地址 | 字符串类型 |
port | 端口 | 字符串类型 |
trytime | 尝试次数 | 数字类型 |
timeout | 超时 | 数字类型 |
extparam | 扩展参数，OPC组容量和机器名的组合，例如：“2000,user” | 字符串类型 |
isprimary | 是否主 | 字符串类型 |
description | 描述 | 字符串类型 |

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

hyperdb.hd_sucess


删除设备

Navigation: Python > 采集器管理 > 采集器管理模块 >

删除设备

 Return to chapter overview

·方法定义

delete_device(name)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
name | 名称 | 字符串类型 |

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

hyperdb.hd_sucess


获取所有设备

Navigation: Python > 采集器管理 > 采集器管理模块 >

获取所有设备

 Return to chapter overview

·方法定义

get_all_devices()

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

设备的迭代器


根据名字获取设备

Navigation: Python > 采集器管理 > 采集器管理模块 >

根据名字获取设备

 Return to chapter overview

·方法定义

get_device(name)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
name | 名称 | 字符串类型 |

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

设备的对象


修改设备

Navigation: Python > 采集器管理 > 采集器管理模块 >

修改设备

 Return to chapter overview

·方法定义

modify_device(id,name, addr, port, trytime, timeout, extparam, isprimary, description)

·方法参数说明

参数名称 | 参数说明 | 参数类型 | 默认值
id | 采集器id | 数字类型 |
name | 名称 | 字符串类型 |
addr | 地址 | 字符串类型 |
port | 端口 | 字符串类型 |
trytime | 尝试次数 | 数字类型 |
timeout | 超时 | 数字类型 |
extparam | 扩展参数，OPC组容量和机器名的组合，例如：“2000,user” | 字符串类型 |
isprimary | 是否主 | 字符串类型 |
description | 描述 | 字符串类型 |

·异常

如果调用失败，抛出hyperdb.HDError异常

·返回值

hyperdb.hd_sucess


WebAPI

Navigation: »No topics above this level«

WebAPI

 Return to chapter overview

下面介绍Web客户端对外提供的快捷数据接口：

· S_BI_HD_03 新增snapShot值

· S_BI_HD_04 查询tag点实时值

· S_BI_HD_05 查询tag点历史数据

· S_BI_HD_06 查询tag点插值

· S_BI_HD_09 统计

· S_BI_HD_0101 添加tag点

· S_BI_HD_0102 删除tag点

· S_BI_HD_0103 修改tag点信息

· S_BI_HD_0104 查询tag点信息

· S_BI_HD_0105 查询tag点属性

· S_BI_HD_0107 tag点绑定（解绑）资源组

· S_BI_HD_0204 查询指定用户对于指定点表的权限信息接口

· S_BI_HD_0501 查询区间范围内tag点历史信息

· S_BI_HD_0502 查询某一时间戳向前或向后x条tag点历史信息


S_BI_HD_03 新增snapShot值

Navigation: WebAPI >

S_BI_HD_03 新增snapShot值

 Return to chapter overview

· 接口说明:

当前版本：0.1

接口描述：添加tag点的snapshot值

接口服务ID：S_BI_HD_03

请求服务名：BIHDDataHandle

请求方法：addSnapShots

· 请求参数示例

HTTP请求：[POST] /service/S_BI_HD_03

HTTP请求体如下：

{

"__sys__": {

"msg": "",

"msgKey": "",

"detailMsg": "",

"status": 0

},

"__version__": "2.0",

"__blocks__": {},

"dsTags": {

"236test": {

"clientId": "1662527075199957",

"secret": "4CA22F930ABCEC5882F444FA93856B17",

"tags": [

{

"tagName": "tag10087",

"records": [

{

"value": "1",

"recordTime": "2024-01-03T00:12:00.000",

"quality": 192

}

]

},

{

"tagName": "ihd_opc_opcua_tag_5",

"records": [

{

"value": "1",

"recordTime": "2024-01-03T00:12:00.000",

"quality": 192

}

]

},

{

"tagName": "tag10086",

"records": [

{

"value": "1",

"recordTime": "2024-02-03T00:12:00.000",

"quality": 192

},

{

"value": "1",

"recordTime": "2024-02-03T00:17:00.000",

"quality": 192

}

]

}

]

}

}

}

请求参数含义解析:

层级名称 | 键（Key） | 键（Key）描述
dsTags | 236test | 数据源名称
+236test | clientId | 客户端id
 | secret | 密钥
 | tags | tag点信息列表
++tags | tagName | tag点名称
 | records | 快照信息
+++records | value | 快照值
 | recordTime | 快照时间
 | quality | 快照质量

· 调用返回示例

{

"successList": [

{

"dsName": "236test",

"successTags": [

{

"errorCode": 0,

"recordNum": 0,

"records": [],

"tagId": 354604,

"tagName": "tag10086",

"tagType": 1

}

]

}

],

"__sys__": {

"msg": "",

"traceId": "0aa19a822173690743926700000010",

"detailMsg": "",

"msgKey": "",

"status": 2

},

"__version__": "2.0",

"failList": [

{

"noAuthTags": [

"ihd_opc_opcua_tag_5"

],

"dsName": "236test",

"notExistTags": [

"tag10087"

],

"requestFailedTags": {

"msg": "点存在且有权限，但调用服务异常！",

"tagList": [

{

"tagName": "tag10086",

"errorMsg": "存储数据时间乱序 "

}

]

}

}

],

"__blocks__": {}

}

返回参数说明；

参数名称 | 参数类型 | 参数描述
+++errorMsg | String | 单点请求失败具体描述信息
+++tagName | String | tag点名称
++msg | String | 请求失败原因整体概述
++tagList | List<Map> | 失败Tag点列表
+dsName | String | 数据源名称
+noAuthTags | List<String> | 没有权限Tag点列表
+notExistTags | List<String> | 不存在Tag点列表
+requeFailedTags | Map<String, Object> | 请求失败Tag点集合
+successTags | List | 成功点表
failList | List<Map> | 失败数据源列表
successList | List<Map> | 成功数据源列表


S_BI_HD_04 查询tag点实时值

Navigation: WebAPI >

S_BI_HD_04 查询tag点实时值

 Return to chapter overview

· 接口说明:

当前版本：0.1

接口描述：查询tag点的实时值

接口服务ID：S_BI_HD_04

请求服务名：BIHDDataHandle

请求方法：queryRealTimeData

· 请求参数示例

HTTP请求：[POST] /service/S_BI_HD_04

HTTP请求体如下：

{

"__sys__": {

"msg": "",

"msgKey": "",

"detailMsg": "",

"status": 0

},

"__version__": "2.0",

"__blocks__": {},

"dsTags": {

"236test": {

"clientId": "1662527075199957",

"secret": "4CA22F930ABCEC5882F444FA93856B17",

"tags": [

{

"tagName": "tag10082024"

},

{

"tagName": "tag2"

},

{

"tagName": "ihd_opc_opcua_tag_5"

},

{

"tagName": "tag10086"

}

]

}

}

}

请求参数含义解析:

层级名称 | 键（Key） | 键（Key）描述
dsTags | 236test | 数据源名称
+236test | clientId | 客户端id
 | secret | 密钥
 | tags | tag点信息列表
++tags | tagName | tag点名称

· 调用返回示例

{

"successList":[

{

"dsName":"236test",

"successTags":[

{

"records":[

{

"recordTime":"2024-02-03T00:17:00.000",

"value":"1",

"quality":"Good"

}

],

"tagType":1,

"tagName":"tag10086"

}

]

}

],

"__sys__":{

"msg":"",

"traceId":"0aa19a82217369314388870000000b",

"detailMsg":"",

"msgKey":"",

"status":2

},

"__version__":"2.0",

"failList":[

{

"noAuthTags":[

"ihd_opc_opcua_tag_5"

],

"dsName":"236test",

"notExistTags":[

"tag2"

],

"requestFailedTags":{

"msg":"点存在且有权限，但调用服务异常！",

"tagList":[

{

"tagName":"tag10082024",

"errorMsg":"查询的内存快照不存在 "

}

]

}

}

],

"__blocks__":{

}

}

返回参数说明：

参数名称 | 参数类型 | 参数描述
successList | List<Map> | 注意首先要判断__sys__ 下的status，如果status<0可能没有successList信息 成功数据源列表
+dsName | String | 数据源名称
+successTags | List | 成功点表
++tagName | String | tag点名称
++tagType | Integer | tag点数据类型 0： HD3_TAG_TYPE_INT 1： HD3_TAG_TYPE_INT16, 2： HD3_TAG_TYPE_INT32, 3： HD3_TAG_TYPE_FLOAT32, 4： HD3_TAG_TYPE_FLOAT64, 5： HD3_TAG_TYPE_DIGITAL, 6： HD3_TAG_TYPE_STRING, 7： HD3_TAG_TYPE_BLOB
++records | Map | 记录集合
+++recordTime | String | 记录时间
+++value | String | 记录值
+++quality | String | 记录质量
failList | List<Map> | 注意首先要判断__sys__ 下的status，如果status = 0可能没有failList信息 失败数据源列表
+dsName | String | 数据源名称
+noAuthTags | List<String> | 没有权限Tag点列表
+notExistTags | List<String> | 不存在Tag点列表
+requeFailedTags | Map<String, Object> | 请求失败Tag点集合
++msg | String | 请求失败原因整体概述
++tagList | List<Map> | 失败Tag点列表
+++tagName | String | tag点名称
+++errorMsg | String | 单点请求失败具体描述信息


S_BI_HD_05 查询tag点历史数据

Navigation: WebAPI >

S_BI_HD_05 查询tag点历史数据

 Return to chapter overview

· 接口说明:

当前版本：0.1

接口描述：查询tag点的历史数据

接口服务ID：S_BI_HD_05

请求服务名：BIHDDataHandle

请求方法：queryHistoryData

· 请求参数示例

HTTP请求：[POST] /service/S_BI_HD_05

HTTP请求体如下：

{

"__sys__": {

"msg": "",

"msgKey": "",

"detailMsg": "",

"status": 0

},

"__version__": "2.0",

"__blocks__": {},

"startTime": "2024-01-01T00:00:00.000",

"endTime": "2024-01-04T01:00:00.000",

"model": 0,

"limit": 100,

"dsTags": {

"236test": {

"clientId": "1662527075199957",

"secret": "4CA22F930ABCEC5882F444FA93856B17",

"tagNameList": [

"tag10086",

"tag2",

"tag10082024",

"ihd_opc_opcua_tag_5"

]

}

}

}

请求参数含义解析:

名称 | 类型 | 是否必需 | 描述
startTime | String | 是 | 开始时间
endTime | String | 是 | 结束时间(有model无需该参数，开始-结束区间内最多能查65535条)
model | int | 否 | 查询模式（1表示向已过去时间，0表示向未来时间）
limit | int | 否 | 限制条数(limit和model需要同时填且limit最大不能超过65535)

层级名称 | 键（Key） | 键（Key）描述
dsTags | 236test | 数据源名称
+236test | clientId | 客户端id
 | secret | 密钥
 | tags | tag点名称列表

·历史数据查询三种场景

1.查询某一段时间内的历史记录：startTime和endTime必填，model和limit参数不需要。返回结果为tag点在startTime和endTime区间内的历史数据，最多65535条。

2.按记录条数查询某时间点向前（过去时间）的历史记录：startTime、model和limit必填，endTime不需要。model填1，startTime和limit按实际填写。返回结果为以startTime为起始时间点，查询过去的若干条历史数据（用limit控制），最多65535条。

3.按记录条数查询某时间点向后（未来时间）的历史记录：startTime、model和limit必填，endTime不需要。model填0，startTime和limit按实际填写。返回结果为以startTime为起始时间点，查询未来的若干条历史数据（用limit控制），最多65535条。

注：此处场景主要针对startTime、endTime、model、limit四个参数的使用进行说明。

· 调用返回示例

{

"successList":[

{

"dsName":"236test",

"successTags":[

{

"records":[

{

"recordTime":"2024-01-02T00:12:00.000",

"value":"1",

"quality":"Good"

},

{

"recordTime":"2024-01-03T00:12:00.000",

"value":"1",

"quality":"Good"

},

{

"recordTime":"2024-01-04T00:12:00.000",

"value":"1",

"quality":"Good"

},

{

"recordTime":"2024-02-03T00:12:00.000",

"value":"1",

"quality":"Good"

},

{

"recordTime":"2024-02-03T00:13:00.000",

"value":"1",

"quality":"Good"

},

{

"recordTime":"2024-02-03T00:15:00.000",

"value":"1",

"quality":"Good"

},

{

"recordTime":"2024-02-03T00:17:00.000",

"value":"1",

"quality":"Good"

}

],

"tagType":1,

"tagName":"tag10086"

},

{

"records":[

],

"tagType":0,

"tagName":"tag10082024"

}

]

}

],

"__sys__":{

"msg":"",

"traceId":"0aa19a82217369323716060000000c",

"detailMsg":"",

"msgKey":"",

"status":2

},

"__version__":"2.0",

"failList":[

{

"noAuthTags":[

"ihd_opc_opcua_tag_5"

],

"dsName":"236test",

"notExistTags":[

"tag2"

],

"requestFailedTags":{

"msg":"点存在且有权限，但调用服务异常！",

"tagList":[

{

"tagName":"tag10086",

"errorMsg":"没有符合查询条件的记录 "

}

]

}

}

],

"__blocks__":{

}

}

返回参数说明；

参数名称 | 参数类型 | 参数描述
successList | List<Map> | 注意首先要判断__sys__ 下的status，如果status<0可能没有successList信息 成功数据源列表
+dsName | String | 数据源名称
+successTags | List | 成功点表
++tagName | String | tag点名称
++tagType | Integer | tag点数据类型 0： HD3_TAG_TYPE_INT 1： HD3_TAG_TYPE_INT16, 2： HD3_TAG_TYPE_INT32, 3： HD3_TAG_TYPE_FLOAT32, 4： HD3_TAG_TYPE_FLOAT64, 5： HD3_TAG_TYPE_DIGITAL, 6： HD3_TAG_TYPE_STRING, 7： HD3_TAG_TYPE_BLOB
++records | Map | 记录集合
+++recordTime | String | 记录时间
+++value | String | 记录值(数据类型是Digital时，无论用户有没有配置数字量状态集，value返回值=历史值)
+++quality | String | 记录质量
failList | List<Map> | 注意首先要判断__sys__ 下的status，如果status = 0可能没有failList信息 失败数据源列表
+dsName | String | 数据源名称
+noAuthTags | List<String> | 没有权限Tag点列表
+notExistTags | List<String> | 不存在Tag点列表
+requeFailedTags | Map<String, Object> | 请求失败Tag点集合
++msg | String | 请求失败原因整体概述
++tagList | List<Map> | 失败Tag点列表
+++tagName | String | tag点名称
+++errorMsg | String | 单点请求失败具体描述信息


S_BI_HD_06 查询tag点插值

Navigation: WebAPI >

S_BI_HD_06 查询tag点插值

 Return to chapter overview

· 接口说明:

当前版本：0.1

接口描述：查询tag点的插值

接口服务ID：S_BI_HD_06

请求服务名：BIHDDataHandle

请求方法：queryInterPolation

· 请求参数示例

HTTP请求：[POST] /service/S_BI_HD_06

HTTP请求体如下：

{

"__sys__": {

"msg": "",

"msgKey": "",

"detailMsg": "",

"status": 0

},

"__version__": "2.0",

"__blocks__": {},

"queryMode": 0,

"dsTags": {

"236test": {

"clientId": "1662527075199957",

"secret": "4CA22F930ABCEC5882F444FA93856B17",

"tags": [

{

"tagName": "tag10086",

"startTime": "2024-01-03T00:10:00.000",

"endTime": "2024-01-04T00:10:00.000",

"interTime": "1000"

},

{

"tagName": "tag2",

"startTime": "2024-02-25T00:10:00.000",

"endTime": "2024-02-25T00:10:05.000",

"interTime": "1"

},

{

"tagName": "tag10082024",

"startTime": "2024-02-25T00:10:00.000",

"endTime": "2024-02-25T00:10:05.000",

"interTime": "1"

},

{

"tagName": "ihd_opc_opcua_tag_5",

"startTime": "2024-02-25T00:10:00.000",

"endTime": "2024-02-25T00:10:05.000",

"interTime": "1"

}

]

}

}

}

请求参数含义解析:

名称 | 类型 | 是否必需 | 描述
queryMode | int | 是 | 插值模式 0：线性插值 1：前向插值

层级名称 | 键（Key） | 键（Key）描述
dsTags | 236test | 数据源名称
+236test | clientId | 客户端id
 | secret | 密钥
 | tags | tag点信息列表
++tags | tagName | tag点名称
 | startTime | 开始时间
 | endTime | 结束时间
 | interTime | 插值间隔（单位：s）

· 调用返回示例

{

"successList": [

{

"dsName": "236test",

"successTags": [

{

"records": [

{

"recordTime": "2024-01-04T00:10:00.000",

"value": "1",

"quality": "Good"

}

],

"tagType": 1,

"tagName": "tag10086"

}

]

}

],

"__sys__": {

"msg": "",

"traceId": "0aa19a82217369330216860000000d",

"detailMsg": "",

"msgKey": "",

"status": 2

},

"__version__": "2.0",

"failList": [

{

"noAuthTags": [

"ihd_opc_opcua_tag_5"

],

"dsName": "236test",

"notExistTags": [

"tag2"

],

"requestFailedTags": {

"msg": "点存在且有权限，但调用服务异常！",

"tagList": [

{

"tagName": "tag10082024",

"errorMsg": "插值查询记录不存在 "

}

]

}

}

],

"__blocks__": {}

}

返回参数说明；

参数名称 | 参数类型 | 参数描述
successList | List<Map> | 成功数据源列表
+dsName | String | 数据源名称
+successTags | List | 成功点表
++tagName | String | tag点名称
++tagType | Integer | tag点数据类型 0： HD3_TAG_TYPE_INT 1： HD3_TAG_TYPE_INT16, 2： HD3_TAG_TYPE_INT32, 3： HD3_TAG_TYPE_FLOAT32, 4： HD3_TAG_TYPE_FLOAT64, 5： HD3_TAG_TYPE_DIGITAL, 6： HD3_TAG_TYPE_STRING, 7： HD3_TAG_TYPE_BLOB
++records | Map | 记录集合
+++recordTime | String | 记录时间
+++value | String | 记录值
+++quality | String | 记录质量
failList | List<Map> | 失败数据源列表
+dsName | String | 数据源名称
+noAuthTags | List<String> | 没有权限Tag点列表
+notExistTags | List<String> | 不存在Tag点列表
+requeFailedTags | Map<String, Object> | 请求失败Tag点集合
++msg | String | 请求失败原因整体概述
++tagList | List<Map> | 失败Tag点列表
+++tagName | String | tag点名称
+++errorMsg | String | 单点请求失败具体描述信息


S_BI_HD_09 统计

Navigation: WebAPI >

S_BI_HD_09 统计

 Return to chapter overview

· 接口说明:

当前版本：0.1

接口描述：统计计算接口

接口服务ID：S_BI_HD_09

请求服务名：BIHD09

请求方法：calculateTagValues

· 请求参数示例

HTTP请求：[POST] /service/S_BI_HD_09

HTTP请求体如下：

{

"clientId": "4436611986732923",

"secret": "45384AE8472330A8C0843EE969296BEA",

"dsName": "test217",

"tags": [

{

"tagName": "hdsys_cpu_0",

"statsType":0,

"timeRegions":[

{

"startTime": "2024-06-18T0:00:00.000",

"endTime": "2024-06-18T16:01:00.000"

}

]

}

]

}

请求参数含义解析:

名称

类型

是否必需

描述

clientId

String

是

客户端id

secret

String

是

密钥

dsName

String

是

数据源名称

calculateEx

Boolean

否

是否调用扩展接口，如未传入该参数或传入值为false，则调用统计计算常规接口，如传入该参数且值为true，则调用统计计算扩展接口

tags

List<Map>

是

点表

详解如下：
常规接口：

key | 含义 | 类型 | 是否必需 | 描述
tagName | 点名 | String | 是 |
statsType | 统计类型 | int | 是 | 统计类型 0：最大值 1：最小值 2：求和 5：算术平均值
timeRegions | 时间范围 | List<Map<String, String>> | 是 | 时间范围， startTime为起始时间，格式为"YYYY-MM-ddThh:mm:ss.SSS"， endTime为结束时间，格式为"YYYY-MM-ddThh:mm:ss.SSS"

扩展接口：

key | 含义 | 类型 | 是否必需 | 描述
tagName | 点名 | String | 是 |
statsType | 统计类型 | int | 是 | 统计类型 0：最大值 1：最小值 2：求和 3：最新值 4：可信度 5：算术平均值 6：时间加权平均值 7：积分 8：值变化 9：区间变化,从<=到>= 10：区间变化，从>=到<= 11：差值统计 12：值在区间 13：值不在区间 14：极差 15：标准差 16：大于某个值的时间 17：大于等于某个值的时间 18：等于某个值的时间 19：不等于某个值的时间 20：小于某个值的时间 21：小于等于某个值的时间 22：在某个值区间的时间 23：不在某个值区间的时间
timeRegions | 时间范围 | List<Map<String, String>> | 是 | 统计区间数组，其中， startTime为起始时间，格式为"YYYY-MM-ddThh:mm:ss.SSS"， endTime为结束时间，格式为"YYYY-MM-ddThh:mm:ss.SSS"，
percentGood | 信任度 | float | 否 | Good的数据个数百分比大于或等于该比例时认为计算出的结果是可信的，取值范围为0-100
sampleType | 统计类型 | float | 否 | 0：原始点 1：线性插值 2：前向插值
filterExpr | 数据过滤表达式 | String | 否 | 数据过滤表达式
filterFailMode | 过滤失败时对采样数据的处理 | int | 否 | 0为过滤采样数据，1为不过滤采样数据
extParam1 | 第一个参数 | float | 否 | 计数和计时的参数, 值变化的参数，区间变化的第一个参数，在区间不在区间的第一个参数
extParam2 | 第二个参数 | float | 否 | 计数和计时的参数，区间变化的第二个参数，在区间不在区间的第二个参数
offset | 偏移量 | int | 否 | 采样模式为插值时，插值点为startTime+nOffset,startTime+nOffset+nPeriod, 单位为秒
period | 插值间隔 | int | 否 | 采样模式为插值时，插值点的间隔为nPeriod, 单位为秒
useBadValue | bad值是否参与统计 | int | 否 | 1表示bad值参与统计，0表示不参与

· java调用示例

EiInfo inInfo = new EiInfo();

List<Map> tagList = new ArrayList<>();

Map<String, Object> map = new HashMap<>();

map.put("tagName", "hdsys_cpu_0");

map.put("statsType", 0);

List<Map> timeList = new ArrayList<>();

Map<String, String> TimeMap = new HashMap<>();

TimeMap.put("startTime", "2024-07-01T0:00:00.000");

TimeMap.put("endTime", "2024-07-01T0:00:00.000");

timeList.add(TimeMap);

map.put("timeRegions", timeList);

tagList.add(map);

inInfo.set("clientId","4436611986732923");

inInfo.set("secret","45384AE8472330A8C0843EE969296BEA");

inInfo.set("dsName","test217");

inInfo.set("tags",tagList);

inInfo.set(EiConstant.serviceId, "S_BI_HD_09");

outInfo = XServiceManager.call(inInfo);

· 返回结果示例

{

"result": {

"tags": [

{

"tagName": "hdsys_cpu_0",

"tagId": "1",

"errorCode": "0",

"value": "28"

}

]

},

"__sys__": {

"msg": "",

"traceId": "0aa19758e17224093092310000005c",

"detailMsg": "",

"msgKey": "",

"status": 1

},

"__version__": "2.0",

"__blocks__": {}

}


S_BI_HD_0101 添加tag点

Navigation: WebAPI >

S_BI_HD_0101 添加tag点

 Return to chapter overview

· 接口说明:

当前版本：0.1

接口描述：添加tag点并绑定资源组，如果资源组为空

接口服务ID：S_BI_HD_0101

请求服务名：BIHDTagHandle

请求方法：addTags

· 请求参数示例

HTTP请求：[POST] /service/S_BI_HD_0101

HTTP请求体如下：

{

"__sys__": {

"msg": "",

"msgKey": "",

"detailMsg": "",

"status": 0

},

"__version__": "2.0",

"__blocks__": {},

"dsTags": {

"236test": {

"clientId": "6155998518178528",

"secret": "F6FF8B631458F705F2338103ADE226D5",

"tags": [

{

"descriptor": "description1",

"tagName": "tag092024",

"tagType": 1,

"resourceGroups": [

"recordaccess"

]

}

]

},

"128test": {

"clientId": "2387495788185032",

"secret": "0C9C38E7FADBE5C4B4D2CEA8C8284ED6",

"tags": [

{

"descriptor": "description1",

"tagName": "tag092024",

"tagType": 1

}

]

}

},

"tagClass": "basic"

}

请求参数含义解析:

名称 | 类型 | 是否必需 | 描述
tags | Map<List<Map>> | 是 | tag点信息（第一层map的key为数据源名称）
++descriptor | String | 是 | tag点描述
++tagName | String | 是 | tag点名称
++tagType | Integer | 是 | tag点类型
++resourceGroups | List<String> | 否 | tag点想要绑定的资源组名称列表
tagClass | String | 是 | tag点类型（普通点basic、计算点calc、统计点stats）
clientId | String | 是 | 客户端id
secret | String | 是 | 密钥

tag点属性字段列表:

公共属性 | 说明 | 普通点特有属性 | 说明 | 计算点特有属性 | 说明 | 统计点特有属性 | 说明
"tagName" | 数据源名称，在数据库内唯一 | "instrumentAddress" |  | "caCalcMode" |  | "statsType" |
"archiving" | 归档状态，为1表示需要，为0表示不需要 | "instrumentAddressType" |  | "calcPeriod" |  | "sampleStartDate" |
"changeDate" | tag最近一次的修改日期，系统自动生成 | "collectorName" | 采集器名 | "calcExOpcStatepr" |  | "sampleMode" | enum，统计点采样模式/统计方式，HD3_STATS_SAMPLE_MODE
"changer" | tag最近一次的修改日期，系统自动生成 | "collectorID" |  | "calcHistory" | 是否设置开始时间，bool | "sampleInterval" |
"compDev" | float，存储压缩误差，为0表示不启用 | "deviceName" |  | "calcStartDate" |  | "sampleBeginOffset" | 基本-每天时段-开始
"compMaxTime" | 基本-存储压缩-超时，为零时表示不启用本属性，通常设定为28800秒，也就是8个小时.CompMax和CompMin必须同时添加和修改 | "deviceID" |  | "calcEndDate" |  | "sampleEndOffset" | 基本-每天时段-结束
"compType" | bool，存储-压缩，0为不压缩，当tagtype为string,blob,digital是只能为不压缩 | "scanGroupName" |  | "haveEndTime" | 是否设置结束时间，bool | "sampleMonthBeginDay" | 基本-定周期-每月时段-开始
"creationDate" | tag的创建日期，系统自动生成 | "scanGroupID" |  | "caSourceTagName" |  | "sampleMonthEndDay" | 基本-定周期-每月时段-结束
"creator" | tag的创建者，系统自动生成 | "dataOrder" | enum，modbus专用，dataType与类型关系见TagConfig.cpp中SetCurrentDataAddr方法 |  |  | "beginTimeStamp" | bool，其他-记录时间戳-起始（1）/结束（0）
"recAccess" | int，详见iHD的权限管理-记录和Tag编辑权限配置说明 |  |  |  |  | "timeStampOffset" | 其他-记录时间戳-起始/结束偏移
"recNormalGroup" |  |  |  |  |  | "scanPeriod" | 基本-扫描周期
"recOwnerGroup" | 表示该点的数值属于哪个owner所拥有，不能为不存在的组 |  |  |  |  | "pctGood" | 最小信任度
"descriptor" | Tag描述 |  |  |  |  | "filterExpr" |
"digitalSet" | 数字量点所对应的数字状态集合的名称，必须设定，否则该数字类型点无法导入数据库，所以必须事先建立状态集合 |  |  |  |  | "dropBadMode" |
"engUnits" | 工程单位 |  |  |  |  | "countParam1" | 统计类型-计数类型下的两个参数
"excMaxTime" |  |  |  |  |  | "countParam2" | 统计类型-计数类型下的两个参数
"excDev" | 采集过滤误差 |  |  |  |  | "sampleType" | enum，统计采样类型，HD_SAMPLE_TYPE
"tagID" | 数据源的ID，一个数据源只有唯一一个ID |  |  |  |  | "interpOffset" |
"tagType" | tag点数据类型 0： HD3_TAG_TYPE_INT 1： HD3_TAG_TYPE_INT16, 2： HD3_TAG_TYPE_INT32, 3： HD3_TAG_TYPE_FLOAT32, 4： HD3_TAG_TYPE_FLOAT64, 5： HD3_TAG_TYPE_DIGITAL, 6： HD3_TAG_TYPE_STRING, 7： HD3_TAG_TYPE_BLOB |  |  |  |  | "interpPeriod" |
"tagAccess" | int，转二进制，只看高位，表示是否 |  |  |  |  | "conversionType" |
"tagNormalGroup" |  |  |  |  |  | "conversion" |
"tagOwnerGroup" | 控制点配置级别对应属于的owner |  |  |  |  | "filterFailMode" |
"scan" | 设定该点是否被接口机轮询标志 |  |  |  |  | "stCalcPeriod" | 计算周期
"span" | 设定为该点值的跨度 |  |  |  |  | "reset" |
"minValue" |  |  |  |  |  | "useBadValue" | 使用bad记录
"opcState" | OPCServer发布状态 |  |  |  |  | "stSourceTagName" | 监测点
"tagAvaliable" |  |  |  |  |  |  |

返回参数含义解析:

名称 | 类型 | 描述 | 备注
failAddTags | Map<String,Map<String,Object>> | 添加失败的列表 | key 为数据源名称
+failMsg | Sting | 添加失败原因 |
+failAddList | List<Map<String,Object>> | 添加失败的tag点列表 |
++errorCode | Sting | 错误码 |
++tagName | Sting | tag点名称（如test217-tag1） |
++errorMsg | Sting | 错误信息 |
+failBindList | List<Map<String,Object>> | 绑定资源失败的tag点列表 |
successAddTags | Map<String,Map<String,Object>> | 添加成功的列表 | key 为数据源名称
+successAddList | List<String> | 添加成功的tag点列表 |
+successBindList | List<String> | 绑定资源组成功的tag点列表 |
status | int | 调用接口返回状态： 0、所有操作均成功， 2、部分操作成功， -1、所有操作均失败 |
msg | String | 整体接口返回的信息： 1、所有点添加成功且资源组绑定成功 2、所有点添加成功，部分资源组绑定失败 3、部分点添加成功，添加成功的点资源组绑定成功 4、部分点添加成功，添加成功的点部分资源组绑定失败 5、所有点添加失败 |

·调用返回示例

成功示例 | 失败示例 | 部分成功示例
{ "failAddTags": {}, "successAddTags": { "test_90": { "successAddList": [ "eee" ], "successBindList": [ "eee" ] } }, "__sys__": { "msg": "test_90点添加成功，资源绑定成功", "detailMsg": "", "status": 0 } } | { "failAddTags": { "test_90": { "failMsg": "", "failAddList": [ { "errorCode": "117915", "tagName": "ddddd", "errorMsg": "名字已经存在 " } ], "failBindList": [ { "tagName": "eee", "errorMsg": "资源错误" } ] } }, "successAddTags": {}, "__sys__": { "msg": "test_90点添加失败，资源绑定失败", "detailMsg": "", "status": -1 } } | { "failAddTags": { "test_90": { "failMsg": "", "failAddList": [ { "errorCode": "117915", "tagName": "ddddd", "errorMsg": "名字已经存在 " } ], "failBindList": [ { "tagName": "qwe", "errorMsg": "资源错误 " } ] } }, "successAddTags": { "test_90": { "successAddList": [ "qwe", "fre" ], "successBindList": [ "fre" ] } }, "__sys__": { "msg": "test_90点部分添加成功，资源部分绑定成功", "detailMsg": "", "status": 2 } }


S_BI_HD_0102 删除tag点

Navigation: WebAPI >

S_BI_HD_0102 删除tag点

 Return to chapter overview

· 接口说明:

当前版本：0.1

接口描述：删除tag点

接口服务ID：S_BI_HD_0102

请求服务名：BIHDTagHandle

请求方法：deleteTags

· 请求参数示例

HTTP请求：[POST] /service/S_BI_HD_0102

HTTP请求体如下：

{

"__sys__": {

"msg": "",

"msgKey": "",

"detailMsg": "",

"status": 0

},

"__version__": "2.0",

"__blocks__": {},

"dsTags": {

"236test": {

"clientId": "1662527075199957",

"secret": "4CA22F930ABCEC5882F444FA93856B17",

"tags": [

{

"tagName": "tag1"

},

{

"tagName": "tag20250108"

},

{

"tagName": "tag20250107"

}

]

}

}

}

请求参数含义解析:

名称 | 类型 | 是否必需 | 描述
tags | Map<List> | 是 | tag点名列表（第一层map的key为数据源名称）
+dsName（例如“mainTest”） | String | 是 | 数据源名称
++tagName） | String | 是 | tag点名
clientId | String | 是 | 客户端id
secret | String | 是 | 密钥

· java调用示例

EiInfo inInfo = new EiInfo();

List<Map> tags = new ArrayList<>();

Map map1 = new HashMap();

map1.put("tagName","tag1");

Map map2= new HashMap();

map2.put("tagName","tag2");

tags.add(map1);

tags.add(map2);

inInfo.set("tags", tags);

inInfo.set("ihdName", "mainTest");

inInfo.set("clientId", "7805711705593430");

inInfo.set("secret", "9B3618F1E7AB15C22E95D9ECDBEF1E27");

inInfo.set(EiConstant.serviceId, "S_BI_HD_0102");

outInfo = XServiceManager.call(inInfo);

· 返回示例

{

"successList": [

{

"dsName": "236test",

"successTags": [

"tag20250108"

]

}

],

"__sys__": {

"msg": "",

"traceId": "0aa19a3ab173707650145600000045",

"detailMsg": "",

"msgKey": "",

"status": 2

},

"__version__": "2.0",

"failList": [

{

"noAuthTags": [

"tag20250107"

],

"dsName": "236test",

"notExistTags": [

"tag1"

],

"requestFailedTags": {}

}

],

"__blocks__": {}

}

返回参数解析:

参数名称 | 参数类型 | 参数描述
successList | List<Map> | 成功的数据源列表
+dsName | String | 数据源名称
+successTags | List | 成功点表
failList | List<Map> | 失败的数据源列表
+dsName | String | 数据源名称
+noAuthTags | List<String> | 没有权限Tag点列表
+notExistTags | List<String> | 不存在Tag点列表
+requeFailedTags | Map<String, Object> | 请求失败Tag点集合
++msg | String | 请求失败原因整体概述
++tagList | List<Map> | 失败Tag点列表
+++tagName | String | tag点名称
+++errorMsg | String | 单点请求失败具体描述信息


S_BI_HD_0103 修改tag点信息

Navigation: WebAPI >

S_BI_HD_0103 修改tag点信息

 Return to chapter overview

· 接口说明:

当前版本：0.1

接口描述：修改tag点信息

接口服务ID：S_BI_HD_0103

请求服务名：BIHDTagHandle

请求方法：modifyTags

· 请求参数示例

HTTP请求：[POST] /service/S_BI_HD_0103

HTTP请求体如下：

{

"__sys__": {

"msg": "",

"msgKey": "",

"detailMsg": "",

"status": 0

},

"__version__": "2.0",

"__blocks__": {},

"dsTags": {

"236test": {

"clientId": "1662527075199957",

"secret": "4CA22F930ABCEC5882F444FA93856B17",

"tags": [

{

"descriptor": "description100",

"tagName": "tag10086"

},

{

"descriptor": "description200",

"tagName": "tag20250107"

},

{

"descriptor": "description200",

"tagName": "tag2"

},

{

"tagName": "tag_digit_002"

}

]

}

}

}

请求参数含义解析:

名称 | 类型 | 是否必需 | 描述
tags | Map<List> | 是 | tag点名列表（第一层map的key为数据源名称）
ihdName | String | 是 | 数据源名称
clientId | String | 是 | 客户端id
secret | String | 是 | 密钥

(注：tagName仅用作定位tag点，修改的属性请以其他key-value的形式补充到对应map中）

tag点属性字段列表:

公共属性 | 说明 | 普通点特有属性 | 说明 | 计算点特有属性 | 说明 | 统计点特有属性 | 说明
"tagName" |  | "instrumentAddress" |  | "caCalcMode" |  | "statsType" |
"archiving" |  | "instrumentAddressType" |  | "calcPeriod" |  | "sampleStartDate" |
"changeDate" |  | "collectorName" | 采集器名 | "calcExpr" |  | "sampleMode" | enum，统计点采样模式/统计方式，HD3_STATS_SAMPLE_MODE
"changer" |  | "collectorID" |  | "calcHistory" | 是否设置开始时间，bool | "sampleInterval" |
"compDev" | float，存储压缩-误差 | "deviceName" |  | "calcStartDate" |  | "sampleBeginOffset" | 基本-每天时段-开始
"compMaxTime" | 基本-存储压缩-超时 | "deviceID" |  | "calcEndDate" |  | "sampleEndOffset" | 基本-每天时段-结束
"compType" | bool，存储-压缩 | "scanGroupName" |  | "haveEndTime" | 是否设置结束时间，bool | "sampleMonthBeginDay" | 基本-定周期-每月时段-开始
"creationDate" |  | "scanGroupID" |  | "caSourceTagName" |  | "sampleMonthEndDay" | 基本-定周期-每月时段-结束
"creator" |  | "dataOrder" | enum，modbus专用，dataType与类型关系见TagConfig.cpp中SetCurrentDataAddr方法 |  |  | "beginTimeStamp" | bool，其他-记录时间戳-起始（1）/结束（0）
"recAccess" | int，详见iHD的权限管理-记录和Tag编辑权限配置说明 |  |  |  |  | "timeStampOffset" | 其他-记录时间戳-起始/结束偏移
"recNormalGroup" |  |  |  |  |  | "scanPeriod" | 基本-扫描周期
"recOwnerGroup" | 不能为不存在的组 |  |  |  |  | "pctGood" | 最小信任度
"descriptor" |  |  |  |  |  | "filterExpr" |
"digitalSet" |  |  |  |  |  | "dropBadMode" |
"engUnits" | 工程单位 |  |  |  |  | "countParam1" | 统计类型-计数类型下的两个参数
"excMaxTime" |  |  |  |  |  | "countParam2" | 统计类型-计数类型下的两个参数
"excDev" | 采集过滤误差 |  |  |  |  | "sampleType" | enum，统计采样类型，HD_SAMPLE_TYPE
"tagID" |  |  |  |  |  | "interpOffset" |
"tagType" | tag点数据类型 0： HD3_TAG_TYPE_INT 1： HD3_TAG_TYPE_INT16, 2： HD3_TAG_TYPE_INT32, 3： HD3_TAG_TYPE_FLOAT32, 4： HD3_TAG_TYPE_FLOAT64, 5： HD3_TAG_TYPE_DIGITAL, 6： HD3_TAG_TYPE_STRING, 7： HD3_TAG_TYPE_BLOB |  |  |  |  | "interpPeriod" |
"tagAccess" | int，转二进制，只看高位，表示是否 |  |  |  |  | "conversionType" |
"tagNormalGroup" |  |  |  |  |  | "conversion" |
"tagOwnerGroup" |  |  |  |  |  | "filterFailMode" |
"scan" |  |  |  |  |  | "stCalcPeriod" | 计算周期
"span" |  |  |  |  |  | "reset" |
"minValue" |  |  |  |  |  | "useBadValue" | 使用bad记录
"opcState" |  |  |  |  |  | "stSourceTagName" | 监测点
"tagAvaliable" |  |  |  |  |  |  |

·返回示例

{

"successList": [

{

"dsName": "236test",

"successTags": [

"tag10086"

]

}

],

"__sys__": {

"msg": "",

"traceId": "0aa19a3ab17370784910460000003c",

"detailMsg": "",

"msgKey": "",

"status": 2

},

"__version__": "2.0",

"failList": [

{

"noAuthTags": [

"tag20250107"

],

"dsName": "236test",

"notExistTags": [

"tag2"

],

"missingConditions": {

"failMsg": "tag_digit_002条件仅有tag点名(不可更改)，没有其他可识别修改信息，修改失败！请检查！",

"failTags": [

{

"tagName": "tag_digit_002"

}

]

},

"requestFailedTags": {}

}

],

"__blocks__": {}

}

返回参数解析:

名称 | 类型 | 描述
successList | List<Map> | 成功的数据源列表
+dsName | String | 数据源名称
+successTags | List<String> | 成功操作的tag点名称
failList | List<Map> | 失败的数据源列表
+dsName | String | 数据源名称
+failTags | List<Map> | 失败的数据源列表
++errorCode | String | 错误码
++tagName | String | tag名称
++errorMsg | String | 错误信息
status | Int | 调用接口返回状态（0--所有操作均成功，2--部分操作成功，-1--所有操作均失败）

·java调用示例

EiInfo inInfo = new EiInfo();

List<Map> tags = new ArrayList<>();

Map map1 = new HashMap();

map1.put("tagName","tag1");

map1.put("descriptor","tag100");

Map map2= new HashMap();

map2.put("tagName","tag2");

map2.put("descriptor","tag200");

tags.add(map1);

tags.add(map2);

inInfo.set("tags", tags);

inInfo.set("ihdName", "mainTest");

inInfo.set("clientId", "7805711705593430");

inInfo.set("secret", "9B3618F1E7AB15C22E95D9ECDBEF1E27");

inInfo.set(EiConstant.serviceId, "S_BI_HD_0103");

outInfo = XServiceManager.call(inInfo);


S_BI_HD_0104 查询tag点信息

· 接口说明:

当前版本：0.1

接口描述：查询tag点信息

接口服务ID：S_BI_HD_0104

请求服务名：BIHDTagHandle

请求方法：queryTagsInfo

· 请求参数示例

HTTP请求：[POST] /service/S_BI_HD_0104

HTTP请求体如下：

{

"__sys__": {

"msg": "",

"msgKey": "",

"detailMsg": "",

"status": 0

},

"__version__": "2.0",

"__blocks__": {},

"dsTags": {

"236test": {

"clientId": "1662527075199957",

"secret": "4CA22F930ABCEC5882F444FA93856B17",

"limit": 10,

"offset": 0,

"conditions": [

{

"field": "tagName",

"operator": 6,

"value": "tag*"

}

]

},

"test34": {

"clientId": "515953554475101911",

"secret": "41AC4365AB56310514A7AD7C5CB60AAD",

"limit": 10,

"offset": 0,

"conditions": [

{}

]

}

}

}

请求参数含义解析:

名称 | 类型 | 是否必需 | 描述
conditions | List<Map> | 是 | 查询条件
+map | Map | 是 | +条件组集合
++field | String | 是 | ++查询字段
++operator | int | 是 | ++操作符 0：= 1：<> 2：> 3：>= 4：< 5：<= 6：like
++value | String | 是 | ++字段对应值
dsNameList | List | 是 | 数据源名称列表
clientId | String | 是 | 客户端id
secret | String | 是 | 密钥

(注：operator使用需结合field的实际逻辑）

tag点属性字段列表:

公共属性 | 说明 | 普通点特有属性 | 说明 | 计算点特有属性 | 说明 | 统计点特有属性 | 说明
"tagName" |  | "instrumentAddress" |  | "caCalcMode" |  | "statsType" |
"archiving" |  | "instrumentAddressType" |  | "calcPeriod" |  | "sampleStartDate" |
"changeDate" |  | "collectorName" | 采集器名 | "calcExpr" |  | "sampleMode" | enum，统计点采样模式/统计方式，HD3_STATS_SAMPLE_MODE
"changer" |  | "collectorID" |  | "calcHistory" | 是否设置开始时间，bool | "sampleInterval" |
"compDev" | float，存储压缩-误差 | "deviceName" |  | "calcStartDate" |  | "sampleBeginOffset" | 基本-每天时段-开始
"compMaxTime" | 基本-存储压缩-超时 | "deviceID" |  | "calcEndDate" |  | "sampleEndOffset" | 基本-每天时段-结束
"compType" | bool，存储-压缩 | "scanGroupName" |  | "haveEndTime" | 是否设置结束时间，bool | "sampleMonthBeginDay" | 基本-定周期-每月时段-开始
"creationDate" |  | "scanGroupID" |  | "caSourceTagName" |  | "sampleMonthEndDay" | 基本-定周期-每月时段-结束
"creator" |  | "dataOrder" | enum，modbus专用，dataType与类型关系见TagConfig.cpp中SetCurrentDataAddr方法 |  |  | "beginTimeStamp" | bool，其他-记录时间戳-起始（1）/结束（0）
"recAccess" | int，详见iHD的权限管理-记录和Tag编辑权限配置说明 |  |  |  |  | "timeStampOffset" | 其他-记录时间戳-起始/结束偏移
"recNormalGroup" |  |  |  |  |  | "scanPeriod" | 基本-扫描周期
"recOwnerGroup" | 不能为不存在的组 |  |  |  |  | "pctGood" | 最小信任度
"descriptor" |  |  |  |  |  | "filterExpr" |
"digitalSet" |  |  |  |  |  | "dropBadMode" |
"engUnits" | 工程单位 |  |  |  |  | "countParam1" | 统计类型-计数类型下的两个参数
"excMaxTime" |  |  |  |  |  | "countParam2" | 统计类型-计数类型下的两个参数
"excDev" | 采集过滤误差 |  |  |  |  | "sampleType" | enum，统计采样类型，HD_SAMPLE_TYPE
"tagID" |  |  |  |  |  | "interpOffset" |
"tagType" | tag点数据类型 0： HD3_TAG_TYPE_INT 1： HD3_TAG_TYPE_INT16, 2： HD3_TAG_TYPE_INT32, 3： HD3_TAG_TYPE_FLOAT32, 4： HD3_TAG_TYPE_FLOAT64, 5： HD3_TAG_TYPE_DIGITAL, 6： HD3_TAG_TYPE_STRING, 7： HD3_TAG_TYPE_BLOB |  |  |  |  | "interpPeriod" |
"tagAccess" | int，转二进制，只看高位，表示是否 |  |  |  |  | "conversionType" |
"tagNormalGroup" |  |  |  |  |  | "conversion" |
"tagOwnerGroup" |  |  |  |  |  | "filterFailMode" |
"scan" |  |  |  |  |  | "stCalcPeriod" | 计算周期
"span" |  |  |  |  |  | "reset" |
"minValue" |  |  |  |  |  | "useBadValue" | 使用bad记录
"opcState" |  |  |  |  |  | "stSourceTagName" | 监测点
"tagAvaliable" |  |  |  |  |  |  |

· java调用示例

EiInfo inInfo = new EiInfo();

List conditions = new ArrayList<>();

Map map = new HashMap();

map.put("field","tagName");

map.put("operator","like");

map.put("tagName","tag2");

conditions.add(map);

inInfo.set("conditions", conditions);

inInfo.set("ihdName", "mainTest");

inInfo.set("clientId", "7805711705593430");

inInfo.set("secret", "9B3618F1E7AB15C22E95D9ECDBEF1E27");

inInfo.set(EiConstant.serviceId, "S_BI_HD_0104");

outInfo = XServiceManager.call(inInfo);

· 返回示例

注：单次请求返回条数上限为65535

{

"successList": [

{

"msg":"共有符合条件tag点2个，本次返回2个,

是：

[

{

tagName=tag_digit_002,

tagId=354504,

tagType=5,

tagClass=0,

descriptor=注意上传Tag点前确保采集相关属性对应通过采集器配置工具添加

},

{

tagName=tag10086,

tagId=354604,

tagType=1,

tagClass=0,

descriptor=description100

}

]

",

"dsName": "236test",

"resultList": [

{

"tagName": "tag_digit_002",

"tagId": "354504",

"tagType": "5",

"tagClass": "0",

"descriptor": "注意上传Tag点前确保采集相关属性对应通过采集器配置工具添加"

},

{

"tagName": "tag10086",

"tagId": "354604",

"tagType": "1",

"tagClass": "0",

"descriptor": "description100"

}

]

}

],

"__sys__": {

"msg": "",

"traceId": "0aa19a3ab17370796541120000000d",

"detailMsg": "",

"msgKey": "",

"status": 2

},

"__version__": "2.0",

"failList": [

{

"dsName": "test34",

"failMsg": "查询失败，未找到当前用户！"

}

],

"__blocks__": {}

}

返回参数解析:

名称 | 类型 | 描述
successList | List<Map> | 成功的数据源列表
+dsName | String | 数据源名称
+resultList | List<Map> | tag点列表
++tagName | String | tag名称
++tagId | String | tag标识
++tagType | String | tag类型
++tagClass | String | tag类别
++descriptor | String | 描述
failList | List<Map> | 失败的数据源列表
+dsName | String | 数据源名称
+failMsg | String | 失败的原因
status | Int | 调用接口返回状态（0--所有操作均成功，2--部分操作成功，-1--所有操作均失败）


S_BI_HD_0105 查询tag点属性

Navigation: WebAPI >

S_BI_HD_0105 查询tag点属性

 Return to chapter overview

· 接口说明:

当前版本：0.1

接口描述：查询tag点属性

接口服务ID：S_BI_HD_0105

请求服务名：BIHDTagHandle

请求方法：queryTagsProp

· 请求参数示例

HTTP请求：[POST] /service/S_BI_HD_0105

HTTP请求体如下：

{

"tagClass": "common",

"dsTags": {

"236test": {

"clientId": "1662527075199957",

"secret": "4CA22F930ABCEC5882F444FA93856B17",

"tags": [

{

"tagName": "tag10086"

},

{

"tagName": "tag2"

},

{

"tagName": "tag20250107"

}

]

}

}

}

请求参数含义解析:

名称 | 类型 | 是否必需 | 描述
tags | List<Map> | 是 | tag点名列表
test217（dsName） | String | 是 | 数据源名称
tagClass | String | 是 | tag类别
clientId | String | 是 | 客户端id
secret | String | 是 | 密钥

· java调用示例

EiInfo inInfo = new EiInfo();

List<Map> tags = new ArrayList<>();

Map map1 = new HashMap();

map1.put("tagName","tag1");

Map map2= new HashMap();

map2.put("tagName","tag2");

tags.add(map1);

tags.add(map2);

Map map = new HashMap();

map.set("test217", tags);

inInfo.set("clientId","4436611986732923");

inInfo.set("secret","45384AE8472330A8C0843EE969296BEA");

inInfo.set("tagClass","common");

inInfo.set("tags",map);

inInfo.set(EiConstant.serviceId, "S_BI_HD_0105");

outInfo = XServiceManager.call(inInfo);

· 返回参数示例

注：单次请求返回条数上限为65535

{

"successList": [

{

"dsName": "236test",

"successTags": [

{

"archiving": "true",

"changeDate": "1737077751",

"changer": "admin",

"collectorID": "0",

"collectorName": "",

"compDev": "0",

"compMaxTime": "28800",

"compType": "0",

"creationDate": "1733737053",

"creator": "admin",

"dataOrder": "0",

"descriptor": "description100",

"deviceID": "0",

"deviceName": "Kepware.KEPServerEX.V6",

"digitalSet": "DEFAULT",

"engUnits": "",

"excDev": "0",

"excMaxTime": "0",

"extString1": "",

"extString2": "",

"iMVString": "",

"instrumentAddress": "",

"instrumentAddressType": "0",

"minValue": "0",

"opcState": "0",

"param1": "0",

"param2": "0",

"param3": "0",

"param4": "0",

"param5": "0",

"recAccess": "53",

"recNormalGroup": "admin",

"recOwnerGroup": "admin",

"scan": "true",

"scanGroupID": "0",

"scanGroupName": "",

"span": "0",

"tagAccess": "53",

"tagAvaliable": "0",

"tagClass": "0",

"tagID": "354604",

"tagName": "tag10086",

"tagNormalGroup": "admin",

"tagOwnerGroup": "admin",

"tagType": "1"

}

]

}

],

"__sys__": {

"msg": "",

"traceId": "0aa19a3ab17370804016020000002c",

"detailMsg": "",

"msgKey": "",

"status": 2

},

"__version__": "2.0",

"failList": [

{

"noAuthTags": [

"tag20250107"

],

"dsName": "236test",

"notExistTags": [

"tag2"

],

"requestFailedTags": {}

}

],

"__blocks__": {}

}

返回参数解析:

名称 | 类型 | 描述
successList | List<Map> | 成功的数据源列表
+dsName | String | 数据源名称
+successTags | List | 成功点表
failList | List<Map> | 失败数据源列表
+dsName | String | 数据源名称
+noAuthTags | List<String> | 没有权限Tag点列表
+notExistTags | List<String> | 不存在Tag点列表
+requeFailedTags | Map<String, Object> | 请求失败Tag点集合
++msg | String | 请求失败原因整体概述
++tagList | List<Map> | 失败Tag点列表
+++tagName | String | tag点名称
+++errorMsg | String | 单点请求失败具体描述信息


S_BI_HD_0107 tag点绑定（解绑）资源组

Navigation: WebAPI >

S_BI_HD_0107 tag点绑定（解绑）资源组

 Return to chapter overview

· 接口说明:

当前版本：0.1

接口描述：tag点绑定（解绑）资源组

接口服务ID：S_BI_HD_0107

请求服务名：BIHDTagHandle

请求方法：tagBindResourceGroup

· 请求参数示例

HTTP请求：[POST] /service/S_BI_HD_0107

HTTP请求体如下：

{

"__sys__": {

"msg": "",

"msgKey": "",

"detailMsg": "",

"status": 0

},

"__version__": "2.0",

"__blocks__": {},

"dsTags": {

"test217": {

"tagNameList":["tag-tesst090401","tag-tesst090402","tag-tesst090403"],

"resourceGroupNameList":["stcgrrr"],

"isBind":1

}

}

}

请求参数含义解析:

名称 | 类型 | 是否必需 | 描述
dsTags | Map<List<Map>> | 是 | tag点信息（第一层map的key为数据源名称）
isBind | Integer | 是 | 操作：1表示绑定， 0表示解绑
resourceGroupNameList | List<String> | 是 | 资源组名称列表
tagNameList | List<String> | 是 | tag点名称列表

· 返回调用示例

{

"__sys__":{

"msg":"数据源test217绑定资源组成功！",

"traceId":"0aa19a43317254296673320000000f",

"detailMsg":"",

"msgKey":"",

"status":0

},

"__version__":"2.0",

"__blocks__":{

}

}


S_BI_HD_0204 查询指定用户对于指定点表的权限信息接口

Navigation: WebAPI >

S_BI_HD_0204 查询指定用户对于指定点表的权限信息接口

 Return to chapter overview

· 接口说明:

当前版本：0.1

接口描述：查询指定用户对于指定点表的权限信息

接口服务ID：S_BI_HD_0204

请求服务名：BIHD02

请求方法：queryTagAuth

· 请求参数示例

HTTP请求：[POST] /service/S_BI_HD_0204

HTTP请求体如下：

{

"__sys__": {

"msg": "",

"msgKey": "",

"detailMsg": "",

"status": 0

},

"__version__": "2.0",

"__blocks__": {},

"dsName": "mainTest",

"tagNameList": ["tag0", "tag1"],

"clientId": "8158293047419731",

"secret": "C791B2439C40554D6905A0D7FFD4CCFE"

}

请求参数含义解析:

名称 | 类型 | 是否必需 | 最大长度 | 描述
dsName | String | 是 |  | 数据源名称
tagNameList | List<String> | 是 |  | tag点名称列表
clientId | String | 是 |  | 客户端id
secret | String | 是 |  | 密钥

· java调用示例

EiInfo inInfo = new EiInfo();

inInfo.set("dsName", "mainTest");

inInfo.set("tagNameList", ["tag0","tag1"]);

inInfo.set("clientId", "8158293047419731");

inInfo.set("secret", "C791B2439C40554D6905A0D7FFD4CCFE");

inInfo.set(EiConstant.serviceId, "S_BI_HD_0204");

outInfo = XServiceManager.call(inInfo);

· 返回示例

auth表示请求的点表针对于请求用户所具有的权限类型，其中1-4表述数据操作权限，5-8表示tag点配置修改、删除权限。

1-4表示点的读写，5-8表示点配置的读写

{

"__sys__": {

"msg": "",

"traceId": "0aa197526170703657419500000008",

"detailMsg": "",

"msgKey": "",

"status": 1

},

"auth": {

"tag0": [

2,

7

],

"tag1": [

2,

7

]

},

"__version__": "2.0",

"__blocks__": {}

}


S_BI_HD_0501 查询区间范围内tag点历史信息

Navigation: WebAPI >

S_BI_HD_0501 查询区间范围内tag点历史信息

 Return to chapter overview

· 接口说明:

当前版本：0.1

接口描述：查询区间范围内tag点历史信息

接口服务ID：S_BI_HD_0501

请求服务名：BIHDDataHandle

请求方法：queryHistoryDataByRange

· 请求参数示例

HTTP请求：[POST] /service/S_BI_HD_0501

HTTP请求体如下：

{

"__sys__": {

"msg": "",

"msgKey": "",

"detailMsg": "",

"status": 0

},

"__version__": "2.0",

"__blocks__": {},

"startTime": "2025-03-13T15:03:11.931",

"endTime": "2025-03-13T15:53:11.931",

"expectedNum": 3,

"dsTags": {

"test_236": {

"clientId": "4165529151024180",

"secret": "098234FD121688561A5AA3C518ED49A8",

"tagNameList": [

"ihd_opc_opcua_tag_1",

"tag20250100"

]

}

}

}

请求参数含义解析:

名称 | 类型 | 是否必需 | 描述
startTime | String | 是 | 开始时间
endTime | String | 是 | 结束时间
expectedNum | int | 是 | 查询目标条数

层级名称 | 键（Key） | 键（Key）描述
dsTags | 236test | 数据源名称
+236test | clientId | 客户端id
 | secret | 密钥
 | tagNameList | tag点名称列表

· 调用返回示例

{

"successList": [

{

"dsName": "test_236",

"successTags": [

{

"records": [

{

"recordTime": "2025-03-13T15:43:11.931",

"value": "16185",

"quality": "Good"

},

{

"recordTime": "2025-03-13T15:33:11.930",

"value": "13505",

"quality": "Good"

},

{

"recordTime": "2025-03-13T15:23:11.930",

"value": "10827",

"quality": "Good"

}

],

"tagType": 1,

"tagName": "ihd_opc_opcua_tag_1"

}

]

}

],

"__sys__": {

"msg": "",

"traceId": "0aa191d5c17418534481130000005d",

"detailMsg": "",

"msgKey": "",

"status": 2

},

"__version__": "2.0",

"failList": [

{

"noAuthTags": [],

"dsName": "test_236",

"notExistTags": [

"tag20250100"

],

"requestFailedTags": {}

}

],

"__blocks__": {}

}

返回参数说明：

参数名称 | 参数类型 | 参数描述
successList | List<Map> | 注意首先要判断__sys__ 下的status，如果status<0可能没有successList信息 成功数据源列表
+dsName | String | 数据源名称
+successTags | List | 成功点表
++tagName | String | tag点名称
++tagType | Integer | tag点数据类型 0： HD3_TAG_TYPE_INT 1： HD3_TAG_TYPE_INT16, 2： HD3_TAG_TYPE_INT32, 3： HD3_TAG_TYPE_FLOAT32, 4： HD3_TAG_TYPE_FLOAT64, 5： HD3_TAG_TYPE_DIGITAL, 6： HD3_TAG_TYPE_STRING, 7： HD3_TAG_TYPE_BLOB
++records | Map | 记录集合
+++recordTime | String | 记录时间
+++value | String | 记录值
+++quality | String | 记录质量
failList | List<Map> | 注意首先要判断__sys__ 下的status，如果status = 0可能没有failList信息 失败数据源列表
+dsName | String | 数据源名称
+noAuthTags | List<String> | 没有权限Tag点列表
+notExistTags | List<String> | 不存在Tag点列表
+requeFailedTags | Map<String, Object> | 请求失败Tag点集合
++tagList | List<Map> | 失败Tag点列表
+++tagName | String | tag点名称
+++errorMsg | String | 单点请求失败具体描述信息
status | int | 调用接口返回状态 0：查询成功 -1：查询失败 2：查询部分成功
msg | String | 整体接口返回的信息： 1、查询历史信息成功 2、查询历史信息成失败 3、查询历史信息部分成功


S_BI_HD_0502 查询某一时间戳向前或向后x条tag点历史信息

Navigation: WebAPI >

S_BI_HD_0502 查询某一时间戳向前或向后x条tag点历史信息

 Return to chapter overview

· 接口说明:

当前版本：0.1

接口描述：查询某一时间戳向前或向后x条tag点历史信息

接口服务ID：S_BI_HD_0502

请求服务名：BIHDDataHandle

请求方法：queryHistoryDataByDir

· 请求参数示例

HTTP请求：[POST] /service/S_BI_HD_0502

HTTP请求体如下：

{

"__sys__": {

"msg": "",

"msgKey": "",

"detailMsg": "",

"status": 0

},

"__version__": "2.0",

"__blocks__": {},

"startTime": "2025-03-13T15:03:11.931",

"model": 1,

"limit": 10,

"dsTags": {

"test_236": {

"clientId": "4165529151024180",

"secret": "098234FD121688561A5AA3C518ED49A8",

"tagNameList": [

"ihd_opc_opcua_tag_1",

"tag20250100"

]

}

}

}

请求参数含义解析:

名称 | 类型 | 是否必需 | 描述
startTime | String | 是 | 开始时间
endTime | String | 是 | 结束时间
model | int | 否 | 查询模式（1表示查询过去时间，0表示查询未来时间）
limit | int | 否 | 限制条数(limit和model需要同时填，没有model则不生效。limit最大不能超过65535)

层级名称 | 键（Key） | 键（Key）描述
dsTags | 236test | 数据源名称
+236test | clientId | 客户端id
 | secret | 密钥
 | tagNameList | tag点名称列表

· 调用返回示例

{

"successList": [

{

"dsName": "test_236",

"successTags": [

{

"records": [

{

"recordTime": "2025-03-13T14:53:11.929",

"value": "2791",

"quality": "Good"

},

{

"recordTime": "2025-03-13T14:43:11.928",

"value": "112",

"quality": "Good"

},

{

"recordTime": "2025-03-13T14:33:11.928",

"value": "-2568",

"quality": "Good"

},

{

"recordTime": "2025-03-13T14:23:11.928",

"value": "-5247",

"quality": "Good"

},

{

"recordTime": "2025-03-13T14:13:11.927",

"value": "-7926",

"quality": "Good"

},

{

"recordTime": "2025-03-13T14:03:11.926",

"value": "-10605",

"quality": "Good"

},

{

"recordTime": "2025-03-13T13:53:11.925",

"value": "-13284",

"quality": "Good"

},

{

"recordTime": "2025-03-13T13:43:11.925",

"value": "-15963",

"quality": "Good"

},

{

"recordTime": "2025-03-13T13:33:11.924",

"value": "-18643",

"quality": "Good"

},

{

"recordTime": "2025-03-13T13:23:11.923",

"value": "-21321",

"quality": "Good"

}

],

"tagType": 1,

"tagName": "ihd_opc_opcua_tag_1"

}

]

}

],

"__sys__": {

"msg": "",

"traceId": "0aa191d5c174185480436500000060",

"detailMsg": "",

"msgKey": "",

"status": 2

},

"__version__": "2.0",

"failList": [

{

"noAuthTags": [],

"dsName": "test_236",

"notExistTags": [

"tag20250100"

],

"requestFailedTags": {}

}

],

"__blocks__": {}

}

返回参数说明：

参数名称 | 参数类型 | 参数描述
successList | List<Map> | 注意首先要判断__sys__ 下的status，如果status<0可能没有successList信息 成功数据源列表
+dsName | String | 数据源名称
+successTags | List | 成功点表
++tagName | String | tag点名称
++tagType | Integer | tag点数据类型 0： HD3_TAG_TYPE_INT 1： HD3_TAG_TYPE_INT16, 2： HD3_TAG_TYPE_INT32, 3： HD3_TAG_TYPE_FLOAT32, 4： HD3_TAG_TYPE_FLOAT64, 5： HD3_TAG_TYPE_DIGITAL, 6： HD3_TAG_TYPE_STRING, 7： HD3_TAG_TYPE_BLOB
++records | Map | 记录集合
+++recordTime | String | 记录时间
+++value | String | 记录值
+++quality | String | 记录质量
failList | List<Map> | 注意首先要判断__sys__ 下的status，如果status =0可能没有failList信息 失败数据源列表
+dsName | String | 数据源名称
+noAuthTags | List<String> | 没有权限Tag点列表
+notExistTags | List<String> | 不存在Tag点列表
+requeFailedTags | Map<String, Object> | 请求失败Tag点集合
++tagList | List<Map> | 失败Tag点列表
+++tagName | String | tag点名称
+++errorMsg | String | 单点请求失败具体描述信息
status | int | 调用接口返回状态 0：查询成功 -1：查询失败 2：查询部分成功
msg | String | 整体接口返回的信息： 1、查询历史信息成功 2、查询历史信息成失败 3、查询历史信息部分成功


常见问题

Navigation: »No topics above this level«

常见问题

 Return to chapter overview

根据用户日常的反馈问题，我们将问题比较棘手以及常见的问题列入到常见问题行列

1.strcpy和strncpy的用法区别：

strcpy(目标串地址，源串的开始地址): 从源串的开始到结尾（'\0')完全拷贝到目标串地址。

strncpy（目标串地址，源串的开始地址，n): 从源串的开始拷贝n个字符到目标串地址，n大于源串长度时，遇到'\0'结束；n小于源串长度时，到第n个字符结束，但不会在目标串尾补'\0'。

有用户发现在调用接口插入数据的时候，部分字符串类型点数据没有存进ihd。如果在使用strncpy的时候，没有赋结束符，存储的字符串是随机的，API认为是超长。


alarmgroupinterface

Navigation: »No topics above this level«

alarmgroupinterface

 Return to chapter overview

§am3_add_group

§am3_delete_group

§am3_modify_group_desc

§am3_query_group_child_groups

§am3_query_group_child_tags

§am3_query_group_props

§am3_query_groupid


amrecordinterface

Navigation: »No topics above this level«

amrecordinterface

 Return to chapter overview

§am_acknowledge_alarm

§am_query_snapshots

§am_register_alarm_record_info

§am_unregister_alarm_record_info

§am_query_tag_records

§am_query_tags_all_records

§am_query_group_records

§am_comment_alarms


amtaginterface

Navigation: »No topics above this level«

amtaginterface

 Return to chapter overview

§am3_add_tag

§am3_add_tags

§am3_modify_tag_prop

§am3_modify_tags_prop

§am3_query_tag_prop

§am3_query_tags_cond

§am3_query_specify_page_tags_cond


ar3interface

Navigation: »No topics above this level«

ar3interface

 Return to chapter overview

§ar3_query_raw_records

§ar3_query_raw_records_number

§ar3_query_specify_num_raw_recs

§ar3_query_interp_record_by_mode

§ar3_query_interp_records_by_mode

§ar3_query_tags_interp_records_by_mode


authiteminterface

Navigation: »No topics above this level«

authiteminterface

 Return to chapter overview

§sc3_add_auth_item

§sc3_delete_auth_item

§sc3_modify_auth_item

§sc3_add_auth_item_to_group

§sc3_delete_auth_tem_from_group

§sc3_query_all_auth_item

§sc3_query_auth_items_of_group

§sc3_query_groups_of_auth_item

§sc3_query_auth_of_user


ca3interface

Navigation: »No topics above this level«

ca3interface

 Return to chapter overview

·ca3_add_tag

·ca3_add_tags

·ca3_modify_tag_prop

·ca3_modify_tags_prop

·ca3_query_tag_prop

·ca3_query_tags_cond

·ca3_query_specify_page_tags_cond


collect3interface

Navigation: »No topics above this level«

collect3interface

 Return to chapter overview

§ct3_add_collector

§ct3_modify_collector

§ct3_delete_collector

§ct3_query_collectors_status

§ct3_update_collector_status

§ct3_query_all_collectors

§ct3_query_collector

§ct3_query_collector_id_by_name


databasesafeinterface

Navigation: »No topics above this level«

databasesafeinterface

 Return to chapter overview

·sc_modify_manage_security

·sc_query_manage_security


deviceinterface

Navigation: »No topics above this level«

deviceinterface

 Return to chapter overview

§ct3_add_device

§ct3_delete_device

§ct3_query_device

§ct3_query_device_id_by_name

§ct3_query_devices_of_collector

§ct3_modify_device

§ct3_update_device_status

§ct3_query_devices_status


digitalinterface

Navigation: »No topics above this level«

digitalinterface

 Return to chapter overview

§pt3_add_digitalset

§pt3_modify_digitalset

§pt3_delete_digitalset

§pt3_query_all_digitalset

§pt3_query_digitalset_state_name

§pt3_query_digitalset_all_state_infos


分类

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<HTMLScrapTable Version="6.0">

<HTMLScrap Name="_BREADCRUMBS"><![CDATA[%%replaceinquotes:value=False%%%%filtereditemlist:namespace=link,filter="type=breadcrumbs",Source=Item,scrap=BREADCRUMBITEMS,NoFooter=True,Format="%%filtereditemlist%% > %%ItemTitle%%</td></tr></table>"%%]]></HTMLScrap>

<HTMLScrap Name="_BREADCRUMBITEMS_HEADER"><![CDATA[<table width="100%" id="pagetopbreadcrumbs" cellspacing="0" cellpadding="0"><tr><td>]]></HTMLScrap>

<HTMLScrap Name="_BREADCRUMBITEMS_BODY">%%breadcrumblink%%</HTMLScrap>

<HTMLScrap Name="_BREADCRUMBITEMS_SEPARATOR"><![CDATA[ > ]]></HTMLScrap>

<HTMLScrap Name="_CATEGORISED_LINKS_BODY"><![CDATA[%%replaceinquotes:value=false%%%%ItemName:format="<p><b>%%ItemName%%</b><br />"%%%%filtereditemlist:scrap=LINK,Namespace=Link%%</p>]]></HTMLScrap>

<HTMLScrap Name="_COLLAPSIBLE_HEADER"><![CDATA[<h1 class="heading"><span class="expandcollapse" tabindex="0"><img id="%%idprefix%%Toggle" class="toggle" name="toggleSwitch" src="images/collapse.gif"></img>%%caption%%</span></h1><div id="%%idprefix%%Section" class="section" name="collapseableSection">]]></HTMLScrap>

<HTMLScrap Name="_COMMUNITY_PROPERTIES"><![CDATA[<script type="text/javascript">%%crlf%%var communityBaseUrl="%%communitybaseurl%%";%%crlf%%var communityPhraseLanguage="%%phraselanguage%%";%%crlf%%communityBaseUrl=communityBaseUrl.replace(/^\s+|\s+$/g, '');%%crlf%%if (communityBaseUrl.substring(communityBaseUrl.length,communityBaseUrl.length) != '/') communityBaseUrl = communityBaseUrl + '/';%%crlf%%var communityProjectKey=encodeURIComponent("%%communityprojectkey%%");%%crlf%%</script>%%crlf%%<div id="communityPhrases"><span id="ic_Loading">$$COMMUNITY_LOADING$$</span><span id="ic_SignInToView">$$COMMUNITY_SIGNINTOVIEW$$</span><span id="ic_NoNotes">$$COMMUNITY_NONOTES$$</span><span id="ic_NoComments">$$COMMUNITY_NOCOMMENTS$$</span><span id="ic_ConfirmDelete">$$COMMUNITY_CONFIRMDELETE$$</span>%%crlf%%</div>]]></HTMLScrap>

<HTMLScrap Name="_COMMUNITY_FOOTER"><![CDATA[<div class="fullwidthfooter" id="communityfooter"><script>var communityItemId = "HS-%%communityitemid%%";</script>%%replaceinquotes:value=false%%%%scrap:name=_COMMUNITY_SECTION,contenttype=page%%</div>]]></HTMLScrap>

<HTMLScrap Name="_COMMUNITY_PRIVATECONTENT"><![CDATA[<div class="communityprivatecontainer"><div class="communityprivatecontentcontainer" id="communityprivatecontent|%%itemid%%|%%contenttype%%"></div><div class="communityprivatecontentcommands"><a href="javascript:ic_addPrivateContent('%%contenttype%%')">$$COMMUNITY_ADDNOTE$$</a><div class="communitycreate" id="communityprivatecreate|%%itemid%%|%%contenttype%%"></div></div></div>]]></HTMLScrap>

<HTMLScrap Name="_COMMUNITY_PUBLICCONTENT"><![CDATA[<div class="communitypubliccontainer"><div class="communitypubliccontentcontainer" id="communitypubliccontent|%%itemid%%|%%contenttype%%"></div><div class="communitypubliccontentcommands"><a href="javascript:ic_addPublicContent('%%contenttype%%')">$$COMMUNITY_ADDCOMMENT$$</a><div class="communitycreate" id="communitypubliccreate|%%itemid%%|%%contenttype%%"></div></div></div>]]></HTMLScrap>

<HTMLScrap Name="_COMMUNITY_RATING"><![CDATA[<div class="communityratingcontainer"><div class="communityratingcontentcontainer" id="communitypubliccontent|HS-%%communityitemid%%|##RATING"></div></div>]]></HTMLScrap>

<HTMLScrap Name="_COMMUNITY_MENU"><![CDATA[<div class="dxpopupbubble" id="dxcommunitymenu">%%crlf%%<input id="CommunityShowPrivateCheckbox" type="checkbox" name="communityFilter" onClick="ic_setCommunityFeatureVisibility(this)" />%%crlf%%<label class="communityFilter" for="CommunityShowPrivateCheckbox">$$COMMUNITY_SHOWNOTES$$</label><br />%%crlf%%<input id="CommunityShowPublicCheckbox" type="checkbox" name="communityFilter" onClick="ic_setCommunityFeatureVisibility(this)" />%%crlf%%<label class="communityFilter" for="CommunityShowPublicCheckbox">$$COMMUNITY_SHOWPUBLIC$$</label>%%crlf%%</div>]]></HTMLScrap>

<HTMLScrap Name="_COMMUNITY_DROPDOWN"><![CDATA[<span id="communityFilterToolTip" style="cursor:default;" onclick="showBox('dxcommunitymenu',event,document.getElementById('communityFilterImage'))" onmouseover='document.getElementById("communityFilterImage").src=document.getElementById("dropDownHoverImage").src;' onfocusin='document.getElementById("communityFilterImage").src=document.getElementById("dropDownHoverImage").src;' onmouseout='document.getElementById("communityFilterImage").src=document.getElementById("dropDownImage").src;' onfocusout='document.getElementById("communityFilterImage").src=document.getElementById("dropDownImage").src;'>%%crlf%%<img id="communityFilterImage" src="images/drpdown.gif"/>%%crlf%%<label id="showNoCommunityContentLabel" for="communityFilterImage" style="display: none;">$$COMMUNITY_FEATURES_NONE$$</label><label id="showAllCommunityContentLabel" for="communityFilterImage" style="display: none;">$$COMMUNITY_FEATURES_ALL$$</label><label id="showPrivateCommunityContentLabel" for="communityFilterImage" style="display: none;">$$COMMUNITY_FEATURES_NOTES$$</label><label id="showPublicCommunityContentLabel" for="communityFilterImage" style="display: none;">$$COMMUNITY_FEATURES_PUBLIC$$</label>%%crlf%%</span>]]></HTMLScrap>

<HTMLScrap Name="_COMMUNITY_SECTION"><![CDATA[%%replaceinquotes:value=false%%%%scrap:name=_COMMUNITY_PRIVATECONTENT,itemid="HS-%%communityitemid%%",contenttype="%%contenttype%%"%%%%scrap:name=_COMMUNITY_PUBLICCONTENT,itemid="HS-%%communityitemid%%",contenttype="%%contenttype%%"%%]]></HTMLScrap>

<HTMLScrap Name="_DESIGN_BANNER"><![CDATA[<div id="designbanner" title="Document! X Design Time Information Banner">%%bannercontents%%</div>]]></HTMLScrap>

<HTMLScrap Name="_DESIGN_ITEM"><![CDATA[<a title="Edit this %%itemtype%%" href="designcommand:name=edit,id='%%tcid%%'" style="position: relative; top: 2px; left: 5px"><img src="designtime\edit.gif" border=0/></a>&nbsp;<a title="Delete this %%itemtype%%" href="designcommand:name=delete,id='%%tcid%%'" style="position: relative; top: 2px; left: 5px;"><img src="designtime\delete.gif" border=0/></a>]]></HTMLScrap>

<HTMLScrap Name="_DESIGN_LIST"><![CDATA[<a title="Add a new %%itemtype%%" onclick="event.cancelBubble = true;" href="designcommand:name=addnew,tc=%%tagidentifier%%"><img style="position: relative; top: 2px; left: 5px" src="designtime\new.gif" border=0/></a>]]></HTMLScrap>

<HTMLScrap Name="_DESIGN_SUPPORT"><![CDATA[<link rel="stylesheet" type="text/css" href="designtime/designtime.css"><script src="designtime/designtime.js"></script><div id="hsDesignTimeLoad" onclick="hsDTLoad()" style="visibility: none;"></div><div id="hsDesignTimeSave" onclick="hsDTSave()" style="visibility: none;"></div>]]></HTMLScrap>

<HTMLScrap Name="_GLOSSARYITEMSLIST_BODY"><![CDATA[%%ReplaceInQuotes:Value=True%%<p><a name="%%GlossaryItemTerm%%"></a><strong>%%GlossaryItemTerm%%</strong><br />%%crlf%%%%glossaryitemrawdefinition%%</p>]]></HTMLScrap>

<HTMLScrap Name="_GLOSSARYLETTERSHEADER_BODY">%%GlossaryLetterLink%%</HTMLScrap>

<HTMLScrap Name="_GLOSSARYLETTERSHEADER_SEPARATOR"> | </HTMLScrap>

<HTMLScrap Name="_GLOSSARYLETTERSLIST_BODY"><![CDATA[%%ReplaceInQuotes:Value=True%%<h1><a name="%%GlossaryLetter%%"></a>%%GlossaryLetter%%</h1><BLOCKQUOTE>%%FilteredItemList:Scrap=GLOSSARYITEMSLIST,Namespace=Glossary Item%%</BLOCKQUOTE>]]></HTMLScrap>

<HTMLScrap Name="_GLOSSARYLETTERSLIST_FOOTER"><![CDATA[<p>&nbsp;</p>]]></HTMLScrap>

<HTMLScrap Name="_GLOSSARYREFERENCE"><![CDATA[%%ReplaceInQuotes:Value=True%%<a class="hsglossaryreference" title="Click to show a definition of this term" onclick="javascript:hsShowGlossaryItemBox('%%GlossaryItemTerm:ForScript=True%%','%%GlossaryItemDefinition:ForScript=True%%',event)">%%GlossaryItemReference%%</a>]]></HTMLScrap>

<HTMLScrap Name="_INDEXCONTENT_ENTRY_BODY"><![CDATA[<LI><OBJECT type="text/sitemap">%%crlf%%<param name="Name" value="%%Keyword%%" >%%crlf%%%%ReplaceInQuotes:Value=False%%%%filtereditemlist:namespace=keyword jump,scrap=_INDEXCONTENT_ENTRYJUMP,NoHeader=True,NoFooter=True,blankformat="<param name=""See Also"" value=""%%ItemName%%"">"%%</OBJECT> %%crlf%%%%filtereditemlist:Namespace=Keyword,Scrap=_INDEXCONTENT_ENTRY,NoHeader=True,NoFooter=True,Format="<UL>%%FilteredItemList%%</UL>"%%]]></HTMLScrap>

<HTMLScrap Name="_INDEXCONTENT_ENTRY_V2_BODY"><![CDATA[<Keyword Term = "%%Keyword%%">%%crlf%%%%filtereditemlist:namespace=keyword jump,scrap=INDEXCONTENT_ENTRYJUMP_V2,NoHeader=True,NoFooter=True%% %%ReplaceInQuotes:Value=False%%%%filtereditemlist:Namespace=Keyword,Scrap=_INDEXCONTENT_ENTRY_V2,NoHeader=True,NoFooter=True%%</Keyword>%%crlf%%]]></HTMLScrap>

<HTMLScrap Name="_INDEXCONTENT_ENTRY_V2_F_BODY"><![CDATA[<Keyword Term = "%%Keyword%%">%%crlf%%%%filtereditemlist:namespace=keyword jump,scrap=INDEXCONTENT_ENTRYJUMP_V2,NoHeader=True,NoFooter=True%% %%ReplaceInQuotes:Value=False%%%%filtereditemlist:Namespace=Keyword,Scrap=_INDEXCONTENT_ENTRY_V2,NoHeader=True,NoFooter=True%%</Keyword>%%crlf%%]]></HTMLScrap>

<HTMLScrap Name="_INDEXCONTENT_ENTRY_V2_A_BODY"><![CDATA[<Keyword Term = "%%Keyword%%">%%crlf%%%%filtereditemlist:namespace=keyword jump,scrap=INDEXCONTENT_ENTRYJUMP_V2,NoHeader=True,NoFooter=True%% %%ReplaceInQuotes:Value=False%%%%filtereditemlist:Namespace=Keyword,Scrap=_INDEXCONTENT_ENTRY_V2,NoHeader=True,NoFooter=True%%</Keyword>%%crlf%%]]></HTMLScrap>

<HTMLScrap Name="_INDEXCONTENT_ENTRY_WEB_BODY"><![CDATA[%%ReplaceInQuotes:Value=False%%%%filtereditemlist:namespace=keyword jump,scrap=_INDEXCONTENT_ENTRYJUMP_WEB,NoHeader=True,NoFooter=True,blankformat="%%Keyword%%"%%%%filtereditemlist:Namespace=Keyword,Scrap=_INDEXCONTENT_ENTRY_WEB,NoHeader=True,NoFooter=True,Format="<blockquote>%%FilteredItemList%%</blockquote>",BlankFormat="<br />"%%%%crlf%%]]></HTMLScrap>

<HTMLScrap Name="_INDEXCONTENT_ENTRYJUMP_BODY"><![CDATA[%%ReplaceInQuotes:Value=True%%<param name="Local" value="%%KeywordTarget%%" >%%crlf%%]]></HTMLScrap>

<HTMLScrap Name="_INDEXCONTENT_ENTRYJUMP_V2_BODY"><![CDATA[%%ReplaceInQuotes:Value=True%%<Jump Url = "%%KeywordTarget%%"/>%%crlf%%]]></HTMLScrap>

<HTMLScrap Name="_INDEXCONTENT_ENTRYJUMP_WEB_BODY"><![CDATA[%%ReplaceInQuotes:Value=True%%<a target="webcontent" href="%%KeywordTarget%%">%%Keyword%%</a>]]></HTMLScrap>

<HTMLScrap Name="_INDEXCONTENT_ENTRYJUMP_WEB_SEPARATOR"><![CDATA[<br />%%crlf%%]]></HTMLScrap>

<HTMLScrap Name="_LANGUAGE_LIST_BODY"><![CDATA[<p><a href="" onClick="setLanguageFilter('%%ItemName%%')">%%LanguageCaption%%</a></p>]]></HTMLScrap>

<HTMLScrap Name="_LANGUAGE_LIST_FOOTER"><![CDATA[<p><a href="" onClick="setLanguageFilter('All')">Show All</a></p>]]></HTMLScrap>

<HTMLScrap Name="_LANGUAGE_LIST_HEADER"/>

<HTMLScrap Name="_LINK_BODY"><![CDATA[%%ReplaceInQuotes:Value=True%%<a href="%%linktarget%%">%%linktitle%%</a>%%designitem%%]]></HTMLScrap>

<HTMLScrap Name="_LINK_SEPARATOR"><![CDATA[<br />]]></HTMLScrap>

<HTMLScrap Name="_LINKS_BODY"><![CDATA[<p>%%filtereditemlist:scrap=LINK,Namespace=Link%%</p>]]></HTMLScrap>

<HTMLScrap Name="_FEEDBACK_BASIC"><![CDATA[<div class="fullwidthfooter" id="feedback"><form action="%%FeedbackURL%%" method="post" id="frmUserFeedback" style="display: block"><table class="feedback"><tr><td colspan="11" class="feedbackprompt">How would you rate the usefulness of this content?<input id="fldProject" name="project" type="hidden" value="%%ProjectID%%" /><input id="fldTopic" name="topic" type="hidden" value="%%TopicID%%" /><input id="fldEdition" name="edition" type="hidden" value="%%buildprofilename%%" /></td></tr><tr><td></td><td align="center">1</td><td align="center">2</td><td align="center">3</td><td align="center">4</td><td align="center">5</td><td align="center">6</td><td align="center">7</td><td align="center">8</td><td align="center">9</td><td></td></tr><tr><td class="feedbackcaption">Poor</td><td align="center"><input id="rating1" name="rating" type="radio" value="1" /></td><td align="center"><input id="rating2" name="rating" type="radio" value="2" /></td><td align="center"><input id="rating3" name="rating" type="radio" value="3" /></td><td align="center"><input id="rating4" name="rating" type="radio" value="4" /></td><td align="center"><input id="rating5" name="rating" type="radio" value="5" /></td><td align="center"><input id="rating6" name="rating" type="radio" value="6" /></td><td align="center"><input id="rating7" name="rating" type="radio" value="7" /></td><td align="center"><input id="rating8" name="rating" type="radio" value="8" /></td><td align="center" valign="middle"><input id="rating9" name="rating" type="radio" value="9" /></td><td class="feedbackcaption">Outstanding</td></tr><tr><td colspan="11" style="height: 10px"></td></tr><tr><td colspan="11">Optional: Tell us why you rated the content this way.</td></tr><tr><td colspan="11"><textarea id="txtFeedback" name="feedback" rows="4" cols="40" style="width: 100%"></textarea></td></tr><tr><td colspan="11" align="right"><input id="btnSubmit" name="submit" type="submit" value="Submit" /></td></tr></table></form></div>]]></HTMLScrap>

<HTMLScrap Name="_FEEDBACK_WITH_USER_DETAILS"><![CDATA[<div class="fullwidthfooter" id="feedback"><form action="%%FeedbackURL%%" method="post" id="frmUserFeedback" style="display: block"><table class="feedback"><tr><td colspan="11" class="feedbackprompt">How would you rate the usefulness of this content?<input id="fldProject" name="project" type="hidden" value="%%ProjectID%%" /><input id="fldTopic" name="topic" type="hidden" value="%%TopicID%%" /><input id="fldEdition" name="edition" type="hidden" value="%%buildprofilename%%" /></td></tr><tr><td></td><td align="center">1</td><td align="center">2</td><td align="center">3</td><td align="center">4</td><td align="center">5</td><td align="center">6</td><td align="center">7</td><td align="center">8</td><td align="center">9</td><td></td></tr><tr><td class="feedbackcaption">Poor</td><td align="center"><input id="rating1" name="rating" type="radio" value="1" /></td><td align="center"><input id="rating2" name="rating" type="radio" value="2" /></td><td align="center"><input id="rating3" name="rating" type="radio" value="3" /></td><td align="center"><input id="rating4" name="rating" type="radio" value="4" /></td><td align="center"><input id="rating5" name="rating" type="radio" value="5" /></td><td align="center"><input id="rating6" name="rating" type="radio" value="6" /></td><td align="center"><input id="rating7" name="rating" type="radio" value="7" /></td><td align="center"><input id="rating8" name="rating" type="radio" value="8" /></td><td align="center" valign="middle"><input id="rating9" name="rating" type="radio" value="9" /></td><td class="feedbackcaption">Outstanding</td></tr><tr><td colspan="11" style="height: 10px"></td></tr><tr><td colspan="11">Optional: Tell us why you rated the content this way.</td></tr><tr><td colspan="11"><textarea id="txtFeedback" name="feedback" rows="4" cols="40" style="width: 100%"></textarea></td></tr><tr><td colspan="11">Your Name: <input type="text" name="userName" size="30"></td></tr><tr><td colspan="11">Your email address: <input type="text" name="userEmail" size="30"></td></tr><tr><td colspan="11" align="right"><input id="btnSubmit" name="submit" type="submit" value="Submit" /></td></tr></table></form></div>]]></HTMLScrap>

<HTMLScrap Name="_WEB_TOCNODE_PAGE"><![CDATA[%%ReplaceInQuotes:Value=True%%<li class="tbc" icon="%%icon%%" isnew="%%isnew%%"><a href="%%nodetarget%%"><img class="icon"/><span class="nodetext">%%nodecaption%%</span></a>]]></HTMLScrap>

<HTMLScrap Name="_WEB_TOCNODE_TITLE"><![CDATA[<li class="tbc" icon="%%icon%%"><a href="#" target="lbottom"><img class="icon"/><span class="nodetext">%%nodecaption%%</span></a>]]></HTMLScrap>

<HTMLScrap Name="_XML_TOCNODE_PAGE"><![CDATA[<node url="%%nodetarget%%" isnew="%%isnew%%" icon="%%icon%%">%%nodecaption%%</node>]]></HTMLScrap>

<HTMLScrap Name="_XML_TOCNODE_TITLE"><![CDATA[<node url="" isnew="%%isnew%%" icon="%%icon%%">%%nodecaption%%</node>]]></HTMLScrap>

</HTMLScrapTable>


数据查询相关接口

Show 获取历史插值记录（com.baosight.hdbs.common.utils.RecordsDAO）

Navigation: »No topics above this level«

Show 获取历史插值记录（com.baosight.hdbs.common.utils.RecordsDAO）

 Return to chapter overview

数据查询相关接口

获取历史插值记录

copycode !MISSING PHRASE 'COPYCODE'!

/**

  * 根据查询条件获取历史插值列表信息

  * @param com.baosight.hdbs.common.utils.ConditionInfo查询条件信息，

  * 插值查询时候，查询条件信息中必须需要服务器地址、服务器端口、开始时间、结束时间、tagid、插值周期信息，其它信息待选（结果集中需要获取分组路径，也得传入）

  * @return List<Records>返回参数为实时数据库的插值记录列表

  */

 public synchronized List<Record> getRecords(ConditionInfo conditionInfo) throws HdsdkException

Show 获取实时记录(com.baosight.hdbs.common.utils.RecordsDAO)

获取实时记录

copycode !MISSING PHRASE 'COPYCODE'!

/**

  * 获取实时记录信息

  * @param com.baosight.ihyperdb.vo.ConditionInfo 查询条件信息

  * 实时记录时，查询条件信息中必须有服务器地址、服务器端口、tagid信息，其它信息可选（结果集中需要获取分组路径，也得传入）

  * @return Records返回参数为传入的tag点实时记录信息

  */

 public synchronized Record getSnapshot(ConditionInfo conditionInfo)

Show 获取原始值记录(com.baosight.hdbs.common.utils.RecordsDAO)

获取原始值记录

copycode !MISSING PHRASE 'COPYCODE'!

/**

  * 根据查询条件获取原始值列表信息

  * @param com.baosight.ihyperdb.vo.ConditionInfo查询条件信息，

  * 插值查询时候，查询条件信息中必须需要服务器地址、服务器端口、开始时间、结束时间、tagid，其它信息待选（结果集中需要获取分组路径，也得传入）

  * @return List<Records>返回参数为实时数据库的原始值记录列表

  */

 public List<Record> getOriginalRecords(ConditionInfo conditionInfo)

©2015. All Rights Reserved.


实时数据库操作相关接口

Navigation: »No topics above this level«

实时数据库操作相关接口

 Return to chapter overview

实时数据库操作相关接口

Glossary Item Box

实时数据库的java接口以jar包形式提供，名字是HdSDK.jar。

©2015. All Rights Reserved.


AlarmGroup类

Show 查询报警组的历史记录

Navigation: »No topics above this level«

Show 查询报警组的历史记录

 Return to chapter overview

AlarmGroup类

Glossary Item Box

查询报警组的历史记录

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

Server dbserver, 实时数据库Server对象

HdAlarmQuery queryCond, 报警记录查询条件

long nPropMask, 报警记录的掩码

返回值：

   成功返回迭代器句柄， 否则-1

说明：

   查询报警组的历史记录

*/

 public int QueryGroupRecords(Server dbserver, HdAlarmQuery queryCond, long nMask){}

Show 根据迭代器，查询报警组的历史记录

根据迭代器，查询报警组的历史记录

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

Server dbserver, 实时数据库Server对象

HdAlarmQuery queryCond, 报警记录查询条件

long nPropMask, 报警记录的掩码

返回值：

   成功返回0， 否则错误码

说明：

   根据迭代器，查询报警组的历史记录

*/

 public int GetAmGroupRecordsItemStep(int IterHandle, HdAlarmRecord amrecord){}

Show 查询子报警组

查询子报警组

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

Server dbserver, 实时数据库Server对象

返回值：

   成功返回迭代器句柄， 否则-1

说明：

   查询子报警组

*/

 public int QueryChildGroups(Server dbserver){}

Show 根据迭代器，获取子报警组

根据迭代器，获取子报警组

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

int IterHandle， 迭代器句柄

返回值：

   成功返回子报警组， 否则-1

说明：

   根据迭代器，获取子报警组

*/

public int GetAmChildGroupsItemStep(int IterHandle){}

Show 查询子报警点

查询子报警点

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

Server dbserver, 实时数据库Server对象

返回值：

   成功返回迭代器句柄， 否则-1

说明：

   查询子报警点

*/

 public int QueryChildTags(Server dbserver){}

Show 根据迭代器，获取子报警点

根据迭代器，获取子报警点

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

int IterHandle， 迭代器句柄

返回值：

   成功返回报警点ID， 否则-1

说明：

   根据迭代器，获取子报警点

*/

 public int GetAmChildTagsItemStep(int IterHandle){}

©2015. All Rights Reserved.


AlarmGroupMgr类

Show 添加报警组

Navigation: »No topics above this level«

Show 添加报警组

 Return to chapter overview

AlarmGroupMgr类

Glossary Item Box

添加报警组

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

Server dbserver, 实时数据库Server对象

AlarmGroup alarmgroup， 报警组结构体

返回值：

   成功返回0， 否则错误码

说明：

   添加报警组

*/

 public int AddAlarmGroup(Server dbserver, AlarmGroup alarmgroup){}

Show 删除报警组

删除报警组

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

Server dbserver, 实时数据库Server对象

int nAlarmGroupID， 报警组ID

返回值：

   成功返回0， 否则错误码

说明：

   删除报警组

*/

 public int DeleteAlarmGroup(Server dbserver, int nAlarmGroupID){}

Show 修改报警组名字

修改报警组名字

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

Server dbserver, 实时数据库Server对象

int nAlarmGroupID， 报警组ID

String groupName， 报警组新名字

返回值：

   成功返回0， 否则错误码

说明：

   修改报警组名字

*/

 public int ModifyAlarmGroupName(Server dbserver, int nAlarmGroupID, String groupName){}

Show 修改报警组描述

修改报警组描述

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

Server dbserver, 实时数据库Server对象

int nAlarmGroupID， 报警组ID

String groupDesc， 报警组新描述

返回值：

   成功返回0， 否则错误码

说明：

   修改报警组描述

*/

 public int ModifyAlarmGroupDesc(Server dbserver, int nAlarmGroupID, String groupDesc){}

Show 修改报警组父组ID

修改报警组父组ID

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

Server dbserver, 实时数据库Server对象

int nAlarmGroupID， 报警组ID

int nParentID， 报警组新父组ID

返回值：

   成功返回0， 否则错误码

说明：

   修改报警组父组ID

*/

 public int ModifyAlarmParentID(Server dbserver, int nAlarmGroupID, int nParentID){}

Show 查询报警组ID

查询报警组ID

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

Server dbserver, 实时数据库Server对象

String alarmGroupName， 报警组名字

int nParentID， 报警组新父组ID

返回值：

   成功返回报警组ID， 否则-1

说明：

   查询报警组ID

*/

 public int QueryAlarmGroupID(Server dbserver, String alarmGroupName, int nParentID){}

Show 查询报警组属性

查询报警组属性

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

Server dbserver, 实时数据库Server对象

int nGroupID， 报警组ID

AlarmGroup alarmgroup， 返回的报警组属性

返回值：

   成功返回报警组ID， 否则-1

说明：

   查询报警组属性

*/

 public int QueryAlarmGroupProp(Server dbserver, int nGroupID, AlarmGroup alarmgroup){}

©2015. All Rights Reserved.


AlarmTag类

Show 确认报警

Navigation: »No topics above this level«

Show 确认报警

 Return to chapter overview

AlarmTag类

Glossary Item Box

确认报警

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

Server dbserver， 实时数据库Server对象

HdTime time，报警记录的时间

返回值：

   成功返回0， 否则错误码

说明：

   确认报警

*/

 public int acknowledge_alarm(Server dbserver, HdTime time) {}

Show 注释报警

注释报警

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

Server dbserver， 实时数据库Server对象

HdTime time，报警记录的时间

String strComment，报警注释

返回值：

   成功返回0， 否则错误码

说明：

   注释报警

*/

 public int comment_alarm(Server dbserver, HdTime time, String strComment) {}

Show 查询报警点记录

查询报警点记录

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

Server dbserver， 实时数据库Server对象

HdAlarmQuery querycond, 查询条件

long nPropMask， 查询条件的掩码

返回值：

   成功返回迭代器句柄， 否则-1

说明：

   查询报警点记录

*/

 public int query_alarmtag_records(Server dbserver,  HdAlarmQuery querycond, long nPropMask) {}

Show 根据迭代器句柄 获取报警点记录

根据迭代器句柄 获取报警点记录

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

int IterHandle, 迭代器句柄

HdAlarmRecord amrecord， 返回的报警记录

返回值：

   成功返回0， 否则错误码

说明：

   根据迭代器句柄 获取报警点记录

*/

 public int GetAmTagRecordsItemStep(int IterHandle, HdAlarmRecord amrecord){}

Show 查询报警实时记录

查询报警实时记录

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

Server dbserver, 实时数据库Server对象

long nPropMask, 报警记录的掩码

HdAlarmRecord record， 返回的实时报警记录

返回值：

   成功返回0， 否则错误码

说明：

   查询报警实时记录

*/

 public int query_snapshot(Server dbserver, long nPropMask, HdAlarmRecord record) {}

Show 批量查询报警实时记录

批量查询报警实时记录

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

Server dbserver, 实时数据库Server对象

int [] nAlarmTagID, 报警点的ID

int nTagNum, 报警点个数

long nPropMask, 报警记录的掩码

HdAlarmRecord record， 返回的实时报警记录

int [] nErrCodes， 返回的查询错误码

返回值：

   成功返回0， 否则错误码

说明：

   批量查询报警实时记录

*/

 public int query_snapshots(Server dbserver, int [] nAlarmTagID, int nTagNum, long nPropMask, HdAlarmRecord [] record, int [] nErrCodes) {}

©2015. All Rights Reserved.


Server类

Show Server构造函数

Navigation: »No topics above this level«

Show Server构造函数

 Return to chapter overview

Server类

Glossary Item Box

Server构造函数

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

   String ip   实时数据库服务器IP

   int port    实时数据库服务器端口号

返回值：

   无

说明：

   Server构造函数

*/

 public Server(String ip, int port) {}

Show 连接实时数据库

连接实时数据库

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

 无

返回值：

   连接成功返回为0，否则为错误码或者-1

说明：

   连接实时数据库

*/

 public int Connect() {}

Show 断开实时数据库的连接

断开实时数据库的连接

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

 无

返回值：

   断开连接成功返回为0，否则为错误码或者-1

说明：

   断开实时数据库的连接

*/

 public int DisConnect() {}

Show 测试实时数据库的连接

测试实时数据库的连接

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

 无

返回值：

   测试连接成功返回为0，否则为错误码或者-1

说明：

   测试实时数据库的连接

*/

 public int TestConnect() {}

Show 设置实时数据库访问超时

设置实时数据库访问超时

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

 int nTimeOut 访问超时

返回值：

   成功返回为0，否则为错误码或者-1

说明：

   设置实时数据库访问超时

*/

 public int SetTimeout(int nTimeOut) {}

Show 登陆实时数据库访问超时

登陆实时数据库访问超时

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

 String userName 登陆用户名

String psw  登陆密码

返回值：

   成功返回为0，否则为错误码或者-1

说明：

   登陆实时数据库访问超时

*/

 public int Login(String userName, String psw) {}

Show 获取哈希码

获取哈希码

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

 无

返回值：

   成功返回为0，否则为错误码或者-1

说明：

   获取哈希码

*/

 public int hashCode() { }

Show 判断两个Server对象是否相同

判断两个Server对象是否相同

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

 Server对象

返回值：

   相同为true

说明：

   判断两个Server对象是否相同

*/

 public boolean equals(Object obj) {}

Show 获取服务器IP

获取服务器IP

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

 无

返回值：

   返回服务器IP

说明：

   获取服务器IP

*/

 public String getM_ServerIp() {}

Show 获取服务器端口号

获取服务器端口号

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

 无

返回值：

   返回服务器端口号

说明：

   获取服务器端口号

*/

 public int getM_ServerPort() {}

©2015. All Rights Reserved.


Tag类

Show Tag构造函数

Navigation: »No topics above this level«

Show Tag构造函数

 Return to chapter overview

Tag类

Glossary Item Box

Tag构造函数

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

 无

返回值：

   无

说明：

   Tag构造函数

*/

public Tag() {}

Show 获取Tag的ID

获取Tag的ID

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

无

返回值：

   成功返回Tag的ID，否则返回-1

说明：

   获取Tag的ID

*/

public int getM_TagID() {}

Show 设置Tag的ID

设置Tag的ID

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

int tagID  Tag点的ID

返回值：

   无

说明：

   设置Tag的ID

*/

public void setM_TagID(int tagID) {}

Show 获取Tag的名字

获取Tag的名字

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

无

返回值：

   Tag的名字

说明：

   获取Tag的名字

*/

public String getM_TagName() {}

Show 设置Tag的名字

设置Tag的名字

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

String tagName     Tag名字

返回值：

   无

说明：

   设置Tag的名字

*/

public void setM_TagName(String tagName) {}

Show 获取Tag的描述

获取Tag的描述

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

无

返回值：

   Tag的描述

说明：

   获取Tag的描述

*/

public String getM_TagDesc() {}

Show 设置Tag的描述

设置Tag的描述

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

String tagDesc Tag的描述

返回值：

   无

说明：

   设置Tag的描述

*/

public void setM_TagDesc(String tagDesc) {}

Show 获取Tag的类型

获取Tag的类型

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

无

返回值：

   Tag的类型

说明：

   获取Tag的类型

*/

public byte getM_TagType() {}

Show 设置Tag的类型

设置Tag的类型

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

byte tagType Tag的类型

返回值：

   无

说明：

   设置Tag的类型

*/

public void setM_TagType(byte tagType) {}

Show Tag的构造函数

Tag的构造函数

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

String TagName,  Tag名

String TagDesc,  Tag描述

int TagID, TagID

byte TagType Tag类型

返回值：

   无

说明：

   Tag的构造函数

*/

public Tag(String TagName, String TagDesc, int TagID, byte TagType)  {}

Show 从实时数据库查询Tag点数据类型

从实时数据库查询Tag点数据类型

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

Server dbserver， 实时数据库Server对象

返回值：

   Tag类型

说明：

   从实时数据库查询Tag点数据类型

*/

public int GetTagType(Server dbserver){}

Show 存储一条数据记录

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

Server dbserver， 实时数据库Server对象

HdRecord record， 一条数据记录

返回值：

   成功返回0，否则返回错误码

说明：

   存储一条数据记录

*/

public int SaveSnapShot(Server dbserver, HdRecord record){}

Show 查询实时记录

查询实时记录

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

Server dbserver， 实时数据库Server对象

HdRecord record， 返回的实时记录

返回值：

   成功返回0，否则返回错误码

说明：

   查询实时记录

*/

public int GetSnapShot(Server dbserver, HdRecord record){}

Show 插值查询历史记录

插值查询历史记录

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

Server dbserver， 实时数据库Server对象

int nRecNum， 插值记录的条数

HdRecord []records， 插值记录数组

int [] nErrCodes，错误码数组

返回值：

   成功返回0，否则返回错误码

说明：

   插值查询历史记录

*/

public int GetInterRecords(Server dbserver, int nRecNum, HdRecord [] records, int [] nErrCodes){}

Show 查询历史原始记录

查询历史原始记录

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

Server dbserver， 实时数据库Server对象

HdTime start，记录起始时间

HdTime end，记录终止时间

HdRecord [] record，原始记录数组

返回值：

   成功返回0，否则返回错误码

说明：

   查询历史原始记录

*/

public int GetRawRecords(Server dbserver, HdTime start, HdTime end, HdRecord [] record){}

Show 输入起始时间，向前或向后查询确定条数的原始记录

输入起始时间，向前或向后查询确定条数的原始记录

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

Server dbserver， 实时数据库Server对象

HdTime start，记录起始时间

int bBackward, 向前或向后查询，bBackward = 1表示向前查询

int nQueryRecNum, 查询记录条数

HdRecord [] record，原始记录数组

返回值：

   成功返回0，否则返回错误码

说明：

   输入起始时间，向前或向后查询确定条数的原始记录

*/

public int GetSpecifyNumRawRecords(Server dbserver, HdTime start, int bBackward, int nQueryRecNum, HdRecord [] record){}

Show 获取时间段内的原始记录条数

获取时间段内的原始记录条数

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

Server dbserver， 实时数据库Server对象

HdTime start，记录起始时间

HdTime end, 记录终止时间

返回值：

   成功返回记录条数，否则返回-1

说明：

   获取时间段内的原始记录条数

*/

public int GetRecordNum(Server dbserver, HdTime start, HdTime end){}

©2015. All Rights Reserved.


TagMgr类

Show 获取Tag类型

Navigation: »No topics above this level«

Show 获取Tag类型

 Return to chapter overview

TagMgr类

Glossary Item Box

获取Tag类型

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

Server dbserver， 实时数据库Server对象

String TagName， tag名字

返回值：

   成功返回Tag类型，否则返回-1

说明：

   获取Tag类型

*/

  public byte GetTagType(Server dbserver, String TagName){}

Show 获取Tag的ID号

获取Tag的ID号

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

Server dbserver， 实时数据库Server对象

String TagName， tag名字

返回值：

   成功返回Tag的ID，否则返回-1

说明：

   获取Tag的ID号

*/

  public int GetTagID(Server dbserver, String TagName){}

Show 添加Tag点

添加Tag点

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

Server dbserver， 实时数据库Server对象

TagProp prop， tag的属性结构体

long mask，属性掩码

返回值：

   成功返回Tag的ID，否则返回-1

说明：

   添加Tag点

*/

  public int AddTag(Server dbserver, TagProp prop, long mask){}

Show 删除Tag点

删除Tag点

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

Server dbserver， 实时数据库Server对象

int nTagID， Tag的ID号

返回值：

   成功返回0，否则返回错误码

说明：

   删除Tag点

*/

  public int DeleteTag(Server dbserver, int nTagID){}

Show 查询Tag点属性

查询Tag点属性

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

Server dbserver， 实时数据库Server对象

int nTagID， Tag的ID号

TagProp prop， 返回的Tag属性

返回值：

   成功返回0，否则返回错误码

说明：

   查询Tag点属性

*/

  public int GetTag(Server dbserver, int nTagID, TagProp prop){}

Show 修改Tag点属性

修改Tag点属性

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

Server dbserver， 实时数据库Server对象

TagProp prop， 返回的Tag属性

long mask，属性掩码

返回值：

   成功返回0，否则返回错误码

说明：

   修改Tag点属性

*/

  public int ModifyTag(Server dbserver, TagProp prop, long mask){}

Show 输入Tag名和Tag描述 模糊查询Tag点

输入Tag名和Tag描述 模糊查询Tag点

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

Server dbserver， 实时数据库Server对象

String TagName,  Tag名字

String TagDesc,  Tag描述

long nPropMask，属性掩码

返回值：

   成功返回iter迭代器句柄

说明：

   输入Tag名和Tag描述 模糊查询Tag点

*/

  public int CondGetTag(Server dbserver, String TagName, String TagDesc, long nPropMask){}

Show 使用迭代器获取下一个Tag点属性

使用迭代器获取下一个Tag点属性

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

int IterHandle，迭代器句柄

TagProp prop,  返回的Tag属性

返回值：

   成功返回iter迭代器句柄

说明：

   使用迭代器获取下一个Tag点属性

*/

  public int GetItemStep(int IterHandle, TagProp prop){}

Show 添加报警点

添加报警点

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

Server dbserver， 实时数据库Server对象

AlarmTagProp prop, 报警点属性

long nPropMask，属性掩码

返回值：

   成功返回0， 否则错误码

说明：

   添加报警点

*/

  public int AddAlarmTag(Server dbserver, AlarmTagProp prop, long mask){}

Show 删除报警点

删除报警点

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

Server dbserver， 实时数据库Server对象

int nAlarmTagID，报警点ID

返回值：

   成功返回0， 否则错误码

说明：

   删除报警点

*/

  public int DeleteAlarmTag(Server dbserver, int nAlarmTagID){}

Show 获取报警点ID

获取报警点ID

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

Server dbserver， 实时数据库Server对象

String AlarmTagName， 报警点名字

返回值：

   成功返回0， 否则错误码

说明：

   获取报警点ID

*/

  public int GetAlarmTagID(Server dbserver, String AlarmTagName){}

Show 获取报警点属性

获取报警点属性

copycode !MISSING PHRASE 'COPYCODE'!

/*

参数：

Server dbserver， 实时数据库Server对象

int nAlarmTagID, 报警点ID

AlarmTagProp prop， 返回的报警点属性

返回值：

   成功返回0， 否则错误码

说明：

   获取报警点属性

*/

  public int GetAlarmTag(Server dbserver, int nAlarmTagID, AlarmTagProp prop){}

©2015. All Rights Reserved.


Tag分组树相关操作接口

Show 获取根节点(com.baosight.hdsdk.NodeBase)

Navigation: »No topics above this level«

Show 获取根节点(com.baosight.hdsdk.NodeBase)

 Return to chapter overview

Tag分组树相关操作接口

Glossary Item Box

Tag分组树相关操作接口主要包括：

?获取根节点

?获取Node

获取根节点

copycode !MISSING PHRASE 'COPYCODE'!

/**

  * 获取Tag分组树的根节点

  *

  * @return

  * @throws HdsdkException

  */

   public static NodeBase GetRootNode() throws HdsdkException

Show 获取Node(com.baosight.hdsdk.NodeBase)

获取Node

copycode !MISSING PHRASE 'COPYCODE'!

/**

  * 根据分组树节点ID获得该节点对象

  *

  * @param id

  * @return

  * @throws HdsdkException

  */

   public static NodeBase GetNodeByID(long id) throws HdsdkException

©2015. All Rights Reserved.


nt3interface

Navigation: »No topics above this level«

nt3interface

 Return to chapter overview

·nt3_connect

·nt3_disconnect


S_BI_HD_0201 数据操作权限校验接口

Navigation: »No topics above this level«

S_BI_HD_0201 数据操作权限校验接口

 Return to chapter overview

· 接口说明:

当前版本：0.1

接口描述：校验用户是否具有对传入tag点进行读值、写值的权限

接口服务ID：S_BI_HD_0201

请求服务名：BIHD02

请求方法：dataOperationAuthCheck

· 请求参数示例

HTTP请求：[POST] /service/S_BI_HD_0201

HTTP请求体如下：

{

"__sys__": {

"msg": "",

"msgKey": "",

"detailMsg": "",

"status": 0

},

"__version__": "2.0",

"__blocks__": {},

"dsName": "mainTest",

"tagNameList": ["tag0","tag1"],

"clientId": "8158293047419731",

"secret": "C791B2439C40554D6905A0D7FFD4CCFE",

"accessType": 2

}

请求参数含义解析:

名称 | 类型 | 是否必需 | 最大长度 | 描述
dsName | String | 是 |  | 数据源名称
tagNameList | List<String> | 是 |  | tag点名称列表
clientId | String | 是 |  | 客户端id
secret | String | 是 |  | 密钥
accessType | int | 是 |  | 校验权限类型： 1：有读值权限 2：有写值权限 3：有读写值权限 4：无权限

· java调用示例

EiInfo inInfo = new EiInfo();

inInfo.set("dsName", "mainTest");

inInfo.set("tagNameList", ["tag0","tag1"]);

inInfo.set("clientId", "8158293047419731");

inInfo.set("secret", "C791B2439C40554D6905A0D7FFD4CCFE");

inInfo.set("accessType", 2);

inInfo.set(EiConstant.serviceId, "S_BI_HD_0201");

outInfo = XServiceManager.call(inInfo);

· 返回示例

auth表示请求的点表中校验后有权限的点列表。

{

"__sys__": {

"msg": "",

"traceId": "0aa197526170703659420900000009",

"detailMsg": "",

"msgKey": "",

"status": 1

},

"auth": [

"tag0",

"tag1"

],

"__version__": "2.0",

"__blocks__": {}

}


S_BI_HD_0202 创建tag点权限校验接口

Navigation: »No topics above this level«

S_BI_HD_0202 创建tag点权限校验接口

 Return to chapter overview

· 接口说明:

当前版本：0.1

接口描述：校验用户是否具有创建tag点的权限

接口服务ID：S_BI_HD_0202

请求服务名：BIHD02

请求方法：addTagAuthCheck

· 请求参数示例

HTTP请求：[POST] /service/S_BI_HD_0202

HTTP请求体如下：

{

"__sys__": {

"msg": "",

"msgKey": "",

"detailMsg": "",

"status": 0

},

"__version__": "2.0",

"__blocks__": {},

"dsName": "mainTest",

"clientId": "8158293047419731",

"secret": "C791B2439C40554D6905A0D7FFD4CCFE"

}

请求参数含义解析:

名称 | 类型 | 是否必需 | 最大长度 | 描述
dsName | String | 是 |  | 数据源名称
clientId | String | 是 |  | 客户端id
secret | String | 是 |  | 密钥

· java调用示例

EiInfo inInfo = new EiInfo();

inInfo.set("dsName", "mainTest");

inInfo.set("clientId", "8158293047419731");

inInfo.set("secret", "C791B2439C40554D6905A0D7FFD4CCFE");

inInfo.set(EiConstant.serviceId, "S_BI_HD_0202");

outInfo = XServiceManager.call(inInfo);

· 返回示例

auth表示是否具有创建tag点的权限，0表示无权限，1表示有权限。

{

"__sys__": {

"msg": "",

"traceId": "0aa19752617070366197280000000a",

"detailMsg": "",

"msgKey": "",

"status": 1

},

"auth": 0,

"__version__": "2.0",

"__blocks__": {}

}


S_BI_HD_0203 tag配置修改权限校验接口

Navigation: »No topics above this level«

S_BI_HD_0203 tag配置修改权限校验接口

 Return to chapter overview

· 接口说明:

当前版本：0.1

接口描述：校验用户是否具有对传入tag点进行配置修改的权限

接口服务ID：S_BI_HD_0203

请求服务名：BIHD02

请求方法：updateTagAuthCheck

· 请求参数示例

HTTP请求：[POST] /service/S_BI_HD_0203

HTTP请求体如下：

{

"__sys__": {

"msg": "",

"msgKey": "",

"detailMsg": "",

"status": 0

},

"__version__": "2.0",

"__blocks__": {},

"dsName": "mainTest",

"tagNameList": ["tag0","tag1"],

"clientId": "8158293047419731",

"secret": "C791B2439C40554D6905A0D7FFD4CCFE",

"accessType": 7

}

请求参数含义解析:

名称 | 类型 | 是否必需 | 最大长度 | 描述
dsName | String | 是 |  | 数据源名称
tagNameList | List<String> | 是 |  | tag点名称列表
clientId | String | 是 |  | 客户端id
secret | String | 是 |  | 密钥
accessType | int | 是 |  | 校验权限类型： 5：有读配置权限 6：有写配置权限 7：有读写配置权限 8：无权限

· java调用示例

EiInfo inInfo = new EiInfo();

inInfo.set("dsName", "mainTest");

inInfo.set("tagNameList", ["tag0","tag1"]);

inInfo.set("clientId", "8158293047419731");

inInfo.set("secret", "C791B2439C40554D6905A0D7FFD4CCFE");

inInfo.set("accessType", 7);

inInfo.set(EiConstant.serviceId, "S_BI_HD_0203");

outInfo = XServiceManager.call(inInfo);

· 返回示例

auth表示请求的点表中校验后有权限的点列表

{

"__sys__": {

"msg": "",

"traceId": "0aa197526170703659420900000009",

"detailMsg": "",

"msgKey": "",

"status": 1

},

"auth": [

"tag0",

"tag1"

],

"__version__": "2.0",

"__blocks__": {}

}


scangroup3inter

Navigation: »No topics above this level«

scangroup3inter

 Return to chapter overview

§ct3_add_scan_group

§ct3_delete_scan_group

§ct3_query_scan_group

§ct3_query_scan_group_id_by_name

§ct3_query_scan_groups_of_device

§ct3_modify_scan_group


安全数据库管理概述

Navigation: »No topics above this level«

安全数据库管理概述

 Return to chapter overview

安全数据库管理概述

Glossary Item Box

©2015. All Rights Reserved.


二次开发

Navigation: »No topics above this level«

二次开发

 Return to chapter overview

二次开发

Glossary Item Box

通过iWebView提供的二次开发接口可以与后台实时数据库进行数据通信，获取Tag点的实时、历史和插值记录。所有使用到的接口都包含在hdbs.jar、hd-datasdk.jar和hd-ressdk.jar中。

©2015. All Rights Reserved.


spc3interface

Navigation: »No topics above this level«

spc3interface

 Return to chapter overview

§spc3_add_tag

§spc3_add_tags

§spc3_modify_tag_prop

§spc3_modify_tags_prop

§spc3_query_tag_prop

§spc3_query_tags_cond

§spc3_query_specify_page_tags_cond


SPCrecordinterface

Navigation: »No topics above this level«

SPCrecordinterface

 Return to chapter overview

§spc3_query_group_child_tags

§spc3_acknowledge_alarms

§spc3_query_snapshots

§spc3_register_alarm_record_info

§spc3_query_tag_records

§spc3_query_tags_all_all_records

§spc3_query_group_records

§spc3_comment_alarms


st3interface

Navigation: »No topics above this level«

st3interface

 Return to chapter overview

§st3_query_tags_cond

§st3_query_tag_prop

§st3_modify_tag_prop

§st3_modify_tags_prop

§st3_query_specify_page_tags_cond

§st3_add_tag

§st3_add_tags


tag3interface

Navigation: »No topics above this level«

tag3interface

 Return to chapter overview

·tag3_delete_tag

·tag3_delete_tags

·tag3_query_id_by_name

·tag3_query_ids_by_names

·tag3_query_tag_num_cond

·tag3_query_tags_basic_info_by_name

·tag3_query_tags_comm_prop

·tag3_query_tags_cond


trustinterface

Navigation: »No topics above this level«

trustinterface

 Return to chapter overview

§sc3_add_trust

§sc3_delete_trust

§sc3_query_all_trusts


userandgroupinterface

Navigation: »No topics above this level«

userandgroupinterface

 Return to chapter overview

§sc3_login

§sc3_add_user

§sc3_modify_password

§sc3_reset_password

§sc3_modify_user_desc

§sc3_delete_user

§sc3_add_group

§sc3_add_user_to_group

§sc3_modify_group_desc

§sc3_delete_group

§sc3_query_all_users

§sc3_query_members_of_group

§sc3_query_all_groups

§sc3_query_current_user_name

§sc3_query_groups_of_user

§sc3_delete_user_from_group


ut3interface

Navigation: »No topics above this level«

ut3interface

 Return to chapter overview

·ut3_set_charset

·ut3_get_charset

·ut3_set_request_timeout

·ut3_set_connection_checking_cycle

·ut3_get_item_step

·ut3_free_handle

·ut3_get_server_time_ms

·ut3_convert_sec_to_rdtime

·ut3_convert_rdtime_to_sec


webblank.html

Navigation: »No topics above this level«

webblank.html

 Return to chapter overview


webfavorites.html

Navigation: »No topics above this level«

webfavorites.html

 Return to chapter overview


??????????????????????

Navigation: »No topics above this level«

??????????????????????

 Return to chapter overview

This page uses frames, but your browser doesn't support them.


webnav.html

Navigation: »No topics above this level«

webnav.html

 Return to chapter overview


websearch.html

Navigation: »No topics above this level«

websearch.html

 Return to chapter overview

搜索结果 结果发现。

查找：

[TEditFormControlObj]

（字可以组合使用OR和AND）

[TCheckBoxFormControlObj]标明搜索字词

搜索...


Webservice

Navigation: »No topics above this level«

Webservice

 Return to chapter overview

服务端部署

1.安装jdk；

把java路径,如C:\Program Files\Java\jdk1.8.0_144\bin加入Path环境变量中

2.安装Tomcat服务器；

3.安装eclipse

4.安装iHyperDB和SDK二次开发包。

5.步1、3、4版本必须一致(同为32位或者同为64位版本)。

6.添加动态库路径,如C:iHyperDB\excutable（64位是C:\iHyperDB\excutable_x64）到Path环境变量。（以安装在C盘为例）

7.把jaxws-ri.zip的lib目录里面全部内容解压到Tomcat安装目录的lib里面

可从https://javaee.github.io/metro-jax-ws/CONTRIBUTING下载得到。

8.把hdsdkws.war拷贝到Tomcat服务器下webapps目录。

9.启动Tomcat（一定要以管理员身份运行启动Tomcat），浏览器中输入http://localhost:8080/hdsdkws/HDConnectionFactoryWs

localhost:8080改为相应的IP端口测试

10.服务端部署完成

客户端部署

1.双击执行webserviceClient.bat生成webservice客户端hdsdkwsclient.jar

2.在项目中同时导入hdsdkwsclient.jar 和 C:\iHyperDB\library下的hd-datasdk-x.x.x.jar。

3.Eclipse必须用管理员权限打开

4.客户端部署完成


webtoolbar.html

Navigation: »No topics above this level«

webtoolbar.html

 Return to chapter overview