[开源]freescada的数据库存储方式(archiver)探究[mysql为例]

jayhust jayhust     2022-08-01     502

关键词:

1.我们先新建一个FreeSCADA的工程实例,看下实际的存储效果:

a) 建立几个数据通道作为数据源(Communication菜单编辑,Channels Tree下显示):

b) 建立一个数据库存档(工具栏的Archiver Settings):

c) 定义数据库连接属性(Project菜单下的Database settings子菜单):

d) 编译项目,并运行,查看数据库存储结果:

2.存储过程探究(FreeSCADA2解决方案下的Archiver工程):

我们主要分析Archiver工程下Archiver.cs文件内的的几个方法:

Start方法:

public bool Start()
{
    dbWriter = new DbWriter();
    if (dbWriter.Open() == false)
    return false;

    channelUpdaterThread = new Thread(new ParameterizedThreadStart(ChannelUpdaterThreadProc));
    channelUpdaterThread.Start(this);

    dbReader = new DbReader();
    if (dbReader.Open() == false)
    return false;

    return IsRunning;
}

ChannelUpdaterThreadProc方法:

private static void ChannelUpdaterThreadProc(object obj)
{
    ArchiverMain self = (ArchiverMain)obj;

    try
    {
        for (; ; )
        {
            //System.Console.WriteLine("{0} ChannelUpdaterThreadProc: Start loop", System.DateTime.Now);
            foreach (Rule rule in self.channelSettings.Rules)
            {
                if (rule.Enable)
                {
                    foreach (BaseCondition cond in rule.Conditions)
                      cond.Process();

                    if (rule.Archive) // 判断是否需要将本规则下对应的各个数据通道数据存入数据库(通过判断是否使能了本项存储规则、并且存储规则对应的存储条件的参数:间隔时间是否已经到了)
                      self.dbWriter.WriteChannels(rule.Channels);
                }
            }
            Thread.Sleep(100); // 线程休眠100ms。所以FreeSCADA的查询各个数据通道的间隔就是100ms。
        }
    }
    catch (ThreadAbortException)
    {
    }

    if (self.dbWriter != null)
    self.dbWriter.Close();
}

Stop方法:

public void Stop()
{
    if (channelUpdaterThread != null)
    {
        channelUpdaterThread.Abort();
        channelUpdaterThread.Join();
        channelUpdaterThread = null;

        if (dbWriter != null)
            dbWriter.Close();
    }
    if (dbReader != null)
        dbReader.Close();
}

 

代理和 ARC,不兼容?

...发布时间】:2012-05-0208:27:16【问题描述】:我正在尝试为数据库存储过程实现代理。这个想法是让我的代码在数据库中找到一系列存储过程,然后在内存中创建一个代理对象,该对象将实现与这些存储过程匹配的方法。该代理对... 查看详情

ads.ini 中的更改未反映在 arc 的连接存储库中

...映在弧连接存储库中。但是现在,什么都没有改变,新的数据库连接没有显示出来。我应该检查什么以使 查看详情

如何存储开源 Heroku Node.js 应用程序的数据库凭据?

】如何存储开源HerokuNode.js应用程序的数据库凭据?【英文标题】:Howtostoredatabasecredentialsforanopen-sourceHerokuNode.jsapp?【发布时间】:2011-12-0507:27:02【问题描述】:我正在构建一个Node.js应用程序,并且需要以这样一种方式存储数据... 查看详情

如何android多activity间共享数据

...储数据。1使用SharedPreferences存储数据2文件存储数据3SQLite数据库存储数据4使用ContentProvider存储数据5网络存储数据不同的业务逻辑,或者需求,用不同的实现方式,以下是这几中数据存储方式的说明用及法:第一种:使用SharedPreferences... 查看详情

淘宝开源key/value结构数据存储系统tair技术剖析

摘要:Tair的功能Tair是一个Key/Value结构数据的解决方案,它默认支持基于内存和文件的两种存储方式,分别和我们通常所说的缓存和持久化存储对应。Tair除了普通Key/Value系统提供的功能,比如get、put、delete以及批量接口外,还有... 查看详情

如何以编程方式为非 ARC xcode 项目中的特定文件启用 ARC?

