恭喜,你发布的帖子
发布于 2017-02-19 23:08:58
37楼
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分布的时候,不是连续使用的~
这个L 区不是连续的,因为系统要根据程序的内容分配的,例如使用了LAD编程。就需要一部分的L 区保存中间变量,这个也是自动分配的,例如使用LAD编写的程序转换为STL以后你会看到 很多例如 L2.0 L2.1 等等的中间变量,这个就是系统自己计算分配的。
在主调块调用了FC时,如果FC带了ANY POINTER这两个指针时,系统会自动计算在OB1已经使用的L区后面再自动分配一片区域给这两个指针进行临时数据存放,也就是我们说的V区,例如如果OB1的L 区已经有了20个BYTE的使用,这个时候系统自动分配从 22开始的一片区域 给ANY的参数进行存放。
请填写推广理由:
分享
只看
楼主