LAR1 P##tSrcA300 // Anfangsadresse laden
L B#16#10 // Syntax-ID in ANY-Pointer
T LB [AR1,P#0.0]
L B#16#2 // Datentyp BYTE in ANY-Pointer
T LB [AR1,P#1.0]
L 16 // Blockl鋘ge (hier 16 Bytes)
T LW [AR1,P#2.0]
L #tDBA300 // Ziel-Datenbausteinnummer
T LW [AR1,P#4.0]
L P#DBX 0.0 // Beginn der Ziel-Datenstruktur
T LD [AR1,P#6.0]
CALL "DPRD_DAT" // A300-Daten auslesen
LADDR :=#tHexAdrA300_In1
RET_VAL:=#tRetVal_In1
RECORD :=#tSrcA300
L #tRetVal_In1
L 0
==I
JC DI01
CALL "FILL"
BVAL :=#tFillValue
RET_VAL:=#tfault
BLK :=#tSrcA300
DI01: NOP 0
请问为什么要把这些数据装到L里面,不太懂这些程序
问题补充:
例:假如MY_ANY为ANY数据类型,
当MY_ANY=P#DB1.DBX1.0 BYTE 10时,ANY 数据类型构成如下所示
BYTE0 BYTE1 BYTE2 BYTE3 BYTE4 BYTE5 BYTE6 BYTE7 BYTE8 BYTE9
16#10H 16#02 16#0 16#A 16#0 16#1 16#84 16#0 16#0 16#8
为什么是这种格式L P#DBX 0.0,按照上面的实例应该是数字才对吧
另外 LAR1 P##tSrcA300 指的是上面2.0这个地址吗,这段程序最终指向那个区域存储
图片说明:
最佳答案
P##tSrcA300是一个TEMP数据类型,
L B#16#10 //ANY-Pointer固定格式
T LB [AR1,P#0.0]
L B#16#2 // ANY的数据类型
T LB [AR1,P#1.0]
L 16 // 数据的长度
T LW [AR1,P#2.0]
L #tDBA300 // DB号
T LW [AR1,P#4.0]
L P#DBX 0.0 // 间接寻址的具体地址,都是从0.0开始
T LD [AR1,P#6.0]
以上程序就是按ANY指针的定义组合一个ANY指针#tSrcA300,再程序的后面SFC14就使用了,建议你去看看ANY指针的具体格式就明白了。
补充:ANY指针的地址是L2.0开始的10个字节,但是ANY指针的所装载的内容并不是指向L2.0;ANY指针的格式见图,正如以上程序的意思,有了数据类型,数据的长度,DB号和数据的起始地址,那么就能够找到这组数据了,那么这段程序主要讲的也就是如何组成一个ANY指针。
S7-300和S7-400的寻址
https://wenku.baidu.com/view/43b69593650e52ea54189886.html
图片说明:
提问者对于答案的评价:
回答的很好,很满意
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc352248.html