】如何以编程方式为非ARCxcode项目中的特定文件启用ARC?【英文标题】:HowtoenableARCprogrammaticallyforspecificfilesinanon-ARCxcodeproject?【发布时间】:2014-01-0915:02:47【问题描述】:我有一种情况,我需要在几个非ARCxcode项目中为许多文件... 查看详情

小记--------hbase数据库介绍及存储方式

...原理1、hbase基本介绍HBASE是一个分布式的,面向列的开源数据库。Hbase的存储是基于hadoop的。因为Hadoop实现了一个分布式文件系统(HDFS),基于hadoop意味着hbase与生俱来的超强的扩展性和吞吐量,hbase采用的是key、value的存储方式... 查看详情

ARC 禁止合成具有未指定所有权或存储的财产

】ARC禁止合成具有未指定所有权或存储的财产【英文标题】:ARCforbidssynthesizingapropertywithunspecifiedownershiporstorage【发布时间】:2012-01-1715:18:44【问题描述】:我创建了@property的UIColor,@property(nonatomic)UIColor*color;然后我尝试合成它:... 查看详情

云原生时代开源监控软件prometheus架构介绍

...定义的格式存储在本地硬盘上。Prometheus的本地时间序列数据库以每两小时为间隔来分块(block)存储,每一个块中又分为多个chunk文件,chunk文件是用来存放采集过来的数据的时间序列数据,元数据(metadata)和索引文件(index)... 查看详情

以编程方式从 ARC 中的导航堆栈中删除 viewController

】以编程方式从ARC中的导航堆栈中删除viewController【英文标题】:RemovingtheviewControllerprogrammaticallyfromthenavigationstackinARC【发布时间】:2012-12-0411:16:52【问题描述】:我想在推送第三个新的ViewController之前清除我的导航堆栈,它有两... 查看详情

在 ARC 中使用 Blocks 和以某种方式复制的奇怪内存泄漏

】在ARC中使用Blocks和以某种方式复制的奇怪内存泄漏【英文标题】:WeirdmemoryleakwithBlocksandcopyingincertainwayinARC【发布时间】:2013-04-2814:01:00【问题描述】:以下简单代码在ARC下,在最新的Xcode(4.6.2)中使用Leaks工具进行分析,在iOS模... 查看详情

盘古开源:完善数据存储体系,保障数字经济安全高效发展

随着社会经济各领域数字化建设的推进,数据成为经济发展的战略资源,数据存储需求呈现指数级增长,数据中心、5G网络等新型基础设施为数字经济发展提供基础保障的同时,也产生了高能耗与高成本等问题。... 查看详情

quartzscheduler开源框架学习记录

...3.核心元素介绍4.线程视图5.数据存储简介Quartz是OpenSymphony开源组织在任务调度领域的一个开源项目,完全基于Java实现。该项目于2009年被Terracotta收购,目前是Terracotta旗下的一个项目。http://www.quartz-scheduler.org/这里可以下载Quartz的... 查看详情

盘古开源丨filecoin是旨在存储人类社会最重要信息的分布式网络

Filecoin是由协议实验室发起的一种分散式存储解决方案,它将现有的云存储转化为一个算法市场。为数据交流和交换建立一个统一的、通用的平台,使得整个数据的扭转或交换成为一个标准化的统一系统,而不是之前... 查看详情

内存管理的思考方式2(arc下)

...tain或者release,完美的满足了‘引用计数式内存管理的思考方式’:自己生成的对象自己持有非自己生成的对象,自己也可以持有不再需要自己持有的对象时释放非自己持有 查看详情

openfiler---开源存储管理平台

  Openfiler能把标准x86/64架构的系统变成一个强大的NAS、SAN存储和IP存储网关,为管理员提供一个强大的管理平台,并能能应付未来的存储需求。依赖如VMware,VirtualIron和Xen服务器虚拟化技术,Openfiler也可部署为一个虚拟机... 查看详情

开源web框架django知识总结(代码片段)

...取速度很快的内存意义:视图渲染有一定成本,数据库的频繁查询过高,对于低频变得的页面可以考虑使用缓存技术,减少 查看详情

richtext开源项目总结

一、RichEditor开源项目地址:https://github.com/renhui/RichEditorRichEditor是本人开源的一个富文本编辑器,功能相对简单,但麻雀虽小五脏俱全,支持了图文混排的编辑方式和展示方式的控件及对应的demo。核心功能:图文混排展示,支持... 查看详情