रिकॉर्डिंग उपकरणों से डेटा संग्रह

हेब्र के सभी निवासियों को बधाई! मैं अपने विचार साझा करना चाहूंगा, जिसे मैं आंशिक रूप से महसूस करने में कामयाब रहा। लेकिन मैं इस तरह की परियोजना के महत्व की सराहना नहीं कर सकता हूं, और मैं इस बारे में आपकी राय और आपकी रचनात्मक आलोचना सुनना चाहूंगा।

संक्षिप्त पृष्ठभूमि


ASODU समूह में एक इंजीनियर के रूप में मूल संयंत्र में आने के बाद, विभिन्न प्रकार के रिकॉर्डिंग उपकरणों से डेटा एकत्र करने के लिए तंत्र के साथ काम करना मेरा एक काम था। मैं ध्यान देता हूं कि संयंत्र में इस तरह के उपकरणों का एक अच्छा "चिड़ियाघर" है। जैसा कि आप जानते हैं, रिकॉर्डिंग उपकरणों के लिए, हमेशा एक विशेष सॉफ़्टवेयर होता है जो आपको इसे कॉन्फ़िगर और पोल करने की अनुमति देता है। लेकिन सभी प्रकार के उपकरणों से दूर, सॉफ्टवेयर है जो डिवाइस से डेटा प्राप्त करने और इसे आगे के प्रसंस्करण और संग्रह के लिए एक सामान्य वातावरण में रखने के लिए उपयोग किया जा सकता है। तो यह समस्या मेरे सामने हल हो गई थी, एक प्रोग्राम लिखकर जो उपलब्ध सभी उपकरणों को क्वेरी करेगा, और एकत्रित डेटा को एक ही डेटाबेस पर अपलोड करेगा। लेकिन समस्या यह थी कि जब एक नए प्रकार का उपकरण दिखाई दिया, तो इस कार्यक्रम को फिर से शुरू करने के लिए लगातार आवश्यक था, इसके अलावा, यह दृढ़ता से एक विशिष्ट डीबीएमएस से बंधा हुआ था। एक विन्यासकर्ता या किसी भी परीक्षक के हाथ में नहीं होने के कारण, यह सब ट्रैकिंग प्रक्रिया को निरंतर पीड़ा देता है। और फिर एक निश्चित प्रणाली को लागू करने के लिए विचार आया जो डेटा संग्रह तंत्र को अधिकतम बनाए रखने के काम को सरल करेगा। ऐसी प्रणाली के लिए, मैंने निम्नलिखित आवश्यकताओं को सामने रखा है:
  1. किसी भी प्रकार / उपकरण का साक्षात्कार। मॉड्यूल के माध्यम से कार्यक्रम का विस्तार करके इसे प्राप्त किया जाना चाहिए।
  2. आप जैसे चाहें डेटा अपलोड करें, और कभी भी। यह दृष्टिकोण मॉड्यूल के माध्यम से भी प्राप्त किया जाना चाहिए।
  3. एक उपकरण की उपस्थिति जो पूरी सर्वेक्षण प्रक्रिया को आसानी से कॉन्फ़िगर करना संभव बनाती है।
  4. एक उपकरण की उपस्थिति जो आपको मतदान मॉड्यूल और डेटा अपलोड मॉड्यूल दोनों का परीक्षण और डीबग करने की अनुमति देती है।
  5. सर्वेक्षण का कार्य एक सेवा के रूप में काम करना चाहिए, लेकिन साथ ही, सर्वेक्षण की प्रगति पर दृष्टि रखने और डेटा अपलोड करने की क्षमता भी मौजूद होनी चाहिए।


कार्यक्षेत्र


अपने उद्यम को लागू करने के लिए, मैंने निम्नलिखित उपकरणों का उपयोग किया:
संकलक: gcc-3.4.2, gcc-4.6.1 और tinyc-0.9.25
ग्राफिक्स लाइब्रेरी: wxWidgets-1.8.10 + wxFormBuilder-3.2
डेटाबेस: SQLite-3.7.6.2

कार्यान्वयन


कार्यान्वयन में, मैं केवल कार्यक्रम के मुख्य भाग - डेटा संग्रह के बारे में संक्षेप में बात करूंगा। बाकी सॉफ्टवेयर पैकेज, मेरी राय में, इसके कार्यान्वयन में उतना दिलचस्प नहीं है।

क्लिपबोर्ड

मेरे लिए सबसे महत्वपूर्ण कार्य सिस्टम में डेटा संग्रहीत करना था। मेरे द्वारा कार्यान्वित बफर ने निम्नलिखित रूप लिया:
छवि

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

कोर

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

चूंकि दो प्रकार के मतदान कार्यक्रम हैं (एक सेवा के रूप में और एक कस्टम चित्रमय अनुप्रयोग के रूप में), कर्नेल को एक गतिशील पुस्तकालय में रखा जाता है जिसका उपयोग दोनों अनुप्रयोग करते हैं।

छवि

कर्नेल द्वारा उत्पन्न सभी धागे, अन्य चीजों के साथ, कर्नेल के लिए एक निरंतर संदर्भ प्राप्त करते हैं। इस प्रकार, प्रत्येक थ्रेड कर्नेल (RUN, STOP) की स्थिति की निगरानी कर सकता है। इस घटना में कि कर्नेल STOP मोड में प्रवेश करता है, तो सभी थ्रेड्स स्वतः बंद होने लगते हैं। RUN मोड पर स्विच करते समय, कर्नेल ऊपर वर्णित थ्रेड्स को फिर से बनाता है।

