Contents — find the section you need

सीईए पोषक तत्व टैंक — पुनःपूर्ति और तनुकरण का लेखांकन

आयतन और सांद्रता को एक साथ पुनर्स्थापित करना

एक टैंक में एक ट्रैक किए गए घटक की 80 mg/L सांद्रता पर 90 L है। घटक-मुक्त पानी के 10 L जोड़ने से आयतन 100 L तक पुनर्स्थापित होता है लेकिन सांद्रता घटकर 72 mg/L हो जाती है। इसलिए कम स्तर और घटक की कमी के लिए अलग-अलग लेखांकन की आवश्यकता होती है।

यह मार्गदर्शिका जड़ क्षेत्र की मूल बातें को असतत संचालनों तक विस्तारित करती है। सभी मान सिंथेटिक हैं; 100 mg/L एक अंकगणितीय लक्ष्य है, फसल अनुशंसा नहीं। हम ज्ञात सांद्रता के एक घटक को ट्रैक करते हैं, बिना उर्वरक नुस्खे, EC से सांद्रता, या अम्ल/क्षार खुराक की गणना किए।

सीमा को परिभाषित करें

मान लें एक पूर्णतः मिश्रित टैंक जिसमें फसल-लूप आपूर्ति और वापसी रुकी हुई है। प्रत्येक संचालन के दौरान कोई अवशोषण, वाष्पीकरण, अवक्षेपण या प्रतिक्रिया नहीं होती, और तरल आयतन योगात्मक होते हैं। एक परिचालन टैंक को अपने संतुलन में आपूर्ति और वापसी आयतन तथा घटक प्रवाह की आवश्यकता होती है। यदि सीमा पूरी परिसंचारी प्रणाली को घेरती है, तो आंतरिक परिसंचरण बाहरी पुनःपूर्ति नहीं है।

आयतन V [L], सांद्रता C [mg/L] और घुलित घटक द्रव्यमान M [mg] के लिए, M=VC। सांद्रता C_a पर आयतन V_a जोड़ने पर मिलता है

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

C_a=0 का उपयोग तभी करें जब जोड़े गए पानी में ट्रैक किया गया घटक न हो। OSU की पोषक-प्रबंधन गाइड स्रोत-जल विश्लेषण और नमक सांद्रता, pH, क्षारीयता और पोषक अनुपात पर ध्यान देने का वर्णन करती है।

तीन जोड़ों की तुलना करें

90 L, 80 mg/L से शुरू करें: 7,200 mg। इस घटक के लिए 10,000 mg/L की स्टॉक सांद्रता मान लें।

संचालन अंतिम आयतन अंतिम घटक द्रव्यमान अंतिम सांद्रता
घटक-मुक्त पानी का 10 L जोड़ें 100 L 7,200 mg 72.00 mg/L
केवल लगभग 0.181818 L स्टॉक जोड़ें लगभग 90.181818 L लगभग 9,018.18 mg 100.00 mg/L
0.28 L स्टॉक और 9.72 L पानी जोड़ें 100 L 10,000 mg 100.00 mg/L

स्टॉक भी आयतन जोड़ता है। लक्ष्य सांद्रता C_t, स्टॉक सांद्रता C_s और स्टॉक आयतन 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}

सांद्रता बढ़ाने के लिए C_s>C_t>C_0 आवश्यक है। लक्ष्य सांद्रता पर स्टॉक एक सीमित परिमित जोड़ से कम प्रारंभिक सांद्रता को ठीक उस लक्ष्य तक नहीं ला सकता। एक ऋणात्मक हल यह दर्शाता है कि प्रस्तावित जोड़ उद्देश्य को पूरा नहीं कर सकता।

यदि अंतिम आयतन V_f भी निर्धारित है और मेकअप पानी में घटक शामिल नहीं है,

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

दोनों जोड़ गैर-ऋणात्मक होने चाहिए और अंतिम आयतन पात्र में समाना चाहिए। यहाँ वे 0.28 L स्टॉक और 9.72 L पानी हैं। केवल सांद्रता निर्दिष्ट करना सांद्रता और आयतन दोनों निर्दिष्ट करने से भिन्न उत्तर देता है।

