幫忙看一下程序S7300
劉玉蓉
發(fā)布于2014-11-07 17:36
151
0
標(biāo)簽:
L DBNO
T #final_ETR_db_num_int //此時(shí)FB中的變量
另一段: LAR1 P##pointer_to_final_ETR // 將此指針?biāo)偷紸R1中
AD DW#16#FFFFFF//這段并么給ACCU1賦值,ACCU1的值仍然保持在上一段給的DBN0
L W#16#1002//放入ACCU1,上一段與操作的結(jié)果進(jìn)入ACCU2了嗎?
T LW [AR1,P#0.0]//這個(gè)只將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與操作是誰跟誰與?
問題補(bǔ)充:
整個(gè)是在構(gòu)建POINTER,請(qǐng)問什么事POINTER?
佳答案
程序中在引用局部變量是,如果在塊的變量聲明表中有這個(gè)符號(hào)名,STEP7 會(huì)自動(dòng)在局部變量名之前加”#“;如果有訪問與局部變量名重名的全局變量(在符號(hào)表內(nèi)聲明),則必須使用雙引號(hào),否則編輯器會(huì)自動(dòng)在符號(hào)前加上”#“號(hào),作為局部變量用;所以段中的DBNO前沒有”#“號(hào),應(yīng)該是共享數(shù)據(jù)塊編號(hào)的意思(Data No)
AD 是將累加器1中的值(實(shí)際上是DBNO)與雙字DW#16#FFFFFF進(jìn)行”與“操作,由于該雙字每位全為”1“,實(shí)際上累加器1(ACCU1)中值沒有變化,仍然是DBNO;
你的這段程序是利用裝入指令L(將功能塊FB中暫態(tài)變量的數(shù)值傳送到累加器1)和傳送指令T(再將累加器1中的數(shù)值通過寄存器間接尋址傳送到本地?cái)?shù)據(jù)(L)。通過地址寄存器,可以對(duì)各存儲(chǔ)區(qū)的存儲(chǔ)器內(nèi)容實(shí)行寄存器間接尋址。地址寄存器(AR1)的內(nèi)容加上偏移量形成地址指針(POINTER),該指針指向數(shù)值所在的存儲(chǔ)單元。地址寄存器及偏移量必須寫在方括號(hào)[ ]內(nèi)。寄存器間接尋址的語句不改變地址寄存器中的數(shù)值。用寄存器指針訪問一個(gè)字節(jié)、字或雙字時(shí),必須保證地址指針中的位地址編號(hào)為0。
如 T LD [AR1,P#6.0] // 是將累加器1(AR1)加偏移量(指針值P#6.0=2#0000 0000 0000 0000 0000 0000 0011 0 000指明的本地?cái)?shù)據(jù)(L)雙字LD。
注:本地?cái)?shù)據(jù)(又稱本地?cái)?shù)據(jù)寄存器)用來存儲(chǔ)邏輯塊(OB、FB、FC)中所使用的臨時(shí)數(shù)據(jù),一般用作中間暫存器。由于這些數(shù)據(jù)實(shí)際存放在本地?cái)?shù)據(jù)堆棧)又稱L堆棧中,因此邏輯塊執(zhí)行結(jié)束時(shí),數(shù)據(jù)自然丟失。