西门子S7-300PLC的V存储区的探索与发现
-
西门子
S7-300PLC
的
< br>V
存储区的探索与发现
时间
:2011-03-13
来源
:
作者
:
廖常出
点击
:
288
次
西门子
S7-300PLC
有
V
存储区吗?听到这个问题,绝大多数人都会笑起来,
< br>V
存储区不
就是
S7-200<
/p>
的变量存储区吗?
S7-300
哪里有什
么
V
区?有没有搞错?最近有个网友在网上
询问这个问题:
“我的疑问也是这个
V
区,
被一堆人鄙视的说是
200
的
吧。
另外我有个疑问
没见有谁用这个区域编程,麻烦有类似的例
子给露露脸啊”,显出了几分急切和无奈。
我也曾经被这个问题困扰过,下面向大家介绍我寻找答案的过程。
首先在
STEP 7
的帮助中搜索“V
区”,在参数类型
ANY
p>
和
POINTER
的帮助中有个存储
区编码表,其中就有
V
区,其代码为
16#87
,对
V
区的
描述为“先前的本地数据”。这几个
字像天书一样,可能很难有人能看懂。
为了确认翻译的准确性,我将
STEP 7
切换到英语,“先前的本地数据”的英文为
“Previous local
data”。
local data
一般翻译为“局部数据”,
看来翻译没有问题。德
国人的英语水平很高,
德国大学图书馆的
书籍和杂志大多数都是英语的,
不用怀疑德语翻译
为英语时失真
。
V
区与参数类型
ANY
和
POINTER
有关,打开
STEP 7
的帮助目录中的附录,选中其中的<
/p>
“
数据类型和参数类型
< br>
参数类型
参数类型
POINTER
的格式”,可以看到参数类型由
6<
/p>
个
字节组成,
0
号和
1
号字节是
DB
< br>块的编号,不是数据块内的地址时为
0
。
2~5
号字节的格式
与寄存器间接寻址的格式相同。下
面是寄存器间接寻址的
32
位指针格式:
x000
0rrr 0000 0bbb bbbb bbbb bbbb bxxx
其中第
0
~
2
位(
xxx
,最低位为第
0
位)为被寻址地址中位的编号(
0
~
7
),第
3
~
18
位
(
< br>16
个
b
)
为被寻址地址的字节的编号。
第
24
~
26
位
(
rrr
)
为被寻址地址的区域标识号,
指针的最高位
x
为
0
时,为区域内的间接寻址,最高位
x
为
1
时,为区域间(交叉区域)
间接寻址。
参数类型
AN
Y
可以用来传递一片连续的地址区,由
10
个字节组成。
ANY
和
POINT
ER
用
于在块调用时传递输入、输出参数。为了揭开
V
区之谜,编写了
FC1
,将地址区中相邻的若
干个字累加。地址区的起始地址由参数类型为
POINTER
的输入参数
Start_Addr
提供。
P#
0.0
也
可以改写为
0.0
。在
OB1
中调用
FC1
:
CALL FC 1
Start_Addr :=P#0.0
//
数据区起始地址
Number :=5
//
需要累加的字数