पीआईडी ​​एल्गोरिथ्म: लंबे समय की देरी के बाद तेजी से इनपुट मूल्य में बदलाव के लिए कैसे खाता है


15

मैं सर्वो-नियंत्रित वाल्वों का उपयोग करके गर्म और ठंडे नल के पानी को मिलाने के लिए एक Arduino Leonardo पर एक बुनियादी PID एल्गोरिदम को लागू करने की कोशिश कर रहा हूं। लक्ष्य तापमान को यथासंभव एक सेटपॉइंट के करीब रखना है। विशेष रूप से महत्वपूर्ण उपयोगकर्ता को बर्न्स से बचाने के लिए सेटपॉइंट को ओवरशूट करने से आउटपुट तापमान को रोक रहा है। दूसरी बात यह है कि सेटपॉइंट के पास तापमान जितना जल्दी हो सके उतना महत्वपूर्ण है।

तापमान में छोटे बदलाव के लिए, PID एल्गोरिदम का एक मानक कार्यान्वयन ठीक काम करने लगता है। लेकिन मुझे नहीं पता कि वाल्व तक पहुंचने के लिए गर्म पानी की प्रतीक्षा करते समय होने वाली लंबी देरी का कैसे पता लगाया जा सकता है, क्योंकि वाल्व की स्थिति बदलने के बाद ये देरी मानक देरी से बहुत अधिक समय तक होती है।

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

जब गर्म पानी अंत में वाल्व तक पहुंचता है, तो पाया गया तापमान अधिकतम गर्म पानी के तापमान पर बहुत तेजी से बढ़ता है। बड़ी इंटीग्रल एरर के कारण, गर्म पानी का वाल्व तापमान के सेटपॉइंट से अधिक होने के बाद लंबे समय तक 100% पर आयोजित किया जाता है, क्योंकि इंटीग्रल वैल्यू पर प्रतीक्षा करने के कारण यह सामान्य स्तर तक कम हो जाता है। इस प्रकार परिणाम सेकंड के कई (दसियों) के लिए अधिकतम तापमान वाला पानी है।

मुझे यकीन नहीं है कि इस संभावित लंबे विलंब के लिए कैसे खाता है । ऐसे मामले में, क्या अधिकतम प्रतिक्रिया समय को सीमित करने के लिए अभिन्न त्रुटि मूल्य पर बंधे ऊपरी (और निचले) को सेट करना बुद्धिमान होगा? यह अभिन्न घटक के उद्देश्य को हराने के लिए लगता है, और सेटपॉइंट तक पहुंचने के बाद भी कुछ अंतराल लगाएगा ।

या लंबे समय की देरी के बाद तेजी से इनपुट परिवर्तन को संभालने का एक बेहतर तरीका है?

किसी भी सलाह के लिए धन्यवाद!


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

जवाबों:


15

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

सबसे सरल उपाय यह है कि इंटीग्रेटर मूल्य को एक समझदार अधिकतम तक सीमित किया जाए । अभिन्न योगदान को सीमित करने से भी काम नहीं चलेगा, क्योंकि इंटीग्रेटर अभी भी कुछ बड़े मूल्य तक घायल हो जाएगा।

मैथवर्क्स के पास एक पृष्ठ है जिसमें कुछ अन्य समाधानों के साथ इंटीग्रल विंडअप है

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

जैसा कि यह एक बहुत ही विशेष, ज्ञात मामला है, आप नियंत्रक के लिए एक अलग मोड होने पर विचार कर सकते हैं। गर्म इनलेट तापमान को मापें, और जब यह सेटपॉइंट से नीचे हो, तो बस गर्म 100%, ठंडा 20% चलाएं। जब यह गर्म होता है, तो अच्छी प्रारंभिक स्थितियों के साथ, पीआईडी ​​पर स्विच करें।


1
हाँ। आदर्श रूप से आप गर्म इनलेट तापमान को स्वतंत्र रूप से माप सकते हैं, और इस तरह से विंडअप को रोक सकते हैं।
ब्रायन ड्रमंड

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

