技术论坛

慢慢去习惯使用块的优化访问方式

作者 主题
至圣

经验值: 13937
发帖数: 2008
精华帖: 43
主题:慢慢去习惯使用块的优化访问方式
精华帖精华帖星级5级 推荐帖


只看楼主 只看精华 楼主 2015-12-24 19:51:14

 

离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一些创新的地方,我们应该勇于接受,抛弃旧思维,来对待新事物!





人生就像一场旅行!
精华帖版主置评: 此帖对于理解优化的块访问是一篇好文。 -yming
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1265418&b_id=66&b_sid=0&s_id=0&num=43

奇侠

经验值: 9240
发帖数: 1414
精华帖: 1
回复:慢慢去习惯使用块的优化访问方式


只看楼主 只看精华 1楼 2015-12-24 22:11:17

 好文章,学习了,今后用到博途,一定要体会一下


认真学习,努力工作
以下网友喜欢您的帖子:

  
版主

经验值: 76176
发帖数: 19135
精华帖: 378
回复:慢慢去习惯使用块的优化访问方式


只看楼主 只看精华 2楼 2015-12-25 00:05:06

 好文!


不过,这的确还需要个转变的过程,原因是多方面的:

  1. 程序员的习惯性问题,如楼主所说

  2. 新老系统的兼容问题,尤其是相当长时间内会有新老系统共存的问题,之间也会有数据的交互

  3. 技术还会再发展


我们生在这一个新老交替的时代,注定会有适应和不适应的过程,我觉得不用着急,时间会带来转变,可能10年后的新生代程序员就根本不需要了解这些了。


Zane 注册自动化系统工程师 Always save before download
以下网友喜欢您的帖子:

  
奇侠

经验值: 5204
发帖数: 1315
精华帖: 41
回复:慢慢去习惯使用块的优化访问方式


只看楼主 只看精华 3楼 2015-12-25 00:39:55

硬plc变软了。


弱者道之用。
以下网友喜欢您的帖子:

  
至圣

经验值: 12573
发帖数: 2503
精华帖: 31
回复:慢慢去习惯使用块的优化访问方式
推荐帖


只看楼主 只看精华 4楼 2015-12-25 07:58:40
软件这样的转变,很大程度上是CPU换成ARM处理器的原因吧。
这种处理器多了几级缓存,支持更多内存,更快的处理速度,支持标准的C++编译库,所以编程软件直接转向C++类的编程方式。
这种方式的编程有好处也有坏处。好处是写程序门槛低了很多,然后更多的程序员推荐用西门子的PLC。坏处是写程序再也不能随意发挥了,程序再也不像那样单线程方式了要考虑多线程(自由通讯、中断、主程序)同步的问题了、各模块之间交换数据不好搞了、程序容量越来越大了、看不见的内存消耗越来越多了………

反正我的感觉就是“降低门槛限制自由发挥”。


还有楼主说的C#很好?其实不然!很多人说C#好,是因为微软的推广以及符合那些软件大公司经理的思维方式做纯粹的应用层软件,他们不在乎用户内存、硬盘、CPU是否撑得起、也不在乎程序猿的不能理解(程序框架门槛低了到限制了自由发挥),所以不是有程序猿打死项目经理的事件么?还有就是C#都的.net框架以及加入了VB的窗口程序框架以及更多的第三方平台支持……但是作为一个程序猿或者用户,你会发现这种框架下的程序太吃内存了内存老是不够用(看看安卓、看看友邦图就知道C++其实是在拉动硬件消费的啊)!
再来说说VB.NET,这个语言很多人都当做是程序猿的入门以及那些不负责任的学校考试用而已么?如果是真的好会被大公司唾弃?难道人家大公司的想法会比我们还不如?

