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