您现在所在的是:

西门子SIEMENS

回帖:3个,阅读:945 [上一页] [1] [下一页]
1131
温柔的郎
文章数:29
年度积分:53
历史总积分:1131
注册时间:2005/11/18
发站内信
发表于:2019/6/26 17:20:33
#0楼
各位大神好,问大家个问题
我有个需求,就是要把某个MW值逐次记录100次,分别存储到DB1,DBW0开始的100个地址里去,(MW是个不停在变化的值),
比如,第1次存到DBW0,存完后再循环运行,第2次存到DBW2,依次类推。
地1个程序,只能记录进DB1.DBW0里面,其他后续地址不变,
第2个程序,是同时能记录到所有100个地址里面,但若MW12变化,所有100个地址同时变化,
请有知道的大神指点指点,哪里有问题!!谢谢了!!

第一个程序:
用STL编了个程序,运行起来后,在变量表里观察,只有正常传送到DB1,DBW0,其他后续地址一直不动,也就是没传送进去,看了半天没看出问题来,请大神们指点指点,谢谢了!!

说明:数据源存放在MW12里,MW12不停的在变化

第1次从MW12存到DB1.DBW0.

存完后,程序继续循环运行

第2次从MW12存到DB1.DBW2.(MW12数值肯定与第一次不一样,MW12在变化的)

继续,重复。。。。
OB1

     L     0                              //装载0

     T    MW      100               //传送到MW100

     T    MD      4                  //传送到MD4(就是初始化清零)

     OPN   DB     1               //打开DB 1

     L     100                        //循环操作次数,100次

M001:T    MW      100        //把循环100次数数值装载到MW100中,

                                         固定格式

     L    MW      12               //进行传送的数值存储于MW12  

     T    DBW [AR2,P#0.0]     //写入DB块第一个地址    

     L    MD      4                 //装载地址指针

     L  P#2.0                       //地址指针加2(每个相邻字地址相差2)

    +D                               //MD4地址数值加2

     T    MD      4                //相加后的和又存放在MD4里

     L    MW     100              //次数减1,跳回M001重复执行,如果MW100=0,跳出循环操作LOOP指令。

                                      //LOOP指令固定格式

     LOOP  M001


第2个程序,是同时能记录到所有100个地址里面,但若MW12变化,所有100个地址同时变化,

OB1
   L     0                           //装载0
     T     MW    10                    //传送到MW100
     T     MD     4                    //传送到MD4(就是初始化清零)
     OPN   DB     1                    //打开DB 1
     L     100                         //循环操作次数,100次
M002: T     MW    10                    //把循环100次数数值装载到MW10中, 固定格式
     L     MW    12                    //载入MW12  
     T     DBW [AR2,P#0.0]             //写入DB块第一个地址    
// L     MD     4
     +AR2  P#2.0
// L     P#2.0                       //地址指针加2(每个相邻字地址相差2)
// +D                                //MD4地址数值加2
     T     MD     4                    //相加后的和又存放在MD4里
     L     MW    10                    //次数减1,跳回M001重复执行,如果MW100=0,跳出循环操作LOOP指令。LOOP指令固定格式
     LOOP  M002


原工程,CPU S7315-2PN ,STEP7打开,
附件:
[本地下载]
38059
cvlsam 版主
文章数:12482
年度积分:670
历史总积分:38059
注册时间:2001/12/22
发站内信
2018论坛贡献奖
2017论坛贡献奖
2016论坛贡献奖
2015论坛贡献奖
2013论坛贡献奖
2012论坛贡献奖
2011论坛贡献奖
2011国庆活动
2010论坛杰出贡献奖
发表于:2019/6/27 10:55:03
#1楼
以下是引用温柔的郎2019/6/26 17:20:33的发言:
各位大神好,问大家个问题
我有个需求,就是要把某个MW值逐次记录100次,分别存储到DB1,DBW0开始的100个地址里去,(MW是个不停在变化的值),
比如,第1次存到DBW0,存完后再循环运行,第2次存到DBW2,依次类推。
地1个程序,只能记录进DB1.DBW0里面,其他后续地址不变,
第2个程序,是同时能记录到所有100个地址里面,但若MW12变化,所有100个地址同时变化,
请有知道的大神指点指点,哪里有问题!!谢谢了!!

第一个程序:
用STL编了个程序,运行起来后,在变量表里观察,只有正常传送到DB1,DBW0,其他后续地址一直不动,也就是没传送进去,看了半天没看出问题来,请大神们指点指点,谢谢了!!

说明:数据源存放在MW12里,MW12不停的在变化

第1次从MW12存到DB1.DBW0.

存完后,程序继续循环运行

第2次从MW12存到DB1.DBW2.(MW12数值肯定与第一次不一样,MW12在变化的)

继续,重复。。。。
OB1

     L     0                              //装载0

     T    MW      100               //传送到MW100

     T    MD      4                  //传送到MD4(就是初始化清零)

     OPN   DB     1               //打开DB 1

     L     100                        //循环操作次数,100次

M001:T    MW      100        //把循环100次数数值装载到MW100中,

                                         固定格式

     L    MW      12               //进行传送的数值存储于MW12

     T    DBW [AR2,P#0.0]     //写入DB块第一个地址

     L    MD      4                 //装载地址指针

     L  P#2.0                       //地址指针加2(每个相邻字地址相差2)

    +D                               //MD4地址数值加2

     T    MD      4                //相加后的和又存放在MD4里

     L    MW     100              //次数减1,跳回M001重复执行,如果MW100=0,跳出循环操作LOOP指令。

                                      //LOOP指令固定格式

     LOOP  M001


第2个程序,是同时能记录到所有100个地址里面,但若MW12变化,所有100个地址同时变化,

OB1
   L     0                           //装载0
     T     MW    10                    //传送到MW100
     T     MD     4                    //传送到MD4(就是初始化清零)
     OPN   DB     1                    //打开DB 1
     L     100                         //循环操作次数,100次
M002: T     MW    10                    //把循环100次数数值装载到MW10中, 固定格式
     L     MW    12                    //载入MW12
     T     DBW [AR2,P#0.0]             //写入DB块第一个地址
// L     MD     4
     +AR2  P#2.0
// L     P#2.0                       //地址指针加2(每个相邻字地址相差2)
// +D                                //MD4地址数值加2
     T     MD     4                    //相加后的和又存放在MD4里
     L     MW    10                    //次数减1,跳回M001重复执行,如果MW100=0,跳出循环操作LOOP指令。LOOP指令固定格式
     LOOP  M002


原工程,CPU S7315-2PN ,STEP7打开,
附件:
[本地下载]

循环指令在一个扫描周期内执行完毕,因此才会出现所有的值都相等的情况,不需要使用循环指令,在每个扫描周期将指针值加2就可以了。

如果您这个功能并不是为了学习的目的,您完全可以使用标准库函数FC90(WSR)。

Good Luck~
3577
ycwmjw
文章数:540
年度积分:50
历史总积分:3577
注册时间:2011/2/20
发站内信
发表于:2019/7/3 6:28:21
#2楼
西门子200的见过第一个程序例子。它用递增次数来确定么时候返回。都使用到了指针。
此帖发自论坛手机版
3577
ycwmjw
文章数:540
年度积分:50
历史总积分:3577
注册时间:2011/2/20
发站内信
发表于:2019/7/31 11:15:53
#3楼
怎么靠时间设置来执行记录
此帖发自论坛手机版

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2025 Gkong.com, All Rights Reserved

78.0005