中国自动化学会专家咨询工作委员会指定宣传媒体
免费注册 登录 广告服务 | 客服中心
您现在所在的是:

资料分享

抖音 德嘉 泓格论坛 FLIR红外热像论坛
工控论坛首页 资料分享 → 浏览主题: #间接寻址#间接寻址——指针其实不难
发表新帖 回复该主题
回帖:12个,阅读:2439 [上一页] [1] [2] [下一页]
* 帖子主题:

#间接寻址#间接寻址——指针其实不难

分享到
2236
非烟
文章数:558
年度积分:50
历史总积分:2236
注册时间:2018/3/28
发站内信
发表于:2018/8/2 17:17:21
#0楼
   间接寻址是使用指针访问存储器中数据的寻址方式,一般可结合算法进行处理数据,间接寻址过程可分三个步骤:建立指针,指针操作和传送数据。

  01
   建立指针

  指针定义为包含另一个存储位置地址的双字存储地址。

  编程时,先确定好被寻址的存储区域(例如MB10至MB20)。确定好指针初始指向的地址(例如MB10),做法:此存储地址名称前加一个符号 “&”,只能用下列存储区: I、Q、V、M、S、T(仅限当前值)、C(仅限当前值)、SM、AI 和 AQ,例如&MB10;

附件 image.jpg

  然后设定用于存储 被寻址的存储地址(&MB10)的存储地址(指针),但只能使用V存储区,L 存储区和累加器寄存器(AC1、AC2、AC3)用作指针,例如用AC1;

  最后通过“移动双字”(MOV_DW)指令,将被寻址的存储地址(&MB10)移至指针位置(AC1),提个醒:程序运行时,AC1保存不是数据,而是被指向的存储地址MB10。


  02
  指针操作

  建立好指针后,若想实现数据的交换与计算,需要对指针的值进行修改,该采用何种数据类型的算数运算呢?如果采用累加器当指针,则无限制(所以建议用累加器当指针),如果用V或L存储区,则需要双整数运算指令,如下图所示。

附件 image.jpg

  此外,对指针的偏移大小也有规定,依据第一步你确定好的被寻址的存储区域(例如MB10至MB20)数据类型来确定:

  假设指针初始指向数据区的第一个地址。

  若是字节,指针值必须加1,即可指向下一个地址(MB11);

  若是字(例如MW10至MW20),指针值必须加 2,即可指向下一个地址(MW12),若指针加1,即将指向MW11;

  若是双字(例如MD10至MD20),指针值必须加 4,即可指向下一个地址(MD14),若指针加1,即将指向MD11。

  一定要注意,不然指针就乱指了!


  03
  传送数据

  当操作指针偏移到需要的位置时(目标数据),即可进行数据处理;通过在指针(AC1)前面输入一个星号“*”(*AC1),然后可使用传送指令(MOV_B、MOV_W和MOV_D)或算数运算等指令,将指针指向的存储地址的数值进行处理。

附件 image.jpg


  04
  例子

  通过间接寻址方式,将MB12的数据传输至VB400。以上只是举个最简单的例子,大伙可以自行尝试下:将MB10至MB20的数据定时传输至VB400,以此循环。

附件 image.jpg

  当位M0.0使能2次,VB400值等于160
11874
蛇会大学
文章数:4445
年度积分:200
历史总积分:11874
注册时间:2015/12/14
发站内信
2018论坛分享达人
发表于:2018/8/2 19:22:13
#1楼
这个初学者要好好学习,间接寻址在项目中使用的频率挺高的
8158
fujifa
文章数:2904
年度积分:91
历史总积分:8158
注册时间:2014/2/10
发站内信
2017论坛贡献奖
2016论坛贡献奖
2015论坛贡献奖
发表于:2018/8/2 20:32:07
#2楼
以后没用了,都用数组了,标签化编程已经和实际地址没有多大的关系了。
2236
非烟
文章数:558
年度积分:50
历史总积分:2236
注册时间:2018/3/28
发站内信
发表于:2018/8/2 20:36:12
#3楼
回复 #2楼 fujifa
因人而异。。。
此帖发自论坛APP
See you。
5351
MFDXT
文章数:2677
年度积分:53
历史总积分:5351
注册时间:2011/9/26
发站内信
2017国庆活动(三)
发表于:2018/8/3 15:48:56
#4楼
间接寻址是个难题,要多理解才行,突然有一天就会理解的,自己感觉迷糊了好长时间,表情
19122
hpqian
文章数:4168
年度积分:306
历史总积分:19122
注册时间:2005/3/31
发站内信
发表于:2018/8/3 17:59:39
#5楼
为什么M0.0要使能2次呢?
17410
lizhengchao
文章数:7312
年度积分:374
历史总积分:17410
注册时间:2008/8/6
发站内信
2018春节活动(三)
发表于:2018/8/3 19:19:14
#6楼
以下是引用hpqian2018/8/3 17:59:39的发言:
为什么M0.0要使能2次呢?
使能一次是传送MB11到VB400,使能第二次传送MB12到VB400,也就是160
22456
gk_0 版主
文章数:7744
年度积分:237
历史总积分:22456
注册时间:2013/9/9
发站内信
2018论坛贡献奖
2017论坛贡献奖
2017国庆活动(二)
2016论坛贡献奖
2016国庆活动(三)
英威腾变频器(一)
S7-200 SMART(一)
寻找英威腾(三)
英威腾PLC体验(一)
2015春节活动
2013辞旧迎新
2013辞旧迎新
2013国庆活动
发表于:2018/8/4 8:12:36
#7楼
指针存储的是操作数的实际地址,数据类型为双字。理解这一句就可以了
7968
蜀中之首
文章数:5235
年度积分:50
历史总积分:7968
注册时间:2018/5/27
发站内信
发表于:2018/8/4 10:06:01
#8楼
谁家的plc,看着好复杂
附件 untitled1.jpg

这是欧姆龙的间接寻址指令
比如,D100=20  D20=001F
执行结果,D200=001F
"间接寻址”,关键在“间接”
8158
fujifa
文章数:2904
年度积分:91
历史总积分:8158
注册时间:2014/2/10
发站内信
2017论坛贡献奖
2016论坛贡献奖
2015论坛贡献奖
发表于:2018/8/4 10:26:21
#9楼
以下是引用蜀中之首2018/8/4 10:06:01的发言:
谁家的plc,看着好复杂
附件 untitled1.jpg

这是欧姆龙的间接寻址指令
比如,D100=20  D20=001F
执行结果,D200=001F
"间接寻址”,关键在“间接”

看样子不太懂的来了。

人家谈间接寻址,他来个数据寄存器的间接寻址来飙优越性了。

好好看看MOVR,MOVRW再来说他家PLC复杂好不好?
工控学堂推荐视频:

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

78.0005