帮忙看一下程序S7300
刘玉蓉
发布于2014-11-07 17:36
151
0
标签:
L DBNO
T #final_ETR_db_num_int //此时FB中的变量
另一段: LAR1 P##pointer_to_final_ETR // 将此指针送到AR1中
AD DW#16#FFFFFF//这段并么给ACCU1赋值,ACCU1的值仍然保持在上一段给的DBN0
L W#16#1002//放入ACCU1,上一段与操作的结果进入ACCU2了吗?
T LW [AR1,P#0.0]//这个只将ACCU1的值给AR1中地址吗?
L #NumberOfBytes
T LW [AR1,P#2.0]
L #final_ETR_db_num_int
T LW [AR1,P#4.0]
L DW#16#84000000
T LD [AR1,P#6.0]
问题:段中的DBN0是什么意思?我只见过DBD,DBX,DBW
AD与操作是谁跟谁与?
问题补充:
整个是在构建POINTER,请问什么事POINTER?
佳答案
程序中在引用局部变量是,如果在块的变量声明表中有这个符号名,STEP7 会自动在局部变量名之前加”#“;如果有访问与局部变量名重名的全局变量(在符号表内声明),则必须使用双引号,否则编辑器会自动在符号前加上”#“号,作为局部变量用;所以段中的DBNO前没有”#“号,应该是共享数据块编号的意思(Data No)
AD 是将累加器1中的值(实际上是DBNO)与双字DW#16#FFFFFF进行”与“操作,由于该双字每位全为”1“,实际上累加器1(ACCU1)中值没有变化,仍然是DBNO;
你的这段程序是利用装入指令L(将功能块FB中暂态变量的数值传送到累加器1)和传送指令T(再将累加器1中的数值通过寄存器间接寻址传送到本地数据(L)。通过地址寄存器,可以对各存储区的存储器内容实行寄存器间接寻址。地址寄存器(AR1)的内容加上偏移量形成地址指针(POINTER),该指针指向数值所在的存储单元。地址寄存器及偏移量必须写在方括号[ ]内。寄存器间接寻址的语句不改变地址寄存器中的数值。用寄存器指针访问一个字节、字或双字时,必须保证地址指针中的位地址编号为0。
如 T LD [AR1,P#6.0] // 是将累加器1(AR1)加偏移量(指针值P#6.0=2#0000 0000 0000 0000 0000 0000 0011 0 000指明的本地数据(L)双字LD。
注:本地数据(又称本地数据寄存器)用来存储逻辑块(OB、FB、FC)中所使用的临时数据,一般用作中间暂存器。由于这些数据实际存放在本地数据堆栈)又称L堆栈中,因此逻辑块执行结束时,数据自然丢失。