最后来说个不好听的,如果你选全套的西门子产品,那么代价不低,用户还会骂WinCC界面怎么那么难看操作反映怎么这么慢!!!此时我们只能搬出西门子忽悠的那一套控制器多变量多操作反应慢,为了稳定界面不能漂亮,为了系统稳定运行不能装第三方软件……随之用户直接搬隔壁国内自主的一套差不多的项目来跟WinCC对此操作起来如此的丝质顺滑界面如此的HTML5,我的老脸都红透脸皮都当棉被盖了!!
 
以下网友喜欢您的帖子:

  
至圣

经验值: 13937
发帖数: 2008
精华帖: 43
回复:慢慢去习惯使用块的优化访问方式


只看楼主 只看精华 楼主 5楼 2015-12-25 08:13:31
以下是引用Zaxife在2015-12-25 07:58:40的发言 >4楼:软件这样的转变,很大程度上是CPU换成ARM处理器的原因吧。 这种处理器多了几级缓存,支持更多内存,更快的处理速度,支持标准的C++编译库,所以编程软件直接转向C++类的编程方式。 这种方式的编程有好处也有坏处。好处是写程序门槛低了很多,然后更多的程序员推荐用西门子的PLC。坏处是写程序再也不能随意发挥了,程序再也不像那样单线程方式了要考虑多线程(自由通讯、中断、主程序)同步的问题了、各模块之间交换数据不好搞了、程序容量越来越大了、看不见的内存消耗越来越多了……… 反正我的感觉就是“降低门槛限制自由发挥”。 还有楼主说的C#很好?其实不然!很多人说C#好,是因为微软的推广以及符合那些软件大公司经理的思维方式做纯粹的应用层软件,他们不在乎用户内存、硬盘、CPU是否撑得起、也不在乎程序猿的不能理解(程序框架门槛低了到限制了自由发挥),所以不是有程序猿打死项目经理的事件么?还有就是C#都的.net框架以及加入了VB的窗口程序框架以及更多的第三方平台支持……但是作为一个程序猿或者用户,你会发现这种框架下的程序太吃内存了内存老是不够用(看看安卓、看看友邦图就知道C++其实是在拉动硬件消费的啊)! 再来说说VB.NET,这个语言很多人都当做是程序猿的入门以及那些不负责任的学校考试用而已么?如果是真的好会被大公司唾弃?难道人家大公司的想法会比我们还不如? 最后来说个不好听的,如果你选全套的西门子产品,那么代价不低,用户还会骂WinCC界面怎么那么难看操作反映怎么这么慢!!!此时我们只能搬出西门子忽悠的那一套控制器多变量多操作反应慢,为了稳定界面不能漂亮,为了系统稳定运行不能装第三方软件……随之用户直接搬隔壁国内自主的一套差不多的项目来跟WinCC对此操作起来如此的丝质顺滑界面如此的HTML5,我的老脸都红透脸皮都当棉被盖了!!

存在即合理!还有现在内存,不是很值钱了,C#,VB.NET 占点内存也无所谓,因为我们是做应用程序的。

至于你说的VB被大公司抛弃了?据我了解RA,SIEMENS至今他们的一些软件仍然支持VBS,VBA。C++是好,但是入门起点高,不是每个人都能用的好的:)

还有,楼上所说的,WINCC界面难看问题,纯粹是你个人问题,你可以不用WINCC自带的图形库,自己做啊,做一个你自己的项目库出来,或者,你可以用一些矢量画图软件Inkscape,来做过程画面,画面的动画等用高级语言来控制啊,这样WINCC 的钱都省下了:)如果说性能那还可能和WinCC或者项目太大有关系。


人生就像一场旅行!
以下网友喜欢您的帖子:

  
至圣

经验值: 63470
发帖数: 12672
精华帖: 121
回复:慢慢去习惯使用块的优化访问方式


只看楼主 只看精华 6楼 2015-12-25 09:33:58

好文,学习了。


 
以下网友喜欢您的帖子:

  
侠客

经验值: 831
发帖数: 167
精华帖: 7
回复:慢慢去习惯使用块的优化访问方式


只看楼主 只看精华 7楼 2015-12-25 10:45:04

 绝对好文!

