排烟风机代码
排烟风机控制代码示例
以下是一个简单的排烟风机控制系统的代码示例,可以根据不同的需求进行修改和扩展:
PLC 梯形图逻辑 (以西门子S7-1200为例)
// 网络1: 手动/自动模式选择
LD I0.0 // 手动模式按钮
= M0.0 // 手动模式标志
LD I0.1 // 自动模式按钮
= M0.1 // 自动模式标志
// 网络2: 手动控制
LD M0.0 // 手动模式
A I0.2 // 手动启动按钮
S Q0.0 // 启动排烟风机
LD I0.3 // 手动停止按钮
R Q0.0 // 停止排烟风机
// 网络3: 自动控制
LD M0.1 // 自动模式
A I0.4 // 烟雾传感器信号
S Q0.0 // 启动排烟风机
LD M0.1 // 自动模式
AN I0.4 // 无烟雾信号
R Q0.0 // 停止排烟风机
// 网络4: 故障保护
LD I0.5 // 过载保护信号
R Q0.0 // 停止排烟风机
Arduino 控制代码示例
// 定义引脚
const int manualModePin = 2;
const int autoModePin = 3;
const int manualStartPin = 4;
const int manualStopPin = 5;
const int smokeSensorPin = 6;
const int overloadPin = 7;
const int fanRelayPin = 8;
// 变量
bool manualMode = false;
bool autoMode = false;
bool fanRunning = false;
void setup() {
pinMode(manualModePin, INPUT_PULLUP);
pinMode(autoModePin, INPUT_PULLUP);
pinMode(manualStartPin, INPUT_PULLUP);
pinMode(manualStopPin, INPUT_PULLUP);
pinMode(smokeSensorPin, INPUT);
pinMode(overloadPin, INPUT_PULLUP);
pinMode(fanRelayPin, OUTPUT);
digitalWrite(fanRelayPin, LOW); // 初始关闭风机
Serial.begin(9600);
}
void loop() {
// 检查模式选择
manualMode = (digitalRead(manualModePin) == LOW;
autoMode = (digitalRead(autoModePin) == LOW;
// 过载保护 - 最高优先级
if (digitalRead(overloadPin) == LOW) {
fanRunning = false;
digitalWrite(fanRelayPin, LOW);
Serial.println("过载保护激活,风机停止");
return;
}
// 手动模式控制
if (manualMode) {
if (digitalRead(manualStartPin) == LOW) {
fanRunning = true;
digitalWrite(fanRelayPin, HIGH);
Serial.println("手动启动风机");
}
if (digitalRead(manualStopPin) == LOW) {
fanRunning = false;
digitalWrite(fanRelayPin, LOW);
Serial.println("手动停止风机");
}
}
// 自动模式控制
else if (autoMode) {
if (digitalRead(smokeSensorPin) == HIGH) {
fanRunning = true;
digitalWrite(fanRelayPin, HIGH);
Serial.println("检测到烟雾,自动启动风机");
} else {
fanRunning = false;
digitalWrite(fanRelayPin, LOW);
Serial.println("无烟雾,自动停止风机");
}
}
delay(100); // 短暂延迟
}
Python 控制代码示例 (适用于树莓派等)
import RPi.GPIO as GPIO
import time
# 设置GPIO模式
GPIO.setmode(GPIO.BCM)
# 定义引脚
MANUAL_MODE_PIN = 17
AUTO_MODE_PIN = 18
MANUAL_START_PIN = 22
MANUAL_STOP_PIN = 23
SMOKE_SENSOR_PIN = 24
OVERLOAD_PIN = 25
FAN_RELAY_PIN = 4
# 初始化引脚
GPIO.setup(MANUAL_MODE_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(AUTO_MODE_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(MANUAL_START_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(MANUAL_STOP_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(SMOKE_SENSOR_PIN, GPIO.IN)
GPIO.setup(OVERLOAD_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(FAN_RELAY_PIN, GPIO.OUT)
fan_running = False
try:
while True:
# 检查模式
manual_mode = GPIO.input(MANUAL_MODE_PIN) == GPIO.LOW
auto_mode = GPIO.input(AUTO_MODE_PIN) == GPIO.LOW
# 过载保护
if GPIO.input(OVERLOAD_PIN) == GPIO.LOW:
fan_running = False
GPIO.output(FAN_RELAY_PIN, GPIO.LOW)
print("过载保护激活,风机停止")
time.sleep(1)
continue
# 手动模式
if manual_mode:
if GPIO.input(MANUAL_START_PIN) == GPIO.LOW:
fan_running = True
GPIO.output(FAN_RELAY_PIN, GPIO.HIGH)
print("手动启动风机")
if GPIO.input(MANUAL_STOP_PIN) == GPIO.LOW:
fan_running = False
GPIO.output(FAN_RELAY_PIN, GPIO.LOW)
print("手动停止风机")
# 自动模式
elif auto_mode:
if GPIO.input(SMOKE_SENSOR_PIN) == GPIO.HIGH:
if not fan_running:
fan_running = True
GPIO.output(FAN_RELAY_PIN, GPIO.HIGH)
print("检测到烟雾,自动启动风机")
else:
if fan_running:
fan_running = False
GPIO.output(FAN_RELAY_PIN, GPIO.LOW)
print("无烟雾,自动停止风机")
time.sleep(0.1)
except KeyboardInterrupt:
GPIO.cleanup()
print("程序结束")
以上代码提供了不同平台下的排烟风机控制实现,实际应用中需要根据具体硬件和需求进行调整,并考虑以下方面:
- 增加延时启动/停止功能
- 添加状态指示灯
- 实现故障报警和记录
- 考虑与其他消防系统的联动
- 符合当地消防规范和安全标准