441 lines
31 KiB
Markdown
441 lines
31 KiB
Markdown
# 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.
|