2015-12-29
离S7-1500 在中国正式发布,已经快3年时间 了,这款新控制器除了包含多种创新技术之外,还设定了新标准,最大程度提高生产效率。
块的“优化访问方式”是这款控制器的 一个创新之处
当我们新建一个OB,DB,FB,FC时有个块的属性叫“优化访问”这个属性默认是使用的;S7-1200/1500 具有优化的存储空间,在优化的块里面,变量的地址由CPU自己管理,这样使变量之间的地址间隙最小化。但是使用优化块的访问方式,比如DB,大家会发现变量的偏移地址消失了,没有偏移地址也就意味着,间接寻址不在适用了。
为什么西门子,要如此颠覆大家的使用习惯了?下面,就引用官方说法吧。优化块具有以下优点
1:最快的存取速度,个人理解就是标准块,就像用了很久的电脑硬盘一样,碎片化了;而优化块就像是经过磁盘整理程序整理过的电脑磁盘。
2:变量可以单独设置 是否是“保持Retain”
3:数据块预留一定的空间,这样重新下载数据块时,数据实际值,不会丢失。
4:变量声明的改变不会导致访问出错,比如,HMI访问PLC变量时全是符号访问,不涉及到地址。
5:背景数据块无需任何设定,所有的设定都是在相关的FB里设定(比如 数据是否保持)
那么,标准访问方式和优化访问方式下,数据块的存储空间有什么不同了,请看下图。
优化块的访问方式下,数据块里的地址分配是什么样子的了?
1:通过将占用地址空间多的变量放在前面,占用存储空间少的变量放在后面这样的存储方式来尽可能减少数据间隙;
2:具有保持属性的变量单独存放在一个区域;
3:布尔类型数据单独占用一个字节的空间,从而加快的访问速度;
由于S7-1500处理器架构的改变,S7-1500采用little-endian方法来存取数据。S7-300/400采用big-endian方法来存取数据,所以为了兼容S7-300/400,在标准访问方式下数据处理采用big-endian方法。
1:标准块中,CPU需要2*16 位的方式来去读一个4字节的数据,所以需要调换字节顺序。优化块中是以32位的方式来存取一个4字节的数据。
2:优化块,每个位单独占据一个字节的内存,这样来加快存取速度。
3:优化块可以到达16M的大小
所以,西门子给出了以下建议
如果不需要使用间接寻址的情况下,仅使用优化块的访问方式;而且在S7-1500平台下,可以使用符号变量来实现间接寻址,比如(array [“index”]),以前在S7-300+STEP7 V5.x平台下只有SCL语言才能使用的语句,在STEP7 PORTAL 中LAD,STL等都可以这样来使用了。
避免,在标准块和优化块中拷贝和传递数据,因为存储数据方法的不同,系统会自动调整访问方式,但是需要占用更多的CPU资源。
在 标准块中,变量的“保持”属性不可单独设定,只能应用于整个数据块,而优化块可以单独设定变量的“保持”属性。
标准块和优化块的访问类型
让不少同行不习惯使用 优化块访问方式的是优化块不能使用“间接寻址”,在STEP7时代,使用STL的间接寻址功能,大家可以很方便灵活地编写出各种程序。
但是,不使用间接寻址就不能写出好程序了吗?当然不是,我最早接触指针的是在大学里的C语言中,但是目前的,随.NET 平台一起出现的C#语言不是一样不推荐使用指针了嘛(只能在非安全代码里使用指针,就像S7-1500可以在标准块里使用指针一样),但是C#依然可以做出好的程序。而VB.NET干脆没有指针的概念。
在CPU/CM接口间通信也可以使用优化数据块的数据,这一点,我当初也是怀疑,但是在一遍文档中找到了证据(其实还是有些怀疑在S7-1500和S7-300之间通信,在S7-1500测使用优化块的访问,会不会有些问题,有时间为会实践一下)
除了DB,FB,FC,OB也可以使用优化块的访问方式。
在优化OB中,临时变量将被缩减,比如OB1,以前有很我们经常用到的三个临时变量
OB1_PREV_CYCLE 上一次扫描时间
OB1_MIN_CYCLE 最小扫描时间
OB1_MAX_CYCLE 最大扫描时间
在优化访问方式下,被缩减了,但是仍然有其它方法读取CPU扫描时间。
1:采用调用RUNTIME ,在OB1开始和结束处调用该指令,2者的结果相减即可,该指令还可以用于 测量任何 语句和程序块执行所用的时间。
2:调用RT_INFO函数通过模式1、2、3可以读出CPU的上次扫描、最小、最大扫描时间
使用块的优化访问方式,体现了标签化,符号化的编程风格(就像一些语言,我们不关心变量存放在计算机内存的什么地方)。在TIA PORTAL中,FB,OB,FC的编号也支持CPU由自己管理了。在新建FC,FB等程序块时,会出现一个关于程序块编号的选项,自动还是手动,自动时,程序只需要新建程序块,定义程序块名称即可,至于是FB109还是FB1099程序员不要关心,当然程序员还可以按照以前的习惯手动个程序块一个编号。
在TIA PORTAL中程序块下面可以自己新建文件夹,这样把相关的程序块和数据块进行分类分组,而不像STEP7 V5.x下所有程序块数据块全在Blocks一个文件夹下,这样程序结构看的更清晰。
块的优化访问,程序块编号由CPU自己管理,UDT的编号也由CPU来管理,体现了标签化的编程方式(个人理解),以前一些由程序员来做的工作,现在全部托管给CPU也在一定程度上让编程变的更简单,适应了当今潮流。
本人由于工作需要学习了一段时间的GE PACSystem的PLC编程,相对以前GE-Fanuc的90-30,90-70系列PLC,PAC平台下,它们的编程风格也是完全标签化(除了一些过程映像区和R区等),程序块也是仅靠名称,干脆没有所谓的编号。标签变量也是没有偏移地址的,一些间接寻址也仅靠array [“index”]的方式来处理,但是同样可以编写出和西门子一样的程序(实际上自己就是按照西门子程序进行转换的)。
所以,对于S7-1500和TIA PORTAL一些创新的地方,我们应该勇于接受,抛弃旧思维,来对待新事物!
评论6
楼主 2015/12/31 17:30:19
好文章,学习了,今后用到博途,一定要体会一下
楼主 2016/1/1 15:58:44
好文!
不过,这的确还需要个转变的过程,原因是多方面的:
程序员的习惯性问题,如楼主所说
新老系统的兼容问题,尤其是相当长时间内会有新老系统共存的问题,之间也会有数据的交互
技术还会再发展
我们生在这一个新老交替的时代,注定会有适应和不适应的过程,我觉得不用着急,时间会带来转变,可能10年后的新生代程序员就根本不需要了解这些了。
楼主 2016/1/2 16:03:59
硬plc变软了。
楼主 2016/1/3 20:15:19
绝对好文!
看到很多1500使用间址寻址的问题,用300/400的概念来写1500的程序,该转换思路了。
符号化的访问、数据类型及数组的运行时寻址,是非常好的变化。
显然1500给程序员的发挥空间小了。如zaxife所述,“降低门槛限制自由发挥“深有体会,感觉自己对CPU及其资源的掌控力大幅度下降。想想看:STL语言都是”仿真“出来的,也不会大量使用了,那纯粹吃力不讨好。
现在系统的核心资源,实质上未对程序员开放。
楼主 2023/6/27 9:56:23
每个产品升级换代必然有些不适,让我们慢慢习惯