PLC三菱FX1N控制一个水泵一个雾化器一个杀菌灯一个增氧泵。PLC上电后设备之间延迟2分钟依次启动设备都启动完成后以设备指定的操作循环工作水泵每隔1小时启动30分钟;雾化器每隔9小时启动20分钟;杀菌灯每隔6小时启动30分钟;增氧泵每隔4小时启动30分钟。四个设备都可以手动控制启动和停止。按上述要求用GX WORKS2写一个STL程序。
// 定义变量
BOOL WaterPump_ON := FALSE; // 水泵启停标志
BOOL Atomizer_ON := FALSE; // 雾化器启停标志
BOOL Sterilizer_ON := FALSE; // 杀菌灯启停标志
BOOL OxygenPump_ON := FALSE; // 增氧泵启停标志
BOOL WaterPump_Start := FALSE; // 水泵启动标志
BOOL Atomizer_Start := FALSE; // 雾化器启动标志
BOOL Sterilizer_Start := FALSE; // 杀菌灯启动标志
BOOL OxygenPump_Start := FALSE; // 增氧泵启动标志
INT WaterPump_Counter := 0; // 水泵计时器
INT Atomizer_Counter := 0; // 雾化器计时器
INT Sterilizer_Counter := 0; // 杀菌灯计时器
INT OxygenPump_Counter := 0; // 增氧泵计时器
// 延时函数
DELAY_2MIN := T#2m; // 延时2分钟
DELAY_1H := T#1h; // 延时1小时
DELAY_9H := T#9h; // 延时9小时
DELAY_6H := T#6h; // 延时6小时
DELAY_4H := T#4h; // 延时4小时
DELAY_30MIN := T#30m; // 延时30分钟
DELAY_20MIN := T#20m; // 延时20分钟
// 主程序
LD NOT WaterPump_ON AND NOT Atomizer_ON AND NOT Sterilizer_ON AND NOT OxygenPump_ON // 设备未启动
OUT Y0 := TRUE; // 手动控制设备启停
OUT Y1 := TRUE;
OUT Y2 := TRUE;
OUT Y3 := TRUE;
CALL Delay_2min(); // 延时2分钟
OUT Y0 := WaterPump_Start; // 启动设备
OUT Y1 := Atomizer_Start;
OUT Y2 := Sterilizer_Start;
OUT Y3 := OxygenPump_Start;
WaterPump_Counter := 0; // 计时器清零
Atomizer_Counter := 0;
Sterilizer_Counter := 0;
OxygenPump_Counter := 0;
WaterPump_ON := WaterPump_Start; // 标志置位
Atomizer_ON := Atomizer_Start;
Sterilizer_ON := Sterilizer_Start;
OxygenPump_ON := OxygenPump_Start;
ELSE // 设备已启动
LD WaterPump_ON AND NOT Atomizer_ON AND NOT Sterilizer_ON AND NOT OxygenPump_ON // 水泵启动
OUT Y0 := TRUE; // 手动控制设备启停
OUT Y1 := FALSE;
OUT Y2 := FALSE;
OUT Y3 := FALSE;
WaterPump_Counter := WaterPump_Counter + 1; // 计时器加1
LD WaterPump_Counter >= DELAY_30MIN // 水泵运行30分钟后停止
OUT Y0 := FALSE; // 停止设备
WaterPump_Counter := 0; // 计时器清零
WaterPump_ON := FALSE; // 标志清零
Atomizer_Start := TRUE; // 启动下一个设备
END_LD;
END_LD;
LD NOT WaterPump_ON AND Atomizer_ON AND NOT Sterilizer_ON AND NOT OxygenPump_ON // 雾化器启动
OUT Y0 := FALSE;
OUT Y1 := TRUE;
OUT Y2 := FALSE;
OUT Y3 := FALSE;
Atomizer_Counter := Atomizer_Counter + 1;
LD Atomizer_Counter >= DELAY_20MIN // 雾化器运行20分钟后停止
OUT Y1 := FALSE;
Atomizer_Counter := 0;
Atomizer_ON := FALSE;
Sterilizer_Start := TRUE;
END_LD;
END_LD;
LD NOT WaterPump_ON AND NOT Atomizer_ON AND Sterilizer_ON AND NOT OxygenPump_ON // 杀菌灯启动
OUT Y0 := FALSE;
OUT Y1 := FALSE;
OUT Y2 := TRUE;
OUT Y3 := FALSE;
Sterilizer_Counter := Sterilizer_Counter + 1;
LD Sterilizer_Counter >= DELAY_30MIN // 杀菌灯运行30分钟后停止
OUT Y2 := FALSE;
Sterilizer_Counter := 0;
Sterilizer_ON := FALSE;
OxygenPump_Start := TRUE;
END_LD;
END_LD;
LD NOT WaterPump_ON AND NOT Atomizer_ON AND NOT Sterilizer_ON AND OxygenPump_ON // 增氧泵启动
OUT Y0 := FALSE;
OUT Y1 := FALSE;
OUT Y2 := FALSE;
OUT Y3 := TRUE;
OxygenPump_Counter := OxygenPump_Counter + 1;
LD OxygenPump_Counter >= DELAY_30MIN // 增氧泵运行30分钟后停止
OUT Y3 := FALSE;
OxygenPump_Counter := 0;
OxygenPump_ON := FALSE;
WaterPump_Start := TRUE;
END_LD;
END_LD;
LD WaterPump_ON AND Atomizer_ON AND Sterilizer_ON AND OxygenPump_ON // 所有设备都启动
WaterPump_Counter := WaterPump_Counter + 1;
Atomizer_Counter := Atomizer_Counter + 1;
Sterilizer_Counter := Sterilizer_Counter + 1;
OxygenPump_Counter := OxygenPump_Counter + 1;
LD WaterPump_Counter >= DELAY_1H // 水泵每隔1小时启动30分钟
WaterPump_Start := TRUE;
Atomizer_Start := FALSE;
END_LD;
LD Atomizer_Counter >= DELAY_9H // 雾化器每隔9小时启动20分钟
Atomizer_Start := TRUE;
Sterilizer_Start := FALSE;
END_LD;
LD Sterilizer_Counter >= DELAY_6H // 杀菌灯每隔6小时启动30分钟
Sterilizer_Start := TRUE;
OxygenPump_Start := FALSE;
END_LD;
LD OxygenPump_Counter >= DELAY_4H // 增氧泵每隔4小时启动30分钟
OxygenPump_Start := TRUE;
WaterPump_Start := FALSE;
END_LD;
END_LD;
END_LD;
// 手动控制
LD X0 // 手动启动水泵
WaterPump_Start := TRUE;
Atomizer_Start := FALSE;
Sterilizer_Start := FALSE;
OxygenPump_Start := FALSE;
END_LD;
LD X1 // 手动停止水泵
OUT Y0 := FALSE;
WaterPump_ON := FALSE;
END_LD;
LD X2 // 手动启动雾化器
WaterPump_Start := FALSE;
Atomizer_Start := TRUE;
Sterilizer_Start := FALSE;
OxygenPump_Start := FALSE;
END_LD;
LD X3 // 手动停止雾化器
OUT Y1 := FALSE;
Atomizer_ON := FALSE;
END_LD;
LD X4 // 手动启动杀菌灯
WaterPump_Start := FALSE;
Atomizer_Start := FALSE;
Sterilizer_Start := TRUE;
OxygenPump_Start := FALSE;
END_LD;
LD X5 // 手动停止杀菌灯
OUT Y2 := FALSE;
Sterilizer_ON := FALSE;
END_LD;
LD X6 // 手动启动增氧泵
WaterPump_Start := FALSE;
Atomizer_Start := FALSE;
Sterilizer_Start := FALSE;
OxygenPump_Start := TRUE;
END_LD;
LD X7 // 手动停止增氧泵
OUT Y3 := FALSE;
OxygenPump_ON := FALSE;
END_LD;
// 延时函数
Delay_2min()
LD NOT WaterPump_ON AND NOT Atomizer_ON AND NOT Sterilizer_ON AND NOT OxygenPump_ON // 设备未启动
CALL DELAY_2MIN; // 延时2分钟
END_LD;
END_FUNCTION;
``
原文地址: https://www.cveoy.top/t/topic/cjpA 著作权归作者所有。请勿转载和采集!