जल निकासी और तनुकरण के अलग-अलग प्रभाव होते हैं

अब 100 L, 120 mg/L से शुरू करें: 12,000 mg। अच्छी तरह मिश्रित विलयन के 10 L निकालने से 1,200 mg हट जाता है। शेष 90 L और 10,800 mg है, अभी भी 120 mg/L पर। इसके बाद घटक-मुक्त पानी के 10 L जोड़ने से 100 L, 108 mg/L पर मिलता है।

बिना निकाले 20 L पानी जोड़ने से इसके बजाय 120 L, 100 mg/L पर मिलता है। टैंक में अभी भी 12,000 mg है, और इसे अधिक अतिरिक्त क्षमता की आवश्यकता है।

स्थिति समीकरण सीमा
पहले D L निकालें, फिर पानी से बदलें C_1=C_0(1-D/V_0) पूर्ण मिश्रण; घटक-मुक्त रीफिल
बिना निकाले W L पानी जोड़ें C_1=V_0C_0/(V_0+W) आयतन बढ़ता है
स्थिर आयतन पर एक साथ इनफ़्लो और आउटफ़्लो C(t)=C_{in}+(C_0-C_{in})e^{-Qt/V} पूर्ण मिश्रण, स्थिर प्रवाह, कोई अवशोषण या प्रतिक्रिया नहीं

10 L के एक साथ प्रतिस्थापन के लिए, Qt/V=0.1 और C_{in}=0 लगभग 108.58 mg/L देते हैं। यह पहले निकालने से प्राप्त 108 mg/L से भिन्न है। संचालन क्रम लॉग में दर्ज होना चाहिए।

लेखांकन को Python में पुनरुत्पन्न करें

इसे tank_accounting.py के रूप में सहेजें और python3 tank_accounting.py चलाएँ। यह केवल मानक लाइब्रेरी का उपयोग करता है।

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")

आउटपुट 72.00 mg/L; 0.181818 L और 100.00 mg/L; 0.28 L और 9.72 L; 108.00 mg/L; और 100.00 mg/L हैं। किसी अन्य स्टॉक सांद्रता के साथ प्रयोग करने से पहले, ऊपर दी गई पहुँच-योग्यता स्थितियों की जाँच करें और सुनिश्चित करें कि हर शून्य न हो।

लेखांकन से नियंत्रण तक

OSU की सिंचाई-जल परीक्षण गाइड बताती है कि EC और TDS व्यक्तिगत नमक सांद्रता की पहचान नहीं करते। C के स्थान पर EC को प्रतिस्थापित करना किसी विशिष्ट घटक की पुनःपूर्ति की गणना नहीं कर सकता। एक मिश्रित उर्वरक एक साथ कई घटकों को बदल देता है, इसलिए एक लक्ष्य को पूरा करना संपूर्ण संरचना को पुनर्स्थापित नहीं करता।

एक सेंसर को भी तुरंत पूर्ण-मिश्रित पूर्वानुमान तक पहुँचने की आवश्यकता नहीं है। OSU की पोषक-प्रबंधन गाइड हिलाने और रीडिंग को स्थिर होने देने का आह्वान करती है। उस अंतर के आधार पर, यह लेख नियंत्रण डिज़ाइन के लिए निम्नलिखित आरंभिक बिंदु प्रस्तावित करता है:

  1. प्रारंभिक समय, आयतन, नमूनाकरण स्थान, घटक सांद्रता का आधार, EC, तरल तापमान और pH रिकॉर्ड करें।
  2. स्टॉक संरचना, वास्तविक जोड़ और जल निकासी आयतन, तथा परिसंचरण स्थिति रिकॉर्ड करें। केवल पंप कमांड अवधि वास्तविक प्रवाह स्थापित नहीं करती।
  3. पुनर्मूल्यांकन से पहले उपकरण पर स्थापित मिश्रण अंतराल और स्थिर मापों की प्रतीक्षा करें। इंजेक्शन के तुरंत बाद स्थानीय रीडिंग के जवाब में अतिरिक्त कमांड को ढेर करने से बचें।
  4. पूर्वानुमान त्रुटियों को संरक्षित रखें। असामान्य स्तरों, प्रवाह विसंगतियों या पुराने मापों की जाँच के लिए और अधिक जोड़ रोकें। वास्तविक इंस्टॉलेशन पर सहनशीलता और खुराक सीमाएँ स्थापित करें।