2
वास्तव में, मुझे नहीं लगता कि यह विशुद्ध रूप से इंटीग्रेटर विंडअप है, भले ही वह ऐसा हो। इसकी एक वैध चिंता यह है कि हमेशा
ईवीएन के

वाह, शानदार जवाब! मैं इस लाइन के साथ सोच रहा था (इंटीग्रेटर अधिकतम मूल्य को सीमित करता है) लेकिन प्रश्न को ठीक से वाक्यांश नहीं दिया था इसलिए मुझे गलत समझा गया। यह देखना अच्छा है कि मैं कम से कम एक समाधान के साथ बॉलपार्क में हूं। मुझे लगता है कि सबसे सरल समाधान "I" कारक को अक्षम करना होगा जब तक कि तापमान एक नियंत्रणीय सीमा तक नहीं पहुंचता। यह परिवर्तनों के लिए बहुत तेज़ प्रतिक्रिया की अनुमति देगा। फिर जब हम कुछ वास्तविक तापमान परिवर्तन देखते हैं और वांछित परिणाम के पास पहुंचते हैं, तो आवश्यक अतिरिक्त पुश को जोड़ने के लिए इंटीग्रल को फिर से सक्षम करते हैं। विस्तृत उत्तर के लिए धन्यवाद!
रयान ग्रिग्स

लेकिन अभिन्न शब्द इसे गति देने के लिए नहीं है, यह एक व्यवस्थित त्रुटि के लिए सही करने के लिए है, विशेष रूप से एक आनुपातिक गुणांक जो कि यह सही नहीं है। नहीं? और इस स्थिति में पी coef। हर समय परिपूर्ण नहीं हो सकता क्योंकि यह दोनों पाइपों में पानी के दबाव के आधार पर अलग-अलग होगा।
रोमन स्टार्कोव

4

इस प्रक्रिया को कुशलतापूर्वक नियंत्रित करने की कुंजी यह महसूस करना है कि गर्म और ठंडे नल सममित रूप से काम नहीं करते हैं, और किसी भी इष्टतम एल्गोरिदम को इसे ध्यान में रखना होगा।

जब आप एक समय के लिए गर्म पानी का उपयोग नहीं करते हैं, तो यह पाइप में ठंडा हो जाता है।

जब आप एक समय के लिए ठंडे पानी का उपयोग नहीं करते हैं, तो यह वैसा ही रहता है जैसा कि कभी था (जब तक कि ठंडा पानी चिलर के साथ ठंडे पानी की टंकी से न हो, जो गर्म गर्मी के दिनों में होना बहुत अच्छा होगा लेकिन मैं सट्टेबाजी व्यवहार में काफी दुर्लभ है)।

इस प्रकार हम मानते हैं कि हमें नहीं पता कि हमें गर्म पानी के पाइप से क्या मिलता है, लेकिन हम ठंडे पानी के पाइप पर निर्भर कर सकते हैं कि एक रन के दौरान बहुत अधिक स्थिर रहे।

इस प्रकार, मिश्रित पानी के तापमान से, और वाल्व सेटिंग को जानने से, और ठंडे पानी के तापमान के अनुमान से, हम अनुमान लगा सकते हैं कि वर्तमान में गर्म पानी के पाइप से पानी कितना गर्म है। फिर आप पीआईडी ​​के बिना सही आउटपुट तापमान प्राप्त करने के लिए वाल्व को समायोजित कर सकते हैं, बस एक थर्मोडायनामिक सूत्र के मूल्यांकन पर आधारित है।

"ठंडे पानी के तापमान का अनुमान" प्राप्त करने के लिए आप चक्र की शुरुआत में थोड़े समय (कुछ सेकंड के लिए) ठंडा पानी चला सकते हैं और तापमान को पढ़ सकते हैं। फिर मान लें कि यह आपके बाद नहीं बदलेगा, क्योंकि आपके पास दोनों तापमानों को हल करने के लिए पर्याप्त डेटा नहीं है।

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

कई तापमान संवेदकों के साथ फैन्सीयर समाधान संभव हैं।


