回复:S7-1200 Step7 V12学习体会

坏笨笨

  • 帖子

    406
  • 精华

    4
  • 被关注

    48

论坛等级:侠士

注册时间:2010-03-17

白金 白金 如何晋级?

发布于 2013-11-13 10:32:48

10楼

quote:以下是引用LionAL99在2013-11-03 17:35:04的发言:
从S7-300/400转到S7-1200时,很多人都会觉得间接寻址没有S7-300下STL编程时方便,因为S7-1200间接寻址是基于数组进行操作的(PEEK及POKE指令除外,关于S7-1200间接寻址下一篇进行说明)。
其实S7-1200提供了变量覆盖及变量部分引用(Slice引用)这一利器,使其在进行间接寻址时一点也不比S7-300差,特别是在SCL编程模式下更便利。
先看一下”变量覆盖“定义,Step 7 V12.0系统手册第2048页说明如下:“要访问声明变量内的数据区域,则可以通过附加声明来覆盖所声明的变量。 这样,可以选择对不同数据类型的已声明变量进行寻址。 例如,可以使用 BOOL 的 ARRAY 对 WORD数据类型变量的各个位寻址”。
简而言之,比如定义了一个word变量(假设变量名为wordTag1),然后对此变量进行覆盖,覆盖类型为Bool类型的数组,数组下标为0~15(假设覆盖变量名为atwordTag1,类型为Array[0..15] of Bool),则可使用该数组配合下标对该word变量的不同位进行间接寻址,如atwordTag1[i],当i=3时表示wordTag1的第3位,改变i的值即可对wordTag1不同位进行寻址。
S7-1200中,能够进行变量覆盖的块是FB或FC,但是有一些限制条件:
1)对于FC,必须设置属性为“标准块访问”,因创建FC时其默认访问属性为“优化的块访问”,必须更改访问属性并重新编译方可;
2)FC中只有Temp区变量可设置为结构化变量覆盖,即对基本型变量设置array或struct型覆盖变量(如上例中所示),对In,Out及InOut区基本型变量只能设置基本型覆盖变量,且长度要一致,实用意义不大;
3)对于FB,属性为“标准访问”或“优化访问”下均可进行变量覆盖,但有区别:标准访问下,可对所有接口参数区进行变量覆盖,只是InOut区对基本型变量只能设置基本型覆盖变量(但与FC下不同,其长度不必要求相同);在优化访问下,如果要对变量进行覆盖,必须将其保持性设置为“在IDB中设置”,这意味着Temp区变量将不能设置覆盖,其它与“标准访问”下无区别。
Step 7 V12中允许在创建块后对其访问属性进行更改,这意味着编程时不必纠结于块的访问属性,初始化设置为“优化访问”以节约资源,当需要进行变量覆盖时再变更其访问属性即可。

特别需要注意的是在FC中对In,Out及InOut区设置变量覆盖,以及对FB中InOut区设置变量覆盖时,只能使用基本型变量对基本型变量进行覆盖,否则编译时会出错,如下图所示,尽管书写程序时并无报警。





V11起直接支持字节位寻址。比如定义一个状态字STW 为一个word.你梯形图中直接可以这样访问,STW.0,STW.1,STW.2...STW15,不需要覆盖
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1200系列

共有15228条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。