之前两个项目CPU采用的是1511,但应为我使用了UDT并且设备比较多需要保存的数据也很多,如果不采用UDT可能1511的保持区应该是够用的,但为了偷懒我还是使用了UDT,所以保持区就超了,于是我就去查指令看看有没有可以解决这个问题的指令,结果还真给我找到了。这指令就是WRIT_DBL和READ_DBL,这两个指令一个是把DB里的数据写入内存卡中,一个是把内存卡中的数据读取到DB块内。
使用时需要单独创建一个或多个DB块用于储存数据,这个DB块需要修改一下属性,在属性选项栏里把“仅储存在装载内存中”勾选,还有就是优化块这个可以根据需求勾选,如果DB块是一对一的这个可以用优化块,如果是一对多则需要用非优化。
我因为是使用UDT我把相同数据都放在一个DB块中所以我的项目中的需要保存的数据的DB块并不多只有四五个,所以我选择用了一对一的方法,上位机使用的是wincc V7.5 SP2可以as上载数据所以我所有的DB都是优化的数据块。
程序写的是每一分钟调用一次WRIT_DBL把数据写到储存卡中,CPU刚启动的时候调用一次WRIT_DBL把储存卡内的数据读取到程序DB块内
这样程序看起来设计没什么问题,唯一有点问题的地方是每次在线时用于存储的DB永远是不一致的,这个可以忽略不记。
但这个还有一个非常致命的问题WRIT_DBL这个指令会损伤储存卡的寿命,储存卡是有读写寿命的,使用这个指令会周期性的对储存卡进行读写操作,周期长还好,如果周期短了可能会导致储存卡损坏。
前年的那个项目在去年的时候出现一次储存卡损坏的情况,当时也没在意就直接换了一张。直到今年再看这个指令的帮助文档,发现有一行字就是说周期性的使用这个指令会损失存储卡寿命。
后来我把程序修改的了一下把写入周期改成了24小时加手动触发。每天执行一次或者修改参数后手动去保存一次。这样可以大大延长存储卡的寿命也不需要跟换CPU了。