好文档 - 专业文书写作范文服务资料分享网站

S7-300和S7-400寻址

天下 分享 时间: 加入收藏 我要投稿 点赞

?内部区域寄存器间接寻址

指针格式与存储器间接寻址的32位指针相同,第0位~第2位作为寻址操作的位地址,第3位~第18位作为寻址操作的字节地址,第19位~第31位没有定义,32位指针的格式如下:

图 3

间接寻址表示为:存储器标识符 [ ARx, 地址偏移量 ] 如:

L MW [AR1, P#2.0]

‘MW’为被访问的存储器及访问宽度,’AR1’为地址寄存器1,P#2.0为地址偏移量。

内部区域寄存寻址举例:

//DB块寄存器内部寻址

OPN DB 1 //打开DB1。

LAR1 P#10.0 //将指针P#10.0 装载到地址寄存器1中。 L DBW [AR1, P#12.0] //将DBW22装载到累加器1中。

LAR1 MD 20 //将存储于MD20中的指针装载到地址寄存器1中。

L DBW [AR1, P#0.0] //将DBW装载到累加器1中,地址存储于MD20中。 +I

LAR2 P#40.0 //将指针P#40.0 装载到地址寄存器2中。 T DBW [AR2, P#0.0] //运算结果传送到DBW40中。

//DI、DO区寄存器内部寻址

L P#8.7 //装载指向第8字节第7位的指针值到累加器1 LAR1 //累加器1中的指针装载到AR1 A I [AR1, P#0.0] //查询I8.7的信号状态 = Q [AR1, P#1.1] //给输出位Q10.0赋值

?交叉区域寄存器间接寻址

包含有存储器区域信息的指针,称为交叉区域指针。

同样,交叉区域指针为32位,寄存器间接寻址要使用地址寄存器AR1或AR2。

32位交叉区域指针,左起0~18位格式与32位内部区域指针相同,19~23位,27~30位未定义,31位为交叉区域指针标识位。

24~26位是存储区域地址标识,8中组合表示8种存储器区域: 000 表示没有地址区,例如P#12.0; 001 表示输入地址区I,例如P#I12.0; 010 表示输出地址区Q,例如P#Q12.0; 011 表示标志位地址区M,例如P#M12.0;

100 表示数据块(DB)中的数据,例如P#DB1.DBX12.0 101 表示数据块(DI)中的数据,例如P#DI1.DIX12.0 110 表示区域地址区L,例如P#L12.0;

111 表示调用程序块的区域地址区V,例如P#V12.0; 交叉区域指针格式如下:

图 4

交叉区域指针常数表达为:P# 存储器 字节 . 位

例如: P#Q10.5 //指向Q区第10字节第5位的指针常 P#DB1.DBX32.0 //指向DB1区域的第32字节第0位的指针常数

交叉区域寻址表示为: 访问宽度 [ ARx, 偏移量 ] 例如: L W [ AR2, P#1.0 ]

‘W’为访问宽度,AR2为地址寄存器2,P#1.0为偏移量。

交叉区域间接寻址举例: //M存储区 L P#M20.0 LAR1 L 1234

T W [ AR1, P#2.0] //I存储区 L P#I0.0 LAR2

L W[ AR2, P#0.0 ] T MW0

2.2.3 FB/FC的指针参数传递

在使用FB/FC形参传递指针参数时,16位、32位指针是可用的,但POINTER与ANY指针类型也是常见的类型,因为更方便。 ?16指针用于参数传递 例如:

//编写一个FC,作用是启动条件满足后延时3秒输出闭合信号 //定义FC的形参如下:

图 5

//程序如下: L #Pointer16

T LW 0 //将16位指针装入LW0 A #Start //Start参数 = True时 L S5T#3S //计时3秒 SD T [LW 0]

A T [LW 0] //计时器计时到

= #Motor //输出Motor = True

*32指针用于参数传递

//编写一个FC,作用是将输入DB块指定的区域 (实数) 求出平均值 //定义形参如下:

图 6

S7-300和S7-400寻址

?内部区域寄存器间接寻址指针格式与存储器间接寻址的32位指针相同,第0位~第2位作为寻址操作的位地址,第3位~第18位作为寻址操作的字节地址,第19位~第31位没有定义,32位指针的格式如下:图3间接寻址表示为:存储器标识符[ARx,地址偏移量]如:LMW[AR1,P#2.0]
推荐度:
点击下载文档文档为doc格式
2n4455r1fy38gus0yjra
领取福利

微信扫码领取福利

微信扫码分享