什么是数据保护?
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);
注意以下几点:
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);
}
}