एक और शानदार जवाब - पीआईडी ​​बॉक्स के बाहर सोच। मैंने केवल पानी के तापमान का परीक्षण करने और वांछित आउटपुट तापमान प्राप्त करने के लिए अनुमानित वाल्व पदों के साथ कुछ प्रकार के लुकअप टेबल बनाने पर विचार किया था। आप सही कह रहे हैं कि ठंड अपेक्षाकृत स्थिर है, हालांकि संभवतः सर्दियों में ठंडा हो सकता है। पानी की लाइनें लगभग 24-36 इंच पर दफन हैं और हमारे यहां आमतौर पर हल्के तापमान हैं। तब मैं अधिकतम गर्म पानी के उत्पादन तापमान (लगभग 120 एफ) के लिए भी जिम्मेदार हो सकता था और एक लुकअप तालिका बना सकता था जो वाल्वों को उचित रूप से रखता है, वार्म-अप के बाद ठीक-ट्यूनिंग के लिए पीआईडी ​​का उपयोग करके।
रयान ग्रिग्स

1
गहराई / स्रोत के आधार पर गर्म ग्रीष्मकाल के दौरान भी पानी बहुत ठंडा रह सकता है। घर के पाइपों में "ठंडा" पानी आराम कर रहा है जो नीचे से पंप किया जाएगा। तो ठंडे पानी वास्तव में उपयोग के साथ ठंडा हो जाता है (जब तक कि यह भूमिगत पानी के तापमान तक नहीं पहुंचता)। जब मैं "बड़े शहर" में जाता हूं तो मैं हमेशा "हैरान" रहता हूं और ठंडा पानी कभी ठंडा नहीं होता।
rickhg12hs

2

मैं अभिन्न विंड-अप संभावनाओं के लिए नियंत्रण इंजीनियरों के बारे में उपरोक्त अच्छे उत्तरों में से एक विवरण जोड़ना चाहता था। यह कई औद्योगिक प्रक्रियाओं में भी होता है और यह विज्ञान के बजाय एक कला है।

अभिन्न लाभ से बलिदान किए बिना इसके खिलाफ विशिष्ट पाठ्यपुस्तक क्रियाएं हैं जो प्रदर्शन की कल्पना के लिए वास्तव में आवश्यक हो सकती हैं।

  1. हर बार जब आप शून्य त्रुटि स्तर को पार करते हैं तो आप इंटीग्रेटर को रीसेट कर देते हैं। यह इंटीग्रेटर को एक अंधे संचायक के बजाय गैर-रैखिक तत्व का एक ऑन-डिमांड प्रकार बनाता है।

  2. आप मूल रूप से लूप में एक सूचक तत्व से अभिन्न एक्शन इनपुट ब्लॉक को जोड़ते हैं। यह या तो न्यायाधीश को एकीकृत करने का उत्पादन हो सकता है, चाहे उसने निर्माण शुरू किया हो (जिसे निर्णय लेने के लिए प्रक्रिया की समझ की आवश्यकता होती है)। या आप जाँचते हैं कि आपके एक्ट्यूएटर्स संतृप्त हैं या नहीं और उस जानकारी के आधार पर एक फीडबैक लूप तैयार करते हैं। मैंने अभी हाल ही में Google से निकली पहली लिंक को अनियमित रूप से उठाया और इस वीडियो के अंत में मेरे अंतिम बिंदु का एक आलेखीय विवरण है। https://www.youtube.com/watch?v=H4YlL3rZaNw


अच्छे अंक, विचार पर विस्तार के लिए धन्यवाद। वीडियो के लिए धन्यवाद, यह समस्या को बहुत अच्छी तरह से समझाता है।
टोमनेक्सस

1

कभी-कभी यह पीआईडी ​​मापदंडों के कई सेटों के लिए सहायक हो सकता है, सिस्टम के ऑपरेशन की सीमा के मोटे-दाने वाले चरणों के लिए, जिसे आप मक्खी पर बदलते हैं क्योंकि सिस्टम व्यवहार के एक चरण से दूसरे चरण में गुजरता है। उदाहरण के लिए, केपी, की, और केडी का एक सेट जब आप गर्म नल चालू करते हैं और केवल ठंडा पानी प्राप्त करते हैं; फिर एक बार जब आप तापमान कूदना शुरू करते हैं, तो Kp, Ki & Kd के दूसरे सेट पर जाएँ। फिर उसके अनुसार दोनों को ट्यून करें।

