FP_AVERAGE_BUFFER_DEFINE

定义移动平均值和合计值的缓冲区

该FP指令指定一个专用缓冲区来计算所有包含的值的平均值和合计值。d_Start设置起始地址,n_Words设置大小。缓冲区有一个特殊结构,参见下文编程示例,最后一个元素iArrData的数组元素数量与n_words定义的大小对应。使用指令FP_AVERAGE_BUFFER_WRITE以写入缓冲区。

参数

输入

n_Words (WORD, INT, UINT)

指定缓冲区的存储容量

值:1–30000

输出

d_Start (WORD, INT, UINT)

缓冲区的起始数据区域

建议使用用户定义的DUT,参见下文编程示例。

错误标志

sys_bIsOperationErrorHold(变为TRUE并保持为TRUE)
  • 如果为参数指定的值超出允许的范围。

sys_bIsOperationErrorNonHold(对于一次扫描变为TRUE)
  • 如果为参数指定的值超出允许的范围。

示例

DUT

DUT 的各项元素(标识符):

uiBufferSize

缓冲区大小

uiNumberOfStoredData

存储的数据量

diTotalValueOfStoredData

存储的数据总量

rMovingAverage

移动平均

uiWritePointer

写入指针位置

iArrData

包含缓冲区的值。整数值的数量(本例中为10)必须等于使用iNumberOfIntegerValues定义的缓冲区大小。

POU头

所有用于编程此函数的输入和输出变量已在POU头中声明。所有编程语言使用相同的POU头。

	VAR
		bDefine: BOOL:=FALSE;
		bWrite: BOOL:=FALSE;
		iCounter: INT:=0;
	END_VAR
	VAR CONSTANT
		iNumberOfIntegerValues: INT:=10;
			(*number of integers values must be equal to average buffer size*)
	END_VAR
	VAR
		dutAverageBufferInt10: DUT_FP_AVERAGE_BUFFER_INT_10;
			(*Average Buffer for integer numbers of size 10*)
	END_VAR

POU本体

当变量bDefine设置为TRUE时,执行此函数。

LD本体

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 6 ;
        NETWORK_BODY
B(B_F,FP_AVERAGE_BUFFER_DEFINE!,,13,2,28,6,,?DEN?Dn_Words?AENO?Cd_Start);
B(B_VARIN,,iNumberOfIntegerValues,11,4,13,6,);
B(B_VAROUT,,dutAverageBufferInt10,36,4,38,6,);
B(B_CONTACT,,bDefine,4,1,6,3,);
B(B_F,Adr_Of_Var_O!,,28,4,36,6,,?D?C);
L(1,2,4,2);
L(6,2,6,4);
L(6,4,13,4);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 8 ;
        NETWORK_BODY
B(B_CONTACT,,bWrite,2,1,4,3,);
B(B_CONTACT,,bDefine,6,1,8,3,N);
B(B_F,FP_AVERAGE_BUFFER_WRITE!,,14,2,28,6,,?DEN?D@'s'?AENO?Cd_Start);
B(B_VARIN,,sys_iRingCounter_2ms5,12,4,14,6,);
B(B_F,Adr_Of_Var_O!,,28,4,36,6,,?D?C);
B(B_VAROUT,,dutAverageBufferInt10,36,4,38,6,);
B(B_CONTACT,,sys_bPulse1s,11,1,13,3,R);
L(1,2,2,2);
L(4,2,6,2);
L(8,2,11,2);
L(13,2,13,4);
L(13,4,14,4);
L(1,0,1,8);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST本体

IF (bDefine) then
    FP_AVERAGE_BUFFER_DEFINE(n_Words := iNumberOfIntegerValues,
                             d_Start => Adr_Of_Var(dutAverageBufferInt10));
END_IF;

If (bWrite) AND NOT (bDefine) AND DF(sys_bPulse1s) then
    FP_AVERAGE_BUFFER_WRITE(s := sys_iRingCounter_2ms5,
                            d_Start => Adr_Of_Var(dutAverageBufferInt10));
End_if;

最后更新日期: 此页面上的反馈松下热线