上海西門子V90伺服系統(tǒng)代理商
指針用來指向一個(gè)地址,使用這種尋址方式的優(yōu)點(diǎn)在于可以在程序運(yùn)行過程中實(shí)現(xiàn)變址。指針用于存儲(chǔ)器間接尋址,程序中用于存儲(chǔ)器間接尋址的語句包含一個(gè)指令、一個(gè)地址標(biāo)識(shí)符,以及一個(gè)偏移量(偏移量必須在方括號(hào)內(nèi)給出)。
下面給出一個(gè)雙字格式的指針的例子:
L P#8.7把指針值裝載到累加器1
T I[MD2]把指針值傳送到MD2
AI[MD2]查詢I8,7的信號(hào)狀態(tài)
= Q[MD2]給輸出位Q8.7賦值
存儲(chǔ)區(qū)域內(nèi)部尋址及交叉尋址:程序中采用這些尋址方式的語句包含一個(gè)指令及下列內(nèi)容——地址標(biāo)識(shí)符、地址寄存器標(biāo)識(shí)符、偏移量。地址寄存器(AR1、AR2)及偏移量必須寫在方括號(hào)內(nèi)。
存儲(chǔ)區(qū)域內(nèi)部尋址例程:指針不包含指示存儲(chǔ)區(qū)域的信息。
L P#8.7把指針值裝載到累加器1
LAR1把指針從累加器1裝載到AR1
AI[AR1,P#0.0]查詢I8.7的信號(hào)狀態(tài)
= Q[AR1,P#1.1]給輸出位Q10.0賦值
例程中,偏移量0.0不起作用。輸出Q10.0等于8.7 (ARl)加偏移量1.1。結(jié)果是10.0,而不是9.8。
存儲(chǔ)區(qū)域交叉尋址例程:在存儲(chǔ)區(qū)域交叉尋址中,指針中包含指示存儲(chǔ)區(qū)域的信息(示例中為I和Q)。
L P#18.7把指針值及存儲(chǔ)區(qū)域標(biāo)識(shí)符裝載到累加器1
LAR1把存儲(chǔ)區(qū)域I和地址8.7裝載到AR1
L P#Q8.7把指針值和地址標(biāo)識(shí)符裝載到累加器1
LAR2把存儲(chǔ)區(qū)域Q和地址8.7裝載到AR2
AI [AR1,P#0.0]查詢輸入位I8.7的信弓狀態(tài)
= [AR2,P#1.1]給輸出位Q10.0賦值
例程中,偏移量0.0不起作用,輸出Q10.0等于8.7(AR2)加偏移量1.1。結(jié)果是10.0,而不是9.8。
位、字節(jié)或者字符域的尺寸是按照字節(jié)限制排列的,在所有其他情況下是按照字對(duì)齊的。操作系統(tǒng)計(jì)算域中單個(gè)元素末端位置的位地址。域被分配到下一個(gè)字地址(或字節(jié)地址)。下一個(gè)數(shù)據(jù)類型從下一個(gè)整字開始(或者整字節(jié))。
1)聲明部分
聲明部分需要定義一個(gè)與將被間接尋址的ARRAY有著同一結(jié)構(gòu)的ARRAY。不一定非要將ARRAY聲明為IN-OUT變量,也可以聲明為TEMP、IN或OUT變量。
2)網(wǎng)絡(luò)部分
域?qū)挾?/span>( OFFSET)在網(wǎng)絡(luò)中定義。ARRAY中單個(gè)元素的小常規(guī)數(shù)據(jù)寬度是一字節(jié);即使在兩個(gè)變量之間定義一個(gè)BOOL,也有必要確定相關(guān)域的寬度和下一個(gè)期望域的起始地址可使用下面的算法。
地址(指數(shù)):b=元素長度×(指數(shù)-1)
創(chuàng)建具有不同數(shù)據(jù)類型的結(jié)構(gòu)時(shí),必須注意,在特定的環(huán)境下可能會(huì)自動(dòng)插入填充字節(jié)。
保存ARRAY數(shù)據(jù)類型:
示例:ARRAY[1..2,1..3]OF整數(shù)將生成下列域。
多維域是按照順序保存的。在本例中,整數(shù)[1,1]后面是整數(shù)[1,2],整數(shù)[1,3]后面是整數(shù)[2,1]。
為了以日期/時(shí)間字符串( STRING)形式顯示DATE_AND_TIME變量,必須把DATE_AND_TIME變量的字節(jié)轉(zhuǎn)換為相應(yīng)的CHAR字符。
讀取DATE_AND_TIME變量的字節(jié)并從這兩位數(shù)所在ASCⅡ碼中創(chuàng)建位,將確定了的CHAR字符存儲(chǔ)在字符串的期望位置。
示例:
L字節(jié)年
SLD 12
SRW 4
SRD 8
L W#16#3030
+I
T數(shù)字字符年
也可以相反順序?qū)⒁粋€(gè)STRING格式的日期/時(shí)間字符串轉(zhuǎn)換為一個(gè)DATE_AND_TIME變量。
在多例兼容功能塊中,為塊參數(shù)和靜態(tài)本地?cái)?shù)據(jù)加載與地址寄存器AR2有關(guān)的地址。如果要在情景數(shù)據(jù)塊中找到變量的地址,則必須把域內(nèi)指針(只是AR2的地址)加載到變量地址。
示例:
TAR2 //將地址寄存器加載到累加器AC1(偏移量)
UD DW#16#00FF FFFF //關(guān)閉區(qū)域ID
L P##variable //加載變量地址
+D //增加偏移量和變量地址
LAR1 //保存地址寄存器AR1中的結(jié)果
這樣可在AR1中獲得地址以進(jìn)行進(jìn)一步處理。
當(dāng)功能塊作為本地實(shí)例調(diào)用時(shí),總要使用該方法。例如,在一個(gè)功能塊中創(chuàng)建可作為類型“FB”的靜態(tài)變量的功能塊,這樣所調(diào)用的情景數(shù)據(jù)塊的數(shù)據(jù)偏移量就存儲(chǔ)到情景數(shù)據(jù)塊中。單個(gè)實(shí)例的偏移量在AR2中。如果不調(diào)用作為本地實(shí)例的功能塊,則可以結(jié)束計(jì)算,值“0”就在地址寄存器中。
注意:如果改變程序中的地址寄存器AR2,則也改變了變量的偏移量地址,因此就不能保證再對(duì)變量進(jìn)行正確訪問。在這種情況下,必須預(yù)先保存AR2,并在對(duì)程序完成改變之后將其復(fù)位為初始狀態(tài)。
上海西門子V90伺服系統(tǒng)代理商