找答案的高端用户(找答案钻石及双钻级别的用户)将尽可能从此问题下的所有回
答中,为您推荐最佳答案。届时您可以根据推荐数采纳答案。
如果自提问时间起7天内您仍无法选出最佳答案,您可以选择“无满意答案”关闭此问题。
小程序查看
手机扫码追踪该问题
手机扫码追踪该问题,
觉得实用,立即去分享!
点击复制链接
用scl的数组方法来处理:
1、新建一个db,name键入DATA,type键入ARRAY[1..15,1..38],Initial vlaue为空,下一行的type键入Real
2、在soruce目录下新建一个scl source文件,把下面代码粘贴然后编译,得到两个fc,其中fc500是用于给数组赋初始值,可以放在ob100里面,fc501则是查询数据用的,放在ob1里面
FUNCTION FC500 : VOID
BEGIN
DB3.DATA[1,1]:=1.0;
DB3.DATA[1,2]:=2.0;
DB3.DATA[1,3]:=3.0;
DB3.DATA[1,4]:=4.0;
DB3.DATA[2,1]:=1.0;
DB3.DATA[2,2]:=2.0;
DB3.DATA[2,3]:=3.0;
DB3.DATA[2,4]:=4.0;
END_FUNCTION
FUNCTION FC501 : VOID
VAR_INPUT
P:INT;
Q:BOOL;
END_VAR
VAR_OUTPUT
A:REAL;
B:REAL;
C:REAL;
D:REAL;
E:REAL;
F:REAL;
G:REAL;
H:REAL;
I:REAL;
J:REAL;
K:REAL;
L:REAL;
M:REAL;
N:REAL;
O:REAL;
ERROR:BOOL;
END_VAR
BEGIN
IF Q=TRUE AND P>=1 AND P<=38 THEN
A:=DB3.DATA[P,1];
B:=DB3.DATA[P,2];
C:=DB3.DATA[P,3];
//后面自己加
//如果输出参数用一个数组,这段程序就可以用一个循环写了
ERROR:=FALSE;
ELSE
ERROR:=TRUE;
END_IF;
END_FUNCTION
END_DATA_BLOCK
FUNCTION FC10 : bool
// 给定一个配方和工号,求工艺参数。查表法实现。
VAR_INPUT
//输入参数,配方和工号。
RecipeNo : INT; //配方
EmployeeNo : INT; //工号
END_VAR
VAR_OUTPUT
// 输出工艺参数
Parameter :STRING[15]; // 工艺参数
END_VAR
VAR_TEMP
s:STRING[15];
chr:STRING[1];
i:INT;
END_VAR
//初始化
s:='';
//输入在范围内,返回工艺参数,否则返回字符串''。函数返回值为是否调用成功
IF (RecipeNo>0) AND (RecipeNo<39) AND (EmployeeNo>0) AND (EmployeeNo<16) THEN
//这里直接用循环做。其实用while会更高效,你自己可以尝试一下。
FOR i:=0 TO 14 DO
//如果第i位为1那么就输出'abcdefghijklmno'中第i位。其实可以直接放到db10里面去。
IF (SHR (IN:=db10.Parameter[RecipeNo,EmployeeNo], N:=i ) AND W#16#1)=W#16#1 THEN
chr:=MID (IN:= 'abcdefghijklmno', L:= 1, P:= i);
s:=CONCAT(IN1:= s, IN2:=chr);
FC10:=true;
ELSE
FC10:=false;
END_IF;
END_FOR;
END_IF ;
END_FUNCTION
首次回答问题,获得
双倍西币积分!
立即成为技术知识分享的一员!
找答案微信小程序
提问
搜索
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!