1009 【万泉河】设备参数值掉电保持实现 点击:101 | 回复:0



万泉河

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:74帖 | 62回
  • 年度积分:67
  • 历史总积分:413
  • 注册:2009年12月04日
发表于:2022-10-10 12:52:04
楼主

1009 【万泉河】设备参数值掉电保持实现

 

这个话题以前探讨过多次。但都不彻底。

 

以前是因为面对的是西门子PORTAL FB的每个管脚都可以设置保持。 所以焦点主要在优化块和非优化块,在非优化块对掉电保持资源消耗量大的问题。

 

而最近在撰写《三菱PLC标准化编程烟台方法》的书,这个问题又逐渐抬到前台来了。我在分发三菱的标准化示范项目资料的时候, 跟学员就直接坦诚, 这一块的问题我没有解决,留着等需要的时候再大家一起努力想办法找到解决方案。

 

这都好几年过去了,上周借着写书的机会,温习了一部分内容,就跟学员们做了一次讲座。 讲座之余,问起学员们这个问题,他们在实际项目中如何解决的。 有几个老学员,自己标准化应用已经很熟练了,回答我还是FB管脚绑锁存区的软元件数据来实现的。

 

这种是最原始的,工作量最大的方法。 等于他们也同样对这个问题没有解决,等于是暂时搁置了。面向未来,搁置争议,这在政治上是政治智慧,在技术上也是一种智慧。

 

当然,也可能他们自身对这一点并不太重视,不觉得有痛点。百分之九十的痛点都解决了,都爽到了, 还有一点点固有的不爽, 也无足轻重了。

 

然而对我这种偏执狂则不行的。 当然啦,我是烟台方法的奠基者,我当然有责任尽可能把一切都做好,做到尽善尽美。 都能给出完美的解决方案。

 

于是,花了点时间重新研究了下,做了实现。 有近3年多的新技能的积累,理解力和方法又深了一层,实现起来就容易多了,方向也清晰多了。

 

从头来描述这个问题。

 

对于一台设备,一个设定参数,在PLC中本质上是FB的一个管脚。 这个管脚会连接到HMI的变量,即可以对这个参数的设定修改。

 

那么这个数值会有多个侧面,分别是当前值,存储值和出厂初始值。

 

当前值即在线运行使用的参数值。 如果是称重系统, 则是称重目标值,如果是温度控制系统, 会是温度的给定值。 然而会要求这个数值在万一系统掉电之后重新恢复后不要丢。要尽可能和掉电之前的运行值相同,至少不能全丢了,导致工厂要恢复生产还需要忙上大半天去逐个参数进行修改。

 

当然,如果HMI支持配方存储功能,可以将所有参数储存为配方,通过配方下发批量完成所有参数的恢复。 但这里讲不依赖HMI,也不依赖人工操作,仅在PLC功能就能自动保存记忆的情况下。

 

另外还有一个值是出厂初始值,即如果恢复工厂设置, 比如换了CPU 程序重新下载,那么将源程序重新下载到CPU之后,系统也应该有一套基本的接近靠谱的设定参数,而不是全部参数都是0。即便需要针对当下的生产工艺对参数做一定的更新, 也不至于一上来系统就是瘫痪的,完全不能跑。

 

所以就是写在程序中的,也必须有一套数值。

 

我以前有讨论过INPUT管脚又要有固定数值,又要能修改,这是不可能实现的。 那么我们现在应该知道了, 最好的方式是设置两套管脚,固定值用于赋值初始值,而与HMI接口的是另一套管脚,且单独实现掉电保持的问题。

 

即便在S7-1500FB中,其实也存在这个问题。 它的FB的管脚虽说有一个初始值,但这个初始值是专属于FB的,即各实例的IDB得到的初始值都相同。而不会给每个实例都预留好不同的初始值。 如果要针对每个实例修改, 还需要逐个打开IDB进行修改。其实也很麻烦。

 