यह एक संपूर्ण खुराक-प्रणाली विनिर्देश नहीं है। कार्यान्वित उदाहरण बताई गई धारणाओं के तहत आयतन, घटक द्रव्यमान और सांद्रता की अंकगणितीय संगति को सत्यापित करते हैं। अगला चरण मापी गई पंप प्रवाह और मिश्रण प्रतिक्रिया का उपयोग करके आदेशित संचालनों को अवलोकनों से जोड़ना है।

सीईए खुराक पंप — आयतन अंशांकन और मिश्रण प्रतीक्षा

किसी जोड़ को "20 mL" कहने से पहले दो जाँचें

टैंक-लेखांकन गाइड ने जल और घटक संतुलन से जोड़ की गणना की थी। एक गणना की गई 20 mL अभी तक पंप चलने का समय निर्दिष्ट नहीं करती। इंजेक्शन पूरा होने का भी यह अर्थ नहीं कि टैंक की रीडिंग प्रतिनिधि है।

यह गाइड कमांड-से-आयतन अंशांकन को यह जाँचने से अलग करती है कि पोस्ट-इंजेक्शन माप कब पुनर्मूल्यांकित किए जा सकते हैं। नीचे दिया गया प्रत्येक डेटासेट एक मूल सिंथेटिक उदाहरण है, किसी उपकरण या फसल का मापा गया प्रदर्शन नहीं। कोड उपकरण संचालित नहीं करता या उर्वरक नुस्खे की गणना नहीं करता।

अंशांकन स्थितियों को स्थिर रखें

जॉर्जिया विश्वविद्यालय की उर्वरक-इंजेक्टर गाइड आवधिक अंशांकन और रखरखाव, परिचालन प्रवाह श्रेणियों और दबाव स्थितियों की व्याख्या करती है। यहाँ माने गए समय-आदेशित पंप के mL/s से जल-आनुपातिक इंजेक्टर का अनुपात भिन्न है।

एक संग्रह प्रयोग के लिए, उपकरण मैनुअल का पालन करें और स्थितियों को लगातार रिकॉर्ड करें:

रिकॉर्ड उद्देश्य
पंप, गति सेटिंग, ट्यूबिंग, वाल्व और सेवा इतिहास अंशांकित विन्यास की पहचान करें
तरल, तापमान और यदि उपयोग किया गया हो तो घनत्व पानी परीक्षण को स्टॉक-विलयन परीक्षण से अलग रखें
सक्शन स्तर, डिस्चार्ज ऊँचाई/दबाव और प्लंबिंग संग्रह और संचालन के बीच अंतर संरक्षित रखें
प्राइमिंग, बुलबुले और पूर्ववर्ती निष्क्रिय समय स्टार्टअप अंतर की पहचान करें
कमांड आरंभ/अंत, संग्रह समाप्ति और संग्रहित आयतन परिभाषित करें कि क्या स्टॉप के बाद टपकना शामिल है

संग्रह के लिए डिस्चार्ज प्लंबिंग को डिस्कनेक्ट करने से बैकप्रेशर बदल सकता है। एक आसान संग्रह सेटअप अपने आप में इंस्टॉल की गई प्रणाली में डिलीवरी स्थापित नहीं करता। प्रारंभिक जल जाँचों को इच्छित तरल के साथ पुष्टि से अलग रखें।

वजन करते समय, तरल घनत्व \rho [g/mL] का उपयोग करके शुद्ध संग्रहित द्रव्यमान \Delta m [g] को परिवर्तित करें: V=\Delta m/\rho [mL]। यह न मानें कि हर तरल का घनत्व 1 g/mL है। बैलेंस रिज़ॉल्यूशन, अंशांकन स्थिति और समय सटीकता रिकॉर्ड करें।

