تولید کد PLC حرفه‌ای - سیستم کنترل HVAC

کد SCL - سیستم کنترل HVAC
// ============================================================================
// HVAC CONTROL SYSTEM - SCL CODE
// Project: Default HVAC Project
// Generated: 2026-01-28 14:04:21
// Version: 1.2.0
// PLC Family: Siemens S7-1200/1500
// ============================================================================

// Program Configuration
CONFIGURATION HVAC_System_Config
    RESOURCE Station_1 ON PLC_1
        TASK MainTask(INTERVAL := T#100ms, PRIORITY := 1);
        PROGRAM MainProgram WITH MainTask : HVAC_Main_Control;
    END_RESOURCE
END_CONFIGURATION

// Main Program Block
PROGRAM HVAC_Main_Control
VAR
    // ===== INPUT SIGNALS =====
    // Environmental Sensors
    Saloon_Temp : REAL;          // AI0 - Saloon Temperature (°C)
    Saloon_Temp_Raw : INT;       // Raw ADC value
    Saloon_Humidity : REAL;      // AI1 - Saloon Humidity (%)
    Saloon_Humidity_Raw : INT;   // Raw ADC value
    Outdoor_Temp : REAL;         // AI2 - Outdoor Temperature (°C)
    Outdoor_Humidity : REAL;     // AI3 - Outdoor Humidity (%)
    
    // User Interface & Safety
    Emergency_Stop : BOOL;       // DI0 - Emergency Stop (Normally Closed)
    Start_PB : BOOL;             // DI1 - Start Push Button
    Stop_PB : BOOL;              // DI2 - Stop Push Button
    Auto_Mode : BOOL := TRUE;    // DI3 - Auto/Manual Mode Selector
    Temp_Setpoint : REAL := 24;  // Potentiometer or HMI
    Humidity_Setpoint : REAL := 60;  // Potentiometer or HMI
    
    // Equipment Monitoring
    Fan1_Overload : BOOL;        // DI4 - Feed Fan 1 Overload
    Fan2_Overload : BOOL;        // DI5 - Feed Fan 2 Overload
    Fan3_Overload : BOOL;        // DI6 - Return Fan 1 Overload
    Fan4_Overload : BOOL;        // DI7 - Return Fan 2 Overload
    Pump_Overload : BOOL;        // DI8 - Humidifier Pump Overload
    Heater_Overload : BOOL;      // DI9 - Heating Element Overload
    Filter_Dirty : BOOL;         // DI10 - Air Filter Differential Pressure
    
    // ===== OUTPUT SIGNALS =====
    // Motor Controls
    Fan_Feed_1 : BOOL;           // DQ0 - Feed Fan 1 Contactor
    Fan_Feed_2 : BOOL;           // DQ1 - Feed Fan 2 Contactor
    Fan_Return_1 : BOOL;         // DQ2 - Return Fan 1 Contactor
    Fan_Return_2 : BOOL;         // DQ3 - Return Fan 2 Contactor
    Pump_Motor : BOOL;           // DQ4 - Humidifier Pump Contactor
    Heater_Valve : BOOL;         // DQ5 - Heating Valve Solenoid
    Steam_Valve : BOOL;          // DQ6 - Steam Injection Valve
    
    // Variable Frequency Drives
    VFD_Enable : BOOL;           // DQ7 - VFD Enable Signal
    VFD_Speed : REAL;            // AQ0 - VFD Speed Reference (0.0-100.0%)
    
    // Damper Actuators (0-100%)
    Damper_Fresh : REAL;         // AQ1 - Fresh Air Damper Position
    Damper_Exhaust : REAL;       // AQ2 - Exhaust Air Damper Position
    Damper_Return : REAL;        // AQ3 - Return Air Damper Position
    
    // Status Indicators
    System_Running_Lamp : BOOL;  // DQ8 - System Running Indicator
    Alarm_Lamp : BOOL;           // DQ9 - General Alarm Indicator
    Auto_Lamp : BOOL;            // DQ10 - Auto Mode Indicator
    
    // ===== INTERNAL VARIABLES =====
    // System States
    System_State : (ST_IDLE, ST_STARTING, ST_RUNNING, ST_STOPPING, ST_FAULT);
    Previous_System_State : (ST_IDLE, ST_STARTING, ST_RUNNING, ST_STOPPING, ST_FAULT);
    System_Running : BOOL;
    System_Ready : BOOL;
    
    // Timing & Sequencing
    Start_Timer : TON;
    Stop_Timer : TON;
    Fan_Start_Delay : TON;
    Safety_Timer : TON;
    Watchdog_Timer : TON;
    Cycle_Counter : UDINT;
    
    // Air Calculations
    Exhaust_Percentage : REAL;
    Fresh_Percentage : REAL;
    Cycle_Percentage : REAL;
    Mixed_Temp : REAL;
    Mixed_Humidity : REAL;
    Mixed_Temp_Filtered : REAL;
    Mixed_Humidity_Filtered : REAL;
    
    // PID Control Variables
    Temp_Error : REAL;
    Humidity_Error : REAL;
    PID_Temp : PID;
    PID_Humidity : PID;
    
    // Safety & Alarms
    Alarm_Word : WORD;
    Warning_Word : WORD;
    Emergency_Stop_Latch : BOOL;
    Override_Active : BOOL;
    
    // Data Logging
    Data_Buffer : ARRAY[1..100] OF REAL;
    Buffer_Index : INT;
    Log_Interval : TIME := T#1M;
    Log_Timer : TON;
    
    // Debug & Monitoring
    Diagnostic_Message : STRING[100];
    Last_Error_Code : INT;
    Scan_Time : REAL;
    Scan_Start_Time : TIME;
END_VAR

// ===== INITIALIZATION =====
IF First_Cycle THEN
    // Initialize variables
    System_State := ST_IDLE;
    System_Running := FALSE;
    System_Ready := FALSE;
    
    // Initialize dampers to safe position
    Damper_Fresh := 0.0;
    Damper_Exhaust := 0.0;
    Damper_Return := 100.0;
    
    // Initialize alarms
    Alarm_Word := 0;
    Warning_Word := 0;
    
    // Initialize PID controllers
    PID_Temp(
        Kp := 2.5,
        Ti := T#30S,
        Td := T#5S,
        Manual := FALSE,
        Reset := FALSE
    );
    
    PID_Humidity(
        Kp := 1.8,
        Ti := T#60S,
        Td := T#10S,
        Manual := FALSE,
        Reset := FALSE
    );
    
    Diagnostic_Message := 'System Initialized';
END_IF;

// ===== SCAN TIME MEASUREMENT =====
Scan_Time := TIME_TO_REAL(TIME() - Scan_Start_Time);
Scan_Start_Time := TIME();

// ===== INPUT VALIDATION & SCALING =====
// Validate and scale temperature inputs
Saloon_Temp := ValidateAndScaleTemp(Saloon_Temp_Raw);
Outdoor_Temp := ValidateAndScaleTemp(Outdoor_Temp);
Saloon_Humidity := ValidateAndScaleHumidity(Saloon_Humidity_Raw);
Outdoor_Humidity := ValidateAndScaleHumidity(Outdoor_Humidity);

// ===== MAIN STATE MACHINE =====
Previous_System_State := System_State;
CASE System_State OF
    ST_IDLE:
        // System is stopped, waiting for start command
        System_Running := FALSE;
        System_Ready := CheckSystemReady();
        
        IF System_Ready AND Start_PB AND NOT Emergency_Stop THEN
            System_State := ST_STARTING;
            Start_Timer(IN := TRUE, PT := T#10S);
            Diagnostic_Message := 'System Starting...';
        END_IF;
        
    ST_STARTING:
        // Sequential startup of equipment
        ExecuteStartupSequence();
        
        IF Start_Timer.Q THEN
            IF VerifyStartup() THEN
                System_State := ST_RUNNING;
                Diagnostic_Message := 'System Running Normally';
            ELSE
                System_State := ST_FAULT;
                Diagnostic_Message := 'Startup Verification Failed';
            END_IF;
        END_IF;
        
    ST_RUNNING:
        // Normal operation
        System_Running := TRUE;
        
        IF Emergency_Stop OR Stop_PB THEN
            System_State := ST_STOPPING;
            Stop_Timer(IN := TRUE, PT := T#15S);
            Diagnostic_Message := 'System Stopping...';
        ELSIF CheckFaultConditions() THEN
            System_State := ST_FAULT;
        ELSE
            // Execute main control logic
            ExecuteControlLogic();
            MonitorSystem();
        END_IF;
        
    ST_STOPPING:
        // Sequential shutdown
        ExecuteShutdownSequence();
        
        IF Stop_Timer.Q THEN
            System_State := ST_IDLE;
            Diagnostic_Message := 'System Stopped';
        END_IF;
        
    ST_FAULT:
        // Fault state - requires manual reset
        HandleFaultCondition();
        
        IF Emergency_Stop THEN
            System_State := ST_STOPPING;
        END_IF;
END_CASE;

// ===== CONTROL LOGIC FUNCTIONS =====
IF System_State = ST_RUNNING AND NOT Override_Active THEN
    // Calculate air mixing ratios
    CalculateAirPercentages();
    
    // Position dampers
    ControlDampers();
    
    // Calculate mixed air conditions
    CalculateMixedAir();
    
    // Temperature control
    ControlTemperature();
    
    // Humidity control
    ControlHumidity();
    
    // Fan speed control
    ControlFanSpeed();
    
    // Energy optimization
    OptimizeEnergyUsage();
END_IF;

// ===== OUTPUT UPDATES =====
UpdateOutputs();

// ===== DIAGNOSTICS & MONITORING =====
MonitorSystemHealth();
UpdateDiagnostics();
LogSystemData();

// ===== WATCHDOG HANDLING =====
Watchdog_Timer(IN := TRUE, PT := T#500ms);
IF NOT Watchdog_Timer.Q THEN
    // Reset watchdog
    Watchdog_Timer(IN := FALSE);
END_IF;

// ===== CYCLE COUNTER =====
Cycle_Counter := Cycle_Counter + 1;

END_PROGRAM

// ============================================================================
// SUPPORT FUNCTIONS & FUNCTION BLOCKS
// ============================================================================

// Validate and scale temperature input
FUNCTION ValidateAndScaleTemp : REAL
VAR_INPUT
    RawValue : REAL;
END_VAR
VAR
    ScaledValue : REAL;
END_VAR
BEGIN
    // Scale from raw input (e.g., 4-20mA or 0-10V)
    ScaledValue := (RawValue * 100.0) / 27648.0;  // Assuming 0-27648 for 0-100°C
    
    // Validate range
    IF ScaledValue < 16 OR ScaledValue > 32 THEN
        // Out of range - use last valid value or default
        ValidateAndScaleTemp := 20.0;  // Safe default
        SetAlarm(ALARM_TEMP_SENSOR_FAULT);
    ELSE
        ValidateAndScaleTemp := ScaledValue;
    END_IF;
END_FUNCTION

// Similar functions for humidity, dampers, etc...

// ============================================================================
// ALARM & WARNING DEFINITIONS
// ============================================================================
CONSTANT
    ALARM_EMERGENCY_STOP : WORD := 16#0001;
    ALARM_TEMP_SENSOR_FAULT : WORD := 16#0002;
    ALARM_HUMIDITY_SENSOR_FAULT : WORD := 16#0004;
    ALARM_FAN1_OVERLOAD : WORD := 16#0008;
    ALARM_FAN2_OVERLOAD : WORD := 16#0010;
    ALARM_PUMP_OVERLOAD : WORD := 16#0020;
    ALARM_HEATER_OVERLOAD : WORD := 16#0040;
    ALARM_FILTER_DIRTY : WORD := 16#0080;
    ALARM_COMMUNICATION_FAULT : WORD := 16#0100;
    ALARM_WATCHDOG_TIMEOUT : WORD := 16#0200;
END_CONSTANT

// ============================================================================
// END OF PROGRAM
// ============================================================================
Lines: 319 | Characters: 10024 | Generated: 2026-01-28 14:04:21

راهنمای استفاده و نکات فنی

ویژگی‌های کد تولید شده

  • کنترل PID پیشرفته دما و رطوبت
  • مدیریت هوشمند هوای تازه و برگشتی
  • سیستم ایمنی و توقف اضطراری
  • بهینه‌سازی مصرف انرژی
  • لاگ‌گیری و مانیتورینگ کامل

استانداردهای ایمنی

  • IEC 61131-3 Programming
  • ISO 13849-1 Safety
  • EN 60204-1 Electrical
  • NFPA 70 (NEC) Compliance

ابزارهای مورد نیاز

  • TIA Portal V16 یا بالاتر
  • PLC Siemens S7-1200/1500
  • کابل برنامه‌ریزی
  • مستندات نصب و راه‌اندازی
توجه: قبل از استفاده از کد در محیط عملیاتی، حتماً آن را تست و تأیید نمایید. این کد به عنوان نمونه تولید شده و ممکن است نیاز به تنظیمات خاص داشته باشد.

تاریخچه تغییرات