क्या आप ब्रेट ब्योरगार्ड द्वारा Arduino Playground में PID लाइब्रेरी का उपयोग कर रहे हैं? यह एक बहुत अच्छा है। और वहां इसका एक 'अनुकूली' उदाहरण भी है।


सुझाव के लिए धन्यवाद। पिड लाइब्रेरी का उपयोग नहीं करते हुए, मैंने इसे कैसे काम करता है, इसके बारे में और जानने के लिए खुद लिखा।
रयान ग्रिग्स

क्या आपने फ़ीड को आगे माना? यह तेज़ बदलाव की तरह है जो खुले लूप के माध्यम से आउटपुट को प्रभावित करता है, इसलिए आप प्रतिक्रिया करने के लिए बंद लूप की प्रतीक्षा नहीं करते हैं।
ग्रेगरी कोर्नब्लम

मैं अपने मस्तिष्क को चारों ओर लपेटने की कोशिश कर रहा हूं कि इस उदाहरण में "फीड फॉरवर्ड" कैसे काम करेगा। क्या इनपुट वांछित तापमान होगा, और आउटपुट वाल्व को पूर्व-निर्धारित स्थिति (जैसा कि ऊपर मेरी अन्य टिप्पणी में चर्चा की गई है) लुकअप तालिका या सरल समीकरण का उपयोग करके सेट करेगा?
रयान ग्रिग्स

आप फीडबैक का उपयोग अपनी प्रतिक्रिया (बंद लूप पीआईडी) के अलावा कर सकते हैं। आप फीडबैकवर्ड कंट्रोलर की कार्रवाई में केवल फीडबैक कंट्रोलर की कार्रवाई को जोड़ते हैं। आदर्श रूप से फीडफ़वर्ड नियंत्रक वाल्व का उलटा मॉडल होगा। Feedforward अनिवार्य रूप से आपको एक सेटपॉइंट परिवर्तन पर तुरंत कार्रवाई देता है। फीडफोर्वर्ड प्लस फीडबैक के साथ भी आपको फीडबैक कंट्रोल कम्पेसाटर में विंडअप की आवश्यकता होती है। फीडबैक कंपोनेंट को
फेल

1

क्या आपने सिस्टम को मॉडल किया है?

क्या आपके पास ओवरशूट दिखाने के लिए कुछ समय-आधारित डेटा है - विशेष रूप से फ्रीक

ये दो प्रश्न हैं जिन्हें किसी भी नियंत्रण-आधारित प्रश्न के साथ पूछा जाना चाहिए।

आपने जो वर्णन किया है, उससे आपका अभिन्न लाभ बहुत अधिक है, उच्च करने का तरीका है। यह इंटीग्रेटर विंडअप के कारण हो सकता है: दिखाए गए कोड में कुछ वास्तविक व्यावहारिक चिंताएं हैं जिनमें से एक यह असतत इंटीग्रेटर्स की सबसे बड़ी समस्या नहीं है

  • बहुत खराब असतत इंटीग्रेटर टोपोलॉजी
  • I आउटपुट पर कोई क्लैम्प्स / सीमाएँ P + I आउटपुट पर अकेले नहीं जाने देती हैं

यह समान रूप से हो सकता है क्योंकि यह बहुत अधिक है और इसे कम होने में समय लगता है।

तो हाँ I रजिस्टर में संग्रहीत मूल्य कहने के लिए घाव हो सकता है ... 1000C क्योंकि P + I सिस्टम की प्रतिक्रिया के लिए सेट नहीं किया गया था और फिर इसे बंद करना होगा।

