
西门子S7300高级编程培训教材教材间接寻址和地址寄存器指令课件.ppt
23页间接寻址及地址寄存器指令-12910#Ini_Value#Couner?西门子S7300高级编程培训教材教材间接寻址和地址寄存器指令课件 STEP 7 中可能的寻址方式 寻址方式直接寻址间接寻址绝对寻址符号寻址存储器间接寻址寄存器间接寻址示例:A I 4.0A Mot_onOPN DBMW10A IMD30A IAR1,P#0.0A AR1,P#0.0L IW10L #NumSP TruntimeL IWNumberL IDAR1,P#5.0T WAR1,P#0.016位指针(DB, T, C)32位指针内部区域32位指针内部区域32位指针交叉区域西门子S7300高级编程培训教材教材间接寻址和地址寄存器指令课件变量直接寻址存储单元位置 (示例)I37.4地址附加访问宽度字节,字,双字含义输入Q27.7字节,字,双字输出PIB655字节,字,双字外设输入PQB653字节,字,双字外设输出M55.0字节,字,双字位(Bit)存储器T114-定时器C13-计数器DBX2001.6字节(DBB), 字(DBW),双字(DBD)通过DB寄存器寻址的数据DIX406.1字节(DIB), 字(DIW),双字(DID)通过DI寄存器寻址的数据L88.5字节(LB), 字(LW),双字 (LD)本地数据堆栈西门子S7300高级编程培训教材教材间接寻址和地址寄存器指令课件DB中地址标识符直接寻址打开的数据块在数据块中装载和传递OPN DB 19OPN ValuesOPN DI 20组合指令(包含OPN D DB.)L DBB 1装载数据字节1L DBW 2装载数据字2(字节2/3)L 5装载数字5T DBW 4传递到字4L A装载ASCII字符AL DIB28装载数据字节28=I比较A DBX 0.0从0字节的第0位开始扫描L DB19.DBW4从DB 19中装载数据字4 L “Values”.Number_1符号访问变量 Number_1. DB19具有变量名“Values”A DB10.DBX4.7从DB 10 的第4个字节的第7位开始扫描西门子S7300高级编程培训教材教材间接寻址和地址寄存器指令课件用于DB寄存器的指令:lCDB:交换DB寄存器内容l将DB寄存器内容装载到ACCU1中 L DBNO (将打开的DB号装载到ACCU1中)L DINO (将打开的DI号装载到ACCU1中)l装载数据块长度L DBLG (将打开的DB的长度/字节装载到ACCU1中)L DILG (将打开的DI的长度/字节装载到ACCU1中)在程序中分析数据块DB相关信息 指令执行前:指令执行后:CDB1232424123DB寄存器DI寄存器西门子S7300高级编程培训教材教材间接寻址和地址寄存器指令课件l字格式的16位指针(用于对DB、T、C进行寻址)L 11T MW 60 OPN DBMW 60 OPN DB 11l双字格式的32位指针(用于对I、Q、M.进行寻址) L P#24.0 T MD 50 L I W MD50 L IW 24 存储 访问 地址 区域宽度存储器间接寻址西门子S7300高级编程培训教材教材间接寻址和地址寄存器指令课件用于存储器间接寻址的指针结构l16位指针的结构:为0 . 65 535 之间的无符号整数0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 015 14 13 12 11 10 9 8 7 6 5 4 3 2 1 02021527146l32位指针的结构(内部区域):B B B B B B B B B B B B B X X X15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 00 0 0 0 0 0 0 0 0 0 0 0 0 B B B31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 162022位地址字节地址(无符号整数)20215未定义l装载32位指针常量(内部区域):L P#25.3 (P = 指针,字节地址= 25,位地址:3)西门子S7300高级编程培训教材教材间接寻址和地址寄存器指令课件存储器间接寻址的特性用于存储16位和32位指针的地址区域:l位(Bit)存储区(绝对寻址或符号寻址) 例如:OPN DBMW30,OPN DI“Motor_1” 等。
A IMD30,T QDSpeed_1,等)l本地数据堆栈(绝对寻址或符号寻址,例如: OPN DBLW10,OPN DI#DB_NO等 A ILD10,T QD#Par_Pointer,等l全局(共享) 数据块(只能进行绝对寻址,DB必须预先打开,例如: OPN DBDBW0 (覆盖掉DB寄存器内容!),OPN DIDBW22等 A IDBD10,T QDDBD22,等l背景数据块(只能进行绝对寻址,DI必须预先打开,例如: OPN DBDIW20,OPN DIDIW0 (覆盖掉DI寄存器内容!),等 A IDID10, T QDDID22等向FB和FC传递指针的特点l在参数里传递的指针不能直接用于存储器间接寻址l用于存储器间接寻址而传递的指针,在访问之前必须拷贝到临时变量里去西门子S7300高级编程培训教材教材间接寻址和地址寄存器指令课件间接寻址示例FC30:间接寻址示例Network(段) 1:使用间接寻址方式打开DB L#dbnumber/ 将DB号拷贝到MW100TMW100/ OPNDBMW 100/ 打开DB Network (段) 2:循环删除LP#18.0/ 将终端地址(DBW18)作为指针TMD40/ 传送到MD 40;L10/ 将循环计数器值设置为10next: TMB50/ 传到MB 50中;L0/ 装载初始值TDBWMD 40/ 传到DB50中;LMD40/ 装载指针LP#2.0/ 并减去2个字节-D/ 然后再传回TMD40/ 到MD 40;LMB50/ 装载循环计数器LOOP next/ 减去2个字节,条件满足则跳转;西门子S7300高级编程培训教材教材间接寻址和地址寄存器指令课件练习4.1:用间接寻址的方法进行循环编程-Meas_Value1Meas_Value2Meas_Value9Meas_Value10Meas_Value11#Ini_Value1.02.09.010.011.0 . . .等等。
DB4104323640DB中指向地址的指针 #Par_Pointer#Counter字节地址西门子S7300高级编程培训教材教材间接寻址和地址寄存器指令课件内部区域,寄存器间接寻址LAR1 P#10.0 / 设置AR1 AR1: 00000000 0000 0000 0000 0000 0101 0000 + 200L M W AR1, P#200.0存储区域 访问 地址 偏移扩展指令: L MW 210 宽度寄存器 常量lAR 1或AR2中的内部区域指针:B B B B B B B B B B B B B X X X15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 00 0 0 0 0 0 0 0 0 0 0 0 0 B B B31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 162022位地址字节地址(无符号整数)20215未定义l指令语法规则:西门子S7300高级编程培训教材教材间接寻址和地址寄存器指令课件交叉区域,寄存器间接寻址LAR1 P#I10.0 /设置AR1 AR1: 10000001 0000 0000 0000 0000 0101 0000L W AR1, P#200.0 + 200 访问 地址 偏移扩展指令: L IW 210 宽度寄存器 常量lAR 1或AR 2中的交叉区域指针: B B B B B B B B B B B B B X X X15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 01 0 0 0 0 R R R 0 0 0 0 0 B B B31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16位地址字节地址(无符号整数)地址标识符l指令语法规则:Bit 31=0: 内部区域Bit 31=1: 交叉区域l地址标识符:000I/O001输入(PII)010输出(PIQ)011位(Bit)存储器 100DB寄存器中的数据101DB寄存器2中的数据(DI) 110自有本地数据111调用块的LD(本地数据)西门子S7300高级编程培训教材教材间接寻址和地址寄存器指令课件用于装载地址寄存器的指令装载地址寄存器lLARn (n =1 or 2): 将ACCU1中的内容装载到ARnlLARn 将中的内容装载到ARnlLARn P# 将中的地址装载到ARn:l处理器寄存器: AR1,AR2 (比如: LAR1 AR2 及LAR2 AR1)l32位变量:MD,LD, DBD,DID (比如: L DBD5等)l32位符号变量: 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,等)l指向本地、符号地址OB: TEMP(临时)变量 (比如: LAR1 P#Par_Pointer, 等)FB: IN-,OUT-, INOUT-,STAT- 及TEMP- FC:TEMP(临时)变量(LAR1 P#Loop,等) 西门子S7300高级编程培训教材教材间接寻址和地址寄存器指令课件其它用于地址寄存器的指令传送出地址寄存器内容TARn (n =1 or 2): 从Arn传送到ACCU1lTARn 从Arn传送到:处理器寄存器: AR2 (比如:TAR1 AR2 )l32位绝对地址变量: MDn, LDn, DBDn, DIDn (如TAR2 MD5等)l32位符号变量: 32位全局变量(比如TAR1 “Index”,等) (全局和局域的) 及OB,FB及FC的TEMP(临时)变量 (比如TAR1 #Address等)地址寄存器内容交换(Swap)指令lTAR将地址寄存器AR1和AR2的内容相互交换地址寄存器加指令l+ARn将ACCU1-L内容加到ARnl+ARn P#n.m将内部区域指针P#n.m加到AR1或AR2中去西门子S7300高级编程培训教材教材间接寻址和地址寄存器指令课件寄存器间接寻址的特性 在STL/LAD/FBD编辑器内使用AR1l当访问FC中的参数时,如果参数为复杂数据类型(ARRAY、STRUCT、DATE_AND_TIME) ,则AR1寄存器和DB寄存器内容将会被覆盖掉。
l当访问FB中的INOUT参数时,如果该INOUT参数是复杂数据类型(ARRAY、STRUCT、DATE_AND_TIME),则AR1寄存器和DB寄存器内容将会被覆盖掉 在装载地址寄存器和对目标变量进行寄存器间接寻址的时候,不允许 访问局部参数在STL/LAD/FBD编辑器内使用AR2 在对FB内部所有参数和静态变量进行寻址的时候,AR2寄存器和DI寄存器均用作基址寄存器如果用户在FB内部将 AR2或DI覆盖了,之后就可以访问该FB专用参数或静态变量也就是说,未恢复两个寄存器时不可访问在FC内,对AR2寄存器和DI寄存器没有限制 西门子S7300高级编程培训教材教材间接寻址和地址寄存器指令课件#ACCU1DB中指向地址的指针#AR1#ACCU2-Number1Number2Number9Number10Number111291011 . . .等等DB4204323640字节地址练习4.2:用寄存器间接寻址进行循环编程西门子S7300高级编程培训教材教材间接寻址和地址寄存器指令课件POINTER类型和ANY类型数据的块参数地址声明名称类型0.0。