एक दीर्घकालिक औसत एक छोटे जोड़ को गलत तरीके से प्रस्तुत कर सकता है

मान लें कि प्रत्येक अवधि पर तीन परीक्षण, सभी समान स्थिति से शुरू होते हैं।

कमांड [s] तीन सिंथेटिक आयतन [mL] माध्य [mL]
10 15, 16, 17 16
20 35, 36, 37 36
30 55, 56, 57 56
60 115, 116, 117 116

माध्य V(t)=at+b=2t-4 [mL] का अनुसरण करते हैं, जिसमें a mL/s में और b mL में है। 20 mL के लक्ष्य के लिए (20-b)/a=12 s मिलता है। केवल ढलान का उपयोग करने पर इस उदाहरण में 10 s और मात्र 16 mL मिलता है।

इसके बजाय 60 s के औसत प्रवाह, 116/60 mL/s, का उपयोग करने पर 20 mL के लिए लगभग 10.34 s मिलता है। सिंथेटिक समीकरण उस अवधि पर लगभग 16.69 mL का पूर्वानुमान लगाता है। कौन सी "प्रवाह दर" उपयोग की जाती है, यह मायने रखता है।

−4 mL अंतःखंड नमूना की गई सीमा पर एक प्रतिगमन गुणांक है, दो-सेकंड की वास्तविक शुद्ध विलंब का प्रमाण नहीं। 10–60 s से बाहर, विशेष रूप से शून्य की ओर, एक्सट्रापोलेट न करें। मापे गए डेटा के लिए, अवशेषों का निरीक्षण करें और यदि संबंध वक्रित होता है तो एक अलग लघु-अवधि मॉडल पर विचार करें।

प्रत्येक सिंथेटिक पंक्ति का नमूना मानक विचलन 1 mL है। माध्य पर शून्य प्रतिगमन त्रुटि व्यक्तिगत-शॉट भिन्नता को नहीं हटाती। तीन दोहराव भी दिन-प्रतिदिन की भिन्नता या बैलेंस पूर्वाग्रह स्थापित नहीं करते। फिटिंग से बाहर रखे गए अतिरिक्त अवधियों और परीक्षणों का उपयोग करके मापी गई भविष्यवाणियों की जाँच करें।

इंजेक्शन पूर्णता को मिश्रण पुष्टि से अलग रखें

OSU की पोषक-प्रबंधन गाइड मूल्यांकन से पहले हिलाने और स्थिर रीडिंग का आह्वान करती है। एक प्रतीक्षा स्थापित करने के लिए आयतन अंशांकन से अलग एक पोस्ट-इंजेक्शन समय श्रृंखला की आवश्यकता होती है।

इंजेक्शन बिंदु से दूर के साथ-साथ पास के भी समकालिक माप रिकॉर्ड करें। आयतन, परिसंचरण प्रवाह, इंजेक्शन और सेंसर स्थान, तापमान और सेंसर फ़िल्टरिंग को दस्तावेज़ित करें। मिश्रण, परिवहन और सेंसर प्रतिक्रिया सभी देखी गई गतिकी में योगदान करते हैं; एक फ़िट की गई प्रतिक्रिया समय स्वतः ही एक शुद्ध मिश्रण समय नहीं है।

उदाहरण के लिए, प्रारंभिक मान y_0 से ज्ञात अंतिम मान y_\infty तक के परिवर्तन को सामान्यीकृत करें:

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

समय शून्य इंजेक्शन पूर्णता है। यह एक सिंथेटिक स्थानीय माप प्रतिक्रिया है, द्रव्यमान-संरक्षण टैंक मॉडल नहीं। स्थान A और B पर क्रमशः 40 s और 80 s के समय स्थिरांक मान लें। उनकी सतत-समय प्रतिक्रियाएँ लगभग 120 s और 240 s के बाद अंतिम परिवर्तन के चारों ओर 5% बैंड में प्रवेश करती हैं।

Diagram 1 · Use the button to switch views
सिंथेटिक कमांड-आयतन डेटा और दो सामान्यीकृत प्रतिक्रियाएँ। डैश्ड रेखा उदाहरणात्मक 95% प्रतिक्रिया सीमा को चिह्नित करती है।

