发布于 2011-01-10 20:25:24
2楼
====下面的程序可以用在当系统定时器不够的情况=====
=================通用定时器模块======================
//有好几百个点需要采集,而且每个点需要做上升、下降延时。
//用的是CPU315-2DP,书上说该CPU定时器最多128个?那远远不够用啊,
//于是我用SFB4/SFB5代替定时器,但这两个块又占用DB,据书上又说
//该型号CPU的最大DB块也是128?算下来还是不够用啊,怎么办,急求高手指条路。
DATA_BLOCK DB210 FB210
//
// Block Comment...
//
BEGIN
END_DATA_BLOCK
FUNCTION_BLOCK FB210
VAR_TEMP
i:INT;
END_VAR
VAR
ON_time:INT:=50;//常量,开延时的扫描周期
OFF_time:INT:=50;//常量,关延时的扫描周期
IN_BOOL:ARRAY[0..199]OF BOOL;//输入变量
OUT_BOOL:ARRAY[0..199]OF BOOL;//延时输出变量
P:ARRAY[0..199]OF BOOL;//上升沿
N:ARRAY[0..199]OF BOOL;//下降沿
JA:ARRAY[0..199]OF INT;//开计数用
JB:ARRAY[0..199]OF INT;//关计数用
END_VAR
FOR i:= 0 TO 199 BY 1 DO
IF IN_BOOL[i]=true THEN
JA[i]:=JA[i]+1;
IF JA[i]>ON_time THEN
OUT_BOOL[i]:=true;
END_IF;
IF JA[i]>ON_time+2 THEN
JA[i]:=JA[i]+1;
END_IF;
ELSE;
JB[i]:=JB[i]+1;
IF JB[i]>OFF_time THEN
OUT_BOOL[i]:=False;
END_IF;
IF JB[i]>OFF_time+2 THEN
JB[i]:=JB[i]+1;
END_IF;
END_IF;
IF IN_BOOL[i] AND NOT P[i] THEN
JA[i]:=0;
JB[i]:=0;
END_IF;
P[i]:=IN_BOOL[i];
IF NOT IN_BOOL[i] AND N[i] THEN
JA[i]:=0;
JB[i]:=0;
END_IF;
N[i]:=IN_BOOL[i];
;
END_FOR;
END_FUNCTION_BLOCK
让学习成为一种习惯