s7-200的学习中间接寻址怎么理解? 点击:3129 | 回复:19



肥肥爱吃肉

    
  • 精华:0帖
  • 求助:14帖
  • 帖子:29帖 | 123回
  • 年度积分:0
  • 历史总积分:167
  • 注册:2018年2月18日
发表于:2018-08-15 11:52:44
楼主

近几天正在学习s7-200编程,基础方面间接寻址该怎么理解呢?




GKstudying

  • [管理员]
  • 精华:4帖
  • 求助:1帖
  • 帖子:618帖 | 4565回
  • 年度积分:3466
  • 历史总积分:9840
  • 注册:2008年11月11日
发表于:2018-08-15 13:49:32
1楼

 间接寻址方式是指数据存放在存储器或寄存器中,在指令中只出现所需数据所在单元的内存地址的地址。存储单元地址的地址又称为地址指针。这种间接寻址方式与计算机的间接寻址方式相同。间接寻址在处理内存连续地址中的数据时非常方便,而且可以缩短程序所生成的代码的长度,使编程更加灵活。

肥肥上道

  • 精华:0帖
  • 求助:14帖
  • 帖子:29帖 | 123回
  • 年度积分:0
  • 历史总积分:167
  • 注册:2018年2月18日
发表于:2018-08-15 13:55:31
2楼


回复内容:

对: GKstudying  间接寻址方式是指数据存放在存储器或寄存器中,在指令中... 内容的回复!

-------------------------

还是不理解,打个比方怎么说?

PLC军团长

  • [版主]
  • 精华:10帖
  • 求助:62帖
  • 帖子:1694帖 | 7860回
  • 年度积分:246
  • 历史总积分:54791
  • 注册:2004年7月13日
发表于:2018-08-15 15:47:54
3楼

指令中给出的地址是存放数据的地址的地址称为间接寻址。间接寻址方式是,指令给出了存放操作数地址的存储单元的地址(也称地址指针),按照这一地址找到的存储单元中的数据才是所需要的操作数,相当于间接地取得数据。S7 - 200 PLC CPU以变量存储器(V)、局部存储器(L)或累加器(AC)的内容值为地址进行间接寻址。可间接寻址的存储器区域有:I、Q、V、M、S、T(仅当前值)和C(仅当前值)。对独立的位( BIT)值或模拟量值不能进行间接寻址。用间接寻址方式存取数据时遵循以下步骤:建立指针、使用指针来存取数据(间接存取)和修改指针。使用方法和C语言中的指针应用基本相同。

    (1)建立指针。间接寻址前,应先建立指针。指针为双字长,是所要访问的存储单元的32位的物理地址。只能使用变量存储器(V)、局部存储器(L)或累加器(AC1、AC2、AC3)作为指针,AC0不能用做间接寻址的指针。为了建立指针,必须使用双字传送指令MOVD,将存储器区中某个位置的地址移入存储器的另一个位置或累加器作为指针,即将所要访问的存储器单元的地址装入用来作为指针的存储器单元或寄存器,装入的是地址而不是数据本身。下面这条指令创建了一个指向VB200的指针:

    MOVD    &VB200,AC1

    “&”为地址符号,与单元组合表示所对应单元的32位物理地址,VB200只是一个直接地址编码,并不是它的物理地址。指令中的&-VB200如果改为&-VW200或&4VD200效果完全相同。

    指令中的第二个地址数据长度必须是双字长,如AC、LD和VD。这里地址“VB200”要用32位表示,因而必须使用双字传送指令( MOVD)。

    (2)间接存取。依据指针中的内容值作为地址存取数据。使用指针可存取字节、字、双字型的数据,下面两条指令是建立指针和间接存取的应用方法:

    MOVD    &VB200,AC1

    MOVW    *AC1,AC0

    执行指令MOVW *AC1,AC0,把指针AC1中的内容值(VB200)作为地址,由于指令MOVW的标识符是“W”,因而指令操作数的数据长度应是字型,把地址VB200、VB201处2字节的内容(12 34)传送到AC0。指针处的值(即12 34),为字型数据,如图3-6所示,操作数(AC1)前面的“*”号表示该操作数( AC1)为指针。
