西门子(中国)有限公司(SLC)

注册 登录

  签到     订阅   每日登录:+1西币 +1经验值我的支持中心

信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。

技术论坛


跟我一起玩200 smart PLC 关于指针及循环指令的应用续2

作者 主题
至圣

经验值: 34345
发帖数: 3959
精华帖: 88
主题:跟我一起玩200 smart PLC 关于指针及循环指令的应用续2


只看楼主 楼主 2017-05-12 16:28:10

跟我一起玩200 smart PLC

关于指针及循环指令的应用续2

   下班回家,吃过晚饭闲来无事,泡一杯新茶顺便点上一根烟,又开始想我自己还没有明白的事情了。到了我这个年龄段也没有别的“不良”嗜好,儿女都已经长大也用不着再为他(她)的学业而操心了(说实在从来也未曾操过心,都是儿女懂事前我世的修为)。反正,家里是出了名的“抛手掌柜”(从不做家务的那类),偶尔自发性地帮忙做一点家务也只会添乱,不是忘了这,就是做错了那。哎,算了,也懒得去理会这些家务事情(一个懒人的心声)。

   之前,自己在学200指针应用时总不得法,把本已经模糊了西门子数据类型的思路,搞得更加模糊不清、混乱不堪,至今记忆犹新。今晚我想把我所对200(200smart)肤浅的理解关于指针应用,重新回顾一遍,因为理解的程度尚未深刻,会说的颠三倒四,望多多包涵。

   假设,有一组数据需要分别放到一串连续的(确切说应该是有规律编排的)地址存储区中,至于做完这些处理后如何应用暂时还没有功夫对付它。我的理解是由一个“源”数据区地址,需要利用一些指令分别将不同的数据放入不同的地址存储区中。先来举一个数据小、范围小的(容易理解)例子,将常数1~10的数据,由源数据区地址VB100,分别通过指令传送到目标数据区自VB200开始的10个数据存储区(VB200~VB209),这些地址区是用户自定义的,只要不是与其它程序所使用的地址重置的就可以。

1)  常规做法当然是先建立一个指针,符号“&+V存储地址区”。按要求新建一个指针起始地址&VB200。这个是西门子200(200smart)指针编程方式规定的,指针起始地址的引用只能是字节为单位的地址区。建立指针初始地址的目的是为了应用这个指针特性,方便的将地址区做上、下移动,达到指定地址的目的。指针取好了仅仅还只是一个地址,具体是什么数据?是需要根据具体的要求放入数据值的。

2)  处理指针的地址的指令数据寻址范围必须是32位处理能力的指令和地址存储区的,这也是西门子200(200smart)指针应用规定的,无论是你调用字节单位的指针还是其它字(双字)数据类型的数据均需要采用双字指令。

3)  任何事情均具有因果或者是对等的关系式,有一个建指针的指令,肯定会有另一个取指针地址数据的指令与之对等,这个取指针数据的符号“*+V存储地址区”。如*VB200。

注意了,200(200smart)建指针如果使用累加器地址存储,必须是采用AC1开始的编号,(如、累加器AC2、AC3)这个仍然是建指针规定的,我理解的指针3个规定。

那如何将常数1~10分别放到VB100中?我首先想到的是INC_B指令,因为是分别放入的,且这些数据是一个连续的递增关系。就是说至少需要每一个周期有不同的数据在VB100中出现,西门子200(200smart)刚刚有一对指令可以应用,那就是循环指令(for/next)了,2个指令配合起来使用刚好满足要求。

4)  For/next指令实际上理解起来比较容易,其中,indx(INT)管脚是存放实际循环次数的,init(INT)管脚是指定起始循环计数,final(INT)是指定需要循环的次数。循环指令自调用(沿或者中断程序)for指令开始,直到next结束作为一次单循环,再返回到for指令开始第二轮循环。当final指定的循环次数 = indx记录实际循环次数时,自动跳出循环指令,完成整个循环过程,这个过程仅仅需要一个扫描周期时间。

按照上面的要求和说明,试着按顺序编写程序:

假设是在子程序中编辑这些程序,然后到主程序中调用的方法:

将子程序在主程序中调用,保存、编译并下载到cpu进行验证:

当将M0.0 = 1时,程序应该把1~10的数据从VB100分别传送给指针指定好的地址VB200~VB209中:

程序解释:

   当调用循环第一次时,首先建立指针地址区,并将需要运算的数据归零后VB100地址通过INC_B指令加1后等于VB100 = 1,将这个1的数据传送给已经指定好的指针首地址中完成后,指针地址下移一个字节,为下一个循环准备;当程序扫描到NEXT返回,同时循环指令INDX值(VW0 = 1)。自FOR重新第二次循环,这时,VB100将由1通过INC_B指令加1变为2,这个2的数据通过传送指令传送给在第一次循环准备的指针地址VB201中,完成后指针地址仍然再下移一个字节,当第二次扫描到NEXT后返回,同时循环指令INDX值(VW0 = 2),自FOX重新开始第三次循环,、、、、、、,如此循环直到指定循环次数10次。当循环次数等于10次后,指针指向的地址区由VB209重新返回到VB200,为下一次程序循环运行做好了准备。

   指定好地址的数据传送给指定好指针地址存储区,或者指定好指针的地址存储区数据传送给指定好地址的数据是双向的,互为可逆式的转换传送。啊呀,这句话我自己都读了3遍有点饶舌了一点,但多读几遍或许会理解的。前面这句话的含义是自一个不断变化了的数据分别写入到由指针指定的数据存储区地址,和将不同的(连续或者有规律的)地址中的数据分别写入到同一个数据存储区地址是互为逆向的。还是感觉有一些饶舌,算了,水平有限是硬伤,也不难为自己了,自己去掂量吧。

    码字的有点口渴了,喝点茶,别为浪费了同事送的好茶叶,再点根烟吧,继续想自己的事情。



 
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:http://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1394737&b_id=64

至圣

经验值: 34345
发帖数: 3959
精华帖: 88
回复:跟我一起玩200 smart PLC 关于指针及循环指令的应用续2


只看楼主 楼主 1楼 2017-05-12 16:41:26

一直以为自己把指针与循环的程序发过类似的帖子,找了找竟然没有找到,赶紧补上。


 
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
×
扫描打开手机版
您收到0封站内信:
×
×