收藏 分享(赏)

西门子S7-300高级编程培训4间接寻址和地址寄存器.ppt

上传人:精品资料 文档编号:10024484 上传时间:2019-09-30 格式:PPT 页数:23 大小:332.50KB
下载 相关 举报
西门子S7-300高级编程培训4间接寻址和地址寄存器.ppt_第1页
第1页 / 共23页
西门子S7-300高级编程培训4间接寻址和地址寄存器.ppt_第2页
第2页 / 共23页
西门子S7-300高级编程培训4间接寻址和地址寄存器.ppt_第3页
第3页 / 共23页
西门子S7-300高级编程培训4间接寻址和地址寄存器.ppt_第4页
第4页 / 共23页
西门子S7-300高级编程培训4间接寻址和地址寄存器.ppt_第5页
第5页 / 共23页
点击查看更多>>
资源描述

1、间接寻址及地址寄存器指令,L W AR1, P#200.0,- - - -,1,2,9,10,#Ini_Value,#Par_Pointer,#Counter,?,?,?,STEP 7 中可能的寻址方式,寻址方式,直接寻址,间接寻址,绝对寻址,符号寻址,存储器间接寻址,寄存器间接寻址,示例: A I 4.0 A “Mot_on“ OPN DBMW10 A IMD30 A IAR1,P#0.0 A AR1,P#0.0L IW10 L #Num SP T“runtime“ L IW“Number“ L IDAR1,P#5.0 T WAR1,P#0.0,16位指针 (DB, T, C),32位指针

2、内部区域,32位指针 内部区域,32位指针 交叉区域,变量直接寻址,存储单元位置 (示例),I,37.4,地址,附加访问宽度,字节,字,双字,含义,输入,Q,27.7,字节,字,双字,输出,PIB,655,字节,字,双字,外设输入,PQB,653,字节,字,双字,外设输出,M,55.0,字节,字,双字,位(Bit)存储器,T,114,-,定时器,C,13,-,计数器,DBX,2001.6,字节(DBB), 字(DBW), 双字(DBD),通过DB寄存器寻址的数据,DIX,406.1,字节(DIB), 字(DIW), 双字(DID),通过DI寄存器寻址的数据,L,88.5,字节(LB), 字(L

3、W), 双字 (LD),本地数据堆栈,DB中地址标识符直接寻址,打开的数据块,在数据块中装载和传递,OPN DB 19 OPN “Values“OPN DI 20组合指令 (包含OPN D DB),L DBB 1 装载数据字节1 L DBW 2 装载数据字2(字节2/3) L 5 装载数字5 T DBW 4 传递到字4 L A 装载ASCII字符A L DIB28 装载数据字节28 =I 比较A DBX 0.0 从0字节的第0位开始扫描L DB19.DBW4 从DB 19中装载数据字4 L “Values”.Number_1 符号访问变量 Number_1. DB19 具有变量名“Values

4、”A DB10.DBX4.7 从DB 10 的第4个字节的第7位开始扫描,用于DB寄存器的指令: CDB:交换DB寄存器内容 将DB寄存器内容装载到ACCU1中 L DBNO (将打开的DB号装载到ACCU1中) L DINO (将打开的DI号装载到ACCU1中) 装载数据块长度 L DBLG (将打开的DB的长度/字节装载到ACCU1中) L DILG (将打开的DI的长度/字节装载到ACCU1中),在程序中分析数据块DB相关信息,指令执行前:,指令执行后:,CDB,123,24,24,123,DB寄存器,DI寄存器,字格式的16位指针(用于对DB、T、C进行寻址) L 11 T MW 60

5、 OPN DBMW 60 OPN DB 11双字格式的32位指针(用于对I、Q、M.进行寻址)L P#24.0 T MD 50 L I W MD50 L IW 24 存储 访问 地址区域 宽度,存储器间接寻址,用于存储器间接寻址的指针结构,16位指针的结构: 为0 . 65 535 之间的无符号整数,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0,20,215,27,146,32位指针的结构(内部区域):,B,B,B,B,B,B,B,B,B,B,B,B,B,X,X,X,15 14 13 12 11 10

