各位大侠,我想写一个在DB块循环采数的程序,要求是在一个db块里有100个双整数的数值,一个脉冲触发,将第一个数值传到md100里,再来一个脉冲触发,将第二个数值写到md100里,如此类推,传到第100个以后,又回到第一个数值,一直循环。
现在写了一半,不知道如何写下去
L L#0 初始化计数器
T MD10
opn db100 打开数据块
L P#0.0 数据块的初始地址
lar1
l dbd[ar1,p#0.0]
t md100 写入目标中间变量
-------这个程序我做过,一开始是用循环来做的但是老失败,问题就是在初始化的问题上,所以我直接用中间变量MD310,只要没有用到那么肯定是为0的,以下是程序:
OPN DB 100
A M 309.0 触发的按钮
FP M 309.1
JCN B005
L DBW [MD 310] //MD310是存放指针用的,要保证取一个没有用过的
T MD 100 //取出的数放在的位置
L MD 310
L 3168 //(100-1)*32
<D //将指针的值进行比较是否超过了100个双整数,
JCN B006
L MD 310
INC 32
T MD 310 //地址自加
JU B007
B006: L 0
T MD 310
B005: NOP 0
B007: NOP 0
--------用库啊,库里有双截棍!记得库里有add tab(大概是fc84?)和FIFO(fc95?不是太记得),填表和先进先出指令库,这是把数据当作数组。还有就是可以用sfc20blockmove把数据当作一个块。
自己编的话就用指针,个人觉得存储器指针更灵活一些,指针可加可减,而寄存器指针只能加。脉冲到来,指针偏移两个字
-------有段时间我也特别沉迷于指针编程,结果时间和精力都花在底层上了,对于程序的架构反而构思不清,好比明明有7815不用,非要自己用单个元件做出一个稳压电源才有成功感,结果是捡了芝麻丢了西瓜。
好的编程员应该将主要精力集中到自己要做的事情上来,仔细斟酌方案,不拘泥于具体实现的细节。
写下这段话没有其他意思,完全是自勉
-----FUNCTION_BLOCK FB1
欢迎光临 工控编程吧 (https://www.gkbc8.com/) | Powered by Discuz! X3.4 |