创建和使用指针09-20-00-54-1.jpg

    图3-6    创建和使用指针

    (3)修改指针。处理连续地址的存储单元中数据时,通过修改指针可以非常方便地存取数据。在S7 - 200 PLC中,指针的内容不会自动改变,可用自增或自减等指令修改指针值。这样就可连续地存取存储单元中的数据。指针中的内容为双字型数据,应使用双字指令来修改指针值。简单的数学运算指令,如加法指令“+D   IN1,OUT”或自增指令“INCD OUT”可用于修改指针值。09-20-19-38-1.jpg

    图3-7中,用两次自增指令INCD AC1,将AC1指针中的值(VB200)修改为VB202后,指针即指向新地址VB202。执行指令MOVW* AC1,AC0,这样就可在变量存储器(V)中连续地存取数据,将VB202、VB203 2字节的数据(5678)传送到AC0。
修改指针

    图3-7    修改指针

    修改指针值时,应根据存取的数据长度来进行调整。若对字节进行存取,指针值加1(或。减1);若对字进行存取,或对定时器、计数器的当前值进行存取,指针值加2(或减2);若对双字进行存取,则指针值加4(或减4)。图3-7中,存取的数据长度是字型数据,因而指针值加2。

肥肥上道

  • 精华:0帖
  • 求助:14帖
  • 帖子:29帖 | 123回
  • 年度积分:0
  • 历史总积分:167
  • 注册:2018年2月18日
发表于:2018-08-15 16:30:23
4楼


回复内容:

对: PLC军团长 指令中给出的地址是存放数据的地址的地址称为间接寻址。间... 内容的回复!

-------------------------

首先感谢你的回答。我有教材,上面的内容和你回复的相同,只是我真的没看懂。

土豆鸡蛋

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 15回
  • 年度积分:86
  • 历史总积分:226
  • 注册:2016年1月17日
发表于:2018-08-15 21:18:16
5楼

间接寻址就是指针,比如你要写入10个连续的整数到plc的v区,不如用10个move指令,直接写入&vb0就行了,这10个整数的数据就在vb0到vb19里。

竹叶三—王者之师

  • [版主]
  • 精华:7帖
  • 求助:21帖
  • 帖子:1144帖 | 3344回
  • 年度积分:115
  • 历史总积分:56003
  • 注册:2009年7月21日
发表于:2018-08-16 08:50:56
6楼

我来给你个通俗的解释吧


你住酒店的时候,如果有门牌号和钥匙,你可以直接住进那个房间。比如房间号是618房间,你可以直接去找这个房间,然后进去。这就是直接寻址。相当于把你存储在618这个寄存器里面了。


你也可以先上六楼服务台,她告诉你,从这儿走,第18个房间就是。这个18其实就是偏移地址。六楼服务台就是一个地址的寄存器。你是不能住进服务台的,也就是你不能存储在这个寄存器里面。但是你从这里可以拿到你的门牌号和钥匙,然后再根据门牌号(偏移地址)找到你真正的房间,那个才是存储你的寄存器。这就是间接寻址。


现在明白了吧。纯手打,给好评啊。



GKstudying

  • [管理员]
  • 精华:4帖
  • 求助:1帖
  • 帖子:618帖 | 4565回
  • 年度积分:3466
  • 历史总积分:9840
  • 注册:2008年11月11日
发表于:2018-08-16 08:55:03
7楼


回复内容:楼主高才,通俗易懂

对: 竹叶三—王者之师 我来给你个通俗的解释吧你住酒店的时候,如果有门牌号和钥... 内容的回复!

-------------------------


一颗小小草

  • 精华:8帖
  • 求助:22帖
  • 帖子:180帖 | 4727回
  • 年度积分:881
  • 历史总积分:28053
  • 注册:2005年6月28日
发表于:2018-08-16 09:34:21
8楼


回复内容:

对: 竹叶三—王者之师 我来给你个通俗的解释吧你住酒店的时候,如果有门牌号和钥... 内容的回复!

-------------------------

