回复:应用探讨——西门子指针编程使用探讨

Automann

  • 帖子

    6168
  • 精华

    138
  • 被关注

    309

论坛等级:至圣

注册时间:2004-12-23

普通 普通 如何晋级?

发布于 2011-12-01 23:04:59

59楼

S7-300/400的V存储器区在间接寻址中的应用
在STEP 7的帮助中搜索“V区”,在参数类型ANY和POINTER的帮助中有个存储区编码表,其中就有V区,其代码为16#87,对V区的描述为“先前的本地数据”。
块调用时的参数类型如果是ANY和POINTER(分别为10个和6个字节),不能用累加器1直接传递。因此将这些参数的实参(例如16#0002 8400 0000)暂时保存在OB1的局部变量中。
FC1将地址区中相邻的若干个字累加,地址区的起始地址由参数类型为POINTER的输入参数Start_Addr提供。在OB1中调用FC1:
CALL FC 1
Start_Addr :=P#DB2.DBX0.0 //数据区起始地址
Number :=5 //需要累加的字数
Result :=DB2.DBD10 //保存运算结果的双整数
下图是运行时监控FC1的结果,累加器1(STANDARD)中的数据显示格式为十六进制。前两条指令将参数Start_Addr输入的地址值P#Start_Addr送给AR1。



参数类型POINTER由6个字节组成,0号和1号字节是DB块的编号,不是数据块内的地址时为0。2~5号字节的格式与寄存器间接寻址的格式相同。
V区实际上是调用FC1的OB1的临时局部数据,在FC1的第2条指令处设置一个断点。执行完第2条指令后,CPU进入HOLD模式,此时打开CPU模块信息对话框的“堆栈”选项卡,选中B堆栈中的OB1,点击“L堆栈”按钮,打开L堆栈对话框,可以看到OB1从LB21开始的局部数据为16#0002 8400 0000,即OB1调用FC1的POINTER格式的6个字节的实参P#DB2.DBX0.0。前两个字节是DB2的编号,后4个字节是地址指针值P#DBX0.0的代码。
正确地理解V区的意义和操作系统保存ANY和POINTER指针的机制,可以帮助我们阅读和理解有关的程序。
追求完美
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54759条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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