6、 9 8 7 6 5 4 3 2 1 0,0,0,0,0,0,0,0,0,0,0,0,0,0,B,B,B,31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16,20,22,位地址,字节地址(无符号整数),20,215,未定义,装载32位指针常量(内部区域):L P#25.3 (P = 指针,字节地址= 25,位地址:3),存储器间接寻址的特性,用于存储16位和32位指针的地址区域: 位(Bit)存储区(绝对寻址或符号寻址) 例如: OPN DBMW30,OPN DI“Motor_1” 等。 A IMD30,T QD“Speed_1“,等) 本地数据堆栈

7、(绝对寻址或符号寻址, 例如: OPN DBLW10,OPN DI#DB_NO等。 A ILD10,T QD#Par_Pointer,等。) 全局(共享) 数据块(只能进行绝对寻址,DB必须预先打开, 例如: OPN DBDBW0 (覆盖掉DB寄存器内容!),OPN DIDBW22等。 A IDBD10,T QDDBD22,等。) 背景数据块(只能进行绝对寻址,DI必须预先打开, 例如: OPN DBDIW20,OPN DIDIW0 (覆盖掉DI寄存器内容!),等。 A IDID10, T QDDID22等。)向FB和FC传递指针的特点 在参数里传递的指针不能直接用于存储器间接寻址。 用于存储

8、器间接寻址而传递的指针,在访问之前必须拷贝到临时变量里去,间接寻址示例,FC30:间接寻址示例Network(段) 1:使用间接寻址方式打开DB L #dbnumber / 将DB号拷贝到MW100T MW 100 / OPN DBMW 100 / 打开DBNetwork (段) 2: 循环删除L P#18.0 / 将终端地址(DBW18)作为指针T MD 40 / 传送到MD 40;L 10 / 将循环计数器值设置为10 next: T MB 50 / 传到MB 50中;L 0 / 装载初始值T DBWMD 40 / 传到DB50中;L MD 40 / 装载指针L P#2.0 / 并减去2个

9、字节-D / 然后再传回T MD 40 / 到MD 40;L MB 50 / 装载循环计数器LOOP next / 减去2个字节,条件满足则跳转;,练习4.1:用间接寻址的方法进行循环编程,- - - -,Meas_Value1,Meas_Value2,Meas_Value9,Meas_Value10,Meas_Value11,#Ini_Value,1.0,2.0,9.0,10.0,11.0. . .,等等。,DB41,0,4,32,36,40,DB中指向地址的指针,#Par_Pointer,#Counter,字节地址,内部区域,寄存器间接寻址,LAR1 P#10.0 / 设置AR1 AR1:

10、 00000000 0000 0000 0000 0000 0101 0000 + 200 L M W AR1, P#200.0存储区域 访问 地址 偏移 扩展指令: L MW 210宽度 寄存器 常量,AR 1或AR2中的内部区域指针:,B,B,B,B,B,B,B,B,B,B,B,B,B,X,X,X,15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0,0,0,0,0,0,0,0,0,0,0,0,0,0,B,B,B,31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16,20,22,位地址,字节地址(无符号整数),20,215,未

11、定义,指令语法规则:,交叉区域,寄存器间接寻址,LAR1 P#I10.0 /设置AR1 AR1: 10000001 0000 0000 0000 0000 0101 0000 L W AR1, P#200.0 + 200访问 地址 偏移 扩展指令: L IW 210宽度 寄存器 常量,AR 1或AR 2中的交叉区域指针:,B,B,B,B,B,B,B,B,B,B,B,B,B,X,X,X,15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0,1,0,0,0,0,R,R,R,0,0,0,0,0,B,B,B,31 30 29 28 27 26 25 24 23 22 21 20

12、19 18 17 16,位地址,字节地址(无符号整数),地址标识符,指令语法规则:,Bit 31=0: 内部区域 Bit 31=1: 交叉区域,地址标识符: 000 I/O 001 输入(PII) 010 输出(PIQ) 011 位(Bit)存储器100 DB寄存器中的数据 101 DB寄存器2中的数据(DI)110 自有本地数据 111 调用块的LD(本地数据),用于装载地址寄存器的指令,装载地址寄存器 LARn (n =1 or 2): 将ACCU1中的内容装载到ARn LARn 将中的内容装载到ARn LARn P# 将中的地址装载到ARn: 处理器寄存器: AR1,AR2 (比如: L

13、AR1 AR2 及LAR2 AR1) 32位变量: MD,LD, DBD,DID (比如: L DBD5等) 32位符号变量: 32位全局变量(比如: LAR1 “索引”,等) (全局和局域的) 以及OB,FB及FC的TEMP(临时)变量 (比如: LAR1 #Address,等) P# 指向布尔型绝对地址 En.m,An.m,Mn.m,Ln.m,DBXn.m,DIXn.m 指针: (比如: LAR1 P#M5.3, LAR2 P#I3.6,等) 指向本地、符号地址 OB: TEMP(临时)变量 (比如: LAR1 P#Par_Pointer, 等) FB: IN-,OUT-, INOUT-,

14、STAT- 及TEMP- FC:TEMP(临时)变量(LAR1 P#Loop,等),其它用于地址寄存器的指令,传送出地址寄存器内容 TARn (n =1 or 2): 从Arn传送到ACCU1 TARn 从Arn传送到: 处理器寄存器: AR2 (比如:TAR1 AR2 ) 32位绝对地址变量: MDn, LDn, DBDn, DIDn (如TAR2 MD5等) 32位符号变量: 32位全局变量(比如TAR1 “Index”,等) (全局和局域的) 及OB,FB及FC的TEMP(临时)变量 (比如TAR1 #Address等) 地址寄存器内容交换(Swap)指令 TAR 将地址寄存器AR1和A

15、R2的内容相互交换地址寄存器加指令 +ARn 将ACCU1-L内容加到ARn +ARn P#n.m 将内部区域指针P#n.m加到AR1或AR2中去,寄存器间接寻址的特性,在STL/LAD/FBD编辑器内使用AR1 当访问FC中的参数时,如果参数为复杂数据类型(ARRAY、STRUCT、DATE_AND_TIME) ,则AR1寄存器和DB寄存器内容将会被覆盖掉。 当访问FB中的INOUT参数时,如果该INOUT参数是复杂数据类型(ARRAY、STRUCT、DATE_AND_TIME),则AR1寄存器和DB寄存器内容将会被覆盖掉。 在装载地址寄存器和对目标变量进行寄存器间接寻址的时候,不允许访问局

16、部参数 在STL/LAD/FBD编辑器内使用AR2 在对FB内部所有参数和静态变量进行寻址的时候,AR2寄存器和DI寄存器均用作基址寄存器。 如果用户在FB内部将 AR2或DI覆盖了,之后就可以访问该FB专用 参数或静态变量。也就是说,未恢复两个寄存器时不可访问。在FC内,对AR2寄存器和DI寄存器没有限制,#ACCU1,DB中指向地址的指针,#AR1,#ACCU2,- - - -,Number1,Number2,Number9,Number10,Number11,1,2,9,10,11. . .,等等。,DB42,0,4,32,36,40,字节地址,练习4.2:用寄存器间接寻址进行循环编程,

17、POINTER类型和ANY类型数据的块参数,地址 声明 名称 类型 0.0 输入参数 DB_Num WORD 2.0 输入参数 Area_Pointer DWORD 6.0 输入参数 Length WORD . . .L #DB_Num T #I_DB_Num OPN DBI_DB_Num . L #Area_Pointer LAR1 L #Length .,FC.,分别传送实际地址的各个信息 (STEP 5里的方式): DB号 起始地址 区域长度,等。 缺点: 程序员必须进行拆分 在调用期间,不能使用实际地址的符号名 一个地址(区域)需要好几个参数 无一致性检查纠正,地址 声明. 名称 类型

18、 0.0 输入 Measure_1 POINTER . . . 8.0 输入 Measure_2 ANY . . . L P#Measure_1 LAR1 L WAR1,P#0.0 T #I_DB_Num OPN DBI_DB_Num L DAR1,P#2.0 LAR1 ,FC.,使用POINTER或ANY类型参数传递 (STEP 7方式): 调用时,程序员可以使用实际地址的符号名 由LAD/FBD/STL编辑器拆分成单个信息 一个地址只需要一个参数 进行一致性检查纠正,POINTER类型的结构和参数赋值,Byte n,Byte n+2,Byte n+4,Byte n+1,Byte n+3,B

19、yte n+5,DB号(INT),1 O O O _ O R R R _ O O O O _ O B B B (32位交叉区域指针),B B B B _ B B B B _ B B B B _ B X X X,POINTER类型参数赋值 指针显示 P#DBn .DBX x.y 其中:n= DB号, x= 字节数, y= 位数 P#DIn .DIX x.y (比如 P#DB5.DBX3.4,P#DI2.DIX10.0,等) P#Zx.y 其中: Z=区域,比如:P,I,Q,M及L (比如P#I5.3,P#M10.0,等) 地址声明: MD30 (这种情况下,DB号区域标识符及位地址自动输入 #M

20、otor_on 到POINTER参数中) “Motor_1“.speed,数据类型结构:POINTER,ANY数据类型的结构,ANY数据类型指针,Byte n,Byte n+2,Byte n+4,DB号,1 O O O _ O R R R _ O O O O _ O B B B,B B B B _ B B B B _ B B B B _ B X X X,16#10,Data type,复制系数,Byte n+6,Byte n+8,数据类型 标识符 VOID 00 BOOL 01 BYTE 02 CHAR 03 WORD 04 INT 05 DWORD 06 DINT 07 REAL 08 DA

21、TE 09 TOD 0A TIME 0B S5TIME 0C DT 0E STRING 13 参数类型 标识符 BLOCK_FB 17 BLOCK_FC 18 BLOCK_DB 19 BLOCK_SDB 1A COUNTER 1C TIMER 1D,ANY参数类型指针,Byte n,Byte n+2,Byte n+4,16#0000,定时器,计数器或块的号,16#10,参数类型,16#0001,Byte n+6,Byte n+8,16#0000,ANY数据类型的参数赋值,指针显示: P#数据块.位地址 类型号P#DB10.DBX12.0 REAL 20 指向DB10中的一个区域:从 Byte

22、12开始的20个REAL类型的地址 (ARRAY120 OF REAL)P#I 10.0 BOOL 8 指向IB10里的一个8位区域 地址声明: 绝对地址: DB5.DBD10 数据类型:DWORD,复制系数:1 DB号:5,指针:P#DB5.DBX10.0IW32 类型:WORD,WF: 1,DB 号:0,指针: P#I 32.0 T35 类型: TIMER,编号:35 符号地址:#Motor_1.speed 使用基本数据类型,编译器建立正确 “Pump”.Start 的数据类型,复制系数1以及指针注意事项符号(ARRAY、STRUCT、STRING、UDT)赋值时,数据类型标识符02(BY

23、TE)以及区域字节长度只能由编译器来建立,并输入到ANY指针。,ANY类型间接参数分配,使用临时变量对ANY数据类型进行实际参数赋值 在调用块中声明ANY数据类型临时变量例如: temp aux_pointer ANY 用指针信息对ANY临时变量进行赋值例如: LAR1 P#aux_pointer / 装载辅助指针地址 L B#16#10 / 装载标识符10 T LB AR1,P#0.0 / 并传送到Offset 0L . . 使用变量辅助指针对ANY 块参数进行赋值例如:CALL FC 111 Targetfield:=#aux_pointer优点 在运行期间,对ANY指针参数进行动态重复赋