三维组态设计

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 170回
  • 年度积分:81
  • 历史总积分:427
  • 注册:2012年10月08日
发表于:2018-08-16 10:22:11
9楼

间接寻址,就是地址都是变量,是可以传入进来的

祥ZHOU

  • 精华:0帖
  • 求助:1帖
  • 帖子:3帖 | 116回
  • 年度积分:1
  • 历史总积分:172
  • 注册:2015年7月16日
发表于:2018-08-16 12:47:41
10楼


引用 PLC军团长 的回复内容: 指令中给出的地址是存放数据的地址的地址称为间接寻址。间...

-------------------------


肥肥爱吃肉

  • 精华:0帖
  • 求助:14帖
  • 帖子:29帖 | 123回
  • 年度积分:0
  • 历史总积分:167
  • 注册:2018年2月18日
发表于:2018-08-16 18:03:06
11楼


回复内容:

对: 竹叶三—王者之师 我来给你个通俗的解释吧你住酒店的时候,如果有门牌号和钥... 内容的回复!

-------------------------

简单明了,很好!

南1号

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 102回
  • 年度积分:71
  • 历史总积分:1419
  • 注册:2018年8月12日
发表于:2018-08-18 09:51:14
12楼

间接寻址就是指针,比如你要写入10个连续的整数到plc的v区,不如用10个move指令,直接写入&vb0就行了,这10个整数的数据就在vb0到vb19里。

冷7暖6

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 90回
  • 年度积分:0
  • 历史总积分:165
  • 注册:2016年7月25日
发表于:2018-08-19 19:24:23
13楼

不错的内容,来学习下

肥肥爱吃肉

  • 精华:0帖
  • 求助:14帖
  • 帖子:29帖 | 123回
  • 年度积分:0
  • 历史总积分:167
  • 注册:2018年2月18日
发表于:2018-08-19 22:35:56
14楼


回复内容:

对: 南1号 间接寻址就是指针,比如你要写入10个连续的整数到plc... 内容的回复!

-------------------------

暂时还不会,不过谢谢你!

晨曦521

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 457回
  • 年度积分:93
  • 历史总积分:3771
  • 注册:2013年5月27日
发表于:2018-08-22 09:44:13
15楼

回复内容:

对: PLC军团长 指令中给出的地址是存放数据的地址的地址称为间接寻址。间... 内容的回复!

-------------------------

团战霸气,把该说的都说完了

Smile-lyc

  • [版主]
  • 精华:179帖
  • 求助:40帖
  • 帖子:3958帖 | 19381回
  • 年度积分:1440
  • 历史总积分:103652
  • 注册:2006年8月04日
发表于:2018-09-22 21:37:47
16楼

温馨提醒:凡是设置积分悬赏的求助帖,请楼主及时结贴发放积分。

同时也希望楼主能把解决问题经验或思路一起分享!


请叫我王老湿

  • [版主]
  • 精华:0帖
  • 求助:0帖
  • 帖子:604帖 | 6521回
  • 年度积分:251
  • 历史总积分:157447
  • 注册:2011年4月25日
发表于:2018-09-25 20:12:40
17楼

楼主可以把间接寻址理解为去找开房间的钥匙,找到钥匙,钥匙上面有对应房间号码,这样你还担心找不到房间吗?

哲一

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 165回
  • 年度积分:0
  • 历史总积分:386
  • 注册:2018年8月13日
发表于:2018-10-21 21:54:52
18楼

间接寻址方式是指数据存放在存储器或寄存器中,在指令中只出现所需数据所在单元的内存地址的地址。存储单元地址的地址又称为地址指针。这种间接寻址方式与计算机的间接寻址方式相同。间接寻址在处理内存连续地址中的数据时非常方便,而且可以缩短程序所生成的代码的长度,使编程更加灵活。

转角掉进下水道

  • 精华:0帖
  • 求助:3帖
  • 帖子:30帖 | 1171回
  • 年度积分:26
  • 历史总积分:2145
  • 注册:2007年3月13日
发表于:2020-07-13 14:38:03
19楼

学习了,这个不好理解。


相关主题

官方公众号

智造工程师