FUNCTION_BLOCK FB2
TITLE = 'mul9_9'
//
// Block Comment...
//
VERSION: '1.0'
AUTHOR: wxl
NAME: Name
FAMILY: Family
(*
输出9*9乘法表及所有乘法的和
*)
// Block Parameters
VAR_INPUT
// Input Parameters输入参数定义
Start :BOOL;
Stop:BOOL;
Rst :BOOL;
END_VAR
VAR_IN_OUT
// I/O Parameters
END_VAR
VAR_OUTPUT
// Output Parameters输出变量定义
Qresult :INT;
END_VAR
VAR_TEMP
// Temporary Variables
END_VAR
VAR
// Static Variables
i:INT;
j:INT;
k:INT;
Result:INT;
Runstate:BOOL;
ResultStruct:ARRAY[0..99] OF TwoNoMult;
//定义了100个数据,每个数据都是TwoNoMult数据类型,TwoNoMult中包含3个数据Frist,Second
//和Result,调用格式ResultStruct[x].Frist,ResultStruct[x].Second,ResultStruct[x].Result。定义
//见下面说明部分。
END_VAR
// 复位数据
IF Rst=1 THEN
i:=0;
j:=0;
k:=0;
Result:=0;
Qresult:=0;
Runstate:=0;
END_IF;
// 计算数据
IF Start=1 AND Stop=0 AND NOT Runstate THEN
FOR i:=1 TO 9 DO
FOR j:=i TO 9 DO
Result:=i*j;
Qresult:=Result+Qresult;//计算99乘法表说有乘积的和。
ResultStruct[k].Frist:=i;
ResultStruct[k].Second:=j;
ResultStruct[k].Result:=Result;
k:=k+1;
IF j=9 THEN
Runstate:=1;//运行到最后一步,值为标志位,此后循环中将不再进行计算
END_IF;
END_FOR;
END_FOR;
END_IF;
;
END_FUNCTION_BLOCK
说明:
这里TwoNoMult是一个UDT数据类型,定义如下
其中Frist是第一个被乘数;Second是乘数,Result是乘积。
1.在OB1中调用源程序生成的FB2,背景数据块为DB2
2.运行后数块中的数据如下
Start=0,时DB2
Start=1,时DB2