1FL6044-2AF21-1LH1现货西门子代理
1FL6044-2AF21-1LH1现货西门子代理
1FL6044-2AF21-1LH1现货西门子代理
【分享】触摸屏实现访问S7-1200优化DB块数据在西门子TIA PORTAL 架构下, 系统倾向于符号访问,数据块和FB的属性则多了一个选项:优化的块访问。在建立数据块和FB时缺省选项是优化访问,从名称来看,或许可以带来更多的访问速度,并占用更小的系统资源。即为优化。
但这里的代价是,不再支持地址访问。原本每条数据,都有对应的数据地址偏移量。
触摸屏上面建立变量访问的时候,需要对应这个偏移量的值。
但现在,对优化的DB块,以及优化了FB的背景数据块,则直接没有偏移量这一列了。
不知道是不是西门子故意设置的门槛。反正这么一来,所有的第三方的触摸屏都无法访问这些被优化的数据了。而西家自己的触摸屏和WINCC,则没有这个问题。
那么这些第三方的触摸屏如何才能实现访问数据块数据呢?西家给出的方案其实很简单,勾选掉优化功能。即非优化即可。
这本来不是个问题,我原本也没意识到这里面有什么问题。
我在去年参加过一个会议,会间闲聊的时候,朋友跟我提起,他们的客户经常有抱怨把S7-1200的存储资源耗光的,而他发现这样的客户,无一例外,是因为使用了非西门子的触摸屏。
我随即意识到问题的严重性了。触摸屏要访问的数据,往往就是设备的重要参数, 这些参数原本是需要断电保持的。对于优化的数据块来说, 哪一条数据需要断电保持, 逐个勾选即可。而对于非优化的数据块,则不可以逐条选择,要选择断电保持,就必须整个DB块都选中。而CPU的断电保持的数据容量是有限的。
所以,为了一两条需要断电保持的数据,而把整个数据块都设置为了断电保持,那系统资源必然是快速消耗殆尽了。称其为非优化果然不虚。
这里就形成了死循环,为了触摸屏要访问到数据, 数据块必须非优化,而为了数据断电保持,相关数据必须能逐条勾选,所以必须优化的数据块才可以。除非你老老实实选择西门子的触摸屏。而往往,大家又抱怨西门子的触摸屏太贵。。。
我从去年用标准化模块化方式的编程,大量采用FB块来实现手动逻辑和自动逻辑,比起传统的编程方式来,耗费的DB块要差出不止一个数量级来。如果被这个问题限制住,要么系统资源不够用, 要么能做到的系统规模急剧减小。
前面做过的示范项目,没有触摸屏,用WINCC是可以实现符号地址访问的。而将来的项目,就不可避免地要遇到非西门子的触摸屏了。但即便非西门子的触摸屏,其实也同样可以用标准化模块化编程方法实现。这个问题是必须要解决的。
让触摸屏直接读取优化块的数据,这是触摸屏厂家原本都不能做到的事,显然我们更不能了。所以能实现的方法,只有建立专用于触摸屏通讯的非优化的数据块,让触摸屏来访问。而原本控制逻辑的FB块的背景数据,仍然是优化的。
即,通过中间过渡数据块,间接实现对优化数据的访问。这是基本解决思路。
对于FB提供给HMI访问的数据来说,有两种,一种是运行值和状态数据(状态字),这些简单,只需要简单MOVE到非优化的专用数据块中即可。 而第二种,是HMI上面操作的给定值和操作指令(控制字),就比较麻烦了。
如果什么都不考虑,不做预留,当然可以直接从中间数据块把数据用MOVE分发到各FB块的设定值的管脚。
但我们要增加HMI访问的接口,还要不能影响FB原本的接口功能,即原本WINCC和西门子触摸屏的正常访问功能不能被影响。 否则一旦要增加WINCC上位机,或者西门子的触摸屏,原本的访问接口被占用了, 数据就写不进了。
方法是,建立一个专用的FB块,比如触摸屏是MCGS,FB块起名字为MCGS
接口:
这里定义了9套REAL数据的给定值,其中MCGSREAL数据是被HMI访问的,PLCREAL则绑定到了FB中的给定值。
而其中一套的程序逻辑为:
即每一周期均存储数值的给定值,当HMI对MCGSREAL进行了修改,则把修改后的值送到FB块给定值中。 而如果HMI没有对数值进行修改,则随时把FB的当前值刷新过来并保存, 保证了其它的接口(WINCC)对数值的修改可以随时刷新不影响。
用1个FB可以实现了10个给定值的传送,这里只是简单重复了10次。 我想应该有办法用循环方式实现,但我自己不会。 如果有人会,请留言告诉我。(肯定不能用数组,因为我需要在管脚上绑定各个数据,用了数组,就没办法了)
调用时这样:
因为FB110本身是非优化的,所以HMI可以直接通过数据块编号和偏移量访问到数据。
上面是对浮点数的给定值的传送管理。而对于设备启动的控制字则类似。但由于控制指令通常运行中被复位,所以正常时控制字都为0,所以比模拟量给定值还简单些,甚至不需要SAV辅助变量。