全局变量与全局访问之间的差异

电子说

1.2w人已加入

描述

简单说,全局变量、局部变量是变量自身的身份。身份的不同是靠出生地决定的。而能否被全能局访问,能被多大范围空间访问,即首篇文章中讲到的作用域,是完全不同的概念。不能混而等同之。

然而,如果大家对写程序并没有什么原则目标, 只以完成设计任务为目的,以设备最终能跑起来为目的,这些概念不清楚也无所谓。尤其只在西门子平台内谈,没有横向的对比,就得不出更深刻的经验。

所以,这个话题就放下了。估计当年的读者们也都放下了,没几个人放在心上。

我自己最近在编写《三菱PLC标准化烟台方法》的书,在写书的过程中,在做一些小例子来验证功能。其中把西门子的程序移植到了GX WORKS2,写完了GX2的章节。然后现在又把程序移植到GX WORKS3,为GX3的章节整理素材。就发现了问题。

简单描述,就是原本在西门子程序中,有外部对FB块内的静态变量访问,到GX2,也仍然这么做的。但移植到GX3时,发现了问题,编译报错。

经咨询三菱标准化的学员,得到提醒, 说新的GX3平台,静态变量VAR多出来一个VAR_PUBLIC的类型,可以支持外部访问。照着修改之后,果然没问题了。

(很多人以为我做啥品牌的标准化方法,就一定要在掌握这个品牌全部的高精端的知识基础上,其实恰恰相反, 我只是对标准化架构熟悉,而对这些具体品牌和软件的使用,我反而时刻在跟学员们学习请教。)

我现在回过头看我当年提出的问题,就很清楚了。静态变量能被全局访问,被很多人误以为就是等同于全局变量,那是因为只在西门子的井底。当视界扩大到所有PLC品牌和平台之后,就不一样了。甚至GX2和GX3都不一样。

GX2中VAR可以被全局访问,而GX3中则不可以。

你总不能认为GX2中的VAR是全局变量,而GX3中的 VAR就不是全局变量了吧?

发现这个问题的起源的程序块来自西门子官方库BST,先后移植到GX2和GX3。而根源又是其设计的部分静态变量要被WINCC访问,即勾选了HMI/OPC可见的选项。

在PORTAL中,不管是否勾选,影响的只是WINCC访问的权限,而在程序中FB外的访问都是畅通无阻的。

我在上帝一篇中建议过加个开关,关掉被块外部访问的权限,现在看,GX3果然做到了。

而最近几天,也有学员在开发自己的库函数,跟我沟通相似的问题。问我与WINCC通讯相关的变量放在OUTPUT还是STATIC更合适的问题。

我给与的回答是,原则上来讲,应该放到INOUT或者OUTPUT。而放到VAR STATIC是不合适的,不符合封装的原则。比如我这次的移植,就出现了问题。

不能因为看到有西门子官方的例子程序这么做过,就理所当然的认为就是正确无误的。他们的作者也是普通的工控工程师,也未必事事都严格规范。

而我很容易就从西门子官方出的《设计规范指南》中找到了理论依据。

其中的DA005规则:只通过形参交换数据

DA006规则:仅从块内访问静态变量

VaR

有人会杠, 如果不让从块外访问静态变量, 那系统为啥要设计为可以访问?

就如同我一直在推广PLC中编程不要使用M全局变量的理论,有人杠我系统设计了就该允许使用一个逻辑。

答案是系统提供的功能是给非规范的程序准备的。未必所有程序,比如测试学习程序也需要完全遵守规范。

而倒过来说,如果系统提供的功能即符合规范规则,只要规范规则之外的用法系统即不允许。如我在GX3遇到的这样。那么,连编程规范都不需要存在。西门子也不需要整理一个设计规范了。

你做的不对, 编译都不通过,保存都亮红灯的事,还需要写在规范里面吗?

规范里的所有违反规范的相反的做法,都是可以用的,无非是不规范而已。

所以,我们在GX3遇到的问题, 那些导致编译错误的变量,  正确规范的数据类型应该是INOUT和OUTPUT。

有一些刚入门的工程师, 甚至连FB都不会用,从未用过的工程师,会看不懂我的这些文章,会质疑这些文章传播的知识什么用,我不懂你这些道理,我甚至不需要用FB,不也照样做出功能正常运行的设备吗?

我借用某Z常说的一句话:“基础不牢,地动山摇”。其实我不完全认同这个道理的。基础不牢,不会导致你地动山摇,你在入门级别的工作并不受影响。而恰恰反过来,如果基础牢了, 会有更高的起飞的空间。

就好比,田径运动员基础的动作姿势如果不标准,在校级运动会可能没什么大的影响,照样有可能获得校运会冠军。然而当到了更大的天地间,就会发现姿势标准的重要性了。而等到了奥运会选手的级别,所有的运动员动作一定都是最标准的了。因为那是基础的基本功。




审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分