शीर्ष: प्रति अवधि तीन संग्रहित आयतन और उनके माध्य पर फ़िट की गई रेखा। नीचे: सिंथेटिक प्रतिक्रियाएँ A और B। समय सेकंड में, आयतन mL में और सामान्यीकृत प्रतिक्रिया आयामरहित है। कोई मापा गया डेटा नहीं दिखाया गया है।

अब एक शैक्षणिक नियम लागू करें: प्रत्येक 10 s पर नमूनों के साथ, पुष्टि से पहले दोनों स्थानों को 30 s तक 5% के भीतर रहना चाहिए। B पहली बार 240 s पर योग्य होता है। 240, 250, 260 और 270 s पर चार नमूने 270 s पर पुष्टि प्रदान करते हैं। केवल A की जाँच करने पर 150 s पर योग्यता मिलती और B को नज़रअंदाज़ कर दिया जाता।

न तो 5% और न ही 30 s एक सार्वभौमिक स्वीकृति मानदंड है। माप शोर/सटीकता, स्वीकार्य सांद्रता विचलन और नमूनाकरण अंतराल का उपयोग करके मानदंड चुनें। अंतिम मानों का स्वतंत्र रूप से अनुमान लगाएँ, उदाहरण के लिए पर्याप्त लंबे रिकॉर्ड से, और स्थानों के अंतिम मानों के बीच अंतर का भी निरीक्षण करें। प्रत्येक स्थान को अलग-अलग सामान्यीकृत करना निरंतर स्थानिक सांद्रता अंतर को छिपा सकता है। जब प्रारंभिक-से-अंतिम परिवर्तन शोर की तुलना में छोटा हो तो इस सामान्यीकरण का उपयोग न करें।

गणनाओं को पुनरुत्पन्न करें

इसे pump_mixing.py के रूप में सहेजें और python3 pump_mixing.py चलाएँ। केवल मानक लाइब्रेरी आवश्यक है।

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")

आउटपुट ढलान 2.00, अंतःखंड −4.00, 20 mL के लिए 12.00 s का कमांड, 40 s पर 76.00 mL, और 270 s पर पुष्टि हैं। 40 s का होल्ड-आउट संदर्भ भी उसी सिंथेटिक समीकरण से आता है, इसलिए यह वास्तविक उपकरण के लिए सामान्यीकरण का प्रमाण नहीं है। 80 s समय स्थिरांक को 120 s में बदलने पर 390 s पर पुष्टि मिलती है। यदि रिकॉर्डिंग में कोई योग्य विंडो मौजूद नहीं है, तो कोड None लौटाता है।

जाँचों को एक और जोड़ की अनुमति से जोड़ें

एक नियंत्रण कार्यान्वयन को टाइमर से अधिक की आवश्यकता होती है। यह लेख प्रीचेक, एक जोड़, मिश्रण/माप प्रतीक्षा और पुनर्मूल्यांकन के लिए अलग चरण प्रस्तावित करता है। सीमा से बाहर कमांड, अनुपलब्ध या पुरानी रीडिंग, रुका हुआ परिसंचरण, असामान्य स्तर या अवलोकन अवधि के भीतर स्थिर न होना — इन्हें जाँच लंबित रहते हुए आगे की जोड़ को रोकना चाहिए। अनुपलब्ध नमूनों को पिछले मान से न भरें और इसे निरंतर स्थिरता के रूप में न गिनें।

प्रतीक्षा के बाद लक्ष्य से नीचे की EC रीडिंग तुरंत किसी विशेष घटक की कमी स्थापित नहीं करती; जड़ क्षेत्र की मूल बातें में समझाए गए EC और संरचना के बीच के अंतर को संरक्षित रखें। प्रति-जोड़, संचयी और पुनः प्रयास सीमाओं के साथ खुराक नियंत्रण डिज़ाइन करने से पहले अगला कदम मापे गए लॉग के मुकाबले डिलीवरी पूर्वानुमानों और प्रतीक्षा मानदंडों का आकलन करना है।

सीईए खुराक नियंत्रण — सीमाएँ, माप प्रतीक्षा और दोष स्थितियाँ

