ProfControl系统的数据保全
chen
·
创建日期: 2022-05-27 13:07:54
·
2
1
0
65

什么是数据保护?

ProfControl系统运行过程中将处理大量的数据,有些数据是临时的,有些则是关键数据,关系到任务、状态或通讯信号保持的。这些数据一旦无故丢失,将导致下一次恢复系统的时候很困难,严重的将导致停线。为了避免关键数据丢失,ProfControl提供了一套数据保全机制,用于将关键数据进行保护(老版本已弃用,后期请使用该方式建立数据保全)

数据保护可以做什么,ProfControl数据保护原理

数据保护可以将工程师指定的数据存储至数据库,且这种存储是实时的,单元的,用户不用关心的。

实时性:

  • PC系统将用户设定的需要保护的数据进行实时侦测,一旦数据发生变化,延迟一定时间(<500ms)写入数据库。这样保证了数据的时效性,哪怕遇到厂区断电等恶劣情况,数据也将始终保持最新。

单元存储:

  • PC存储数据库的方式是单元存储,这样的好处是降低CPU负担。

用户无关:

PC系统一旦设定了需要数据保护(保全)的数据单元,系统将自动侦测改变并写入数据库,无需用户参与。

如何进行数据保护

PC系统数据保护采用了脚本的配置方式,通过脚本设置数据保护的数据库名称,配置保护项。

1)设置数据保护数据库名称

Tools.DP.DataProtectInit("test");

      

2)一般数据保护

int a = 0;
public int A 
{
    get
    {
        return a;
    }
    set
    {
        a = value;
        //为了可以通知数据保护系统,必须调用该通知
        OnDPPropertyChanged(a);
    }
}

//对于本对象内的A属性进行数据保护
Tools.trace(Tools.DP.SetDataProtect("test",this,"A"));

      系统提供了两个支持多记录保存的类型,分别是DList及DDic。如果使用普通数组类型定义属性,如Array,List,Dictionary等,数据    保全系统将整体打包成json存储在数据库中,这样效率低,为了解决这个问题,系统提供了两个特殊的类型。

   DList

       脚本系统提供的动态列表。使用方式与List基本相同,不同的是,使用DList时,系统将每一条信息独立存储在数据库中。

Tools.DP.DList<int> ocTest = new Tools.DP.DList<int>();
Tools.DP.DList<string> ocTest = new Tools.DP.DList<string>();
Tools.DP.DList<IAgv> ocTest = new Tools.DP.DList<IAgv>();

   DDic

       脚本系统提供的动态字典。使用方式与Dictionary基本相同,不同的是,使用DDic时,系统将每一条信息独立存储在数据库中。

Tools.DP.DDic<IAgv,string> dicTest = new Tools.DP.DDic<IAgv,string>();
Tools.DP.DDic<int,string> dicTest2 = new Tools.DP.DDic<int,string>();
Tools.DP.DDic<string,IAgv> dicTest = new Tools.DP.DDic<string,IAgv>();

 3)全局变量保护

      假设全局变量名称为test,直接填写名称即可。  

Tools.DP.SetDataProtect("test","test",Tools.DP.RecoveryModeEnum.EveryTime);

      或先查询到全局变量对象,然后传递对象作为参数。

var testVar = Tools.Var("test");
Tools.DP.SetDataProtect("test",testVar,Tools.DP.RecoveryModeEnum.EveryTime);

  

png

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

注意以下几点:

  1、如果要使用数据保全,请先安装sqliteV3或mySql。

  2、数据保全仅可以保全属性,不可以保全字段及其他类型。

  3、数据保全的脚本需要配置成随项目启动。

  4、最好通过MsgBox/MessageBox做一个确认窗体,以免有不需要恢复数据的情况。

  5、必须准确实现DPInterface接口所需的属性、事件及方法。

  6、需要数据保全的属性一定要触发OnDPPropertyChanged,否则将无法记录到数据库中。

  7、触发OnDPPropertyChanged的方法有两种,一种写在属性的set(setter)中,另一种是在属性赋值后直接调用    OnDPPropertyChanged。比如属性Body赋值为Human

Body = "Human";
OnDPPropertyChanged(Body,"Body");

   8、OnDPPropertyChanged的参数有两个,第一个是属性当前值,第二个是属性名称,写在set中的通知,系统会自动填充属性名    称,可以简写为

public string Body
{
    get
    {
        return body;
    }
    set
    {
        body = value;
        OnDPPropertyChanged(body);
    }
}