一起创业网-为互联网创业者服务

流量累加程序怎么写

流量累加程序的编写方法取决于所使用的PLC型号和编程语言。以下是一个基于西门子S7-200SMART PLC的流量累加程序的示例,使用梯形图(LAD)编写:

创建FB块

在程序块目录下单击添加新块,弹出添加新块对话框,选中FB函数块,在名称栏填上需要命名的名字,如"Totalizer",选择编程需要用的编程语言(如SCL),然后单击确认。

定义变量

在新建功能块中,建立临时变量,如`flow_VAL`(原始流量值)、`initial`(初始化标志)、`relay`(继电器标志)等。

程序编写

数字滤波部分

```LAD

IF relay = 1 THEN

flow_VAL_1 := flow_VAL / 36000; // 将M3/H转换为M3/S

END_IF

```

初始流量采集

```LAD

IF initial = 1 AND relay = 1 THEN

FOR i := 1 TO Filter_Length BY 1 DO

FLOW_DATA[i] := flow_VAL_1;

END_FOR

END_IF

```

累加运算

```LAD

IF initial = 0 AND relay = 1 THEN

accum := accum + flow_VAL_1; // 累加流量值

initial := 1; // 标记已初始化

END_IF

```

调用FB块

在FC2(FLOWACCUM)中调用该FB块,并在OB30中断块中调用该FB块,设置中断时间为100ms。

输出结果

可以通过定义一个输出变量来显示累计流量值。

```LAD

// 定义FB块

FB Totalizer

VAR

flow_VAL: REAL; // 原始流量值

initial: BOOL; // 初始化标志

relay: BOOL; // 继电器标志

accum: REAL; // 累计流量值

Filter_Length: INT; // 滤波长度

FLOW_DATA: ARRAY[1..100]; // 流量数据数组

END_VAR

// 数字滤波部分

IF relay = 1 THEN

flow_VAL_1 := flow_VAL / 36000; // 将M3/H转换为M3/S

END_IF

// 初始流量采集

IF initial = 1 AND relay = 1 THEN

FOR i := 1 TO Filter_Length BY 1 DO

FLOW_DATA[i] := flow_VAL_1;

END_FOR

END_IF

// 累加运算

IF initial = 0 AND relay = 1 THEN

accum := accum + flow_VAL_1; // 累加流量值

initial := 1; // 标记已初始化

END_IF

// 输出累计流量值

OUTPUT accum

END_FB

// 在FC2中调用FB块

FC2 FLOWACCUM

VAR

total_flow: REAL; // 累计流量值

END_VAR

total_flow := Totalizer.accum;

OUTPUT total_flow

END_FC

// 在OB30中断块中调用FC2

OB30

CALL FC2

END_OB

```

请注意,这只是一个示例代码,实际应用中可能需要根据具体的流量计的信号输出和需求进行调整。此外,如果使用其他PLC型号或编程语言,编写方法可能会有所不同。