当前位置:首页 > 物联网 > 《物联网技术》杂志
[导读]摘要:介绍了内存实时数据库在工业控制DCS组态软件中的应用及其在数据采集过程中的重要性;针对组态软件内存实时数据库的特点,测试了在不同的数据组织形式、内存置换页面大小以及缓存大小下数据库的性能,通过测试,得出了不同的配置组合对内存实时数据库性能的影响,从而为下一步的研究工作打下了基础。

引言

伴随着分布式控制系统DCS(DistributedControlSystem)的出现,以及其在工控领域的广泛应用,组态软件开始逐渐被广大技术人员所熟悉。“组态”的概念最早来自英文Configuration,其含义是使用软件工具对计算机及软件的各种资源进行配置(包括进行对象的定义、制作和编辑,并设定其状态特征属性参数),达到使计算机或软件按照预先设置,自动执行特定任务,满足使用者要求的目的。

组态软件是应用在数据采集和过程控制层面的一种专用软件,应用在分布式控制系统数据监控层一级。通过使用组态软件,可以为DCS工控系统提供良好的用户开发界面以及简洁的使用方法,可以非常容易地实现和完成对分布式工业控制系统各个模块的模拟和监控功能,使计算机图形界面与工控系统真实设备联系起来;通过集成各个硬件厂家的I/O接口以及设备接口,组态软件能够采集到工控设备的现场数据,通过实时数据库进行处理,并存储到历史数据库供查询使用;通过设置,可以对采集数据提供报警和报表功能;同时,组态软件应该能支持各种工控设备和常见的通信协议,并且通常应提供分布式数据管理和网络功能。

组态软件产品于上世纪80年代初出现,并且得到了良好的发展,目前世界上的组态软件有几十种之多,其中主要包括美国Wonderware的Intouch、美国Intellution公司的Fix、澳大利亚Cit公司的Citech、德国Simens的Wince、北京亚控自动化软件有限公司开发的组态王(Kingview)、大庆三维公司的ForceControl以及北京昆仑通态自动化软件科技有限公司开发研制的MCGS等。伴随着国家对工控领域的支持不断加大,

收稿日期:2014-01-14

组态软件将在工控信息化中扮演越来越重要的角色,未来发展的空间也会不断扩大。

1内存实时数据库

大批量生产、连续加工过程、高度自动化程度是流程工业的特点,这需要在过程监控时提供高速的数据处理、长期的数据存储。工业控制系统是一个实时系统,它实时地从外界采集数据进行运算、判断后输出控制量,因此对数据的管理呈现出实时特点[3]。因此,实时数据库是组态软件处理数据、组织数据和管理数据的核心,它能够高效地处理和存储工控系统生产过程中的实时数据,为优化过程控制和企业的经营决策提供完整的实时数据和完备的历史信息叫

根据工控系统的特点,在工业组态软件中需要应用内存实时数据库,分以下几种情况:内存实时数据库整个数据库常驻内存,对数据的存取不需要I/O操作;整个数据库不用常驻内存,但存取数据时,应先进入内存,即数据库的存取在内存中进行;数据库常驻磁盘,增大缓冲区,在一个事务执行之前,所有的数据都已经取到内存,经适当的缓冲区管理减少甚至消除I/O[5],这些特点决定了内存实时数据库能够及时有效地处理和维护大量的共享数据和控制数据,满足工业组态软件对于事务时间性方面的要求。

对于内存实时数据库来说,由于已不再涉及I/O,所以在时间和空间矛盾的处理上,空间是第一位,系统的算法设计目标应该是内存空间和CPU的高效使用。为了达到这一目标,应该对内存实时数据库的数据组织结构、事务处理和数据管理、并发控制及恢复技术、内存置换页面以及缓存大小等方面进行研究与测试[5],使其能够提供更好的性能,满足工业控制组态软件的需求。

2内存实时数据库性能测试

2.1测试目的

针对内存实时数据库的特点和研究与测试方面的要求,设置内存实时数据库的数据组织形式、内存置换页面大小以及缓存大小,通过测试数据,得出不同的配置组合对内存实时数据库性能上的影响,为下一步的研究工作打下基础。2.2测试环境

