当指针“牵手”循环时的瓜葛

已锁定

  • 帖子

    0
  • 精华

    3
  • 被关注

    9

论坛等级:新手

注册时间:2008-07-01

普通 普通 如何晋级?

当指针“牵手”循环时的瓜葛

727

0

2012-04-11 15:19:40

学习循环指令应用中的指针,记录自己犯过的几个错误,不耻“示众”,以助警醒。
以下面的程序为例进行说明
//将VW1000~VW1018十个字单元中的数据,按照从小到大的顺序重新排序。
Network 1
LD SM0.0        1、 //赋初值的条件
LPS
TON T37, 50
A T37
EU              //5秒后对10个字单元赋初值
MOVW 6, VW1000
MOVW 2, VW1002
MOVW 7, VW1004
MOVW 0, VW1006
MOVW 193, VW1008
MOVW 25, VW1010
MOVW 4, VW1012
MOVW 40, VW1014
MOVW 1096, VW1016
MOVW 342, VW1018
LPP
TON T38, 100 ·
Network 2
LD T38         2、//循环的开始条件,10秒后开始对10个字单元排序的循环
MOVD &VB1000, AC1 3、 //指针赋初值
FOR AC0, 1, 9
Network 3
LD SM0.0
MOVD AC1, AC2
+D +2, AC2      4、 //循环内自变量2,AC2的操作
Network 4
LDW> *AC1, *AC2
MOVW *AC1, LW2
MOVW *AC2, *AC1
MOVW LW2, *AC2
Network 5
LD SM0.0
MOVD AC2, AC1   5、 //循环内自变量1,AC1的操作

Network 6
NEXT

1、关于数据数组的赋初值问题
要对一个非空的数组进行排序,首先向数组单元中填入数据,可以用SM0.1,或者数据块赋值。
VW1000 6
VW1002 2
VW1004 7
VW1006 0
VW1008 193
VW1010 25
VW1012 4
VW1014 40
VW1016 1096
VW1018 342
2&3、指针的初始化和循环的开始
在network 2中,指针的初始化和循环的开始,条件都是T38,这里要说的是,在循环中使用的指针,一定在使用之前对指针进行初始化,否则的话,指针就是“野指针”,如果把上面network 2中的
FOR AC0, 1, 9剪出,再在network 2下面加一网络,我们暂称其为network 2-1如下形式:

network 2-1

LD SM0.0
FOR AC0, 1, 9
这样的话,再执行程序,便会在network 2-1出错“非致命错误:间接寻址出错”。
同时还会在network 4中的LDW> *AC1, *AC2 语句处,出现一致命错误:“比较触点间接寻址错误”。

这说明,时序的不同导致程序的结果不同,说明了时序的重要性。

在编写程序的过程中,最好是紧跟循环,并在满足循环的条件后,先操作指针,再进入循环,当然这里指的是要求在循环外部的指针,这样的指针只对指针的初始值执行一次循环体中的命令,还有在循环体中每个循环都要从最初的指针值执行操作指令的情况,那就要把指针的初始化做到循环体中了。

4&5、自变量在循环体中的位置
类似于在C语言for循环的语句块{}中的位置,理论上说,可以在语句块中的任意位置,这取决于算法的需要,上面程序中4处于语句块的开始,因为开始我们不知道AC2的值,但是后面要使用;而5处于结尾,是因为AC1在这个循环中的值的生命已经到期了,需要重新赋值,以便下一个循环使用。
这也是时序通过空间分布呈现的侧面反映。


由于是小鸟,所以表述的也只是作为一名初学者暂时所能理解的东西,有不对的地方还请各位侠客多多指教,同时砖下留情,因为这两天脑袋有点软,可能会扛不住。更期盼侠客们的深层教诲,谢谢。
当指针“牵手”循环时的瓜葛 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200

共有33265条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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