Contents — find the section you need

Serbatoi di nutrienti CEA — contabilità di reintegro e diluizione

Ripristinare insieme volume e concentrazione

Un serbatoio contiene 90 L a 80 mg/L di un componente monitorato. Aggiungendo 10 L di acqua priva del componente si ripristina il volume a 100 L ma la concentrazione scende a 72 mg/L. Un livello basso e un deficit del componente richiedono quindi contabilità separate.

Questa guida estende i fondamenti della zona radicale a operazioni discrete. Tutti i valori sono sintetici; 100 mg/L è un obiettivo aritmetico, non una raccomandazione colturale. Tracciamo un componente di concentrazione nota, senza calcolare una ricetta fertilizzante, la concentrazione a partire dall'EC, o dosi di acido/base.

Definisci il confine

Assumi un unico serbatoio perfettamente mescolato con alimentazione e ritorno del circuito colturale fermi. Durante ogni operazione non c'è assorbimento, evaporazione, precipitazione o reazione, e i volumi liquidi sono additivi. Un serbatoio in funzione richiede nel proprio bilancio i flussi di volume e componente di alimentazione e ritorno. Se il confine racchiude l'intero sistema in circolazione, la circolazione interna non è un reintegro esterno.

Per un volume V [L], una concentrazione C [mg/L] e una massa del componente disciolto M [mg], M=VC. Aggiungendo un volume V_a a concentrazione C_a si ottiene

V_1=V_0+V_a,\qquad M_1=V_0C_0+V_aC_a,\qquad C_1=\frac{M_1}{V_1}

Usa C_a=0 solo se l'acqua aggiunta non contiene il componente monitorato. La guida alla gestione dei nutrienti dell'OSU descrive l'analisi dell'acqua sorgente e l'attenzione alla concentrazione salina, al pH, all'alcalinità e ai rapporti tra nutrienti.

Confronta tre aggiunte

Parti da 90 L a 80 mg/L: 7.200 mg. Assumi una concentrazione della soluzione madre di 10.000 mg/L per questo componente.

Operazione Volume finale Massa finale del componente Concentrazione finale
Aggiungi 10 L di acqua priva del componente 100 L 7.200 mg 72,00 mg/L
Aggiungi circa 0,181818 L di sola soluzione madre Circa 90,181818 L Circa 9.018,18 mg 100,00 mg/L
Aggiungi 0,28 L di soluzione madre e 9,72 L di acqua 100 L 10.000 mg 100,00 mg/L

La soluzione madre aggiunge anche volume. Per una concentrazione obiettivo C_t, una concentrazione della soluzione madre C_s e un volume di soluzione madre x,

\frac{V_0C_0+xC_s}{V_0+x}=C_t \quad\Rightarrow\quad x=\frac{V_0(C_t-C_0)}{C_s-C_t}

Aumentare la concentrazione richiede C_s>C_t>C_0. Una soluzione madre alla concentrazione obiettivo non può portare esattamente a quell'obiettivo una concentrazione iniziale più bassa con un'aggiunta finita. Una soluzione negativa indica che l'aggiunta proposta non può soddisfare l'obiettivo.

Se è prescritto anche il volume finale V_f e l'acqua di reintegro non contiene il componente,

x=\frac{V_fC_t-V_0C_0}{C_s},\qquad V_{water}=V_f-V_0-x

Entrambe le aggiunte devono essere non negative e il volume finale deve rientrare nel contenitore. Qui sono 0,28 L di soluzione madre e 9,72 L di acqua. Specificare solo la concentrazione dà una risposta diversa rispetto a specificare sia concentrazione che volume.

Scarico e diluizione hanno effetti diversi

Ora parti da 100 L a 120 mg/L: 12.000 mg. Scaricando 10 L di soluzione ben mescolata si rimuovono 1.200 mg. Il residuo è 90 L e 10.800 mg, ancora a 120 mg/L. Aggiungendo poi 10 L di acqua priva del componente si ottengono 100 L a 108 mg/L.

