目录

前言

一、添加订阅

二、查询订阅数据

三、移除订阅

四、订阅演示


前言

ProcessDB实时/时序数据库在使用C/C++进行开发时,支持订阅的功能来进行数据操作


一、添加订阅

我们使用订阅功能的时候,需要先把所要操作的数据点加入到订阅中,支持通过数据点id和数据点名加入订阅

函数 注释

ebase2_add_id_to_subscribe_builder

根据数据点id添加订阅

ebase2_add_name_to_subscribe_builder

根据数据点名添加订阅

二、查询订阅数据

把数据点添加进订阅后,就可以启动订阅了

函数 注释

ebase2_start_subscribe_realtime

启动订阅

然后使用不同的订阅函数,来获取我们所需的数据

函数 注释

ebase2_get_subscribe_builder_size

获取订阅的数据数量

ebase2_get_subscribe_data_by_id

通过数据点id获取订阅数据

ebase2_get_subscribe_data_by_name

通过数据点名获取订阅数据

查询结束后,我们关闭数据订阅

函数 注释

ebase2_stop_subscribe_realtime

关闭订阅

三、移除订阅

processDB针对订阅数据点的移除,提供了三种方式.

函数 注释

ebase2_remove_id_from_subscribe_builder

根据数据点id移除订阅

ebase2_remove_name_from_subscribe_builder

通过数据点名移除订阅数据

ebase2_clear_subscribe_builder

清空订阅

四、订阅演示

我们这里演示通过订阅的方式,查询多个数据点的实时数据,代码如下:

