回复:关于ANY指针的一点疑问

威师爷

  • 帖子

    5108
  • 精华

    47
  • 被关注

    255

论坛等级:至圣

注册时间:2013-09-18

白金 白金 如何晋级?

发布于 2017-02-19 23:08:58

37楼

展开查看
以下是引用RENHQ在2017-02-19 23:00:32的发言 >34楼

1、move过去的用意就是来判断是不是OB1的临时变量的地址,就是使用的是OB1的L区域

2、#OB1T1是OB1又加的temp类型的变量,本来还有一张完整的图片发现昨天忘传了,今天让我给删了

3、为什么第五行的累加器的值为870000c8(即#TIN起始地址为V25.0)?

这个我也不知道,在第一章完整的图片说的就是这个问题,我在OB1里面建了两个变量#OB1T1 和 #OB1T2

word类型,OB1T1是便宜地址20开始,#OB1T2就是22开始

只能说是PLC内部自动分配内存,这个V区域,是PLC又新建的一块数据存储区域~

我还做了个实验,在FC1里面通过[AR1,p#0.0],把这个P#0.0继续往下便宜,加到p#16.0的时候,就报故障了,而且没读到FC1定义的临时变量

这个L区域堆栈,在PLC分布的时候,不是连续使用的~


以下是引用20151013在2017-02-19 21:25:22的发言 >31楼:两点疑问:1、OB1...

引用31楼详细内容:

两点疑问:

1、OB1中网络1种的两个MOVE指令有什么用吗?将W#16#1234传送给#OB1T1的用意在哪?

2、你图片上没看到,#OB1T1是ANY指针吧?


以下是引用RENHQ在2017-02-18 20:35:52的发言 >29楼:这张图是验证我说的...

引用29楼详细内容:

这张图是验证我说的以外面的为准的

上面图能看出来

      L     W#16#5566

      T     W [AR1,P#0.0]

      T     LW [AR1,P#0.0]

上面不带T     W [AR1,P#0.0]的修改的是OB1里面的临时变量

下面的 T     LW [AR1,P#0.0],修改的是FC1里面的地址

等下直接测试一个M区和DB区域

以下是引用20151013在2017-02-18 17:52:19的发言 >26楼:回过头来看了一下...

引用26楼详细内容:

回过头来看了一下,我想问一下你说的“不管ar1里面是什么类别的,会被外面的覆盖”。

这句话从何而知?有官方手册上有说吗?

我这样问是因为找答案那边阿鸣大师说的第二点好像和你说的不一样

以下是引用RENHQ在2017-02-18 10:55:25的发言 >4楼:地址寄存器里面包...

引用4楼详细内容:

地址寄存器里面包含了地址类别信息

在外面再用上地址类别先不说程序会不会出错,至少增强可读性了,不管ar1里面是什么类别的,会被外面的覆盖,能一眼看出来传送到哪里了

这个L 区不是连续的,因为系统要根据程序的内容分配的,例如使用了LAD编程。就需要一部分的L 区保存中间变量,这个也是自动分配的,例如使用LAD编写的程序转换为STL以后你会看到 很多例如 L2.0 L2.1 等等的中间变量,这个就是系统自己计算分配的。


在主调块调用了FC时,如果FC带了ANY  POINTER这两个指针时,系统会自动计算在OB1已经使用的L区后面再自动分配一片区域给这两个指针进行临时数据存放,也就是我们说的V区,例如如果OB1的L 区已经有了20个BYTE的使用,这个时候系统自动分配从 22开始的一片区域 给ANY的参数进行存放。



工业起重机防摇摆 QQ:404136820 AntiSwayControl
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54617条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。