Aggiungere invece 20 L di acqua senza scaricare dà 120 L a 100 mg/L. Il serbatoio contiene ancora 12.000 mg, e richiede più capacità di riserva.

Condizione Equazione Confine
Scarica prima D L, poi sostituisci con acqua C_1=C_0(1-D/V_0) Mescolamento perfetto; rabbocco privo del componente
Aggiungi W L di acqua senza scaricare C_1=V_0C_0/(V_0+W) Il volume aumenta
Afflusso e deflusso simultanei a volume costante C(t)=C_{in}+(C_0-C_{in})e^{-Qt/V} Mescolamento perfetto, flusso costante, nessun assorbimento o reazione

Per una sostituzione simultanea di 10 L, Qt/V=0,1 e C_{in}=0 danno circa 108,58 mg/L. Questo differisce dai 108 mg/L ottenuti scaricando prima. L'ordine delle operazioni appartiene al registro.

Riproduci la contabilità in Python

Salva questo come tank_accounting.py ed esegui python3 tank_accounting.py. Usa solo la libreria standard.

from math import isfinite


def mix(v, c, added_v, added_c):
    values = (v, c, added_v, added_c)
    if not all(isfinite(x) for x in values):
        raise ValueError("finite values required")
    if v <= 0 or min(c, added_v, added_c) < 0:
        raise ValueError("invalid volume or concentration")
    return (v * c + added_v * added_c) / (v + added_v)


v, c, target, stock = 90.0, 80.0, 100.0, 10000.0
x = v * (target - c) / (stock - target)
print(f"water top-up: {mix(v, c, 10, 0):.2f} mg/L")
print(f"stock addition: {x:.6f} L, {mix(v, c, x, stock):.2f} mg/L")
y = (100 * target - v * c) / stock
print(f"fixed final volume: stock {y:.2f} L, water {10-y:.2f} L")
print(f"drain then refill: {mix(90, 120, 10, 0):.2f} mg/L")
print(f"dilute only: {mix(100, 120, 20, 0):.2f} mg/L")

Gli output sono 72,00 mg/L; 0,181818 L e 100,00 mg/L; 0,28 L e 9,72 L; 108,00 mg/L; e 100,00 mg/L. Prima di sperimentare con un'altra concentrazione di soluzione madre, verifica le condizioni di raggiungibilità sopra e assicurati che il denominatore non sia zero.

Dalla contabilità al controllo

La guida di OSU al test dell'acqua di irrigazione spiega che EC e TDS non identificano le concentrazioni dei singoli sali. Sostituire l'EC a C non permette di calcolare il reintegro di un componente specifico. Un fertilizzante misto modifica più componenti contemporaneamente, quindi raggiungere un obiettivo non ripristina l'intera composizione.

Un sensore inoltre non deve necessariamente raggiungere subito la previsione perfettamente mescolata. La guida di OSU alla gestione dei nutrienti richiede l'agitazione e di lasciare che le letture si stabilizzino. Sulla base di questa distinzione, questo articolo propone il seguente punto di partenza per la progettazione del controllo:

  1. Registra l'orario iniziale, il volume, la posizione di campionamento, la base della concentrazione del componente, l'EC, la temperatura del liquido e il pH.
  2. Registra la composizione della soluzione madre, i volumi effettivi di aggiunta e scarico, e lo stato della circolazione. La sola durata del comando della pompa non stabilisce il flusso effettivo.
  3. Attendi un intervallo di mescolamento stabilito in base all'apparecchiatura e a misurazioni stabili prima di una nuova valutazione. Evita di accumulare ulteriori comandi in risposta a una lettura locale immediatamente dopo l'iniezione.
  4. Conserva gli errori di previsione. Interrompi ulteriori aggiunte per indagare su livelli anomali, discrepanze di flusso o misurazioni non aggiornate. Stabilisci tolleranze e limiti di dosaggio sull'impianto effettivo.

