Files
Tempering-Machine-Control-S…/docs/03-recipe-management.md

31 KiB

Recipe Management and Control Logic Specification

Overview

The recipe management system controls the chocolate tempering process through a sophisticated three-phase state machine. This document details the recipe structure, phase transitions, temperature control logic, and timing mechanisms.

Recipe Data Structure

Recipe Definition

Recipe Entity:
┌─────────────────────────────────────────────────────────────┐
│                        Recipe                               │
├─────────────────────────────────────────────────────────────┤
│ + ID: int                                                   │
│ + Name: string                                              │
│ + HeatingGoal: float (°C)                                   │
│ + CoolingGoal: float (°C)                                   │
│ + PouringGoal: float (°C)                                   │
│ + TankTemp: float (°C)                                      │
│ + FountainTemp: float (°C)                                  │
│ + Mixer: boolean                                            │
│ + Fountain: boolean                                          │
│ + MoldHeater: boolean                                        │
│ + Vibration: boolean                                         │
│ + VibHeater: boolean                                         │
│ + Pedal: boolean (true=manual, false=auto)                  │
│ + PedalOnTime: int (seconds)                                │
│ + PedalOffTime: int (seconds)                               │
└─────────────────────────────────────────────────────────────┘

Temperature Validation Rules

Temperature Constraints:
┌─────────────────────────────────────────────────────────────┐
│ Heating Goal:   40°C ≤ HeatingGoal ≤ 60°C                  │
│ Cooling Goal:   20°C ≤ CoolingGoal ≤ 40°C                  │
│ Pouring Goal:   CoolingGoal ≤ PouringGoal ≤ HeatingGoal    │
│                                                             │
│ Logical Constraint: CoolingGoal < HeatingGoal              │
│ Safety Constraint: All goals within machine limits         │
└─────────────────────────────────────────────────────────────┘

Recipe State Machine

Phase Overview

Recipe Execution Flow:
┌─────────────┐    ┌─────────────┐    ┌─────────────┐    ┌─────────────┐
│ Pre-heating │───▶│   Heating   │───▶│   Cooling   │───▶│   Pouring   │
│   Phase     │    │    Phase    │    │    Phase    │    │    Phase    │
└─────────────┘    └─────────────┘    └─────────────┘    └─────────────┘
       │                  │                  │                  │
       ▼                  ▼                  ▼                  ▼
┌─────────────┐    ┌─────────────┐    ┌─────────────┐    ┌─────────────┐
│ Warm up     │    │ Reach target│    │ Cool to     │    │ Maintain    │
│ hardware to │    │ heating     │    │ cooling     │    │ pouring     │
│ operational │    │ temperature │    │ temperature │    │ temperature │
│ temperature │    │ with delay  │    │ with delay  │    │ for process │
└─────────────┘    └─────────────┘    └─────────────┘    └─────────────┘

State Definitions

State Value Name Description
-1 Off/Inactive Phase not started or completed
1 Active Phase is currently running
10 Paused Phase is temporarily suspended

Phase Transition Conditions

State Transition Matrix:

                    ┌─────────────────────────────────────┐
                    │           CONDITIONS                │
                    ├─────────────────────────────────────┤
Pre-heating ───────▶│ Tank >= TankMaxHeat AND             │───────▶ Heating
                    │ Pump >= PumpMaxHeat                 │
                    └─────────────────────────────────────┘

                    ┌─────────────────────────────────────┐
                    │           CONDITIONS                │
                    ├─────────────────────────────────────┤
Heating ───────────▶│ Fountain >= HeatingGoal AND        │───────▶ Cooling
                    │ HeatingDelay timer expires          │
                    └─────────────────────────────────────┘

                    ┌─────────────────────────────────────┐
                    │           CONDITIONS                │
                    ├─────────────────────────────────────┤
Cooling ───────────▶│ Fountain <= CoolingGoal AND        │───────▶ Pouring
                    │ CoolingDelay timer expires          │
                    └─────────────────────────────────────┘

                    ┌─────────────────────────────────────┐
                    │           CONDITIONS                │
                    ├─────────────────────────────────────┤
Pouring ───────────▶│ Fountain = PouringGoal AND         │───────▶ Complete
                    │ PouringDelay timer expires          │
                    └─────────────────────────────────────┘

Temperature Control System

Temperature Zones

