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

youhm

  • 帖子

    4924
  • 精华

    81
  • 被关注

    51

论坛等级:至圣

注册时间:2008-06-28

普通 普通 如何晋级?

发布于 2011-11-30 15:09:14

19楼

quote:以下是引用划痕在2011-11-30 14:23:51的发言:
使用指针时的注意事项(二) 进行程序设计,任何时候都要注意对变量进行赋初值,指针也不例外,尤其注意对指针的保护
一种常见的地址寄存器(指针)的保护措施如下:
在FC中第一个网络里代码
AR1 #dwSAVE_Ar1 //AR1—>#dwSAVE_Ar1
TAR2 #dwSAVE_AR2 //AR2—>#dwSAVE_AR2
在最后一个网络里代码
LAR1 #dwSAVE_Ar1 // #dwSAVE_AR1—> AR1
LAR2 #dwSAVE_AR2 //#dwSAVE_AR2——>AR2
建议:OB中不宜使用影响地址寄存器内容变化的指令,最好将带指针的循环操作放在FC中,FB是功能模块,不建议在FB中使用AR2(或者是不建议使用指针)。
添加两个有关AR1和AR2的帖子:
1、http://www.ad.siemens.com.cn/club/bbs/post.aspx?b_id=4&a_id=899196&s_id=0&num=18#anch;
2、http://www.ad.siemens.com.cn/club/bbs/post.aspx?b_id=4&a_id=905660&s_id=23&num=20#anch

关于这个,技术支持的帖子里说的很清楚了
http://www.ad.siemens.com.cn/club/bbs/post.aspx?b_id=4&a_id=758363
不同系列的PLC可能因允许堆栈空间的不同,有的调用FC会自动保存和恢复DB寄存器和地址寄存器,有的又不能,所以推荐自己进行保存和恢复。

指针间接寻址中经常用到两个地址寄存器和DB寄存器,所以影响到地址寄存器和DB寄存器的情况都要注意了
17楼划痕大侠提到了完整引用DB块数据会改变DB寄存器的值,实际测试发现CALL调用FB也会改变DB寄存器的值,在FC中参数使用复杂数据类型时,实际是以指针的形式来处理的,复杂数据类型都是在DB块里定义的,在FC里直接引用复杂数据类型变量时,DB寄存器和地址寄存器AR1将会用于访问复杂数据类型变量,在FB里IN_OUT类型使用了复杂数据类型也是一样的情况。
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54710条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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