Questa non è una specifica completa di un sistema di dosaggio. Gli esempi svolti convalidano la coerenza aritmetica di volume, massa del componente e concentrazione sotto le ipotesi dichiarate. Il passo successivo è collegare le operazioni comandate alle osservazioni usando il flusso di pompa misurato e la risposta di mescolamento.

Pompe di dosaggio CEA — calibrazione del volume e attese di mescolamento

Due verifiche prima di chiamare un'aggiunta "20 mL"

La guida alla contabilità del serbatoio ha calcolato le aggiunte a partire dai bilanci di acqua e componente. Un valore calcolato di 20 mL non specifica ancora un tempo di funzionamento della pompa. Terminare l'iniezione inoltre non significa che una lettura del serbatoio sia rappresentativa.

Questa guida separa la calibrazione comando-volume dalla verifica di quando le misurazioni post-iniezione possono essere rivalutate. Ogni set di dati riportato di seguito è un esempio sintetico originale, non una prestazione misurata di un dispositivo o di una coltura. Il codice non aziona apparecchiature né calcola ricette fertilizzanti.

Mantieni costanti le condizioni di calibrazione

La guida agli iniettori fertilizzanti dell'Università della Georgia spiega la calibrazione e manutenzione periodiche, gli intervalli di flusso operativo e le condizioni di pressione. Il rapporto di un iniettore proporzionale all'acqua è diverso dai mL/s di una pompa comandata a tempo qui considerata.

Per un esperimento di raccolta, segui il manuale dell'apparecchiatura e registra le condizioni in modo coerente:

Registrazione Scopo
Pompa, impostazione di velocità, tubazione, valvole e cronologia di manutenzione Identificare la configurazione calibrata
Liquido, temperatura e densità se usata Mantenere distinta una prova con acqua da una con soluzione madre
Livello di aspirazione, elevazione/pressione di scarico e tubazioni Preservare le differenze tra raccolta e funzionamento
Adescamento, bolle e tempo di inattività precedente Identificare le differenze di avvio
Inizio/fine comando, fine raccolta e volume raccolto Definire se il gocciolamento dopo l'arresto è incluso

Scollegare le tubazioni di scarico per la raccolta può cambiare la contropressione. Una configurazione di raccolta semplice non stabilisce di per sé la consegna nel sistema installato. Mantieni separati i controlli preliminari con acqua dalla conferma con il liquido previsto.

Quando pesi, converti la massa netta raccolta \Delta m [g] usando la densità del liquido \rho [g/mL]: V=\Delta m/\rho [mL]. Non presumere che ogni liquido abbia densità di 1 g/mL. Registra la risoluzione della bilancia, lo stato di calibrazione e l'accuratezza temporale.

Una media su lungo periodo può rappresentare male un'aggiunta breve

Assumi tre prove per ciascuna durata, tutte a partire dallo stesso stato.

Comando [s] Tre volumi sintetici [mL] Media [mL]
10 15, 16, 17 16
20 35, 36, 37 36
30 55, 56, 57 56
60 115, 116, 117 116

Le medie seguono V(t)=at+b=2t-4 [mL], con a in mL/s e b in mL. Un obiettivo di 20 mL dà (20-b)/a=12 s. Usando solo la pendenza si ottengono 10 s e appena 16 mL in questo esempio.

Usando la media di flusso su 60 s, 116/60 mL/s, si ottengono invece circa 10,34 s per 20 mL. L'equazione sintetica predice circa 16,69 mL a quella durata. Quale "flusso" venga usato conta.

L'intercetta di −4 mL è un coefficiente di regressione sull'intervallo campionato, non la prova di un vero ritardo puro di due secondi. Non estrapolare oltre 10–60 s, specialmente verso lo zero. Per dati misurati, esamina i residui e considera un modello separato per brevi durate se la relazione si incurva.