Temperature Zone Layout:
┌─────────────────────────────────────────────────────────────┐
│                    TEMPERING SYSTEM                        │
│                                                             │
│  ┌─────────────────────────────────────────────────────┐   │
│  │                 MIXING TANK                         │   │
│  │  ┌───────────┐                    ┌───────────┐     │   │
│  │  │Tank Bottom│                    │Tank Wall  │     │   │
│  │  │  Heater   │                    │  Heater   │     │   │
│  │  │(Zone 1)   │                    │(Zone 2)   │     │   │
│  │  └───────────┘                    └───────────┘     │   │
│  └─────────────┬───────────────────────────────────────┘   │
│                │                                           │
│  ┌─────────────▼───────────────────────────────────────┐   │
│  │                 PUMP SYSTEM                         │   │
│  │                ┌───────────┐                        │   │
│  │                │   Pump    │                        │   │
│  │                │  Heater   │                        │   │
│  │                │(Zone 3)   │                        │   │
│  │                └───────────┘                        │   │
│  └─────────────┬───────────────────────────────────────┘   │
│                │                                           │
│  ┌─────────────▼───────────────────────────────────────┐   │
│  │               FOUNTAIN SYSTEM                       │   │
│  │                ┌───────────┐                        │   │
│  │                │ Fountain  │                        │   │
│  │                │  Heater   │                        │   │
│  │                │(Zone 4)   │                        │   │
│  │                └───────────┘                        │   │
│  └─────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────┘

Temperature Setpoint Calculation

Phase-Specific Setpoints:

Pre-heating Phase:
┌─────────────────────────────────────────────────────────────┐
│ Zone 1 (Tank Bottom): Machine.TankMaxHeat                  │
│ Zone 2 (Tank Wall):   Machine.TankMaxHeat                  │
│ Zone 3 (Pump):        Machine.PumpMaxHeat                  │
│ Zone 4 (Fountain):    -10000 (Disabled)                   │
└─────────────────────────────────────────────────────────────┘

Heating Phase:
┌─────────────────────────────────────────────────────────────┐
│ Zone 1 (Tank Bottom): Machine.TankMaxHeat                  │
│ Zone 2 (Tank Wall):   Machine.TankMaxHeat                  │
│ Zone 3 (Pump):        Machine.PumpMaxHeat                  │
│ Zone 4 (Fountain):    Recipe.HeatingGoal                   │
└─────────────────────────────────────────────────────────────┘

Cooling Phase:
┌─────────────────────────────────────────────────────────────┐
│ Zone 1 (Tank Bottom): -10000 (Disabled)                   │
│ Zone 2 (Tank Wall):   -10000 (Disabled)                   │
│ Zone 3 (Pump):        Machine.PumpMinHeat                  │
│ Zone 4 (Fountain):    Recipe.CoolingGoal                   │
└─────────────────────────────────────────────────────────────┘

Pouring Phase:
┌─────────────────────────────────────────────────────────────┐
│ Zone 1 (Tank Bottom): Recipe.PouringGoal + PreHeatingTemp  │
│ Zone 2 (Tank Wall):   Recipe.PouringGoal + PreHeatingTemp  │
│ Zone 3 (Pump):        -10000 (Disabled)                   │
│ Zone 4 (Fountain):    Recipe.PouringGoal                   │
└─────────────────────────────────────────────────────────────┘

Error Tolerance Zones

Temperature Error Detection:

Heating Phase:
┌─────────────────────────────────────────────────────────────┐
│ Error Condition: Temperature < (Goal - ErrorLimit)         │
│ Warning Zone:    Goal - WarningLimit to Goal - ErrorLimit  │
│ OK Zone:         Temperature >= Goal - ErrorLimit          │
└─────────────────────────────────────────────────────────────┘

Cooling Phase:
┌─────────────────────────────────────────────────────────────┐
│ Error Condition: Temperature > (Goal + ErrorLimit)         │
│ Warning Zone:    Goal + ErrorLimit to Goal + WarningLimit  │
│ OK Zone:         Temperature <= Goal + ErrorLimit          │
└─────────────────────────────────────────────────────────────┘

Pouring Phase:
┌─────────────────────────────────────────────────────────────┐
│ Error Condition: |Temperature - Goal| > ErrorLimit         │
│ Warning Zone:    ErrorLimit < |Temp - Goal| < WarningLimit │
│ OK Zone:         |Temperature - Goal| <= ErrorLimit        │
└─────────────────────────────────────────────────────────────┘

Timer Management System

Timer Types and Purposes

