lzw 发表于 2023-4-25 13:04:25

冷却塔控制程序

1要求:1,西门子15002,用scl写程序3,控制稳定
内容:冷却塔组的投运选择采用“先投入先退出”的原则,按照1#冷却塔组至8#冷却塔组的顺序,首先投用冷却塔组1,如果制冷机组和板式换热器需要的冷却水温度(制冷机组冷却水出水温度和板换冷却水出水温度)持续规定时间(x1)高于规定值(y1),则增加新的冷却塔组投入运行(新的冷却塔组的编号是新近投入的冷却塔组编号加1),在新的冷却塔组投入后规定时间后,如果需求的冷却水温度(x1)仍然高于规定值(y1),则继续投入新的冷却塔组(被投入的冷却塔组编号为新近投入的冷却塔组编号加1),以此类推;如果需求的冷却水温度持续规定时间(x2)低于某设定值(y2),则停运已运行的1台冷却塔组(选择最先投入的冷却塔组),如果运行冷却塔数量减少1台后,规定时间(y2)后,需求的冷却水温度仍然低于某设定值(Y2),则再停用1台冷却塔组,以此类推;冷却塔的选择可以采用程序选择和人工选择,应具有切换开关,正常采用程序自动选择

chatGPT_小智 发表于 2023-4-25 13:05:57

FUNCTION COOLING_TOWER_CONTROL : VOID
TITLE = 'COOLING TOWER CONTROL'

VAR
    IN_COOLING_WATER_TEMP : REAL;      // 输入冷却水温度
    OUT_COOLING_WATER_TEMP : REAL;       // 输出冷却水温度
    CUR_TIME : INT;                      // 当前时间
    START_TIME : INT := 0;               // 开始时间
    ADD_TIME : INT := 10;                // 增加时间
    STOP_TIME : INT := 20;               // 停止时间
    NEED_COOLING_TOWER_NUM : INT := 1;   // 需要投入运行的冷却塔数量
    RUN_COOLING_TOWER_NUM : INT := 0;    // 运行的冷却塔数量
    START_COOLING_TOWER_NUM : INT := 1;// 开始投用的冷却塔编号
    STOP_COOLING_TOWER_NUM : INT := 1;   // 需要停用的冷却塔编号
    COOLING_TOWER_SELECTED : BOOL := TRUE;// 冷却塔选择是否采用程序自动选择,默认为自动选择

    // 冷却塔运行状态,1表示运行,0表示停止
    COOLING_TOWER_STATUS : ARRAY OF BOOL := ;

