回复:有奖【微分享】“说说我用过的功能块”

ericiii

  • 帖子

    20
  • 精华

    0
  • 被关注

    3

论坛等级:游侠

注册时间:2012-04-09

普通 普通 如何晋级?

发布于 2014-03-12 16:06:22

43楼

==== 小编分享(三)=====

上次和大家分享的是计算设备运行时间的功能块,这次要和大家分享的是如何读取变量中某位状态的方法。
经常使用功能块的网友肯定会遇到过这种情况:对于块中已经定义过的变量,如果按照其声明的方式进行访问,可以非常方便的使用符号寻址方式;但是,如果声明变量时定义的是“WORD”,“DWORD”类型等,在程序中想读取该变量中的位状态,那么就需要做一些处理才能实现。相信诸位网友肯定有自己惯用的方法,小编在这里先介绍两种方法:

[方法一] 绝对地址最直接

因为可以单独访问绝对地址中的位,所以只要知道变量对应的绝对地址,便可以直接通过绝对地址进行位访问。虽然局部变量没有绝对地址,但可以把其值传递到具有绝对的变量中,例如利用M区变量,DB块等。
这种方法当然是最直观最简便的,但是需要占用额外的存储器地址或额外的DB块,而且对于重复多次调用的功能块不是特别适用。

[方法二] 移位指令来解围~

可以利用移位指令,移动指定位数,然后读取移出位的状态。

在西门子技术资源库中有这样一个样例功能块。它类似一个多路分配器,对于一个word类型的变量(引脚x),通过指定想要读取的位号(引脚NR),实现将该位的状态输出(引脚y)。

该样例块的具体引脚描述见下表:




此功能块的代码如下:




具体过程为:首先将NR和x引脚参数分别装入累加器2和累加器1,然后调用SRD(双字右移)指令,将累加器2中的值作为移动的位数,对累加器1中的值进行移位操作。移位结束后根据状态字CC1 的值触发JZ程序跳转指令进行逻辑判断,将0或1赋给输出y。这样就可以读出此变量某一位的值了。

当然,如果您的变量是其他类型的,也可以仿照这种思路来修改功能块代码。

该功能块的链接地址为:http://support.automation.siemens.com/CN/view/zh/37215989

另外还有两种方法,请见下回分解,敬请期待~~
来自西门子技术支持与服务
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54617条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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