Ogni riga sintetica ha una deviazione standard campionaria di 1 mL. Un errore di regressione zero sulle medie non elimina la variazione dei singoli scatti. Tre ripetizioni inoltre non stabiliscono la variabilità da un giorno all'altro o il bias della bilancia. Verifica le previsioni misurate usando durate e prove aggiuntive escluse dall'adattamento.

Separa il completamento dell'iniezione dalla conferma del mescolamento

La guida di OSU alla gestione dei nutrienti richiede l'agitazione e letture stabili prima della valutazione. Stabilire un'attesa richiede una serie temporale post-iniezione distinta dalla calibrazione del volume.

Registra misurazioni sincronizzate lontano dal punto di iniezione e anche nelle vicinanze. Documenta volume, flusso di circolazione, posizioni di iniezione e sensore, temperatura e filtraggio del sensore. Mescolamento, trasporto e risposta del sensore contribuiscono tutti alla dinamica osservata; un tempo di risposta adattato non è automaticamente un tempo di mescolamento puro.

Per illustrazione, normalizza un cambiamento dal valore iniziale y_0 a un valore finale noto y_\infty:

z(t)=\frac{y(t)-y_0}{y_\infty-y_0}=1-e^{-t/\tau}

Il tempo zero è il completamento dell'iniezione. Questa è una risposta sintetica di misurazione locale, non un modello di serbatoio a conservazione di massa. Assumi costanti di tempo di 40 s e 80 s nelle posizioni A e B. Le loro risposte in tempo continuo entrano in una banda del 5% attorno alla variazione finale dopo circa 120 s e 240 s.

Diagram 1 · Use the button to switch views
Dati sintetici comando-volume e due risposte normalizzate. La linea tratteggiata segna la soglia illustrativa di risposta al 95%.

In alto: tre volumi raccolti per durata e la retta adattata alle loro medie. In basso: risposte sintetiche A e B. Il tempo è in secondi, il volume in mL e la risposta normalizzata è adimensionale. Non sono mostrati dati misurati.

Ora imponi una regola didattica: con campioni ogni 10 s, entrambe le posizioni devono restare entro il 5% per 30 s prima della conferma. B si qualifica per la prima volta a 240 s. I quattro campioni a 240, 250, 260 e 270 s forniscono la conferma a 270 s. Controllare solo A si qualificherebbe a 150 s e trascurerebbe B.

Né il 5% né i 30 s sono un criterio di accettazione universale. Scegli i criteri usando rumore/accuratezza della misurazione, deviazione di concentrazione accettabile e intervallo di campionamento. Stima i valori finali in modo indipendente, ad esempio da registrazioni sufficientemente lunghe, ed esamina anche le differenze tra i valori finali delle posizioni. Normalizzare ciascuna posizione separatamente può nascondere differenze di concentrazione spaziale persistenti. Non usare questa normalizzazione quando il cambiamento dall'iniziale al finale è piccolo rispetto al rumore.

Riproduci i calcoli

Salva come pump_mixing.py ed esegui python3 pump_mixing.py. È richiesta solo la libreria standard.

from math import exp
from statistics import mean

# Synthetic data only; time [s], collected volume [mL].
runs = {10: [15, 16, 17], 20: [35, 36, 37],
        30: [55, 56, 57], 60: [115, 116, 117]}
ts = list(runs)
vs = [mean(runs[t]) for t in ts]
tm, vm = mean(ts), mean(vs)
a = sum((t-tm)*(v-vm) for t, v in zip(ts, vs)) / sum((t-tm)**2 for t in ts)
b = vm - a*tm
command = (20-b)/a
if not min(ts) <= command <= max(ts):
    raise ValueError("command outside calibration range")
print(f"fit: V = {a:.2f} t {b:+.2f}; 20 mL command = {command:.2f} s")
print(f"held-out 40 s: predicted {a*40+b:.2f} mL; reference 76.00 mL")

# Two synthetic normalized responses, sampled every 10 s.
# Four consecutive samples span 30 s. No missing samples here.
times = list(range(0, 401, 10))
errors = [max(exp(-t/40), exp(-t/80)) for t in times]
ready = next((times[i] for i in range(3, len(times))
              if all(e <= 0.05 for e in errors[i-3:i+1])), None)
