==== 小编分享(三)=====
上次和大家分享的是计算设备运行时间的功能块,这次要和大家分享的是如何读取变量中某位状态的方法。
经常使用功能块的网友肯定会遇到过这种情况:对于块中已经定义过的变量,如果按照其声明的方式进行访问,可以非常方便的使用符号寻址方式;但是,如果声明变量时定义的是“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
另外还有两种方法,请见下回分解,敬请期待~~