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

dongqing

  • 帖子

    61
  • 精华

    0
  • 被关注

    4

论坛等级:游侠

注册时间:2010-04-17

普通 普通 如何晋级?

发布于 2011-12-14 13:56:21

113楼

我以前使用梯形图编程,不过看到大家推荐,我开始学语句表编程。作为初学者,我先看了 划痕 大侠推荐的一篇名为“详解西门子间接寻址”的帖子,初学者可以多参考。链接http://www.ad.siemens.com.cn/club/bbs/post.aspx?b_id=4&a_id=333582&s_id=0&num=0
文中有一段实例程序,如下:
L L#1 //初始化循环指针。这里循环指针就是我们要修改的寻址指针
T MD 102
M2: L MD 102
T #COUNTER_D
OPN DB100
L DBW [MD 102]
T MW [MD 102]
L #COUNTER_D
L L#2 // +2,是因为数据字的偏移基准是字节。
+D
T MD 102 //自加减循环指针,这是动态修改了寻址指针的关键
L L#11 //循环次数=n-1。n=6。这是因为,首次进入循环是无条件的,
但已事实上执行了一次操作。
<=D
JC M2
此段程序实现的功能是:将DB100中的1-11数据字,传送到MW1-11中
我自己建立个项目,复制作者程序,把程序下到CPU里,CPU结果报错。
在线监视了下,发现
L DBW [MD 102]
T MW [MD 102]
这两处 [MD 102]指针值为0.1。DBW0.1和MW0.1,根本没有这种格式,难怪CPU报错。
接着往下分析,原程序里开始初始化指针就有问题,如下
L L#1 //初始化循环指针。这里循环指针就是我们要修改的寻址指针
T MD 102
刚开始定义的是用于存储器间接寻址的双字指针,双字指针是一个32bit的结构,从0-2bit, 共三位,按照8进制指示被寻址的位编号,也就是0-7;而从3-18bit,共16位,指示一个从0-65535的数值,这个数值就是被寻址的字节编号。按照这样解释,MD102初始化值为1,按照3-18bit指定byte,0-2bit指定bit来确定最终指令要操作的地址为0000 0000 0000 0000 0000 0000 0000 0001 = 0.1
难怪监视程序,会出现DBW0.1和MW0.1
以上是我个人的分析,不知是否合理,希望大家指点。
我把程序改了下,运行正常,而且可以实现原程序要实现的功能:将DB100中的1-11数据字,传送到MW1-11中,改过程序如下:

L L#8 //初始化循环指针。这里循环指针就是我们要修改的寻址指针
T MD 102
M2: L MD 102
T #COUNTER_D
OPN DB 100
L DBW [MD 102]
T MW [MD 102]
L #COUNTER_D
L L#16 // +2,是因为数据字的偏移基准是字节。
+D
T MD 102 //自加减循环指针,这是动态修改了寻址指针的关键
L L#88 //循环次数=n-1。n=6。这是因为,首次进入循环是无条件的,但已事实上执行了一次操作。

<=D
JC M2
希望大家指点,谢谢!
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54763条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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