print(f"two-location confirmation = {ready} s")

Gli output sono pendenza 2,00, intercetta −4,00, un comando di 12,00 s per 20 mL, 76,00 mL a 40 s, e conferma a 270 s. Il riferimento a 40 s escluso dall'adattamento proviene anch'esso dalla stessa equazione sintetica, quindi non è prova di generalizzazione a un'apparecchiatura reale. Cambiando la costante di tempo di 80 s in 120 s si ottiene la conferma a 390 s. Se nella registrazione non esiste una finestra qualificante, il codice restituisce None.

Collega le verifiche al permesso per un'altra aggiunta

Un'implementazione di controllo richiede più di un timer. Questo articolo propone fasi separate per pre-verifiche, un'aggiunta, un'attesa di mescolamento/misurazione e una rivalutazione. Comandi fuori intervallo, letture mancanti o non aggiornate, circolazione ferma, livelli anomali o mancata stabilizzazione entro il periodo di osservazione dovrebbero impedire ulteriori aggiunte in attesa di un'indagine. Non colmare i campioni mancanti con il valore precedente contandolo come stabilità continua.

Una lettura di EC sotto l'obiettivo dopo l'attesa non stabilisce immediatamente un deficit di un componente specifico; conserva la distinzione tra EC e composizione spiegata nei fondamenti della zona radicale. Il passo successivo è valutare le previsioni di consegna e i criteri di attesa rispetto a registri misurati prima di progettare il controllo del dosaggio con limiti per singola aggiunta, cumulativi e di ripetizione.

Controllo del dosaggio CEA — limiti, attese di misurazione e stati di guasto

Una lettura bassa non giustifica aggiunte ripetute

La calibrazione della pompa e le attese di mescolamento hanno separato il volume consegnato dal momento in cui le osservazioni si stabilizzano. La domanda successiva è se un'altra aggiunta sia attualmente consentita. Una lettura bassa durante il mescolamento, un campione vecchio o una circolazione ferma non stabiliscono quel permesso.

Questa guida propone una progettazione didattica con stati operativi separati e controlli su volume, numero di tentativi e osservazioni. Tutti i valori e gli input sono sintetici, non limiti operativi o raccomandazioni fertilizzanti. L'esempio Python riproduce solo un cancello di autorizzazione; non aziona una pompa.

Calcola un candidato, poi decidi se può essere eseguito

Un candidato derivato dalla contabilità del serbatoio richiede ancora controlli rispetto all'intervallo di calibrazione, allo stato dell'apparecchiatura e alle osservazioni in grado di valutare l'operazione precedente.

La guida agli iniettori dell'UGA spiega la calibrazione e manutenzione periodiche. La guida di OSU alla gestione dei nutrienti richiede agitazione e letture stabili prima della valutazione. Gli stati e i limiti riportati di seguito sono la progettazione proposta da questo articolo, non una specifica di controllore fornita da una delle due fonti.

Separa sei stati operativi

Stato Attività Condizione di transizione
CHECK Convalida osservazioni, candidato, budget residuo e apparecchiatura Registra una prenotazione prima di DOSE; passa a DONE se l'obiettivo è già soddisfatto
DOSE Emette un comando per un ID operazione univoco Conferma l'arresto prima di WAIT; timeout o mancata corrispondenza del flusso portano a FAULT
WAIT Vieta nuove aggiunte e raccoglie osservazioni post-arresto Osservazioni qualificanti portano a REVIEW; mancata stabilizzazione entro la scadenza porta a FAULT
REVIEW Rivaluta osservazioni e cronologia DONE se soddisfacente, CHECK se un altro candidato è giustificato, FAULT per incongruenze
DONE Mantiene l'uscita ferma e chiude la registrazione Un'operazione successiva richiede una nuova decisione operativa
FAULT Richiede l'arresto e vieta ulteriori aggiunte Recupero esplicito dopo aver verificato la causa, la quantità consegnata e l'apparecchiatura

