简介
“opn di”或“cdb”指令将数据块加载到 di 寄存器中。在 s7-300/400 中,此处打开的块将作为背景数据块。fb 块接口的局部形参的后续符号寻址(in、out、inout、static)将不再对在块调用中指定为背景数据块的数据块进行寻址,而是对位于 di 寄存器中的数据块进行寻址。要随后对块接口中的局部形参进行符号寻址,则必须将背景数据块加载到 di 寄存器中。
即使在执行指令 l ar2, + ar 和 tar 之后,s7-300/400 中也无法从块接口对形参进行符号寻址,这是由于这些指令破坏了参数的访问方式。
s7-1500 中已修正该错误:如果在 s7-1500 中对块接口中的局部形参进行符号寻址(例如,使用指令 l #myin),则需始终访问块调用中指定为背景数据块的数据块。虽然 opn di l ar2, +ar2, tdb, tar 指令将更改 di 或地址寄存器中的数据,但在对局部形参进行寻址时不会对这些寄存器中的数据进行判断。
对背景数据块中局部变量访问的移植
移植过程不会更改已编程的访问方式。但是,如果更改了引用程序中的 opn di, l ar2, +ar2, tdb, tar, 指令,则该程序的定义可能会发生变更。
要恢复最初的程序定义,则必须手动更改该程序。通常无需再通过寄存器对数据进行寻址。但是,可以使用背景数据块中的 array 间接索引 array 中的元素。
示例 1
以下示例说明如何修改 opn di 指令的定义:
stl 说明
l #myin1
l #myin2
+i
t #myout3 “l”和“t”指令将寻址块接口中所声明的局部变量。变量的值位于块调用中所指定的背景数据块中。
opndi mydb
l #myin1
l #myin2
+i
t #myout3 全局数据块 mydb 将写入 di 寄存器中。
移植前,“l”和“t”指令将寻址 mydb 中所声明的变量。
迁移后,“l”和“t”指令将寻址块接口中所声明的变量。在 s7-1500 中,进行访问时不会判断 di 寄存器中的值。
示例 2 以下示例说明了如何修改 lar2 指令的定义:
stl 说明
l p#m23.0
lar2 移植前,对 ar2 的分配将破坏参数的访问方式。
l #myin1 移植前,无法对 myin1 进行访问或会发生访问错误。 移植后,可正常对形参 myin1 进行访问操作。
l iw [ar2, p#1.0] 访问 %iw24.0
a [ar2, p#0.4] 访问 %m23.4
示例 3 以下示例介绍了在 s7-1500 中如何对 db 变量进行间接寻址而不使用地址寄存器:
stl 说明
opn mydb l #index lar1 l dbw [ar1 , p#10.0] 移植前,使用区域内部的间接寄存器进行寻址。并将变量值 (#index) 加载到地址寄存器 1 中。根据加载的值,“mydb”中的一个数据字将加载到累加器 1 中。
l mydb.myarray1[#index] 移植后,可以将数据值存储在 array 的“mydb”中。 并使用输入参数“#index”对 array 中的各元素建立不同的索引。
SC23 | 研究人员竞相使用 NVIDIA CUDA Quantum 大力推进研究工作
宝马慕尼黑工厂斥资6.5亿欧元转型生产纯电动汽车
踏歌智行入选“2021中国自动驾驶产业科技创新TOP10”
声光报警器电路设计方案汇总(五款模拟电路设计原理图详解)
常用视频格式标准介绍
如何在STL中存取背景数据块呢?
可穿戴电子产品可以激发健身的积极态度
精密LCR数字电桥AT2816A的性能特征及应用范围
触控时代的到来影响着人们生活的方方面面
实现矿山开采数字化第一步,车载显示终端必不可少
CSP市场增量加速 缘于闪光灯和背光市场的切入
多云已成规模,企业怎样进一步布局
全面屏挖不挖坑留刘海?市场下单量说了算?
使用LF353构建的函数发生器电路
手机厂商不务正业,努比亚快充移动电源开箱图赏
开关电源PCB电磁兼容性设计
解决不断增长的IIoT网络中的安全漏洞
Amazon 亚马逊 Kindle Oasis 电子书阅读器
企业开始云计算迁移前需做好的准备
澜至科技远程预付费电能管理系统设计及应用