पहली बात यह है कि मैं पोस्ट प्रोसेसिंग के लिए रियलटाइम डेटा कैप्चर करूंगा। फिर भी मैं पी-केवल चलाऊंगा और आनुपातिक लाभ को सुनिश्चित करूँगा ताकि वांछित तापमान (नियंत्रण सिद्धांत बताता है कि यह नहीं होगा)। इस पर निर्भर करता है कि क्या

  1. वर्तमान कैप्चर डेटा का विश्लेषण उपयुक्त I लाभ का निर्धारण करने में सुविधा प्रदान करता है
  2. एक संयंत्र मॉडल उपयुक्त लाभ बनाने के लिए प्राप्त होता है

मैं एक बेहतर कार्यान्वयन होने के लिए PID कोड को बदलकर शुरू करूंगा और फिर एक बिंदु को साबित करने के लिए I का एक छोटा सा जोड़ दूंगा।

आपको वास्तव में यह निर्धारित करने की आवश्यकता है कि इन लाभों का क्या मतलब है। इनपुट तापमान है, आउटपुट है ... प्रवाह? इसलिए एक फ्लो / सी ट्रांसफर और एक फ्लो / सीएस ट्रांसफर फ़ंक्शन होना चाहिए।


अच्छा जवाब भी, धन्यवाद। मैंने सिस्टम को मॉडल नहीं किया है, क्योंकि मुझे नहीं पता कि अभी तक कैसे - इस अध्ययन में मेरे पैर गीले होने की शुरुआत है। आप सही हैं कि मैं मूल्य उचित सीमा से बाहर बढ़ जाता है। क्या आप मुझे इंटीग्रेटर के लिए एक बेहतर कार्यान्वयन एल्गोरिदम के लिए निर्देशित कर सकते हैं? स्यूडोकोड सबसे अच्छा है, क्योंकि यह मुझे कॉपी / पेस्ट के बजाय कोड को सीखने और अपने शब्दों में रखने की अनुमति देता है। इसके अलावा, क्या आप मुझे इस तरह से सरल सिस्टम मॉडलिंग के लिए किसी भी परिचय के लिए निर्देशित कर सकते हैं? आप सही हैं कि प्रवाह स्तर (गर्म और ठंडा मिश्रण) इस प्रणाली के आउटपुट हैं। वर्तमान में यह केवल व्युत्क्रमानुपाती H / C है।
रयान ग्रिग्स

1
बीमार शीघ्र ही एक
ट्विक जोड़ते हैं

1

इंटीग्रल विंडअप को हल करने का एक तरीका यह है कि जब भी आपका नियंत्रण आउटपुट अपने अधिकतम विक्षेपण पर हो, तो त्रुटि को जमा करना बंद कर दिया जाए । या यह अधिकतम विक्षेपण से कितनी दूर है, इसके पैमाने। इसलिए जब भी आपका नियंत्रक "गर्म पानी 100%, ठंडा पानी 0%" आउटपुट करता है, तो बस त्रुटि जमा न करें, लेकिन इसे शून्य पर भी रीसेट न करें।

मुझे अभिन्न को अधिकतम तक सीमित करना पसंद नहीं है क्योंकि तब आपके पीआईडी ​​के लिए कौन सी व्यवस्थित त्रुटि की भरपाई हो सकती है, इसकी एक सीमा है।

मैं यह भी सुझाव दूंगा कि "डंब" पीआईडी ​​बनाने के बजाय केवल एक पैरामीटर है जिसे वह अंतर्निहित सिस्टम के ज्ञान के बिना नियंत्रित करने की कोशिश कर रहा है, आप दो अतिरिक्त तापमान सेंसर स्थापित करते हैं, दोनों गर्म और ठंडे इनपुट पर। फिर आप एक फ़ंक्शन खोजने का प्रयास करते हैं जो इनपुट तापमान के आधार पर वांछित स्थिति का अनुमान लगाता है, और आप इस फ़ंक्शन के आउटपुट में त्रुटि के लिए समायोजित करने के लिए केवल PID लूप का उपयोग करते हैं ।

त्रुटि महत्वपूर्ण होगी क्योंकि आप प्रवाह को मापते नहीं हैं (अच्छी तरह से, जब तक आप निश्चित रूप से नहीं करते हैं), जो न केवल वाल्व पदों (ज्ञात) पर निर्भर करता है, बल्कि पानी के दबाव (अज्ञात) पर भी निर्भर करता है।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.