登录
首页 PLC论坛 西门子SIEMENS
回帖 发帖
正文

主题:STL数据依次记录的问题

点击:947 回复:3

各位大神好,问大家个问题
我有个需求,就是要把某个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打开,
附件:
[本地下载]
19-06-26 17:20

引用 温柔的郎 在 2019/6/26 17:20:33 发言【内容省略】

循环指令在一个扫描周期内执行完毕,因此才会出现所有的值都相等的情况,不需要使用循环指令,在每个扫描周期将指针值加2就可以了。
如果您这个功能并不是为了学习的目的,您完全可以使用标准库函数FC90(WSR)。
Good Luck~
19-06-27 10:55
西门子200的见过第一个程序例子。它用递增次数来确定么时候返回。都使用到了指针。
19-07-03 06:28
怎么靠时间设置来执行记录
19-07-31 11:15

工控新闻

更多新闻资讯