Emettere un comando di arresto è diverso dal confermare che il flusso si sia fermato. I nomi degli stati software non possono prevenire una valvola o una pompa guaste. Un'implementazione richiede inoltre un feedback di uscita, meccanismi di arresto lato apparecchiatura e un comportamento di riavvio definito.

Non far tornare automaticamente FAULT a CHECK dopo una breve attesa. Ripetere un'operazione senza risolverne la causa può accumulare aggiunte non intenzionali.

Carica il budget prima di emettere il comando

Usa limiti illustrativi di 16–20 mL per aggiunta, 50 mL per sessione operativa e al massimo tre autorizzazioni. Il minimo di 16 mL corrisponde alla calibrazione sintetica dell'articolo precedente a 10 s. Questi numeri non sono impostazioni dell'apparecchiatura.

Per un volume già caricato B [mL] e un candidato d [mL], richiedi

16\le d\le20,\qquad B+d\le50,\qquad n<3

All'autorizzazione, registra B\leftarrow B+d e n\leftarrow n+1 prima di procedere al comando. Questo registro rappresenta capacità di autorizzazione consumata, non consegna misurata. Se la comunicazione fallisce subito dopo un comando, non presumere consegna zero e rimborsare la sua capacità. Registra separatamente la consegna misurata e quella incerta.

Operazione sintetica Candidato Totale caricato dopo la decisione Risultato
Prima 16 mL 16 mL Consenti
Seconda, dopo arresto, mescolamento e revisione 16 mL 32 mL Consenti
Terza, dopo revisione 18 mL 50 mL Consenti
Quarta 16 mL 50 mL Rifiuta: limite di tentativi

Una richiesta di 20 mL dopo aver caricato 32 mL viene rifiutata perché raggiungerebbe 52 mL, anche con un tentativo residuo. Riconsidera le osservazioni e la base del candidato invece di limitare automaticamente la dose alla capacità residua.

Qui una sessione è una sequenza di correzione con un inizio e una fine registrati. Un'iterazione di ciclo, un aggiornamento di pagina o una riconnessione non sono una nuova sessione. Un sistema operativo richiede condizioni esplicite di rinnovo del budget, come una finestra temporale definita o la sostituzione del serbatoio, e registrazioni che sopravvivano al riavvio. Questo esempio non ha persistenza.

Verifica l'aggiornamento separatamente dalla stabilità

Il solo orario di ricezione non stabilisce l'aggiornamento. Considera l'orario di misurazione della sorgente, la sincronizzazione dell'orologio e l'ordine rispetto all'operazione. Qui age_s è un'età di misurazione già convertita, accettata solo tra zero e cinque secondi. Anche un'età negativa da un timestamp futuro viene rifiutata.

after_stop significa che l'osservazione segue la conferma dell'arresto precedente. Per l'aggiunta iniziale, usa un'osservazione ottenuta dopo l'inizio della pre-verifica corrente. stable è una decisione a monte basata su una sequenza di osservazioni, come discusso nella guida precedente. Un singolo valore invariato non stabilisce la stabilità: valuta dati mancanti, sensori bloccati e disaccordo tra le posizioni.

Cinque secondi sono un'assunzione didattica. Un limite incompatibile con l'intervallo di campionamento e il ritardo di comunicazione può rifiutare osservazioni utili. Semplicemente aumentarlo non risolve i problemi di dati non aggiornati.

Prova il cancello di autorizzazione in Python

Salva come dosing_gate.py ed esegui python3 dosing_gate.py. È richiesta solo la libreria standard.

from math import isfinite