डिवाइस मतदान प्लगइन इंटरफ़ेस

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

इन कार्यों को संचालित करने वाली संरचनाएं, मुझे लगता है कि यह वर्णन करना अनावश्यक है, क्योंकि मेरा लक्ष्य प्रणाली के सामान्य सिद्धांत का वर्णन करना है। लेकिन किसके लिए यह दिलचस्प हो गया, दस्तावेज में देख सकते हैं।

निर्यात प्लगइन इंटरफ़ेस

निर्यात प्लगइन इंटरफ़ेस में चार कार्य होते हैं:

संरचनाएं जो इन कार्यों को संचालित करती हैं, मैं उपरोक्त के कारण भी वर्णन नहीं करूंगा।

परिणाम


फिलहाल, कॉम्प्लेक्स में निम्नलिखित सॉफ्टवेयर शामिल हैं:

कॉम्प्लेक्स विंडोज पर केंद्रित है, हालांकि WinAPI के लिए एक तंग बाध्यकारी केवल उस वर्ग में उपलब्ध है जो COM पोर्ट के साथ काम करता है। ठीक है, ज़ाहिर है, डिवाइस मतदान सेवा। बाकी सब कुछ wWWidgets लाइब्रेरी की कक्षाओं और कार्यों पर आधारित है।

काम का उदाहरण

मान लीजिए कि rmt-59 और ecograph-t प्रकार के दो उपकरण हैं। उनमें से प्रत्येक इंटरफ़ेस कनवर्टर "आरएस -485 - ईथरनेट" के लिए एक अलग पोर्ट से जुड़ा हुआ है। मतदान करने वाले कंप्यूटर पर, एक ड्राइवर होता है जो "ईथरनेट - RS232" को परिवर्तित करता है। इस प्रकार, हमारे पास दो कॉम-पोर्ट हैं (उदाहरण के लिए, कॉम -10 और कॉम -11), जिस पर एक डिवाइस स्थित है। दोनों उपकरणों के लिए, मान लें पता 1. दोनों डिवाइस 19,200 बीपीएस की डेटा दर के लिए कॉन्फ़िगर किए गए हैं।

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



उसके बाद, आपको एक सर्वेक्षण कॉन्फ़िगरेशन बनाना चाहिए। संपादक प्रोग्राम चलाएं और सर्वेक्षण सेट करें।



यदि आपने एक नया डेटाबेस बनाया है, तो आपको उसे रीडर.ini फ़ाइल में पथ निर्दिष्ट करना होगा। सर्वेक्षण के संचालन का परीक्षण करने के लिए प्रोग्राम रीडरजीयूआई चलाएं



अब, आपको डेटा निर्यात करने का ध्यान रखना होगा। मैंने विशेष प्लगइन्स नहीं बनाए। निर्यात कार्य के परीक्षण के लिए, एक परीक्षण प्लग-इन पैकेज में शामिल है, जो डेटा को एक पाठ फ़ाइल में निर्यात करता है। सबसे पहले, आपको TestExport प्रोग्राम का उपयोग करके इसके संचालन की जांच करनी चाहिए।



अब जब हमने सत्यापित कर लिया है कि प्लगइन सही तरीके से काम कर रहा है, तो हम इसे सर्वेक्षण कॉन्फ़िगरेशन में जोड़ सकते हैं।



सब कुछ, कॉन्फ़िगरेशन और परीक्षण पूरा हो गया है। अब आप सेवा को स्थापित और शुरू कर सकते हैं। हम ReaderSvcCtrl प्रोग्राम का उपयोग करके सेवा का प्रबंधन करते हैं।



अंतभाषण


बेशक, मैं बहुत अधिक लिख सकता था, लेकिन पाठक को बोर नहीं करने के लिए, मैं ऐसा नहीं करूंगा। यहाँ मेरी परियोजना के लिए एक कड़ी है। मुझे आपके सभी सवालों के जवाब टिप्पणियों में देने में खुशी होगी।

ऑपरेशन के दौरान सिस्टम के कई नुकसान पाए गए। इन नुकसानों में निम्नलिखित शामिल हैं:
  1. प्रदूषित चैनल के प्रकार का अभाव। प्रकार की आवश्यकता इस तथ्य के कारण है कि विभिन्न उपकरणों, विभिन्न प्रकार के मूल्यों (एनालॉग चैनल, गणितीय चैनल, अभिन्न मूल्य) के लिए, विशेष रूप से गठित अनुरोध की आवश्यकता होती है।
  2. गुणक अवधारणा का अभाव। यानी कुछ डिवाइस, जब मतदान होता है, तो मान को पूर्णांक के रूप में प्रसारित करते हैं। और ऐसे उपकरणों के लिए संख्या में अल्पविराम की स्थिति, अलग से पूछताछ की जाती है। और इस तरह के गुणक होने पर, उपयोगकर्ता अल्पविराम की स्थिति बदल सकता है। उदाहरण के लिए, यदि किसी दिए गए चैनल पर पूर्णांक और भिन्नात्मक मान के बीच विभाजक को पहले नंबर के बाद रखा जाता है, तो 0.1 का एक कारक आपको उचित रूप में नंबर लाने की अनुमति देगा। और मान 123 प्राप्त करने के बाद, सिस्टम, इसी कारक द्वारा इस संख्या को गुणा करते हुए, परिणाम 12.3 देगा।

Source: https://habr.com/ru/post/In142652/


All Articles