ABV у сценаріях
У безперервній перегонці міцність — не звіт, а керуюча величина. Апарат сам по собі не тримає сталої міцності: варто подати більше браги, ніж колона встигає розділяти, — і ABV падає; варто пригальмувати подачу — росте. Тобто ABV показує баланс між подачею сировини й тепловою потужністю, і саме за нею автоматика цей баланс і зводить.
Ця стаття — про те, як це реалізовано в сценаріях oCBot. Про фізику розрахунку — Розрахунок ABV за температурою пари, про сам вимірювач — Скрипт «Розрахунок ABV».
Контур регулювання в ББК#
У сценарії ББК міцність працює на стадії активної перегонки (slt_distillation). Логіка виконується не щотакту, а раз на період коригування (параметр «період коригування насоса», секунди) — колона інерційна, частіші правки лише розгойдують процес.
flowchart TD
M["Виміряти ABV пари"] --> Q{"ABV > цілі?"}
Q -- "так (міцно)" --> D["Насос браги: −1 крок ШІМ"]
Q -- "ні (слабо)" --> U["Насос браги: +1 крок ШІМ"]
D --> DL{"Насос уже<br/>на мінімумі?"}
U --> UL{"Насос уже<br/>на максимумі?"}
DL -- ні --> OK["Застосувати"]
UL -- ні --> OK
DL -- так --> DP{"Є запас<br/>потужності?"}
UL -- так --> UP{"Можна<br/>знизити?"}
DP -- так --> S1["Стабілізація колони<br/>+ підняти потужність"]
UP -- так --> S2["Стабілізація колони<br/>+ знизити потужність"]
DP -- ні --> F1["Аварія: міцність висока"]
UP -- ні --> F2["Аварія: міцність низька"]
Словами:
- ABV вища за ціль — у колону йде замало сировини на наявне тепло. Насос браги пригальмовує на один крок ШІМ.
- ABV нижча за ціль — сировини забагато, колона не встигає розділяти. Насос додає крок.
- Крок завжди один пункт ШІМ і завжди в межах «мін…макс ШІМ насоса» з налаштувань. Дрібний крок — навмисно: різкі зміни подачі зривають колону з режиму.
Коли насос уперся в межу#
Якщо насос уже на мінімумі, а міцність усе одно завелика — регулювати подачею більше нічим. Тоді сценарій повертається на стадію стабілізації колони: зупиняє подачу браги, зміщує потужність парогенератора на ~5 % від робочого діапазону в потрібний бік і дає колоні вийти на новий режим. Після стабілізації перегонка продовжується вже з іншою потужністю.
Симетрично для протилежного випадку: насос на максимумі, міцність замала — стабілізація зі зниженням потужності.
Якщо ж запасу потужності вже немає в жодному напрямку — сценарій зупиняється з аварією:
| Аварія | Що означає | Куди дивитись |
|---|---|---|
Міцність висока (abv_too_high) |
Насос на мінімумі, потужність на максимумі, ABV усе одно вище цілі | Ціль занижена для цього апарата; замало браги на вході; забитий фільтр |
Міцність низька (abv_too_low) |
Насос на максимумі, потужність на мінімумі, ABV усе одно нижче цілі | Ціль завищена; слабка брага; втрати тепла в колоні |
Обидві — жовтого рівня: процес спиняється безпечно, обладнання не в загрозі, потрібне рішення оператора.
Захист від «міцності з порожньої колони»#
Перед будь-яким регулюванням сценарій дивиться на витрату браги. Якщо потік нижчий за мінімальний:
- ABV < 1 % — спирту вже немає, це нормальне завершення сировини → штатна зупинка перегонки.
- ABV нормальна, а насос молотить вище мінімального ШІМ — рідина не йде попри команду → забитий фільтр браги, аварія.
- ABV нормальна, а насос уже на мінімумі — аварія за низькою витратою.
Це важлива деталь: без такої перевірки суха колона показувала б чудову міцність, а автоматика спокійно тримала б «ідеальний режим» ні над чим.
Що сценарій публікує#
bbk-abv— поточна міцність, як її бачить оркестратор;bbk-steam_power— поточна потужність парогенератора.
Ці два показники поруч на графіку — найкорисніша діагностика перегону: видно, як автоматика торгувала потужністю за міцність.
Альтернатива: регулювання за температурою#
У прошивці є другий контур — той самий за змістом, але зроблений навпаки. Замість «щотакту рахувати ABV з температури», він один раз перераховує цільову ABV у цільову температуру пари (зворотна функція з розрахунку) і далі веде звичайний температурний контур: цільова температура верху колони плюс окремий поріг «спирту практично немає» (температура, що відповідає 1 % ABV).
Чому це буває краще: температура — безпосередній вимір, вона гладка, і оператор бачить ту саму величину, що й автоматика. Порівняння з розрахованим числом додає непотрібний шар.
Наразі стадія перегонки ББК викликає контур за міцністю. Температурний варіант присутній у прошивці й готовий до використання, але не підключений як робочий. Це запас на майбутню перебудову, а не перемикач у налаштуваннях.
Композиція: сценарій + скрипт ABV#
Старий ББК рахує міцність усередині себе — тому й прив'язка датчиків тиску колони та барометра належить сценарію. Це рудимент монолітної архітектури: одна й та сама логіка живе у двох місцях (у сценарії й у скрипті-вимірювачі), а оператор обирає ті самі датчики двічі.
Новий сценарій (клон ББК на скриптах) робить інакше — делегує:
- у списку скриптів-учасників є зв'язка
abv, яка приймає екземпляр скрипта «Розрахунок ABV»; - тиск колони й барометр сценарію більше не належать — їх тримає скрипт-учасник;
- сценарій запускає й зупиняє учасника разом із собою.
Що це дає: міцність видно окремою карткою навіть поза сценарієм, датчики прив'язуються один раз, а логіка розрахунку існує в єдиному екземплярі. Це загальний принцип: сценарій — тонкий оркестратор кроків, уся вимірювальна й керуюча робота — у скриптах-учасниках.
Як використати ABV у власному сценарії#
- Створіть вимірювач — окремий екземпляр скрипта «Розрахунок ABV» із власними давачами. Не дублюйте розрахунок у своєму сценарії.
- Прив'яжіть його як учасника й запускайте разом зі сценарієм.
- Читайте показник
abv-<N>-strength. - Регулюйте повільно. Крок на такт — мінімальний, період коригування — десятки секунд. Колона відповідає на зміну подачі за хвилини, і швидкий регулятор тут не швидший, а нестабільніший.
- Завжди перевіряйте витрату сировини перед тим, як довіритись міцності. Правило вище — не деталь ББК, а загальне: перш ніж керувати за розрахованим числом, переконайтесь, що процес узагалі йде.
- Ставте аварійні межі з обох боків. «Не вдається досягти цілі, регулювати більше нічим» — це аварія, а не привід крутити далі до впору.
Іменування показників має значення. Скрипт-вимірювач публікує величину з номером екземпляра (abv-1-strength), сценарій — власну оркестраційну без номера (bbk-abv). Правило просте: показник належить тому, хто його обчислює. Інтерфейс сам розкладе плитки по групах, якщо імена дотримані.
Далі#
- Скрипт ББК — повний перелік стадій і захистів сценарію.
- Скрипт «Розрахунок ABV» — налаштування вимірювача.
- Аварії та сценарії безпеки — як обробляються аварійні стани.