// ProcessDB_API_TEST.cpp : ProcessDB数据库示例
//#include <iostream>
#include <string>
#include <stdio.h>
#include <time.h>
#include <conio.h>
#include<windows.h>
#include "processdb_v2.h"
using namespace std;
void printRecord(char* pointName, MemSampleRecord& memSampleRecord_)
{switch (memSampleRecord_.nTagType){case TAG_TYPE_FLOAT32:printf("Name:%s, Float32 value: %f\n", pointName, memSampleRecord_.value.fFloat32);break;case TAG_TYPE_DIGITAL:printf("Name:%s, Digital value: %d\n", pointName, memSampleRecord_.value.nDigital);break;case TAG_TYPE_BOOL:printf("Name:%s, Bool value: %d\n", pointName, memSampleRecord_.value.bBool);break;case TAG_TYPE_UINT8:printf("Name:%s, UInt8 value: %d\n", pointName, memSampleRecord_.value.nuInt8);break;case TAG_TYPE_INT8:printf("Name:%s, Int8 value: %d\n", pointName, memSampleRecord_.value.nInt8);break;case TAG_TYPE_UINT16:printf("Name:%s, UInt16 value: %d\n", pointName, memSampleRecord_.value.nuInt16);break;case TAG_TYPE_INT16:printf("Name:%s, Int16 value: %d\n", pointName, memSampleRecord_.value.nInt16);break;case TAG_TYPE_UINT32:printf("Name:%s, UInt32 value: %d\n", pointName, memSampleRecord_.value.nuInt32);break;case TAG_TYPE_INT32:printf("Name:%s, Int32 value: %d\n", pointName, memSampleRecord_.value.nInt32);break;case TAG_TYPE_INT64:printf("Name:%s, Int64 value: %ll\n", pointName, memSampleRecord_.value.nInt64);break;case TAG_TYPE_UINT64:printf("Name:%s, UInt64 value: %ll\n", pointName, memSampleRecord_.value.nuInt64);break;case TAG_TYPE_FLOAT64:printf("Name:%s, Float64 value: %lf\n", pointName, memSampleRecord_.value.fFloat64);break;case TAG_TYPE_TIME:printf("Name:%s, Time value: %ll\n", pointName, memSampleRecord_.value.nTime);break;}
}int main(int argc, char* argv[])
{EBASE_RES result = NULL;int res = 0;EBASE ebase = { 0 };/* 初始化连接控制块 */res = ebase2_init(&ebase);if (0 != res){cout << "ebase2_init failed !" << endl;getchar();exit(1);}/*设置超时时间*/int timeout = 30;ebase2_set_options(&ebase, EBASE_CONNECTION_TIMEOUT, &timeout);/* 建立连接 */res = ebase2_connect(&ebase, "127.0.0.1", 8301, "root", "root");if (0 != res){cout << "login failed, \n";getchar();exit(1);}/*准备条件* 点名:D99.T99.P99 ID:1003000009* 点名:PUBLIC.SYS.PDB_OS_CPU_USAGE   ID:1001000001*///根据名称添加查询点res = ebase2_add_name_to_subscribe_builder(&ebase, "D99.T99.P99");if (0 > res){printf("add D99.T99.P99 to subscribe builder failed, error code: %d.\n", res);getchar();exit(1);}//根据id添加查询点res = ebase2_add_id_to_subscribe_builder(&ebase, 1001000001);if (0 > res){printf("add D1.T1.P1 to subscribe builder failed, error code: %d.\n", res);getchar();exit(1);}//根据数据点id的集合,开始批量查询实时数据res = ebase2_start_subscribe_realtime(&ebase);if (0 > res){printf("Start subscribe data failed, error code: %d.\n", res);getchar();exit(1);}for (int i = 0; i < 1000; i++){Sleep(1000);MemSampleRecord memSampleRecord_ = { 0 };//根据数据点名,展示数据res = ebase2_get_subscribe_data_by_name(&ebase, "PUBLIC.SYS.PDB_OS_CPU_USAGE", &memSampleRecord_);if (0 > res){printf("Get subscribe data failed, error code: %d.\n", res);// getchar();// exit(1);}char name[64] = "PUBLIC.SYS.PDB_OS_CPU_USAGE";printRecord(name, memSampleRecord_);memSampleRecord_ = { 0 };//根据数据点id,展示数据res = ebase2_get_subscribe_data_by_id(&ebase, 1003000009, &memSampleRecord_);if (0 > res){printf("Get subscribe data failed, error code: %d.\n", res);// getchar();// exit(1);}char name1[64] = "D99.T99.P99";printRecord(name1, memSampleRecord_);}//关闭批量查询实时数据res = ebase2_stop_subscribe_realtime(&ebase);if (0 > res){printf("Stop subscribe data failed, error code: %d.\n", res);getchar();exit(1);}/* 关闭连接 */ebase2_close(&ebase);return 0;}

示例运行如下:

Name:PUBLIC.SYS.PDB_OS_CPU_USAGE, Float32 value: 4.026989
Name:D99.T99.P99, Float32 value: 666.000000
Name:PUBLIC.SYS.PDB_OS_CPU_USAGE, Float32 value: 4.026989
Name:D99.T99.P99, Float32 value: 666.000000
Name:PUBLIC.SYS.PDB_OS_CPU_USAGE, Float32 value: 4.026989
Name:D99.T99.P99, Float32 value: 666.000000
Name:PUBLIC.SYS.PDB_OS_CPU_USAGE, Float32 value: 4.026989
Name:D99.T99.P99, Float32 value: 666.000000
Name:PUBLIC.SYS.PDB_OS_CPU_USAGE, Float32 value: 4.026989
Name:D99.T99.P99, Float32 value: 666.000000
Name:PUBLIC.SYS.PDB_OS_CPU_USAGE, Float32 value: 1.763187
Name:D99.T99.P99, Float32 value: 666.000000
Name:PUBLIC.SYS.PDB_OS_CPU_USAGE, Float32 value: 1.763187
Name:D99.T99.P99, Float32 value: 666.000000
Name:PUBLIC.SYS.PDB_OS_CPU_USAGE, Float32 value: 1.763187
Name:D99.T99.P99, Float32 value: 666.000000
Name:PUBLIC.SYS.PDB_OS_CPU_USAGE, Float32 value: 1.763187
Name:D99.T99.P99, Float32 value: 666.000000
Name:PUBLIC.SYS.PDB_OS_CPU_USAGE, Float32 value: 1.763187
Name:D99.T99.P99, Float32 value: 666.000000
Name:PUBLIC.SYS.PDB_OS_CPU_USAGE, Float32 value: 1.763187
Name:D99.T99.P99, Float32 value: 666.000000
Name:PUBLIC.SYS.PDB_OS_CPU_USAGE, Float32 value: 1.763187
Name:D99.T99.P99, Float32 value: 666.000000
Name:PUBLIC.SYS.PDB_OS_CPU_USAGE, Float32 value: 1.763187
Name:D99.T99.P99, Float32 value: 666.000000
Name:PUBLIC.SYS.PDB_OS_CPU_USAGE, Float32 value: 3.131282
Name:D99.T99.P99, Float32 value: 666.000000

ProcessDB实时/时序数据库——C/C++数据订阅功能相关推荐

  1. ProcessDB实时/时序数据库——JAVA使用ODBC连接数据库

    目录 前言 一.安装ProcessDB-ODBC驱动 1.下载ProcessDB-ODBC驱动 2.安装ProcessDB-ODBC驱动 二.配置ProcessDB数据源 三.JAVA连接Proces ...

  2. ProcessDB实时/时序数据库——C/C++连接数据库

    目录 前言 一.项目准备 1.新建项目 2.添加头文件 3.测试文件模板 二.连接数据库 1.初始化连接控制块 2. 建立连接 3. 关闭连接 三.示例展示 前言 ProcessDB实时/时序数据库支 ...

  3. ProcessDB实时/时序数据库——C/C++接口速度测试

    目录 前言 一.历史采样接口测试 1.条件准备 2.测试历史采样接口代码 3.速度测试结果 二.历史统计接口测试 1.条件准备 2.测试历史统计接口代码 3.速度测试结果 前言 我们在开发中,使用传统 ...

  4. ProcessDB实时/时序数据库——C/C++操作数据表对象

    目录 前言 一.数据表字段介绍 二.新增数据表 三.删除数据表 四.修改数据表 五.查询数据表 前言 上文已经介绍C/C++使用ProcessDB的基本操作,本文将针对数据表的相关操作进行介绍 一.数 ...

  5. ProcessDB实时/时序数据库——C/C++查询历史时序数据

    目录 前言 一.历史时序数据字段介绍 二.查询历史时序数据 前言 前文已经介绍C/C++使用ProcessDB的基本操作,本文将针对历史时序数据的相关操作进行介绍 一.历史时序数据字段介绍 字段 注释 ...

  6. ProcessDB实时/时序数据库——JDBC读写实时数据

    一.实时数据表字段介绍 CREATE TABLE RT_TABLE ( ID_F INT;//数据点ID,NAME_F STRING;//数据点名称,VALUE_F STRING;//实时数据值,UN ...

  7. ProcessDB实时/时序数据库——EXCEL连接数据库

    目录 前言 一.EXCEL连接数据库 二.读取数据库列表 前言 之前的文章已经讲了在使用前的准备工作,接下来开始介绍下正式使用excel的相关步骤,包括连接数据库,下载数据列表等 一.EXCEL连接数 ...

  8. ProcessDB实时/时序数据库——C/C++操作数据点对象

    目录 前言 一.数据点字段介绍 二.新增数据点 三.删除数据点 四.修改数据点 1.全量修改数据点 2.根据字段名修改数据点信息 五.查询数据点 前言 上文已经介绍C/C++使用ProcessDB的基 ...

  9. ProcessDB实时/时序数据库——C/C++操作数据库对象

    目录 前言 一.数据库字段介绍 二.新增数据库 三.删除数据库 四.修改数据库 五.查询数据库 前言 上文已经介绍C/C++使用ProcessDB的基本操作,本文将针对数据库的相关操作进行介绍 一.数 ...

最新文章

  1. 史上最简洁的UITableView Sections 展示包含NSDicionary 的NSArray
  2. XAML特殊字符 (转)
  3. python语言自学-【经验分享】自学Python的学习顺序!附学习资料
  4. 项目实战-使用PySpark处理文本多分类问题
  5. as3中强制垃圾回收
  6. Mongodb学习教程一
  7. Oracle中删除重复记录
  8. 京东商城架构峰值系统设计
  9. linux 显示数字权限,Linux数字权限解释
  10. 听说,Java程序员都是吃青春饭的?
  11. OpenCV/C++:点线面相关计算
  12. 宁波大学计算机王老师,网友举报宁波大学副教授性骚扰女生 学校:该老师暂时停课进行调查...
  13. VS2012配置SDL2
  14. FINAL CUT 当中设置左右声道及多声道的方法
  15. windows环境下的自保护探究
  16. [Unity插件]键盘输入改键盘任意键按键插件
  17. 土木工程有电子计算机应用技术,土木工程计算机应用技术(12年4月)试题和答案.doc...
  18. TCP 服务器/客户端(实现下载)
  19. linux服务器系统cpu监控-shell脚本
  20. 第37篇-使用selenium+OpenCV破解某盾滑块验证码

热门文章

  1. activitythread.java_ActivityThread
  2. 摆脱锚框:Anchor-Free
  3. Android_自定义Dialog
  4. 【转】ppt使用技巧
  5. 18005 It is not ugly number
  6. 揭秘淘宝上那些删差评不为人知的套路!
  7. 离线用户召回定时更新
  8. BlackBerry新闻
  9. HTMLCSS实战项目------极简博客开发
  10. Linux C语言实现输入密码显示星号-手动实现getch()