师傅们,帮我分析下指针寻址是什么意思 点击:1036 | 回复:12



yang36

    
  • 精华:0帖
  • 求助:14帖
  • 帖子:22帖 | 435回
  • 年度积分:25
  • 历史总积分:4258
  • 注册:2012年9月13日
发表于:2013-08-23 09:32:56
楼主

师傅们,帮我分析下怎么理解指针的含义,为什么第一步的AC1的值是134217928,第二步的*AC1的值3106(vw200),为什么我在状态表里吧VB200写了个12的值而程序里&vb200的值是16#080000C8呢?




  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 455回
  • 年度积分:0
  • 历史总积分:1000
  • 注册:2008年1月09日
发表于:2013-08-23 09:46:16
1楼

指针在一定意义上就是地址,第一个就是取某个变量的地址,然后从这个地址里找到变量的数据

类似于你要找一个人,他的房间号为103,那么指针就是这里的房间号103,该指针指的数据就是这个人

研讨会宣传员_3259

  • [版主]
  • 精华:3帖
  • 求助:110帖
  • 帖子:1927帖 | 14403回
  • 年度积分:102
  • 历史总积分:64749
  • 注册:2020年3月27日
发表于:2013-08-23 10:22:23
2楼

楼上回答得很形象。           

湖北老四

  • 精华:2帖
  • 求助:13帖
  • 帖子:25帖 | 845回
  • 年度积分:0
  • 历史总积分:2751
  • 注册:2013年2月16日
发表于:2013-08-23 11:06:41
3楼

要搞明白楼主的问题,必须明确下面几个概念:

1、在PLC中,任何软性的内容,都是用数字来表达的。数据是数字,指令是数字,地址也是数字。这三个基本元素都是数字,所以,一切都是数字。用数字指令操作数字地址中的数字数据进行数学运算,然后将处理后的数字结果存入数字地址中,这就是PLC反反复复不停在干的事情。

    由此可知,当你在PLC中看到一个数字值,那么这个数字有可能是数据,有可能是地址,甚至有可能是指令。


2、关于指针。指针是神马?其实我们可以把指针理解成一个windows快捷方式。快捷方式本身是一个数据内容(如楼主范例中的AC1),快捷方式所指向的地址则是另一个数据内容(如VB200),快捷方式所指向的地址中的内容则又是另外一回事(如楼主范例中的3106)。所以指针除开本身之外,其属性通常具备两重含义。一重是关于其所指向的地址的描述,另一重就是他所指向的地址中的对象内容。

MOVD &VB100,VD1000    //为VB100建立指针。VD1000成为首字节为VB100的某个数据的指针。


3、经过上面两点解释,楼主该明白了吧。

第一步AC1里面的值(134217928)是VB200这个地址本身的数学表达形式,这就是传说中的门牌号。

第二步AC1里面的值(3106),是VW200这个地址当中所保存的数据内容。

阿水--王者之师

  • 精华:24帖
  • 求助:348帖
  • 帖子:1616帖 | 22281回
  • 年度积分:37
  • 历史总积分:98482
  • 注册:2007年3月22日
发表于:2013-08-23 12:14:19
4楼

  学习啦, 一 ,三楼的回答真是太好 !

Smile-lyc

  • [管理员]
  • 精华:114帖
  • 求助:50帖
  • 帖子:2793帖 | 22283回
  • 年度积分:284
  • 历史总积分:144015
  • 注册:2006年8月04日
发表于:2013-08-23 13:14:52
5楼

不知道一楼大师姓甚名谁?

所以奖励发不出去,尽管很想给你MP!

wyb2866255---王者之师

  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2013-08-23 13:48:18
6楼

第一个MOV指令是将VB200的地址值(16#80000C8=134217928)传递给AC1,使AC1的内容=134217928,第二个MOV指令是将AC1内容为地址的存储器(即VW200)的内容(3106)传递给VW300.故运行完毕后,VW300=3106.

  该程序是在运行监视下的截图,故能在2个MOV传递指令的输入与输出端显示出对应的数值。

  还要说明的是:从存储器的数据表中知:VB200=12  VB201=34  为什么VW200=3106?

 解: ∵ VB200=12 =16#0C、VB201=34=16#22,

      ∴VW200=16#C22 = 3106

      即VW200的原数据=10进制数3106.

江湖混混-余辉

  • [版主]
  • 精华:53帖
  • 求助:44帖
  • 帖子:3351帖 | 28451回
  • 年度积分:603
  • 历史总积分:131640
  • 注册:2006年4月25日
发表于:2013-08-23 17:01:57
7楼

回复内容:

对: Smile-lyc  不知道一楼大师姓甚名谁?所以奖励发不出去,尽管很想给你MP! 内容的回复!


 一楼用户名:wingwf2000

fyc871356965

  • 精华:1帖
  • 求助:3帖
  • 帖子:14帖 | 1802回
  • 年度积分:0
  • 历史总积分:2312
  • 注册:2012年1月09日
发表于:2013-08-23 19:00:56
8楼

引用 wyb2866255---王者之师 的回复内容: 第一个MOV指令是将VB200的地址值(16#8000...



caogy

  • 精华:0帖
  • 求助:1帖
  • 帖子:1帖 | 6回
  • 年度积分:0
  • 历史总积分:110
  • 注册:2013年8月12日
发表于:2013-08-23 22:34:33
9楼

厉害,精彩,太牛了。。。。。。

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 455回
  • 年度积分:0
  • 历史总积分:1000
  • 注册:2008年1月09日
发表于:2013-08-25 21:46:16
10楼

我都不知道为啥显示不出用户名来,我的用户名字有什么特殊的字符么?

我是一楼,wingwf2000

学习一下C语言,里面的指针概念还是非常管用的

yang36

  • 精华:0帖
  • 求助:14帖
  • 帖子:22帖 | 435回
  • 年度积分:25
  • 历史总积分:4258
  • 注册:2012年9月13日
发表于:2014-01-16 14:28:09
11楼

回复内容:

对: wyb2866255---王者之师 第一个MOV指令是将VB200的地址值(16#8000... 内容的回复!


这位师傅解答的完全好理解

w512293565

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 115回
  • 年度积分:0
  • 历史总积分:58
  • 注册:2010年11月22日
发表于:2014-03-18 10:21:58
12楼

以前对指针寻址没有概念,看完有点明白了。


热门招聘
相关主题

官方公众号

智造工程师