看到很多1500使用间址寻址的问题,用300/400的概念来写1500的程序,该转换思路了。

符号化的访问、数据类型及数组的运行时寻址,是非常好的变化。

显然1500给程序员的发挥空间小了。如zaxife所述,“降低门槛限制自由发挥“深有体会,感觉自己对CPU及其资源的掌控力大幅度下降。想想看:STL语言都是”仿真“出来的,也不会大量使用了,那纯粹吃力不讨好。

现在系统的核心资源,实质上未对程序员开放。


SIEAUTO
以下网友喜欢您的帖子:

  
游侠

经验值: 485
发帖数: 113
精华帖: 2
回复:慢慢去习惯使用块的优化访问方式


只看楼主 只看精华 8楼 2015-12-25 14:29:42

现在一直用SIMOTION,一直还没有用过1500,没想到发生了这么大的改变,感觉之前做300400PLC项目时用STL时自由性很大,性能也很好,后来用SCL发现编译后的STL有时太啰嗦,明显降低了效率。不过还是愿意用SCL,因为更安全些,现在各个编译器都开始进行功能封装了,不让你访问低层内存地址,就像C#只有引用没有指针,这样让语言更加简单,安全!也许以后除了C/C++其它语言都会像这个方向发展了。

很好的文章,感谢楼主!


 
以下网友喜欢您的帖子:

  
奇侠

经验值: 8613
发帖数: 1829
精华帖: 4
回复:慢慢去习惯使用块的优化访问方式


只看楼主 只看精华 10楼 2015-12-26 00:01:41

哈,变量命名和符号定义,变得重要起来~


学无止境
以下网友喜欢您的帖子:

  
侠圣

经验值: 3462
发帖数: 278
精华帖: 2
回复:慢慢去习惯使用块的优化访问方式


只看楼主 只看精华 11楼 2015-12-26 09:42:29

还没用过1500,先收藏了


行者无疆
以下网友喜欢您的帖子:

  
新手

经验值: -29
发帖数: 3
精华帖: 0
回复:慢慢去习惯使用块的优化访问方式


只看楼主 只看精华 12楼 2015-12-26 14:06:46

好文章,学习了。


 
以下网友喜欢您的帖子:

  
侠士

经验值: 1460
发帖数: 120
精华帖: 2
回复:慢慢去习惯使用块的优化访问方式


只看楼主 只看精华 13楼 2015-12-27 22:42:53

好文章,我的理解,有高级语言经验的转向优化访问会很自然很舒服。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 13749
发帖数: 2032
精华帖: 16
回复:慢慢去习惯使用块的优化访问方式


只看楼主 只看精华 14楼 2015-12-28 09:14:45

通讯要注意,容易出错。


工控毁我青春!
以下网友喜欢您的帖子:

  
侠士

经验值: 1660
发帖数: 81
精华帖: 1
回复:慢慢去习惯使用块的优化访问方式


只看楼主 只看精华 15楼 2015-12-28 09:17:04

 编程的方便固然是好事,但是在我们工控行业,首先要满足的是稳定性,如果先开发一个功能块,然后我们在这个功能块再开发一个功能,在此功能块再开发功能块,这样就会容易导致系统的不稳定或强制打越来越多的补丁。我听别人说过,win7的10几G的大小,实际上有效使用的能有10%就算不错了,其他都是资源的浪费。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 28623
发帖数: 5906
精华帖: 61
回复:慢慢去习惯使用块的优化访问方式


