1、离 S7-1500 在中国正式发布,已经快 3 年时间 了,这款新控制器除了包含多种创新技术之外,还设定了新标准,最大程度提高生产效率。块的“优化访问方式”是这款控制器的 一个创新之处当我们新建一个 OB,DB,FB,FC 时有个块的属性叫“优化访问”这个属性默认是使用的;S7-1200/1500 具有优化的存储空间,在优化的块里面,变量的地址由 CPU 自己管理,这样使变量之间的地址间隙最小化。但是使用优化块的访问方式,比如 DB,大家会发现变量的偏移地址消失了,没有偏移地址也就意味着,间接寻址不在适用了。为什么西门子,要如此颠覆大家的使用习惯了?下面,就引用官方说法吧。优化块具有以下优点1
2、:最快的存取速度,个人理解就是标准块,就像用了很久的电脑硬盘一样,碎片化了;而优化块就像是经过磁盘整理程序整理过的电脑磁盘。2:变量可以单独设置 是否是“保持 Retain”3:数据块预留一定的空间,这样重新下载数据块时,数据实际值,不会丢失。4:变量声明的改变不会导致访问出错,比如,HMI 访问 PLC 变量时全是符号访问,不涉及到地址。 5:背景数据块无需任何设定,所有的设定都是在相关的 FB 里设定(比如 数据是否保持)那么,标准访问方式和优化访问方式下,数据块的存储空间有什么不同了,请看下图。优化块的访问方式下,数据块里的地址分配是什么样子的了?1:通过将占用地址空间多的变量放在前面,
3、占用存储空间少的变量放在后面这样的存储方式来尽可能减少数据间隙;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:优化块,每
4、个位单独占据一个字节的内存,这样来加快存取速度。3:优化块可以到达 16M 的大小所以,西门子给出了以下建议如果不需要使用间接寻址的情况下,仅使用优化块的访问方式;而且在 S7-1500 平台下,可以使用符号变量来实现间接寻址,比如(array “index”),以前在 S7-300+STEP7 V5.x 平台下只有 SCL 语言才能使用的语句,在 STEP7 PORTAL 中 LAD,STL 等都可以这样来使用了。避免,在标准块和优化块中拷贝和传递数据,因为存储数据方法的不同,系统会自动调整访问方式,但是需要占用更多的 CPU 资源。在 标准块中,变量的“保持”属性不可单独设定,只能应用于整
5、个数据块,而优化块可以单独设定变量的“保持”属性。标准块和优化块的访问类型让不少同行不习惯使用 优化块访问方式的是优化块不能使用“间接寻址” ,在 STEP7 时代,使用 STL 的间接寻址功能,大家可以很方便灵活地编写出各种程序。但是,不使用间接寻址就不能写出好程序了吗?当然不是,我最早接触指针的是在大学里的 C 语言中,但是目前的,随.NET 平台一起出现的 C#语言不是一样不推荐使用指针了嘛(只能在非安全代码里使用指针,就像 S7-1500 可以在标准块里使用指针一样),但是 C#依然可以做出好的程序。而 VB.NET 干脆没有指针的概念。在 CPU/CM 接口间通信也可以使用优化数据块
6、的数据,这一点,我当初也是怀疑,但是在一遍文档中找到了证据(其实还是有些怀疑在 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 开始和结束处调用该指
7、令,2 者的结果相减即可,该指令还可以用于 测量任何 语句和程序块执行所用的时间。2:调用 RT_INFO 函数通过模式 1、2、3 可以读出 CPU 的上次扫描、最小、最大扫描时间使用块的优化访问方式,体现了标签化,符号化的编程风格(就像一些语言,我们不关心变量存放在计算机内存的什么地方)。在 TIA PORTAL 中,FB,OB,FC 的编号也支持 CPU 由自己管理了。在新建 FC,FB等程序块时,会出现一个关于程序块编号的选项,自动还是手动,自动时,程序只需要新建程序块,定义程序块名称即可,至于是 FB109 还是 FB1099 程序员不要关心,当然程序员还可以按照以前的习惯手动个程序
8、块一个编号。在 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 一些创新的地方,我们应该勇于接受,抛弃旧思维,来对待新事物!提示:本文来源自西门子工业支持技术论坛的文章,如有侵权,请联系百度账号以删除。