测试对象采用BerkeleyDB内存实时数据库系统。BerkeleyDB历史悠久,主要应用在Unix/Linux操作系统上,其设计思想是简单、小巧、可靠、高性能。它可为应用程序提供可伸缩的、高性能的、有事务保护功能的数据管理服务。同时BerkeleyDB为数据的存取和管理提供了一组简洁的函数调用API接口。BerkeleyDB对接收到的实时数据采用关键词(Key)和数据(Value)的存储结构,这两者构成的Key/Value对组成了数据库中的一个基本结构单元,而整个数据库实际上就是由许多这样的结构单元所构成的。通过使用这种方式,简化了实时数据的存储逻辑关系,同时,简便的数据库查询和访问方式也能够满足工业组态软件的需求。所以,在此测试中,所有的数据插入的都是Key=int,Value=int,在循环中递增的。

本机配置如下:

OS为Windows7旗舰版;RAM=8GB;CPU=IntelCorei7-3770CPU3.4GHz;Disk=500GB;NTFS的默认簇大小为4KB。

测试的实际数据量为:

300*10000*2*sizeof(int)/1024/1024丝22.89MB;编译器:VisualC++6.0;BerkeleyDB内存实时数据库版本为db-5.3.21.NC2.3测试方法

循环插入int类型的数据,同时设置BerkeleyDB的参数,测试在不同存储方循环插入int类型的数据,同时设置BerkeleyDB的参数,测试在不同数据组织形式、内存置换页面大小以及Cache缓存大小的设置下,数据库读写的性能,以确定组态软件实时数据库部分的存储方式。

2.4测试代码

内存实时数据库性能的测试代码如下:

#include“stdafx.h”

#include"db.h”

#include“db_cxx.h”

#include“windows.h”

#include“winbase.h”

intmain(intargc,char*argv[])

{

size_tpsize=1;//设置页面大小,单位为KBsize_tcsize=10;//设置cache大小,单位为MBinttcount=300;//设置数据插入数量,单位为万次Dbdb(NULL,0);

db.set_pagesize(1024*psize);

db.set_cachesize(0,1024*1024*csize,0);u_int32_toFlags=DB_CREATE;try

{

db.open(NULL,"test.db",NULL,DB_

BTREE,oFlags,0);

}

catch(DbException&e)

{

}

catch(std::exception&e)

{

}

//实时数据插入

Dbtkey,data;

inti,ret,count=10000*tcount;

longt1=GetTickCount();//开始时间

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

{

Dbtkey(&i,sizeof(int));

Dbtdata(&i,sizeof(int));

db.put(0,&key,&data,DB_

NOOVERWRITE);

}

longt2=GetTickCount();//结束时间

printf("插入结束%d万记录,全部用时:%.2f秒\r\n",

tcount,(t2-t1)/(float)1000);

longtick1=GetTickCount();

try

{

Dbc*dbcp;

db.cursor(NULL,&dbcp,0);

Dbtkey;

Dbtdata;

while(dbcp->get(&key,&data,DB_NEXT)==0)

{

key.get_data();

data.get_data();

}

dbcp->close();

printf("遍历结束%d万记录,全部用时:%.2f秒\r\n",tcount,(GetTickCount()-tickl)/(float)1000);

db.sync(0);

}

catch(DbException&dbe){}

db.close(0);

return0;

}

2.5测试结果

代码运行界面如图1所示。

组态软件内存实时数据库性能测试

代码运行后所得到的结果如表1――表3所列。

表1页尺寸列表

(记录数量:300万,缓存尺寸:0MB单位:s)

读写
1KB
2KB
4KB
8KB
16KB
32KB
B+写
33.71
30.28
26.85
28.30
34.09
50.59
HASH写
50.92
46.32
48.64
54.10
67.44
91.39
B+读
2.03
2.00
2.03
2.11
2.20
2.34
HASH读
4.24
4.51
3.85
3.70
3.67
3.32

表2Cache缓存大小列表(1)

(记录数量:300万;页尺寸:4KB;数据库文件大小:80.2MB;单位:s)

读写
0MB
10MB
20MB
40MB
80MB
160MB
320MB
B+写
31.78
17.04
16.04
15.12
11.50
11.37
11.33
HASH写
46.85
30.39
22.2
16.49
12.65
12.92
13.39
B+读
2.46
2.65
2.61
2.65
2.59
2.54
2.56
HASH读
3.73
3.54
3.2
3.21
3.12
3.18
3.25

