[开源]FreeSCADA的数据库存储方式(Archiver)探究[MySQL为例]

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);
        }
    }
    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();
}
时间: 2024-10-09 17:04:31

[开源]FreeSCADA的数据库存储方式(Archiver)探究[MySQL为例]的相关文章

***博客系统文章的数据库存储方式

在通常的博客系统中,我们发表文章的时候,在数据库中存储的一般不仅仅是文章的文字,还包括文章的样式,而且很多时候都是所见即所得的效果.这就要求我们以html+文字这样存进数据库中,通过查找资料,可以用专门的文字编辑器可以实现,使用方法如下: FCKeditor是一个专门使用在网页上属于开放源代码的所见即所得文字编辑器.它志于轻量化,不需要太复杂的安装步骤即可使用.它可和PHP.JavaScript.ASP.ASP.NET.ColdFusion.Java.以及ABAP等不同的编程语言相结合.“FCK

多层级树形结构数据库存储方式

要做一个多层级树形结构数据,后端数据如何存储,以怎样的形式给前端呢 方法1:Adjacency List存储相邻关系 id, parent_id以邻接表(Adjacency List)的形式进行存储在一张表中 这种方式在关系存储比较简单,查询的时候比较复杂. 比如查询部门下的所有子部门信息,因为表中只记录的上下级的部门及其子部门信息.需要遍历表中的信息 这有两种方式. 方式1: 在数据库中递归遍历数据表,这样只需要一次io就可以完成这个操作.降低的数据库连接数,缺点是占用数据库的cpu,在数据量

ruby on rails4的session数据库存储方式

网上说的都是rake:db:sessions:create.但是对于rails4版本的就不起作用了. 如下是我自己针对rails4版本的操作. rails4的session数据表创建:请参考这个文献:http://www.cnblogs.com/heimirror/p/3536965.html. 1.找到项目的gemfile文件修改它: 添加gem 'activerecord-session_store' 保存退出,不需要后面的gitHub的url 2.在项目根路径下执行: rails gene

DDD开发框架ABP之本地化资源的数据库存储扩展

在上一篇<DDD开发框架ABP之本地化/多语言支持>中,我们知道,ABP开发框架中本地化资源存储可以采用XML文件,RESX资源文件,也提供了其他自定义的存储方式的扩展接口.ABP框架默认实现了前面两种方式,而数据库存储方式则需要自己扩展,大概是因为数据库存储涉及到了实体和仓储等方面的具体内容,不适合放在基本框架里面. 以数据库的方式存储本地化资源,一个最明显的好处就是方便修改,尤其是对于基于数据库的应用系统而言,可以提供统一的维护界面.接下来我们就来一步步地实现将本地化资源存储在数据库中.

iOS狂暴之路---iOS中应用的数据存储方式解析

一.前言 前面一篇文章中已经介绍了iOS应用中的视图控制器知识点,而本文不会按照常理来介绍View的知识点,而是先介绍iOS中的数据存储知识点,因为关于View的知识点太多了,后面会连续详细介绍一下.这篇先来看一下iOS中的数据存储功能分析.每一个iOS应用和Android应用一样,都有其对应的沙盒存储自己的数据,但是iOS和Android有一个区别就在于没有SD卡的概念了,也就说在iOS中应用的数据只能保存到自己的沙盒中.这也可以看出来iOS为了应用的安全考虑. 在开发Android的时候都知

大神分享BPM三大附件存储方式

[实例分享]如何配置附件上传位置? 问题: H3 BPM默认情况下附件是存储在数据库中的,长时间下去数据库会越来越大,备份起来也很麻烦,请问如何配置可以让附件直接存储在指定目录或别的文件服务器中? 解决方法: 可以把附件分离出来单独放一个数据库或者配置文件服务器. 下面我介绍下H3 BPM的三种附件存储方式. 文件存储是设置H3 BPM所有的附件存储方式,可支持网络文件夹.FTP和数据库三种方式,系统默认采用数据库存储方式. 添加文件服务器,如下图所示: 如果数据库存储,那么需要设置数据库的访问

HTML5 Web 客户端五种离线存储方式汇总

最近折腾HTML5游戏需要离线存储功能,便把目前可用的几种HTML5存储方式研究了下,基于HT for Web写了个综合的实例,分别利用了Cookie.WebStorage.IndexedDB以及FileSystem四种本地离线存储方式,对燃气监控系统的表计位置.朝向.开关以及表值等信息做了CURD的存取操作. HTML5的存储还有一种Web SQL Database方式,虽然还有浏览器支持,是唯一的关系数据库结构的存储,但W3C以及停止对其的维护和发展,所以这里我们也不再对其进行介绍:Bewa

C语言中浮点数在内存中的存储方式

关于多字节数据类型在内存中的存储问题 //////////////////////////////////////////////////////////////// int ,short 各自是4.2字节.他们在内存中的存储方式以下举个样例说明. int data = 0xf4f3f2f1; 当中低位存放在编址小的内存单元.高位存放在编址高的内存单元 例如以下: 地址:0x8000      0x8001    0x8002   0x8003 数据:   f1              f2 

MySQL数据库初体验(含MySQL数据库5.7.17手工编译安装)

MySQL数据库初体验 Ram:随机性访问存储器,断电丢失数据 内存Rom:只读访问存储器,不会丢失数据 管理存储的数据,数据的增删改查,数据的迁移,保证数据的私密性 1.数据库的基本概念2.数据库的发展3.主流的数据库介绍4.编译安装mysql5.操作mysql 数据库的基本概念 数据: 1.描述事物的符号记录称为数据(Data)2.包括数字,文字.图形.图像.声音.档案记录等3.以"记录"形式按统一-的格式进行存储 表: 1.将不同的记录组织在一-起,就形成了"表&quo