查阅了网上的说法,使用梯形图编程的话虽然思路简单,但是滞后时间较长的时候无法使用。
用语句表编程,如下:
利用寄存器间接寻址方式,把滞后数据存储到相应的存储单元,并能方便访问这些
数据,自由的存储、读取数据。队列存储及纯滞后信号产生的程序:
FUNCTION fc10 : VOID
TITLE =
采集前三十秒钟数据
//
思路:前一个数据给下一个数据,最后数据舍去
,
采取间接寻址。
VERSION : 0.5
V
AR_INPUT利用寄存器间接寻址方式,把滞后数据存储到相应的存储单元,并能方便访问这些数据,自由的存储、读取数据。队列存储及纯滞后信号产生的程序:
FUNCTION fc10 : VOID TITLE =采集前三十秒钟数据
//思路:前一个数据给下一个数据,最后数据舍去,采取间接寻址。
VERSION : 0.5 VAR_INPUT
MeasuredValue : REAL //测量数据
AreaBottom: INT //数据起始地址
AreaLength : INT //数据长度
DataStore : BLOCK_DB //数据存贮
END_VAR
VAR_TEMP
Number : INT //循环计数器
BufferAR1 : DWORD //用于AR1的当前内容的缓冲区
MiddleValue : REAL //数值中间变量
END_VAR
BEGIN NETWORK TITLE =
TAR1 #BufferAR1; //把地址寄存器->缓冲区
OPN #DataStore; //打开数据块
L P#0.0;
L #AreaBottom;
SLD 3; //转化为指针
+D ;
LAR1 ; //把指针装载到地址寄存器1
//**************************************************************** //数据循环,从最后的数据开始
//**************************************************************** L #AreaLength; //装载数据长度
Next: T #Number; TAR1 ;
L P#4.0; -D ; // 地址递减
LAR1 ;
L DBD [AR1,P#0.0]; //上一个数据
T DBD [AR1,P#4.0]; //下一个数据
L #Number;
LOOP Next;
L #MeasuredValue; //测量数据->第一个数据
T DBD [AR1,P#0.0];
LAR1 #BufferAR1; //把缓冲区内容->地址寄存器
BEU ; //结束 END_FUNCTION
END_FUNCTION
自己之前没用过语句表编程,大神帮解释一下?