def gate(state, dose_ml, charged_ml, attempts, age_s,
         after_stop, stable, circulation, level_ok):
    """Offline authorization check; no hardware commands or persistence."""
    if state != "CHECK":
        return "STATE"
    if not all(isfinite(x) for x in (dose_ml, charged_ml, age_s)):
        return "INVALID"
    if charged_ml < 0 or type(attempts) is not int or attempts < 0:
        return "INVALID"
    if not all(type(x) is bool for x in
               (after_stop, stable, circulation, level_ok)):
        return "INVALID"
    if not circulation or not level_ok:
        return "INTERLOCK"
    if not 0 <= age_s <= 5 or not after_stop:
        return "STALE"
    if not stable:
        return "UNSTABLE"
    if not 16 <= dose_ml <= 20:
        return "DOSE_RANGE"
    if attempts >= 3:
        return "ATTEMPTS"
    if charged_ml + dose_ml > 50:
        return "BUDGET"
    return "ALLOW"


if __name__ == "__main__":
    charged, attempts, state = 0.0, 0, "CHECK"
    for requested in (16, 16, 18, 16):
        result = gate(state, requested, charged, attempts, 1,
                      True, True, True, True)
        if result == "ALLOW":
            # Charge BEFORE a simulated command; never refund uncertainty.
            charged += requested
            attempts += 1
            state = "WAIT"
        print(f"{requested} mL: {result}; charged={charged:.0f} mL")
        # Synthetic successful stop/mixing/reassessment, not a timer.
        state = "CHECK"

Le prime tre decisioni sono ALLOW; la quarta è ATTEMPTS. I totali caricati sono 16, 32, 50 e 50 mL. Reimpostare lo stato dimostrativo a CHECK alla fine di ogni iterazione rappresenta un arresto, mescolamento e rivalutazione sintetici riusciti. Un'implementazione non deve eseguire quella transizione solo perché un timer fisso è scaduto.

Questa funzione è un cancello didattico offline con argomenti numerici. Non analizza input di comunicazione, non calcola una dose, non stabilisce la stabilità, non monitora il flusso effettivo né esegue la macchina a stati. Rifiuta NaN, infinito, volumi caricati negativi e conteggi di tentativi non validi, ma non è un'API completa per input esterni.

Esercita i confini di rifiuto

Input o situazione Risultato atteso
Un altro candidato arriva in WAIT STATE; nessun addebito di budget o comando aggiuntivo
L'età è di sei secondi o negativa STALE
L'osservazione precede l'arresto, oppure non è stabile STALE o UNSTABLE
Circolazione ferma o livello anomalo INTERLOCK
Il candidato è di 15 o 21 mL DOSE_RANGE
Richiesta di 20 mL dopo aver caricato 32 mL BUDGET
Il candidato o il volume caricato è NaN INVALID

Un'implementazione deve inoltre verificare che il reinvio di un ID operazione non possa eseguirsi due volte. Effettua il commit delle modifiche al budget e degli ID operazione insieme, in modo che richieste concorrenti non possano spendere entrambe la stessa capacità residua. Dopo un'interruzione, riconcilia i comandi persistiti con lo stato effettivo dell'apparecchiatura prima di riprendere.

Cosa stabilisce questo

L'esempio verifica le decisioni di autorizzazione rispetto agli input e ai limiti forniti. Non deduce deficit di componenti individuali dall'EC né dosi di acido dalle differenze di pH. Inoltre non convalida crescita, resa, sicurezza dell'apparecchiatura o tracciamento della concentrazione.

I ruoli di contabilità, calibrazione della consegna, valutazione del mescolamento e autorizzazione sono ora collegati. La convalida con registri di apparecchiature misurati resta aperta. Il passo successivo è il percorso dell'acqua attraverso sistemi di produzione come NFT, DWC e drip, dove la relazione tra serbatoio e radici cambia.

What to read next

Rivedi la differenza tra EC, pH e massa del componente.Rilevamento CEA e stima da immagini — posizionamento dei sensori e area fogliare proiettataContinue the seriesPercorsi dell'acqua e idraulica multi-livello nel CEA — NFT, DWC, drip e bilancio del caricoExplore another aspect of this fieldAcquaponica CEA — confini della qualità dell'acqua per pesci, microbi e piante