通过ob35循环中断,周期为10ms,在ob35中编写的程序如下:
Network1: (这段程序是调用fb71,fb71的作用是一个模拟工业现场信号的正弦波信号,用于采集数据的,跟我的问题没有太大的联系,程序就不放出来了)
Network2: A(
L P#2.0
T MD 30
SET
SAVE
CLR
A BR
)
JNB _001
L P#200.0
T MD 40
_001: NOP 0
Network3: L MD 50
L MD 40
<D
= L 20.0
A L 20.0
JNB _002
L MD 50
L MD 30
+D
T MD 50
_002: NOP 0
A L 20.0
NOT
JNB _003
L P#0.0
T MD 50
_003: NOP 0
Network4: OPN DB 2
A(
L DB2.DBD 12
RND
T MD 100
AN OV
SAVE
CLR
A BR
)
JNB _004
OPN DB 1
L MD 100
T DBW [MD 50]
_004: NOP 0
将采集的数据相应保存在DB数据块中的数组中(DB1如下图),想实现的效果是第一个10ms的数据存入DB_VAR1,第二个10ms的数据存入DB_VAR2,以此类推,存满后循环到DB_VAR1继续储存。运行plcsim后监视db1情况如下图,效果是实现了,但有所偏差,在循环到第二圈的时候MD50也会储存有数据,但我只想数据储存在DB_VAR1至DB_VAR100中,希望大佬们能在我的程序上少做改进,以实现我所需效果,在此先多谢了。
图片说明:
最佳答案
L MD 40
<=D //<D 这里改为小于等于
= L 20.0
A L 20.0
JNB _002
L MD 50
L MD 30
+D
T MD 50
_002: NOP 0
A L 20.0
NOT
JNB _003
L P#2.0 // L P#0.0这里改为从2.0开始
T MD 50
提问者对于答案的评价:
感谢大佬,我已经解决了,不过不需要改两个地方,只要将p#0.0改成p#2.0就行了,如果还将<D改成<=D的话会造成指针越界,导致cpu停机。其实以前我就改对过,只有看数据一直保持不变觉得错了,现在一想,不变才是对的,采集的是一个周期为1000ms的正弦波信号,10ms采集一次,正好100组,数据确实不会变化,当我采集的是周期为2000ms,要200组,正好一半,在db1看到的数据才会变化。还是很感谢大佬的,让我突然想明白了。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc285944.html