目录
前言
ProcessDB实时/时序数据库支持Python语言开发,本文将针对Python操作ProcessDB检索测点信息进行介绍
一、检索类型及检索条件介绍
检索类型 | 名称 | 检索类型 | 名称 |
FILTER_DB_NAME | 数据库名称 | FILTER_POINT_IO_TYPE | 测点io类型 |
FILTER_TABLE_NAME | 数据表名称 | FILTER_POINT_ARCHIVED | 测点是否保存历史数据 |
FILTER_POINT_NAME | 测点名称 | FILTER_POINT_UNIT | 测点单位 |
FILTER_DB_ALIAS | 数据库别名 | FILTER_POINT_COMPRESS_TYPE | 测点压缩类型 |
FILTER_TABLE_ALIAS | 数据表别名 | FILTER_POINT_COMPRESS_DEV_TYPE | 测点压缩死区类型 |
FILTER_POINT_ALIAS | 测点别名 | FILTER_POINT_VALUE | 测点值 |
FILTER_DB_DESC | 数据库描述 | FILTER_POINT_QULITY | 测点质量 |
FILTER_TABLE_DESC | 数据表描述 | FILTER_POINT_ALARM_STATUS | 测点报警状态 |
FILTER_POINT_DESC | 测点描述 | FILTER_POINT_ALARM_SWITCH | 测点报警开关 |
FILTER_DB_CREATE_TIME | 数据库创建时间 | FILTER_POINT_ALARM_ACK_TYPE | 测点报警方式 |
FILTER_DB_MODIFY_TIME | 数据库修改时间 | FILTER_POINT_ALARM_TYPE | 测点报警类型 |
FILTER_TABLE_CREATE_TIME | 数据表创建时间 | FILTER_POINT_ALARM_LEVEL | 测点报警级别 |
FILTER_TABLE_MODIFY_TIME | 数据表修改时间 | FILTER_POINT_ALARM_GROUP_ID | 测点报警组id |
FILTER_POINT_CREATE_TIME | 测点创建时间 | FILTER_DB_ID | 数据库id |
FILTER_POINT_MODIFY_TIME | 测点修改时间 | FILTER_TABLE_ID | 数据表id |
FILTER_POINT_TYPE | 测点类型 | FILTER_POINT_ID | 测点id |
FILTER_POINT_DATA_TYPE | 测点数据类型 | FILTER_POINT_IS_REFFER | 测点是否引用 |
FILTER_POINT_REFFER_ID | 测点引用id | FILTER_POINT_EXPRESS | 测点表达式 |
FILTER_POINT_PERIOD | 测点计算周期 | FILTER_POINT_CUR_VALUE_OCCUR_TIME | 当前值发生时间 |
FILTER_POINT_PRE_VALUE | 测点前值 | FILTER_POINT_PRE_VALUE_QULITY | 测点前值质量 |
FILTER_POINT_CUR_VALUE_TIME | 测点当前值时间 | FILTER_POINT_TOP_SCALE | 量程高限 |
FILTER_POINT_PRE_VALUE_TIME | 测点前值时间 | FILTER_POINT_TIME_UNIT | 时间单位 |
FILTER_POINT_BOTTOM_SCALE | 量程低限 |
检索条件 | 名称 | 检索条件 | 名称 |
RELATION_EQUAL | 相等 | RELATION_GREAT_EQUAL | 大于等于 |
RELATION_NOT_EQUAL | 不相等 | RELATION_LESS_EQUAL | 小于等于 |
RELATION_GREAT | 大于 | RELATION_LIKE | 相似 |
RELATION_LESS | 小于 |
二、构建条件检索信息
示例代码:
# coding:utf8
import ProcessDBDriver as processdbDriver
import numpy as np
from array import array
# 数据结构
# pointId 数据点ID
# tableId 数据表ID
# pointName; //数据点名称
# refferObjectId;//引用其他数据点ID
# pointType; // 数据点类型 0是采样点 / 1是统计点 / 2是计算点
# priority; // 数据点优先级
# dataType; // 数据点存储值类型 例如FLOAT32
# pointDesc; // 数据点描述
# archived; // 是否保存历史数据
# ioType; // IO类型 0为输入 1为输出 2为中间变量 3为网关
# spaceCompress; //空间维度 1是差值压缩,2是数据块压缩,3是两者全选
# timeUnit; //分辨率 0是秒 1是毫秒 2是微秒
# unit; // 单位
# initValue; // 数据点初始值
# bottomScale; // 量程低限
# topScale; // 量程高限
# alarmLow; // 告警低限
# alarmHigh; // 告警高限
# deviation; // 量程数值,默认0.05
# forceSaveInterval; // 强制存历史数据时间
# format; // 小数精度 例如数据类型为int,则没有小数精度
# devType; // 按量程百分比是0 ,按量程物理值是1
# compress; // 时间维度 0是deadband死区压缩, 1是linuar线性压缩, 2是None无压缩
# timeoutInterval; // 超时时间
# creatorId; // 数据点创建人ID
# createTime; // 数据点创建时间
# period; // 计算周期 计算点专属属性
# alarmSwitch; //是否告警 0:不告警 1: 告警
# alarmAckType; //告警类型 0: 手动 1:自动
# alarmType; // 1:死区报警 2:超时报警 3:ON报警 4:OFF报警 5:变化报警
# alarmLevel; //告警级别 none是0 一级是1 二级是2 三级是3 四级是4
# alarmHH; //告警高高限
# alarmLL; //告警低低限
# alarmGroupId; //告警分组id
# tableFullName; //数据点所属的数据库加数据表的名称(例如PUBLIC.SYS)
# statinfo; //点位操作统计,具体结构如下
# curVal; //当前标签值,具体结构如下
# statinfo{
# nuReadRTTimes //读取实时数据次数
# nuWriteRTTimes //写入实时数据次数
# nuForceWriteRTTimes //强制写入实时数据次数
# nuCompressedTimes //压缩数据次数
# nuReadHistoryTimes //读取历史数据次数
# nuReadHistoryCount //读取历史数据数量
# nuWriteHistoryTimes //写入历史数据次数
# nuWriteHistoryRecordCount //写入历史数据数量
# }
# curVal{
# nSecond //当前值秒数
# nMilliSecond //当前值毫秒数
# nQuality //当前值质量
# nTagType //当前值数据类型
# nValue //当前值
# }
# 连接
connectName = '127.0.0.1'
port = 8303
processdbDriver.connect(connectName, port)
# 登录
userName = 'root'
password = 'root'
wErrCode = processdbDriver.login(userName, password)
# 登录成功
if wErrCode != 0:
print('login failed. errorCode: ', wErrCode)
else:
print('login!sucess!')
# class FilterItem(object):
# nItemID 筛选数据类型:库名,表名,点名等
# nRelation 筛选数据规则: 相等,相似等
# szValue 具体值:“PDB_PROC_CPU_USAGE”
# 添加筛选条件
filterItem01 = processdbDriver.FilterItem(
processdbDriver.FilterType.FILTER_POINT_NAME.value,
processdbDriver.RrlationType.RELATION_LIKE.value,
"CPU")
filterItem02 = processdbDriver.FilterItem(
processdbDriver.FilterType.FILTER_POINT_NAME.value,
processdbDriver.RrlationType.RELATION_LIKE.value,
"PDB")
# 加入筛选条件集合
filterList = set()
filterList.add(filterItem01)
filterList.add(filterItem02)
# 设置页数页码
PageSize=10
PageNum=0
# 发起数据请求
count, errCode, resultSet = processdbDriver.query_point_by_filter(
PageSize, PageNum, filterList)
# 遍历读取数据
if errCode == 0:
if count != 0 and count != 'null':
for i in range(count):
pointData = processdbDriver.query_points(
i, resultSet)
print('query_point_by_filter succeed.')
print(' 点ID:',
pointData.pointId)
print(' 点名:',
pointData.pointName)
print(' 所属表全名:',
pointData.tableFullName)
print(' 当前值发生时间:',
pointData.curValueOccurtimeStamp)
print(' 数据类型:',
pointData.getDataType())
print(' 读取次数:',
pointData.statInfo.nuReadHistoryCount)
print(' 当前值:',
pointData.curVale.nValue)
else:
print('no data.')
else:
print('query_point_by_filter failed, errorCode: ', errCode)
运行结果:
login!sucess!
query_point_by_filter succeed.
点ID: 1001000001
点名: PDB_OS_CPU_USAGE
所属表全名: PUBLIC.SYS
当前值发生时间: 1699515939
数据类型: float32
读取次数: 0
当前值: 41.407318115234375
query_point_by_filter succeed.
点ID: 1001000007
点名: PDB_PROC_CPU_USAGE
所属表全名: PUBLIC.SYS
当前值发生时间: 1699515939
数据类型: float32
读取次数: 0
当前值: 1.0