1210 【万泉河】PORTAL V20和S7-1200G2新功能:间接符号寻址
TIA PORTAL V20发布了。 网络上一阵热闹。 大多在复制分享新闻消息。
我也第一时间下载安装了软件,打开学习了解了下有什么新功能。
新的V20支持了新发布的S7-1200 G2,而G2有一些新功能,更多的轴, 轴同步,插补等等原本就是应该的,只是会影响到具体项目的配置选型,不在我关心的范围内。
我更关心的是软件编程方面有没有新功能。
新建了个G2的程序,随意地研究了一下,不经意就有了新发现。
G2中竟然支持了ResolveSymbols指令这是个符号解析指令,解析之后还有另外两个指令分别对应了对解析后的符号变量的读和写功能。 指令位于文件夹“移动操作\符号化移动”,甚至梯形图下指令也被翻译成了中文“解析多个符号” 。

具体这一组指令能实现的功能,我用一个更直观的概念总结为:间接符号寻址,就容易理解了。
即以符号寻址的编程,其变量符号的字符内容可以是变量,可以在程序中动态化。
比如”DB1”.”PID001”.SP,代表的是PID回路PID001的设定值,但如果将其中的“PID001”用程序拼接而成,则当为PID002时,同一指令,指向的便是回路PID002的SP设定值。
即为间接寻址。
上述的DB1为DB1的符号也为DB1,但如果我们命名为registry或者注册表,稍微懂一些计算机编程的程序员大概会知道什么意思了。
在WINDOWS系统中,有一个称为注册表的全局系统数据文件,包括操作系统在内的所有应用软件,都可以在其中开辟一块数据项,用于保存其程序配置数据值。
比如SIEMENS的软件,其配置注册表项会在:
[HKEY_LOCAL_MACHINE\SOFTWARE\Siemens]
而包括微信在内的腾讯公司的所有软件,其注册表项路径:
[HKEY_LOCAL_MACHINE\SOFTWARE\Tencent]
即,同一操作系统下的不同的应用软件以及其实例,各自维护了不同的数据区域。既没有使用全局变量,也不会互相冲突。
还有一个例子是数据库。 假设电脑上安装了某一款数据库软件,不同的应用程序都需要访问同一数据库软件以进行数据归档,这时候数据库软件并不会安装多次,而是会由不同的应用各自来访问各自建立的表,都是在各自的应用软件调用相应的数据库指令来实现的。 当然,这些指令通常是标准化的函数。 软件的开发者之间通常会互相参考,标准应用。
当然,电脑系统相比于PLC的系统要复杂得多。 没有一个电脑的程序员能够包圆一台电脑上的所有应用软件的设计开发。 但在PLC领域,一台PLC内的所有程序模块均由一个程序员包干完成则是家常便饭。甚至是常态。
因为一台微型电脑PLC内的程序功能全部一个人包干,那么其中的所有资源都由这个PLC工程师一人调度分配使用,所以长久以来,上游生产厂商并没有帮忙发展出更好的资源使用方式,当然,他们原本也没有这个义务。导致PLC工程师们养成的习惯,自行按个人习惯或者固化为规则,分配调度使用其中的系统资源。
除了上述举例的DB数据块之外,还会有被称之为M的数据区域,总的来说都叫做“全局变量”。
想想看,如果一个电脑程序员,在设计软件时,给具体的每个软件规划资源,比如某个分配8G内存的0-100M地址区, 磁盘空间分配第1-n的磁道,是不是会很搞笑?这个程序只要离开了他自己的电脑,到任何其他的电脑都没法运行,光资源冲突就处理不了,谁还会用他的软件?
我从将近10年前开始发表文章,主张在PLC程序中不使用任何程序的全局变量,包括M和DB以及只模棱两可取名的标签(tag)。在大多数数据处理需求简单的应用环境,比较容易实现。 而在越来越多对PLC中数据处理量越来越多的行业,就逐渐凸显出来了困难。
比如一些行业需要遵循OMAC组织标准,设备需要支持PACKML协议接口。
我在文章《1228 【万泉河】 SIMATIC CPG Template案例解读:面向数据编程》中分析了CPG程序的架构原理,为其总结了其为面向数据编程架构的原因,并在文章最后给读者们提出了一个问题。
其实问题的答案就在今天,使用符号解析指令组即可完成前文所提出的功能。
这一组指令原本仅在S7-1500中支持,而S7-1200中不支持。大概是从V18开始的,我在以前的文章中有提起过它们,所以也是这次我对它比较关心能及时发现的原因。
前文时,我在S7-1500中实现了,而在S7-1200中因为指令不支持,只好想了个间接的办法,但没有具体实施。因为太麻烦,太不爽了。
现在到V20和G2,能支持间接寻址,就简直太好了。 以前遗留的难题就瞬间都可以解决了。
G2上市后, 相信旧版的S7-1200将会逐渐退出市场,即便还有,也只是针对旧项目的备件,那么对于设计新项目来说,就可以直接使用G2,而不必在乎旧版的S7-1200局部功能不支持。
我最新计划在写的新书《SIEMENS PLC标准化编程烟台方法--基于LBP基本过程库》,有计划首先将LBP库从只支持S7-1500 PLC移植到兼容S7-1200 G2,除了系统资源增大了一些,可以支持更多的项目点数之外,因为支持了新的指令,我们还可以对其FB块的管脚做一些精简。LBP的程序块的很多管脚本质上是访问类似注册表数据的全局数据,全都一股脑放到输入管脚上,是不合适的。 除了导致其管脚不够精简之外,也违背了极大封装的原则。
有一些人对PLC程序块的理解,只要是变化的数据,就不管三七二十一都给做成参数放到管脚上,这是不对的,是思考太简单导致。
新书依赖的软件版本直接从V20开始,好处还有,当书交稿到出版后,大概其V20还未在全部工程师中普及,而即便出版很久之后,也会显得软件并没有过时。而其实,除了本文所提及的内容外,大部分的编程方法与V16并没有什么区别。