ProcessDB实时/时序数据库——C/C++数据订阅功能

目录

前言

一、添加订阅

二、查询订阅数据

三、移除订阅

四、订阅演示


前言

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值