Timer Hierarchy:
┌─────────────────────────────────────────────────────────────┐
│                    RECIPE TIMERS                           │
│                                                             │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────────────┐ │
│  │   Heating   │  │   Cooling   │  │      Pouring        │ │
│  │    Timer    │  │    Timer    │  │       Timer         │ │
│  │             │  │             │  │                     │ │
│  │ Counts down │  │ Counts down │  │   Counts down       │ │
│  │ heating     │  │ cooling     │  │   pouring delay     │ │
│  │ delay after │  │ delay after │  │   after reaching    │ │
│  │ reaching    │  │ reaching    │  │   pouring goal      │ │
│  │ goal temp   │  │ goal temp   │  │                     │ │
│  └─────────────┘  └─────────────┘  └─────────────────────┘ │
│                                                             │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────────────┐ │
│  │   Mixer     │  │  Fountain   │  │       Pedal         │ │
│  │   Timer     │  │    Timer    │  │      Timers         │ │
│  │             │  │             │  │                     │ │
│  │ Delays      │  │ Delays      │  │ ┌─────────────────┐ │ │
│  │ mixer       │  │ fountain    │  │ │   PedalOn       │ │ │
│  │ startup     │  │ startup     │  │ │   Timer         │ │ │
│  │ until temp  │  │ until temp  │  │ └─────────────────┘ │ │
│  │ reached     │  │ reached     │  │ ┌─────────────────┐ │ │
│  │             │  │             │  │ │   PedalOff      │ │ │
│  │             │  │             │  │ │   Timer         │ │ │
│  │             │  │             │  │ └─────────────────┘ │ │
│  └─────────────┘  └─────────────┘  └─────────────────────┘ │
└─────────────────────────────────────────────────────────────┘

Timer Configuration

Timer Name Default Duration Configuration Source Purpose
HeatingTimer Machine.HeatingDelay Machine.csv Delay after reaching heating goal
CoolingTimer Machine.CoolingDelay Machine.csv Delay after reaching cooling goal
PouringTimer Machine.PouringDelay Machine.csv Delay after reaching pouring goal
MixerTimer Machine.MixerDelay Machine.csv Delay before starting mixer
FountainTimer Machine.PumpDelay Machine.csv Delay before starting fountain
PedalOnTimer Recipe.PedalOnTime Recipe.csv Auto mode on duration
PedalOffTimer Recipe.PedalOffTime Recipe.csv Auto mode off duration

Timer State Machine

Timer Lifecycle:
┌─────────────┐    ┌─────────────┐    ┌─────────────┐    ┌─────────────┐
│   Created   │───▶│   Started   │───▶│  Running    │───▶│  Expired    │
│             │    │             │    │             │    │             │
└─────────────┘    └─────────────┘    └─────────────┘    └─────────────┘
       │                  │                  │                  │
       │                  │                  ▼                  │
       │                  │           ┌─────────────┐           │
       │                  │           │   Paused    │           │
       │                  │           │             │           │
       │                  │           └─────────────┘           │
       │                  │                  │                  │
       │                  └──────────────────┘                  │
       │                                                        │
       └────────────────────────────────────────────────────────┘
                               Reset/Cleanup

Motor Coordination Logic

Motor Dependencies

Motor Coordination Matrix:
                      Mixer   Fountain   Vibrator   Compressor
Recipe Start          Yes     Yes        Optional   Auto
Pre-heating           Yes     Yes        No         Auto
Heating Phase         Yes     Yes        Optional   Auto
Cooling Phase         Yes     Yes        Optional   Yes
Pouring Phase         Yes     Yes        Optional   Auto
Error Condition       No      No         No         Auto

Motor Startup Sequence:
┌─────────────────────────────────────────────────────────────┐
│ 1. Check temperature prerequisites                         │
│ 2. Check error conditions                                  │
│ 3. Start mixer (if temperature OK)                         │
│ 4. Delay based on MixerDelay                              │
│ 5. Start fountain (if pump temperature OK)                 │
│ 6. Delay based on PumpDelay                               │
│ 7. Enable pedal control                                    │
└─────────────────────────────────────────────────────────────┘

Motor Safety Logic

Safety Interlocks:
┌─────────────────────────────────────────────────────────────┐
│                    SAFETY CONDITIONS                       │
│                                                             │
│  ┌─────────────┐    ┌─────────────┐    ┌─────────────────┐ │
│  │ Temperature │    │    Error    │    │    Manual       │ │
│  │   Limits    │    │  Conditions │    │   Override      │ │
│  │             │    │             │    │                 │ │
│  │ • Tank too  │    │ • Grid      │    │ • Emergency     │ │
│  │   cold      │    │   errors    │    │   stop          │ │
│  │ • Pump too  │    │ • Comm      │    │ • Maintenance   │ │
│  │   cold      │    │   timeout   │    │   mode          │ │
│  │ • Over temp │    │ • Motor     │    │                 │ │
│  │   protection│    │   overload  │    │                 │ │
│  └─────────────┘    └─────────────┘    └─────────────────┘ │
│         │                  │                    │          │
│         └──────────────────┼────────────────────┘          │
│                            ▼                               │
│                  ┌─────────────────┐                      │
│                  │ Motor Control   │                      │
│                  │   Decision      │                      │
│                  └─────────────────┘                      │
└─────────────────────────────────────────────────────────────┘

