发表于:2011-03-12 19:59:26
楼主
FUNCTION_BLOCK PFManage
(*模块主要功能:用于配方录入,输出.*)
(*Manage为ON时进行配方管理,IN_DO按钮动作时,对PF_SEL对应数组进行录入操作.*)
(*Manage为OFF时将PF_SEL对应的数组内的数据输出给SET_O.*)
(*PF_SEL设定为0,对按下数据录入按钮时,对存储数据清零*)
VAR_INPUT
Manage:BOOL;(*配方管理*)
IN_DO:BOOL;(*数据录入按钮*)
PF_SEL:INT;(*配方选择:1-11*)
PF_SEL2:INT;(*配方选择:1-4*)
set1:FLOAT;(*配方设定参数1*)
set2:FLOAT;(*配方设定参数2*)
set3:FLOAT;(*配方设定参数3*)
set4:FLOAT;(*配方设定参数4*)
set5:FLOAT;(*配方设定参数5*)
set6:FLOAT;(*配方设定参数6*)
set7:FLOAT;(*配方设定参数7*)
a1:PF_array;(*存储数据数组1*)
a2:PF_array;(*存储数据数组2*)
a3:PF_array;(*存储数据数组3*)
a4:PF_array;(*存储数据数组4*)
a5:PF_array;(*存储数据数组5*)
a6:PF_array;(*存储数据数组6*)
a7:PF_array;(*存储数据数组7*)
END_VAR
VAR_OUTPUT
SET1_O:FLOAT;(*配方设定参数1输出*)
SET2_O:FLOAT;(*配方设定参数2输出*)
SET3_O:FLOAT;(*配方设定参数3输出*)
SET4_O:FLOAT;(*配方设定参数4输出*)
SET5_O:FLOAT;(*配方设定参数5输出*)
SET6_O:FLOAT;(*配方设定参数6输出*)
SET7_O:FLOAT;(*配方设定参数7输出*)
RIN_DO:BOOL;(*数据录入按钮复位*)
END_VAR
VAR
i:INT;
ET1:ULONG;
(*a1【】:物料1的配方参数存储数组*)
(*a2【】:物料2的配方参数存储数组*)
(*a3【】:物料3的配方参数存储数组*)
(*a4【】:物料4的配方参数存储数组*)
(*a5【】:物料5的配方参数存储数组*)
(*a6【】:物料6的配方参数存储数组*)
(*a7【】:物料7的配方参数存储数组*)
END_VAR
TP(IN_DO,3000,RIN_DO,ET1);
IF Manage THEN
CASE PF_SEL OF
0:
IF IN_DO THEN
for i=0 TO 10 BY 1 DO
a1【i】=0;
a2【i】=0;
a3【i】=0;
a4【i】=0;
a5【i】=0;
END_FOR;
END_IF;
1:
IF IN_DO THEN
a1【0】=set1;
a2【0】=set2;
a3【0】=set3;
a4【0】=set4;
a5【0】=set5;
END_IF;
2:
IF IN_DO THEN
a1【1】=set1;
a2【1】=set2;
a3【1】=set3;
a4【1】=set4;
a5【1】=set5;
END_IF;
3:
IF IN_DO THEN
a1【2】=set1;
a2【2】=set2;
a3【2】=set3;
a4【2】=set4;
a5【2】=set5;
END_IF;
4:
IF IN_DO THEN
a1【3】=set1;
a2【3】=set2;
a3【3】=set3;
a4【3】=set4;
a5【3】=set5;
END_IF;
5:
IF IN_DO THEN
a1【4】=set1;
a2【4】=set2;
a3【4】=set3;
a4【4】=set4;
a5【4】=set5;
END_IF;
6:
IF IN_DO THEN
a1【5】=set1;
a2【5】=set2;
a3【5】=set3;
a4【5】=set4;
a5【5】=set5;
END_IF;
7:
IF IN_DO THEN
a1【6】=set1;
a2【6】=set2;
a3【6】=set3;
a4【6】=set4;
a5【6】=set5;
END_IF;
8:
IF IN_DO THEN
a1【7】=set1;
a2【7】=set2;
a3【7】=set3;
a4【7】=set4;
a5【7】=set5;
END_IF;
9:
IF IN_DO THEN
a1【8】=set1;
a2【8】=set2;
a3【8】=set3;
a4【8】=set4;
a5【8】=set5;
END_IF;
10:
IF IN_DO THEN
a1【9】=set1;
a2【9】=set2;
a3【9】=set3;
a4【9】=set4;
a5【9】=set5;
END_IF;
11:
IF IN_DO THEN
a1【10】=set1;
a2【10】=set2;
a3【10】=set3;
a4【10】=set4;
a5【10】=set5;
END_IF;
从这里往下增加到28 但是从11开始就下标越界 请高手指导 这个数组是怎么定义的范围