एक कम रीडिंग बार-बार जोड़ को उचित नहीं ठहराती

पंप अंशांकन और मिश्रण प्रतीक्षा ने डिलीवर किए गए आयतन को उस समय से अलग किया जब अवलोकन स्थिर होते हैं। अगला प्रश्न यह है कि क्या इस समय एक और जोड़ की अनुमति है। मिश्रण के दौरान एक कम रीडिंग, एक पुराना नमूना या रुका हुआ परिसंचरण उस अनुमति को स्थापित नहीं करता।

यह गाइड आयतन, प्रयास गणना और अवलोकनों पर अलग परिचालन स्थितियों और जाँचों के साथ एक शैक्षणिक डिज़ाइन प्रस्तावित करती है। सभी मान और इनपुट सिंथेटिक हैं, परिचालन सीमाएँ या उर्वरक अनुशंसाएँ नहीं। Python उदाहरण केवल एक अधिकृति गेट को पुनरुत्पन्न करता है; यह पंप संचालित नहीं करता।

एक उम्मीदवार की गणना करें, फिर तय करें कि क्या वह निष्पादित हो सकता है

टैंक लेखांकन से व्युत्पन्न एक उम्मीदवार को अभी भी अंशांकन सीमा, उपकरण स्थिति और पिछले संचालन का आकलन कर सकने वाले अवलोकनों के मुकाबले जाँच की आवश्यकता है।

UGA की इंजेक्टर गाइड आवधिक अंशांकन और रखरखाव की व्याख्या करती है। OSU की पोषक-प्रबंधन गाइड मूल्यांकन से पहले हिलाने और स्थिर रीडिंग का आह्वान करती है। नीचे दी गई स्थितियाँ और सीमाएँ इस लेख का प्रस्तावित डिज़ाइन हैं, इनमें से किसी भी स्रोत द्वारा दिया गया नियंत्रक विनिर्देश नहीं।

छह परिचालन स्थितियों को अलग रखें

स्थिति गतिविधि संक्रमण स्थिति
CHECK अवलोकन, उम्मीदवार, शेष बजट और उपकरण को मान्य करें DOSE से पहले एक आरक्षण रिकॉर्ड करें; यदि उद्देश्य पहले ही पूरा हो चुका है तो DONE पर जाएँ
DOSE एक अद्वितीय संचालन ID के लिए एक कमांड जारी करें WAIT से पहले रुकने की पुष्टि करें; टाइमआउट या प्रवाह बेमेल FAULT की ओर ले जाता है
WAIT नई जोड़ों को प्रतिबंधित करें और पोस्ट-स्टॉप अवलोकन एकत्र करें योग्य अवलोकन REVIEW की ओर ले जाते हैं; समय सीमा तक स्थिर न होना FAULT की ओर ले जाता है
REVIEW अवलोकन और इतिहास का पुनर्मूल्यांकन करें संतुष्ट होने पर DONE, यदि एक और उम्मीदवार उचित है तो CHECK, असंगतियों के लिए FAULT
DONE आउटपुट को रुका रखें और रिकॉर्ड बंद करें बाद के संचालन के लिए एक नए परिचालन निर्णय की आवश्यकता होती है
FAULT रुकने का अनुरोध करें और आगे की जोड़ को प्रतिबंधित करें कारण, वितरित मात्रा और उपकरण की जाँच के बाद स्पष्ट पुनर्प्राप्ति

एक स्टॉप कमांड जारी करना यह पुष्टि करने से अलग है कि प्रवाह रुक गया है। सॉफ़्टवेयर स्थिति नाम एक विफल वाल्व या पंप को नहीं रोक सकते। एक कार्यान्वयन को आउटपुट फ़ीडबैक, उपकरण-साइड स्टॉपिंग तंत्र और परिभाषित पुनः आरंभ व्यवहार की भी आवश्यकता होती है।

FAULT को एक संक्षिप्त प्रतीक्षा के बाद स्वचालित रूप से CHECK पर वापस न लाएँ। इसके कारण को हल किए बिना एक संचालन को दोहराने से अनपेक्षित जोड़ जमा हो सकती हैं।

