請解釋一下這段程序原理
劉玉蓉
發(fā)布于2014-12-12 17:21
2
0
標簽:
L P##DATA_FIELD
LAR1
L B [AR1,P#1.0]
JL ERR0
JU ERR0
JU ERR0
JU BYT0
ERR0: L W#16#8080
JU ERR3
BYT0: L W [AR1,P#2.0]
L 50
<I
JC ERR4
L P##LIST_SLAVES_NOT_PRESENT
LAR1
L B [AR1,P#1.0]
JL ERR1
JU ERR1
JU BOL1
JU BYT1
JU ERR1
JU WRD1
JU ERR1
JU DWD1
ERR1: L W#16#8080
JU ERR3
程序截取一段,DATA_FIELD在程序入口幅值P#DB140.DBX0.0,#LIST_SLAVES_NOT_PRESENT賦值為P#DB140.DBX 52.0 DWORD 4,DB140定義見截圖,
1: L P##DATA_FIELD ,為什么有兩個#號?不是很理解?
2:請解答一下這條指令 L B [AR1,P#1.0] 什么原理,為什么地址寄存器加1后可以判斷是否是byte的類型,不知道我理解的對不對?那么這個B是什么意思,同樣下面那個 L W [AR1,P#2.0] ,跟50也就是數(shù)組的長度是什么關(guān)系呢?
圖片說明: 1,DB140背景塊定義
佳答案
1: L P##DATA_FIELD ,為什么有兩個#號?不是很理解?
#data_field是你定義的IN變量,前面加p#就是取這個變量(ANY類型)的首地址,例如輸入變量為p#db1.dbx2.0 byte 4,那么得到的結(jié)果就是db1.dbx2.0。
2:請解答一下這條指令 L B [AR1,P#1.0] 什么原理,為什么地址寄存器加1后可以判斷是否是byte的類型,不知道我理解的對不對?那么這個B是什么意思,同樣下面那個 L W [AR1,P#2.0] ,跟50也就是數(shù)組的長度是什么關(guān)系呢?
這個你必須先了解ANY數(shù)據(jù)類型的格式。ANY總共10個字節(jié),第1字節(jié)S7 PLC固定是10,第2個字節(jié)代表數(shù)據(jù)類型,其中02表示BYTE,因此你的程序里就是判斷這個字節(jié)的數(shù)據(jù)是不是2。第3,4個字節(jié)是數(shù)據(jù)長度,第5,6個字節(jié)是DB塊號,第7,8,9,10個字節(jié)是首地址(雙字指針格式)。
3.B和W其實就是字節(jié)和字,只不過存儲區(qū)是由AR1決定的,因為你前面AR1取的是輸入的首地址,因此W[AR1,P#2.0]其實就是ANY的第3,4個字節(jié),保存的是數(shù)據(jù)長度。