Pedal Control Modes

Manual Pedal Mode

Manual Mode Operation:
┌─────────────────────────────────────────────────────────────┐
│ User Input ──▶ Pedal State ──▶ Fountain Motor Control      │
│                                                             │
│ Pedal Pressed:                                              │
│ ┌─────────────┐    ┌─────────────┐    ┌─────────────────┐   │
│ │   Digital   │───▶│   Input     │───▶│    Fountain     │   │
│ │   Input     │    │ Processing  │    │    Motor ON     │   │
│ │  Reading    │    │             │    │                 │   │
│ └─────────────┘    └─────────────┘    └─────────────────┘   │
│                                                             │
│ Pedal Released:                                             │
│ ┌─────────────┐    ┌─────────────┐    ┌─────────────────┐   │
│ │   Digital   │───▶│   Input     │───▶│    Fountain     │   │
│ │   Input     │    │ Processing  │    │    Motor OFF    │   │
│ │  Reading    │    │             │    │                 │   │
│ └─────────────┘    └─────────────┘    └─────────────────┘   │
└─────────────────────────────────────────────────────────────┘

Automatic Pedal Mode

Auto Mode Timing Cycle:
┌─────────────────────────────────────────────────────────────┐
│                    TIME SEQUENCE                           │
│                                                             │
│ ┌─────────────┐    ┌─────────────┐    ┌─────────────────┐   │
│ │    ON       │───▶│    OFF      │───▶│      ON         │   │
│ │   Period    │    │   Period    │    │    Period       │   │
│ │             │    │             │    │                 │   │
│ │ Fountain    │    │ Fountain    │    │   Fountain      │   │
│ │ Motor ON    │    │ Motor OFF   │    │   Motor ON      │   │
│ │             │    │             │    │                 │   │
│ │ Duration:   │    │ Duration:   │    │   Duration:     │   │
│ │PedalOnTime  │    │PedalOffTime │    │  PedalOnTime    │   │
│ └─────────────┘    └─────────────┘    └─────────────────┘   │
│                                                             │
│ Timer Countdown Display:                                    │
│ "Pedal ON: 15"  or  "Pedal OFF: 8"                        │
└─────────────────────────────────────────────────────────────┘

Error Handling in Recipe Execution

Error Classification

Error Level Action Recipe Impact
Warning Display message Continue execution
Minor Error Pause recipe Resume when cleared
Critical Error Stop recipe Manual restart required
Safety Error Emergency stop System reset required

Recipe Pause/Resume Logic

Pause/Resume State Machine:
┌─────────────┐    ┌─────────────┐    ┌─────────────────────┐
│   Running   │───▶│   Paused    │───▶│      Resumed        │
│   (State=1) │    │ (State=10)  │    │    (State=1)        │
└─────────────┘    └─────────────┘    └─────────────────────┘
       │                  │                      │
       │                  ▼                      │
       │           ┌─────────────┐               │
       │           │   Timers    │               │
       │           │  Suspended  │               │
       │           └─────────────┘               │
       │                                         │
       └─────────────────────────────────────────┘
                    Continue/Stop

Temperature Warning System

Temperature Warning Flow:
┌─────────────────────────────────────────────────────────────┐
│ Temperature Reading ──▶ Check Against Limits               │
│                                                             │
│ ┌─────────────┐    ┌─────────────┐    ┌─────────────────┐   │
│ │  Within     │    │  Warning    │    │     Error       │   │
│ │  Limits     │    │    Zone     │    │     Zone        │   │
│ │             │    │             │    │                 │   │
│ │ Continue    │    │ Show        │    │ Pause Recipe    │   │
│ │ Operation   │    │ Warning     │    │ Show Error      │   │
│ │             │    │ Continue    │    │ Wait for User   │   │
│ └─────────────┘    └─────────────┘    └─────────────────┘   │
│                                              │              │
│                                              ▼              │
│                                    ┌─────────────────┐     │
│                                    │ User Decision:  │     │
│                                    │ • Accept Risk   │     │
│                                    │ • Stop Recipe   │     │
│                                    │ • Wait & Retry  │     │
│                                    └─────────────────┘     │
└─────────────────────────────────────────────────────────────┘

This recipe management specification provides complete details for implementing a robust chocolate tempering control system with proper state management, safety features, and error handling.