कमांड जारी करने से पहले बजट चार्ज करें

प्रति जोड़ 16–20 mL, प्रति परिचालन सत्र 50 mL और अधिकतम तीन अधिकृतियों की उदाहरणात्मक सीमाओं का उपयोग करें। 16 mL न्यूनतम पिछले लेख के 10 s पर सिंथेटिक अंशांकन से मेल खाता है। ये संख्याएँ उपकरण सेटिंग्स नहीं हैं।

पहले से चार्ज किए गए आयतन B [mL] और उम्मीदवार d [mL] के लिए, आवश्यक है

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

अधिकृति पर, कमांड की ओर आगे बढ़ने से पहले B\leftarrow B+d और n\leftarrow n+1 रिकॉर्ड करें। यह लेजर उपभुक्त अधिकृति क्षमता को दर्शाता है, मापी गई डिलीवरी को नहीं। यदि कमांड के तुरंत बाद संचार विफल हो जाता है, तो शून्य डिलीवरी न मानें और इसकी क्षमता वापस न करें। मापी गई और अनिश्चित डिलीवरी को अलग-अलग रिकॉर्ड करें।

सिंथेटिक संचालन उम्मीदवार निर्णय के बाद कुल चार्ज परिणाम
पहला 16 mL 16 mL अनुमति
दूसरा, रुकने, मिश्रण और समीक्षा के बाद 16 mL 32 mL अनुमति
तीसरा, समीक्षा के बाद 18 mL 50 mL अनुमति
चौथा 16 mL 50 mL अस्वीकृत: प्रयास सीमा

32 mL चार्ज करने के बाद 20 mL का अनुरोध अस्वीकृत होता है क्योंकि यह 52 mL तक पहुँच जाएगा, भले ही एक प्रयास शेष हो। खुराक को शेष क्षमता तक स्वचालित रूप से सीमित करने के बजाय अवलोकनों और उम्मीदवार के आधार पर पुनर्विचार करें।

यहाँ एक सत्र एक रिकॉर्ड किए गए आरंभ और समाप्ति के साथ एक सुधार अनुक्रम है। एक लूप पुनरावृत्ति, पेज रिफ्रेश या पुनः कनेक्शन एक नया सत्र नहीं है। एक परिचालन प्रणाली को स्पष्ट बजट नवीनीकरण स्थितियों की आवश्यकता होती है, जैसे एक परिभाषित समय विंडो या टैंक प्रतिस्थापन, तथा ऐसे रिकॉर्ड जो पुनः आरंभ से बच जाते हैं। इस उदाहरण में कोई स्थायित्व नहीं है।

ताज़गी को स्थिरता से अलग जाँचें

प्राप्ति समय अकेला ताज़गी स्थापित नहीं करता। स्रोत माप समय, घड़ी समकालन और संचालन के सापेक्ष क्रम पर विचार करें। यहाँ age_s एक पहले से परिवर्तित माप आयु है जो केवल शून्य और पाँच सेकंड के बीच स्वीकार्य है। भविष्य के टाइमस्टैम्प से एक ऋणात्मक आयु भी अस्वीकृत है।

after_stop का अर्थ है कि अवलोकन पिछले स्टॉप की पुष्टि के बाद का है। पहली जोड़ के लिए, वर्तमान प्रीचेक शुरू होने के बाद प्राप्त अवलोकन का उपयोग करें। stable पिछली गाइड में चर्चा किए गए अवलोकनों के अनुक्रम पर आधारित एक अपस्ट्रीम निर्णय है। एक अकेला अपरिवर्तित मान स्थिरता स्थापित नहीं करता: अनुपलब्ध डेटा, अटके हुए सेंसर और स्थानों के बीच असहमति का आकलन करें।

पाँच सेकंड एक शैक्षणिक धारणा है। नमूनाकरण अंतराल और संचार विलंब के साथ असंगत सीमा उपयोगी अवलोकनों को अस्वीकृत कर सकती है। इसे केवल बढ़ाने से पुराने-डेटा की समस्याएँ हल नहीं होतीं।

Python में अधिकृति गेट आज़माएँ