只看楼主 只看精华 16楼 2015-12-28 14:49:03
以下是引用Zaxife在2015-12-25 07:58:40的发言 >4楼:软件这样的转变,很大程度上是CPU换成ARM处理器的原因吧。 这种处理器多了几级缓存,支持更多内存,更快的处理速度,支持标准的C++编译库,所以编程软件直接转向C++类的编程方式。 这种方式的编程有好处也有坏处。好处是写程序门槛低了很多,然后更多的程序员推荐用西门子的PLC。坏处是写程序再也不能随意发挥了,程序再也不像那样单线程方式了要考虑多线程(自由通讯、中断、主程序)同步的问题了、各模块之间交换数据不好搞了、程序容量越来越大了、看不见的内存消耗越来越多了……… 反正我的感觉就是“降低门槛限制自由发挥”。 还有楼主说的C#很好?其实不然!很多人说C#好,是因为微软的推广以及符合那些软件大公司经理的思维方式做纯粹的应用层软件,他们不在乎用户内存、硬盘、CPU是否撑得起、也不在乎程序猿的不能理解(程序框架门槛低了到限制了自由发挥),所以不是有程序猿打死项目经理的事件么?还有就是C#都的.net框架以及加入了VB的窗口程序框架以及更多的第三方平台支持……但是作为一个程序猿或者用户,你会发现这种框架下的程序太吃内存了内存老是不够用(看看安卓、看看友邦图就知道C++其实是在拉动硬件消费的啊)! 再来说说VB.NET,这个语言很多人都当做是程序猿的入门以及那些不负责任的学校考试用而已么?如果是真的好会被大公司唾弃?难道人家大公司的想法会比我们还不如? 最后来说个不好听的,如果你选全套的西门子产品,那么代价不低,用户还会骂WinCC界面怎么那么难看操作反映怎么这么慢!!!此时我们只能搬出西门子忽悠的那一套控制器多变量多操作反应慢,为了稳定界面不能漂亮,为了系统稳定运行不能装第三方软件……随之用户直接搬隔壁国内自主的一套差不多的项目来跟WinCC对此操作起来如此的丝质顺滑界面如此的HTML5,我的老脸都红透脸皮都当棉被盖了!!

真的惭愧一直用被你唾弃,以前用VB现在用VB.NET。我觉得VB用的蛮顺手啊,特别是开发一些小程序效率高速度快。找一些好的工控控件,画面也蛮赞!我觉得不管什么语言都是一直工具,如果真的是没用的工具。自然被淘汰了,市场是会考验这些产品的。

另外现在硬件发展这么快,我觉得加入一些方便的高级编程方法也是对的前提是保证同样的稳定性。


欢迎交流,QQ:2301013064 邮箱:feige6@139.com
以下网友喜欢您的帖子:

  
至圣

经验值: 28592
发帖数: 10822
精华帖: 131
回复:慢慢去习惯使用块的优化访问方式


只看楼主 只看精华 17楼 2015-12-28 16:47:08

再来说说VB.NET,这个语言很多人都当做是程序猿的入门以及那些不负责任的学校考试用而已么?如果是真的好会被大公司唾弃?难道人家大公司的想法会比我们还不如?


 这段话什么意思?


微信公众号:PLC标准化编程,ZHO6371995
以下网友喜欢您的帖子:

  
奇侠

经验值: 7493
发帖数: 630
精华帖: 1
回复:慢慢去习惯使用块的优化访问方式


只看楼主 只看精华 18楼 2015-12-29 09:26:44

好文章,收藏后慢慢学习

 


 
以下网友喜欢您的帖子:

  
侠圣

经验值: 2201
发帖数: 281
精华帖: 1
回复:慢慢去习惯使用块的优化访问方式


只看楼主 只看精华 19楼 2015-12-29 15:46:32
收藏后慢慢学习
生活不容易
以下网友喜欢您的帖子:

  
侠士

经验值: 1988
发帖数: 201
精华帖: 7
回复:慢慢去习惯使用块的优化访问方式


只看楼主 只看精华 20楼 2015-12-29 15:51:38

但如果与wincc通讯的话,是无法用块的优化访问的,因为优化之后,没有了偏移量地址,wincc上怎么写变量地址呢?


我快乐,我自豪,我为自控添砖加瓦……
以下网友喜欢您的帖子:

  
收起
慢慢去习惯使用块的优化访问方式
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。