diff --git a/gcode_v2.md b/gcode_v2.md index b516780..7b93c35 100644 --- a/gcode_v2.md +++ b/gcode_v2.md @@ -35,6 +35,7 @@ | `P802` | Комментарий к программе | v2 ↓ | | `P810` | UUID программы (идентификатор для матчинга статусов контроллера и сервера) | v2 ↓ | | `P850` | Расчётная длительность программы (только для UI, не исполняется) | v2 ↓ | +| `P900` | Режим эмулятора печи (замена реального датчика на математическую модель) | v2 ↓ | ### Команды-программы (K/M-команды) @@ -428,6 +429,48 @@ P850 Firing and cooling to 300°C will take 1 day, 2 hours, 27 minutes S95270 --- +## P900 — режим эмулятора печи + +```gcode +P900 E1 ; Активировать эмулятор с параметрами по умолчанию +P900 E1 P7000 ; Эмулятор: нагреватель 7000 Вт +P900 E1 P7000 C30000 ; Эмулятор: нагреватель 7000 Вт, тепловая ёмкость 30000 Дж/°C +P900 E1 P7000 C30000 L5.74 ; Эмулятор: все три параметра явно +``` + +**Pretty G-code (human-readable комментарии):** + +```gcode +P900 Emulator E1 power P7000 W capacity C30000 J/C loss L5.74 W/C +``` + +**Параметры:** + +| Параметр | Описание | +|---|---| +| `E1` | **Обязательно.** Тип эмулятора. Единственное допустимое значение — `1`. | +| `P<Вт>` | Максимальная мощность нагревателя в Ваттах (дефолт: 7000). | +| `C<Дж/°C>` | Тепловая ёмкость печи в Дж/°C (дефолт: 30000). | +| `L<Вт/°C>` | Коэффициент теплопотерь в Вт/°C (дефолт: 7000/1220 ≈ 5.74). | + +**Особенности:** + +- При наличии команды `P900 E1` в программе реальный датчик температуры заменяется математической моделью печи на весь период выполнения программы. +- Температура эмулятора начинается с 25°C при каждом старте программы. +- Математическая модель (уравнение теплового баланса, шаг 1 секунда): + ``` + T_new = T_old + dt × (P_heater − L × T_old) / C + ``` + где `P_heater = pwm_percent × P / 100`. +- Параметр `L` описывает теплопотери конкретной печи: при `P900 E1 P7000 L5.74` равновесная температура при полном PWM составит `7000 / 5.74 ≈ 1220°C`. +- Более высокая мощность `P` при том же `L` даёт более высокую равновесную температуру. +- Значения `E` кроме `1` не поддерживаются и приводят к ошибке парсинга. +- Эмулятор деактивируется при сбросе или прерывании программы, после чего контроллер снова использует реальный датчик. +- Эмулируемая температура публикуется в MQTT в топик `/data/kiln/kiln_temp`. +- Флаг активности эмулятора публикуется в `/data/gcode/emulator_active` (0/1). + +--- + ## Пример последовательности **Стандартный G-code:**