इसे dosing_gate.py के रूप में सहेजें और python3 dosing_gate.py चलाएँ। केवल मानक लाइब्रेरी आवश्यक है।

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"

पहले तीन निर्णय ALLOW हैं; चौथा ATTEMPTS है। चार्ज किए गए कुल 16, 32, 50 और 50 mL हैं। प्रत्येक पुनरावृत्ति के अंत में प्रदर्शन स्थिति को CHECK पर रीसेट करना सिंथेटिक सफल रुकने, मिश्रण और पुनर्मूल्यांकन को दर्शाता है। एक कार्यान्वयन को केवल इसलिए यह संक्रमण नहीं करना चाहिए क्योंकि एक निश्चित टाइमर समाप्त हो गया।

यह फ़ंक्शन संख्यात्मक आर्ग्युमेंट के साथ एक ऑफ़लाइन शैक्षणिक गेट है। यह संचार इनपुट को पार्स नहीं करता, एक खुराक की गणना नहीं करता, स्थिरता स्थापित नहीं करता, वास्तविक प्रवाह की निगरानी नहीं करता या स्थिति मशीन को निष्पादित नहीं करता। यह NaN, अनंत, ऋणात्मक चार्ज किए गए आयतन और अमान्य प्रयास गणना को अस्वीकार करता है, लेकिन यह एक संपूर्ण बाह्य-इनपुट API नहीं है।

अस्वीकृति सीमाओं का अभ्यास करें

इनपुट या स्थिति अपेक्षित परिणाम
WAIT में एक और उम्मीदवार आता है STATE; कोई अतिरिक्त बजट चार्ज या कमांड नहीं
आयु छह सेकंड या ऋणात्मक है STALE
अवलोकन रुकने से पहले का है, या स्थिर नहीं है STALE या UNSTABLE
परिसंचरण रुका हुआ या असामान्य स्तर INTERLOCK
उम्मीदवार 15 या 21 mL है DOSE_RANGE
32 mL चार्ज करने के बाद 20 mL का अनुरोध BUDGET
उम्मीदवार या चार्ज किया गया आयतन NaN है INVALID

एक कार्यान्वयन को यह भी परीक्षण करना चाहिए कि एक संचालन ID को फिर से भेजना दो बार निष्पादित न हो सके। बजट परिवर्तन और संचालन ID को एक साथ प्रतिबद्ध करें ताकि प्रतिस्पर्धी अनुरोध एक ही शेष क्षमता को खर्च न कर सकें। रुकावट के बाद, फिर से शुरू करने से पहले स्थायी कमांड को वास्तविक उपकरण स्थिति के साथ समेटें।

यह क्या स्थापित करता है

यह उदाहरण दिए गए इनपुट और सीमाओं के मुकाबले अधिकृति निर्णयों की जाँच करता है। यह EC से व्यक्तिगत घटक की कमी या pH अंतर से अम्ल मात्रा का अनुमान नहीं लगाता। यह वृद्धि, उपज, उपकरण सुरक्षा या सांद्रता ट्रैकिंग को भी सत्यापित नहीं करता।

लेखांकन, डिलीवरी अंशांकन, मिश्रण मूल्यांकन और अधिकृति की भूमिकाएँ अब जुड़ी हुई हैं। मापे गए उपकरण लॉग के साथ सत्यापन अभी खुला है। अगला चरण NFT, DWC और ड्रिप जैसी उत्पादन प्रणालियों के माध्यम से जल पथ है, जहाँ टैंक और जड़ों के बीच का संबंध बदल जाता है।

What to read next

EC, pH और घटक द्रव्यमान के बीच के अंतर की समीक्षा करें।CEA सेंसिंग और इमेज एस्टिमेशन — सेंसर प्लेसमेंट और प्रक्षेपित पत्ती क्षेत्रContinue the seriesसीईए जल पथ और बहु-स्तरीय हाइड्रोलिक्स — NFT, DWC, ड्रिप और हेड संतुलनExplore another aspect of this fieldCEA एक्वापॉनिक्स — मछली, सूक्ष्मजीवों और पौधों के लिए जल-गुणवत्ता सीमाएँ