西门子S7-300高级编程培训4间接寻址和地址寄存器[业界研究]_第1页
西门子S7-300高级编程培训4间接寻址和地址寄存器[业界研究]_第2页
西门子S7-300高级编程培训4间接寻址和地址寄存器[业界研究]_第3页
西门子S7-300高级编程培训4间接寻址和地址寄存器[业界研究]_第4页
西门子S7-300高级编程培训4间接寻址和地址寄存器[业界研究]_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、间接寻址及地址寄存器指令,L W AR1, P#200.0,- - - -,1,2,9,10,#Ini_Value,#Par_Pointer,#Counter,?,?,?,STEP 7 中可能的寻址方式,寻址方式,直接寻址,间接寻址,绝对寻址,符号寻址,存储器间接寻址,寄存器间接寻址,示例: A I 4.0A Mot_onOPN DBMW10A IMD30A IAR1,P#0.0A AR1,P#0.0 L IW10L #NumSP TruntimeL IWNumberL IDAR1,P#5.0T WAR1,P#0.0,16位指针(DB, T, C),32位指针内部区域,32位指针内部区域,32

2、位指针交叉区域,变量直接寻址,存储单元位置 (示例),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), 字(LW), 双字 (LD),本地数据堆栈,

3、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” A DB10.DBX4.7从DB 10 的第4个字

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 OPN DBMW 60 OPN DB 11 双字格式

5、的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 9 8 7 6 5 4 3 2 1 0,0,0,0

6、,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 QDSpeed_1,等) 本地数据堆栈(绝对寻址或符号寻址,例如: OPN DBLW10,OPN

7、 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号拷贝到MW100 TMW100/ OPNDBMW 100/ 打开DB Network (段) 2:循环删除 LP#18.0/ 将终端地址(DBW18)作为指针 TMD40/ 传送到MD 40; L10/ 将循环计数器值设置为10 next:TMB50/ 传到MB 50中; L0/ 装载初始值 TDBWMD 40/ 传到DB50中; LMD40/ 装载指针 LP#2.0/ 并减去2个字节 -D/ 然后再传回 TMD40/ 到MD 40; LMB50/ 装载循环计数器 LOOPne

9、xt/ 减去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: 00000000 0000 0000 0000 0000 0101 0000 + 200 L M W A

10、R1, 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,未定义,指令语法规则:,交叉区域,寄存器间接寻址,LAR1 P#I10.0 /设置AR1 AR1: 10000

11、001 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 19 18 17 16,位地址,字节地址(无符号整数),地址标识符,指令语法规则:,Bit 31=0: 内部

12、区域 Bit 31=1: 交叉区域,地址标识符:000I/O001输入(PII)010输出(PIQ)011位(Bit)存储器 100DB寄存器中的数据101DB寄存器2中的数据(DI) 110自有本地数据111调用块的LD(本地数据),用于装载地址寄存器的指令,装载地址寄存器 LARn (n =1 or 2): 将ACCU1中的内容装载到ARn LARn 将中的内容装载到ARn LARn P#将中的地址装载到ARn : 处理器寄存器:AR1,AR2 (比如: LAR1 AR2 及LAR2 AR1) 32位变量:MD,LD, DBD,DID (比如: L DBD5等) 32位符号变量: 32位全

13、局变量(比如: 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-,STAT- 及TEMP- FC:TEMP(临时)变量(LAR1 P#Loop,等),其它用于地址寄存器的指令,传送出地址寄存器内容 TARn

14、 (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和AR2的内容相互交换 地址寄存器加指令 +ARn将ACCU1-L内容加到ARn +ARn P#n.m将内部区域指针P#n.m加到AR1或AR2

15、中去,寄存器间接寻址的特性,在STL/LAD/FBD编辑器内使用AR1 当访问FC中的参数时,如果参数为复杂数据类型(ARRAY、STRUCT、DATE_AND_TIME) ,则AR1寄存器和DB寄存器内容将会被覆盖掉。 当访问FB中的INOUT参数时,如果该INOUT参数是复杂数据类型(ARRAY、STRUCT、DATE_AND_TIME),则AR1寄存器和DB寄存器内容将会被覆盖掉。 在装载地址寄存器和对目标变量进行寄存器间接寻址的时候,不允许 访问局部参数 在STL/LAD/FBD编辑器内使用AR2 在对FB内部所有参数和静态变量进行寻址的时候,AR2寄存器和DI寄存器均用作基址寄存器。

16、如果用户在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:用寄存器间接寻址进行循环编程,POINTER类型和ANY类型数据的块参数,地址声明名称类型 0.0 输入参数DB_NumWORD 2.0 输入参数Area_Pointer

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

18、I_DB_Num OPNDBI_DB_Num LDAR1,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,Byte 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

19、_ B X X X,POINTER类型参数赋值 指针显示P#DBn.DBXx.y其中:n= DB号, x= 字节数, y= 位数 P#DIn.DIXx.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号区域标识符及位地址自动输入 #Motor_on 到POINTER参数中) Motor_1.speed,数据类型结构:POINTER,ANY数据类型的结构,ANY数据类型指针,Byte n,Byte n+2,Byte n+4,DB号,1 O O

20、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,数据类型标识符 VOID00BOOL01BYTE02CHAR03WORD04INT05DWORD06DINT07REAL08DATE09TOD0ATIME0BS5TIME0CDT0ESTRING13 参数类型标识符 BLOCK_FB17BLOCK_FC18BLOCK_DB19BLOCK_SDB1ACOUNTER1CTIMER1D,ANY参数类型指针,Byte n,Byte n+2

21、,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 12开始的20个REAL类型的地址 (ARRAY1.20 OF REAL) P#I 10.0 BOOL 8指向IB10里的一个8位区域 地址声明: 绝对地址: DB5.DBD10数据类型:DWORD,复制系数:1 DB号:5,指针:P#DB5.DBX10.0 IW32类型:WORD,WF: 1,DB

22、 号:0,指针: P#I 32.0T35类型: TIMER,编号:35 符号地址: #Motor_1.speed使用基本数据类型,编译器建立正确“Pump”.Start的数据类型,复制系数1以及指针 注意事项 符号(ARRAY、STRUCT、STRING、UDT)赋值时,数据类型标识符02(BYTE)以及区域字节长度只能由编译器来建立,并输入到ANY指针。,ANY类型间接参数分配,使用临时变量对ANY数据类型进行实际参数赋值 在调用块中声明ANY数据类型临时变量 例如:temp aux_pointerANY 用指针信息对ANY临时变量进行赋值 例如: LAR1P#aux_pointer/ 装载辅助指针地址L B#16#10/ 装载标识符10TLB AR

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论