3.3 通信外部变量管理
在WinCC和PLC建立通信之后,便需要根据控制功能的需要,从约定的PLC地址空间读取数据,即所谓的建立变量表。
一般来说,如果PLC程序与WinCC程序是不同的设计人员分头设计,那么PLC的编程人员需要整理一个完整的变量表的文档,比如EXCEL表格,提供给WinCC设计人员,后者通过参照这个整理好的列表,在WinCC中建立变量表。
而如果是一个小项目,即便PLC程序与WinCC程序都是同一个人编制的,通常也会整理这样的一个文档,一方面作为两项工作间交接的接口,同时也作为项目文档的一部分,后期审核整理的时候一目了然。
有了这个接口文档,在WinCC中工作的时候,就不再需要打开PLC的程序,甚至电脑上都不需要安装PLC的编程软件,也一样可以完成WinCC的设计工作。接口文档模板如表3-2所示。
表3-2 接口文档模板
PLC地址表中的位号,可以直接用作WinCC变量的名字。所以在和PLC设计人员对接之前需要先约定好命名规范,尽量不要使用中文,非法符号不能使用,点(.)不能使用。请参考笔者在西门子网站发表的科普文章。
[故事][万泉河]S7与WinCC变量命名规范(网址见附录)
知乎上说,这是一个严肃的问题。
嗯,确实这也是一个长久以来困扰我们所有工控人的问题。
我们可以参考下IT界的变量命名规范,如:如何优雅地为程序中的变量和函数命名?(分享自@知乎)
查百度百科:变量命名规则,然后我们也可以从中了解到一些匈牙利命名法、google风格等称谓,但即便你把这些规则全读懂了,也会发现,好像对于工控项目来说,能参考的地方不多,因为他们用到的变量跟我们相比,数量根本不在一个数量级!
工控项目用到的硬件点数几百点是很平常的,规模稍微大一点就是几千点甚至上万点。而除了硬点之外,还要有一些通信和上位控制的虚点,加起来数量就更多了。这些点全都相当于高级编程语言里的全局变量。任何一个高级语言编出来的程序,功能可能比我们做到的复杂,但全局变量绝不可能用到这么多。除非那是个新手,不懂得要模块化编程。
所以,最终工控项目的变量命名规范,我们能参考的经验只有,用英文!
即便英语不够好,也得坚持用英文。因为,中文实在不方便作为变量名字,没法简略,太长,还不容易输入。其次也不可以使用汉语拼音。完整的拼音也太长,而且同音词太多引发歧义多,不能精确描述。而简化了使用拼音首字母的连拼,写出来后简直是天书,除了作者自己,别人根本不可能看懂说的是什么。而且即便作者自己,时间稍微一长,回过头来也可能不明白啥意思了。
其实一个规范的工程项目,所有设备都应该有位号,所以在变量命名的时候,最简单的方式是使用位号来命名,而同一位号之下的各种输入输出,手动、自动、启动、停止、打开、关闭、运行反馈、故障、开度、频率等,就可以统一规范地使用英文了,毕竟这点英文单词数量还不算多。
而具体到位号的命名以及链接了后面的功能点的命名,就不可避免要出现链接符号,综合S7的符号表的命名规则和WinCC的变量的命名规则,很多符号是禁止使用或者使用中有风险的。比如:/\<>!+,;等基本都不能使用。
作为分隔符来说,点(.)是最方便的。但可惜的是,WinCC已经缺省当作是结构变量的分隔符了。如果链接S7-200/S7-1200的变量,不能使用结构变量,直接通过OPC传输的变量,则无法再使用点(.)。
减号(?),现实的文档中经常用,但有风险的恰恰就是它。在它上面笔者曾经吃过亏,一个晚上几个小时,翻来覆去倒腾好几次变量,都是因为这个减号。这里,我只需要提两件事大家可以测试一下。
你在单独起变量名字的时候,不管在S7中还是WinCC中,都是合法的可以使用的,但如果使用WinCC V7.2的变量表复制粘贴功能,你从WinCC复制到EXCEL还是可以的,但倒过来复制的时候,所有变量名里面的减号都给变成了下划线(_)。
还有就是,如果是模拟量需要进行变量归档,如果又使用了压缩归档,那么在压缩以后,不知道啥时候变量名也给变成了下划线(_)。
是的。原来最好用的是下划线。其实也只有下划线最好用,所以大家在命名的时候都喜欢用它,最终一个完整的位号加功能链接起来后的变量就会到泛滥的程度,这就又出现问题了。比如:LS_DT_8_LEAK_F,LS_DT_9_LEAK_F,LS_DT_12_LEAK_F,LS_DT_13_LEAK_F。
这些变量名在WinCC中使用是没有问题的,但如果我要用到变量前缀功能呢?如果WinCC程序处理中需要通过变量的分隔符来确定位号和功能,这么多下划线可就乱套了。
在去年年底的一个项目中,我曾经非常痛苦地每天晚上花4~5个小时来处理几千个变量的变量表,配合方每发来一次更新的变量表,我就要处理一次,以达到程序可用的规范。更换掉不可以使用的字符,更换掉不合适的使用了下划线的变量。
直到最后,项目已经完工了,突然想到了一个更容易的解决方案,既然滥用下划线,那索性更滥用好了,分隔符的地方,使用连续两个下划线(_ _)可好?
比如上面的变量名就变成:LS_DT_8__LEAK_F,LS_DT_9__LEAK_F,LS_DT_12__LEAK_F,LS_DT_13__LEAK_F。
我只要和配合方在递交变量点表的时候提前约定这样一个规范不就可以了吗?
后来,又一个WinCC报表项目,我查了下项目中的变量的命名方式,直接提出了这样的要求,所以变量名字就变成了:FT-2128__L,FT-2128__S,FT-2128__D,FT-2128__M,FT-BCEG01__L,FT-BCEG01__S,FT-BCEG01__D,FT-BCEG01__M。
当然朋友在做的时候是一头雾水,不明白为啥要这样,现在看到这里,应该也明白了吧。
至于变量名中还有的减号,因为变量已经建立,已经既成事实,就只好将错就错了。