表3Cache缓存大小列表(2)

Cache缓存大小(记录数量:600万;页尺寸:4KB;数据库文件大小:160MB;单位:s)

读写
0MB
10MB
20MB
40MB
80MB
160MB
320MB
B+写
71.07
44.60
43.41
41.95
36.13
24.77
24.49
HASH写
102.21
85.82
67.00
52.56
43.51
28.24
27.75
B+读
5.21
5.48
5.51
5.49
5.41
5.30
5.24
HASH读
8.24
8.22
7.91
7.52
7.11
6.74
6.75

4 结 语

根据以上运行结果,可以看出组态软件内存实时数据库BerkeleyDB在采用B+树存储方式的时候,其写入和读取性能明显高于HASH存储方式;当页面尺寸为4KB时,BerkeleyDB的存储效率最高,随着页面尺寸的不断增大,效率反而逐渐降低;当确定了页面尺寸为4KB后,逐渐改变Cache缓存大小,比较300万与600万两种记录数量,发现无论是B+树的存储方式还是HASH的存储方式,当缓存很小的时候,效率都很差,而当缓存大小大于等于数据库文件大小时,效率最高,之后随着缓存逐渐增大,对效率的影响很小。

通过该测试可以得出,不同的数据组织形式、内存置换页面大小以及Cache缓存大小对内存实时数据库的效率性能影响很大,本文只针对B+树和HASH存储方式进行了测试,测试的内容并不完善,下一步应该对数据的组织形式进行深入的研究,挖掘更适合键值对形式的工业组态软件内存实时数据组织结构。

20211120_6197d95914a30__智能家居虚拟场景设1计与实现

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

组态软件,又称为配置软件、监控组态软件或二次开发平台,是现代工业自动化领域不可或缺的重要组成部分。它是一种面向工业自动化控制系统设计、配置和管理的集成开发环境,允许用户通过图形化、拖拽式的组态方法,无需编写大量的底层代码...

关键字: 组态软件 配置软件

据韩联社报道,上周三星电子发布业绩报告显示,随着芯片价格反弹,预计今年第一季度营业利润同比骤增931.25%,为6.6万亿韩元(当前约合人民币354.6亿元),已经超过了2023年全年营业利润6.57万亿韩元。

关键字: 内存 三星

TDK 株式会社(TSE:6762)进一步扩充 Micronas 嵌入式电机控制器系列 HVC 5x,完全集成电机控制器与 HVC-5222D 和 HVC-5422D,以驱动小型有刷(BDC)、无刷(BLDC)或步进电机...

关键字: 嵌入式 电机控制器 内存

Apr. 04, 2024 ---- TrendForce集邦咨询针对403震后各半导体厂动态更新,由于本次地震大多晶圆代工厂都位属在震度四级的区域,加上台湾地区的半导体工厂多以高规格兴建,内部的减震措施都是世界顶尖水平...

关键字: 晶圆代工 内存

美光坚持多元、平等、包容的企业文化,携手社区推行公益

关键字: 内存 存储 美光

今天,小编将在这篇文章中为大家带来虚拟内存的有关报道,通过阅读这篇文章,大家可以对虚拟内存具备清晰的认识,主要内容如下。

关键字: 内存 虚拟内存

在这篇文章中,小编将对虚拟内存的相关内容和情况加以介绍以帮助大家增进对它的了解程度,和小编一起来阅读以下内容吧。

关键字: 内存 虚拟内存

以下内容中,小编将对物理内存的相关内容进行着重介绍和阐述,希望本文能帮您增进对物理内存的了解,和小编一起来看看吧。

关键字: 内存 物理内存

美光 LPDDR5X 和 UFS 4.0 以高带宽、高能效以及大容量助力荣耀人工智能创新

关键字: AI 内存 存储 智能手机

第五代英特尔至强铂金 8592+处理器凭借更优化的SoC,三倍更大缓存和更快内存,在运行诸多工作负载时具备与众不同的优势,尤其是AI工作负载。

关键字: 至强处理器 SoC 内存
关闭
关闭