现在的解决思路是, 制作一个专用的SETSAVE的块,在工艺块内部来调用它, 工艺块需要保存的参数有多少个,就调用多少次。SETSAVE块内部,为这些参数分配存储区域位置。分配后只实现数据保存和调用,但具体的位置在哪里, 不需要知道。

 

而在工艺块FB的管脚就有2套同样的管脚,分别用于存放初始值和运行设定值,运行设定值对接HMI,接受修改。

 

SETSAVE块实现的功能:

1,  首次上电,将出厂值送给运行值和保存值。

2,  首次上电之外的每次掉电后的重新上电,将保存值恢复到运行值。

3,  每个周期随时随地,或判断有修改后,将运行值存储到保存值。

 

比如有一个WTING块,给定参数打包放在UDT中, 分别为SP1, SP2, SP3:

 

标签

数据类型


注释

SP1

FLOAT (Single Precision)



SP2

FLOAT (Single Precision)



SP3

FLOAT (Single Precision)







 

而出厂值则为3个单独的管脚,分别为W1,W2,W3

 

标签

数据类型

VAR_INPUT

W1

FLOAT (Single Precision)

VAR_INPUT

W2

FLOAT (Single Precision)

VAR_INPUT

W3

FLOAT (Single Precision)

VAR_IN_OUT

UU

U01_RECP

 

  最后一个UDT则为上述打包的给定参数。

程序中开始部分的实现则为:

SETSAVE_1(DATA0:=W1 ,RUNDATA:= UU.SP1 );

 

SETSAVE_1(DATA0:=W2 ,RUNDATA:= UU.SP2 );

 

SETSAVE_1(DATA0:=W3 ,RUNDATA:= UU.SP3 );

 

其后为正式程序。

 

即实现了需要的功能。

 

把功能需求和实现思路梳理清楚后,实现过程其实是比较简单的。 任何有一定功底的PLC工程师都可以自己完成。 就像我曾经提出的中央报警指示灯的实现思路,同一天内, 2个网友,非学员,来问我当初文章的题目。他们只是记得这回事,但文章题目不记得了。 我给了提示后他们找到了文章,也是不到半天,就纷纷告捷大功告成了。

 

这个函数块,也是一样, 只给思路, 不分发具体的程序逻辑实现方法。 我是为了完成书中的内容, 在三菱GX2系统,FX3U下实现的。 三菱标准化学习营的学员如果需要,可以跟我索取。 未来可能可以在书中见到一部分源代码。

 

其他的品牌平台的学员, 以及只购买了打印版三菱源程序的非正式学员, 不提供。

 

S7-1500系统下,我还没想清楚是否有必要这么做。 SMART系统,因为V区掉电本来就会保持7天,所以一直以来需求不强烈。但将来有需要的话我会考虑移植到SMART 200中同样实现。

 

但三菱学员即便得到这个程序,也只是提供思路和实现途径,本人并不负责代码的完整正确。 真的要应用到工程中, 还需要每个人自己去把关验证。

 

所以,我其实并不负责所有代码的正确。我之所以不愿意随意分享后开发的源代码,也是出于这方面的考虑。 烟台方法,给人的只是编程思想和架构。我给的有源代码的项目程序,也只是保证用于我自己的工程现场,是原汁原味完整好用的,但并不保证可以直接拿去套用到学员自己的行业项目。

 

所以, 总有人在造谣宣扬烟台方法的程序中有bug 其实是很愚蠢可笑的。我都没有这样的责任和义务, 何来的bug 有没有bug是我跟我自己的客户之间的事,我的设备在现场运行几百套,即便有bug哭的是我自己,别人操的哪门子心?

 

不过真正的烟台方法的学员,当然都是懂这些的。从来都是我催促他们往前走,而从没有人在我后面挑出来什么所谓的bug

 


 

 

 

 

 


1分不嫌少!


楼主最近还看过


热门招聘
相关主题

官方公众号

智造工程师