OPN DB 1
L 0
LAR1 //指针
T MW 0
T MW 2 //记录写入数据个数
T MW 100 //赋初值0
a0: L MW 0 //变化的数据
L MW 100
==I //无变化时转b0
JC b0
FP M 10.0 //有变化时取个脉冲触发
= M 10.1
A M 10.1
L MW 0 //不相等即有变化时将此值
T DBW [AR1,P#0.0] //(第一次是写入DB1.DBW0)
T MW 100 //赋给MW100
A M 10.1
+AR1 P#2.0 //指针加2
L MW 2
L 1
+I
T MW 2
L 20 //只写入20个数据
<I
JC a0
A M 10.1
L 0 //写完20个数据记录个数清零
T MW 2
TAR1 //写完20个数据DBW38后下一个数据回到DBW0
L P#40.0
-D
LAR1
JU a0
b0: NOP 0
回复内容:
对: 撞破烂钟——王者之师 多使用分布,少使用循环,可以多写几个程序块,使用跳转在... 内容的回复!
这道题的难点在于:mw0是动态的(在变量表里面仿真输入),要输入20个数据用循环好像办不到,扫描周期是毫秒单位,用循环CPU要超时报警。(也可能是我方法不对)。今天试了一下不用循环,费了好大力也只能输入一个数据(我想这可能是不用循环的结果)。 有点黔驴技穷了,希望高手们不惜赐教啊!
...............................................................................
感谢各位关注,问题已经解决了,用的是MD指针;另外想用Adr1地址寄存器没有成功。
回复内容:
对: 无人值班 回复内容:对: 阿呆的中国梦 回复内容:对: 撞破烂... 内容的回复!
您好:您说的方法应该是可以的,只是与题目要求有点不同,题目是要求动态的(即随时生产新的数据,随时比较;并不是拿现成的数据做比较);感谢大家的关注,问题已经解决。可以在OB100里先赋初值,在OB1里面写程序,用指针做循环;数据相同(无变化)时跳出循环等待(用nop指令);不相同时赋值,可以用AR1稍麻烦;也可以用双字变量,每次不相同后,循环变量加16#10,再赋值给ar1,只有ar1的地址每次偏移才行。顶楼程序稍改即可... ...