24、值,评估ANY型指针传递,地址 声明 名称 类型 初始值 注释 0.0 in Par_Pointer ANY outin_out 0.0 temp Data_type BYTE 2.0 temp WF WORD 4.0 temp DB_Nr WORD 6.0 temp Area_Pointer DWORD,Network 1:创建数据类型、复制系数、DB号及区域指针L P#Par_Pointer / 将#Pointer地址装载到ACCU1LAR1 / 并从ACCU1中将其装载到AR1;L B AR1,P#1.0 / 从指针创建数据类型T #Data_type / 并装载到临时变量中;L W A

25、R1,P#2.0 / 建立复制系数T WF / 并装载到临时变量中;L W AR1,P#4.0 / 建立DB号T #DB_Nr / 并装载到临时变量中;L D AR1,P#6.0 / 建立区域指针T #Area_Pointer / 并装载到临时变量中;,练习4.3:用于求和及计算平均值的功能,FC 43,EN,ENO,Measured_values,Sum,Mean_value,声明 名称 类型 输入参数 Measured_values ANY 输出参数 Sum REAL 输出参数 Mean_value REAL,DB43,103.45,2086.5,1.7895,P#DB43.DBX0.0 REAL 8,名称 类型STRUCT Measurement ARRAY18REALEND_STRUCT,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报