BEGIN
    // 如果冷却塔选择采用人工选择,则手动控制冷却塔运行状态
    IF NOT COOLING_TOWER_SELECTED THEN
      // 控制按钮S1-S8控制对应编号的冷却塔状态
      COOLING_TOWER_STATUS := S1;
      COOLING_TOWER_STATUS := S2;
      COOLING_TOWER_STATUS := S3;
      COOLING_TOWER_STATUS := S4;
      COOLING_TOWER_STATUS := S5;
      COOLING_TOWER_STATUS := S6;
      COOLING_TOWER_STATUS := S7;
      COOLING_TOWER_STATUS := S8;
    END_IF;

    // 计算输入冷却水温度和输出冷却水温度的平均值
    OUT_COOLING_WATER_TEMP := 0;
    FOR i:=1 TO 8 DO
      IF COOLING_TOWER_STATUS THEN
            OUT_COOLING_WATER_TEMP := OUT_COOLING_WATER_TEMP + COOLING_TOWER_WATER_TEMP;
      END_IF;
    END_FOR;
    OUT_COOLING_WATER_TEMP := OUT_COOLING_WATER_TEMP / RUN_COOLING_TOWER_NUM;
    IN_COOLING_WATER_TEMP := (OUT_COOLING_WATER_TEMP + PRE_COOLING_WATER_TEMP) / 2;

    // 如果需要投入运行的冷却塔数量大于当前运行的冷却塔数量,则增加新的冷却塔投入运行
    IF NEED_COOLING_TOWER_NUM > RUN_COOLING_TOWER_NUM THEN
      // 增加新的冷却塔投入运行
      FOR i:=START_COOLING_TOWER_NUM TO 8 DO
            IF NOT COOLING_TOWER_STATUS THEN
                COOLING_TOWER_STATUS := TRUE;
                START_COOLING_TOWER_NUM := i + 1;
                EXIT;   // 退出循环
            END_IF;
      END_FOR;

      // 统计当前运行的冷却塔数量
      RUN_COOLING_TOWER_NUM := 0;
      FOR i:=1 TO 8 DO
            IF COOLING_TOWER_STATUS THEN
                RUN_COOLING_TOWER_NUM := RUN_COOLING_TOWER_NUM + 1;
            END_IF;
      END_FOR;

      // 如果需要投入运行的冷却塔数量仍然大于当前运行的冷却塔数量,则递归调用函数自动增加新的冷却塔投入运行
      IF NEED_COOLING_TOWER_NUM > RUN_COOLING_TOWER_NUM THEN
            CALL COOLING_TOWER_CONTROL;
      END_IF;

      // 更新开始时间
      START_TIME := CUR_TIME;
    END_IF;

    // 如果需要停止运行的冷却塔数量大于0,且当前运行的冷却塔数量大于1,则停止最先投入运行的冷却塔
    IF STOP_COOLING_TOWER_NUM > 0 AND RUN_COOLING_TOWER_NUM > 1 THEN
      COOLING_TOWER_STATUS := FALSE;
      RUN_COOLING_TOWER_NUM := RUN_COOLING_TOWER_NUM - 1;
      // 更新停止时间和需要停用的冷却塔编号
      STOP_TIME := CUR_TIME;
      STOP_COOLING_TOWER_NUM := STOP_COOLING_TOWER_NUM + 1;
    END_IF;

    // 如果需求的冷却水温度持续规定时间高于规定值,且当前运行的冷却塔数量小于8,则需要增加新的冷却塔投入运行
    IF CUR_TIME - START_TIME >= ADD_TIME AND IN_COOLING_WATER_TEMP > Y1 AND RUN_COOLING_TOWER_NUM < 8 THEN
      NEED_COOLING_TOWER_NUM := RUN_COOLING_TOWER_NUM + 1;
      CALL COOLING_TOWER_CONTROL;// 递归调用函数自动增加新的冷却塔投入运行
    END_IF;

    // 如果需求的冷却水温度持续规定时间低于设定值,且当前运行的冷却塔数量大于1,则需要停止最先投入运行的冷却塔
    IF CUR_TIME - STOP_TIME >= STOP_TIME AND IN_COOLING_WATER_TEMP < Y2 AND RUN_COOLING_TOWER_NUM > 1 THEN
      STOP_COOLING_TOWER_NUM := 1;
      CALL COOLING_TOWER_CONTROL;// 递归调用函数自动停止最先投入运行的冷却塔
    END_IF;

    // 更新上一次输出的冷却水温度
    PRE_COOLING_WATER_TEMP := OUT_COOLING_WATER_TEMP;

END_FUNCTION

说明:

1. 冷却塔的控制采用函数方式实现,输入参数包括当前的冷却水温度,已投运的冷却塔数量,已停止运行的冷却塔数量等;输出参数包括需要投入运行的冷却塔数量,需要停止运行的冷却塔数量等。

2. 控制程序中使用了循环和条件分支结构,通过遍历数组和判断变量值来实现对冷却塔的控制。

3. 冷却塔的选择可以采用程序选择和人工选择,在控制程序中增加了冷却塔选择的切换开关。

4. 根据要求,如果需要投入运行的冷却塔数量大于当前运行的冷却塔数量,程序会递归调用自身函数以增加新的冷却塔投入运行,直到满足要求为止;同样地,如果需要停止运行的冷却塔数量大于0且当前运行的冷却塔数量大于1,则程序会递归调用自身函数以停止最先投入运行的冷却塔,直到满足要求为止。
页: [1]
查看完整版本: 冷却塔控制程序