मैंने चिकित्सा उपकरणों के एक टुकड़े के लिए एक सीमित राज्य मशीन का निर्माण किया था। एफएसएम परिभाषित एक एक्सएमएल प्रारूप के माध्यम से विन्यास योग्य था।
एक राज्य मशीन को परिभाषित करने के लिए, एक राज्य के नक्शे का उपयोग करने का डिजिटल सर्किट डिजाइन पर अनुभव पर भरोसा करना पड़ता है,
आप एक शुल्क मार्ग संक्रमण नक्शे के रूप में मैं क्या शब्द का प्रयोग किया है। संयुक्त राज्य अमेरिका के पूर्वी तट में, अधिकांश राजमार्गों को उपनाम टर्नपीक्स हैं। टर्नपाइक प्राधिकरण टर्नपीक टोल मूल्य निर्धारण मानचित्र जारी करते हैं। यदि एक टोल अनुभाग में 50 निकास होते हैं, तो मूल्य निर्धारण मानचित्र में 50rows x 50cols तालिका होगी, जो पंक्तियों और स्तंभ दोनों के रूप में निकास को सूचीबद्ध करती है। बाहर निकलने के लिए 20 से बाहर निकलने के लिए टोल चार्ज का पता लगाने और 30 से बाहर निकलने के लिए, आप बस पंक्ति 20 और कॉलम 30 के छेड़छाड़ की तलाश करते हैं।
30 राज्यों की एक राज्य मशीन के लिए, टर्नपाइक संक्रमण मानचित्र 30 x 30 होगा मैट्रिक्स सभी 30 संभावित राज्यों पंक्ति और कॉलम के अनुसार लिस्टिंग। आइए हम पंक्तियों को वर्तमान राज्यों और स्तंभों को अगले राज्य होने का निर्णय लेते हैं।
प्रत्येक छेड़छाड़ सेल एक वर्तमान स्थिति (पंक्ति) से एक अगला राज्य (कॉल) में संक्रमण की "कीमत" सूचीबद्ध करेगा। हालांकि एक $ मूल्य के बजाय, सेल इनपुट तालिका में एक पंक्ति का संदर्भ देगा, जिसे हम संक्रमण आईडी के रूप में टर्म कर सकते हैं।
मेडिकल उपकरण में एफएसएम I विकसित हुआ, वहां स्ट्रिंग, एनम्स, इंट इत्यादि इनपुट थे। इनपुट तालिका में इन इनपुट उत्तेजना कॉलम-वार सूचीबद्ध थे।
इनपुट तालिका बनाने के लिए, आप इनपुट के सभी संभावित संयोजनों को सूचीबद्ध करने के लिए एक साधारण दिनचर्या लिखेंगे। लेकिन मेज बड़ी होगी। आपके मामले में, तालिका में 4320 पंक्तियां होंगी और इसलिए 4320 संक्रमण आईडी होगी। लेकिन यह एक कठिन टेबल नहीं है क्योंकि आपने प्रोग्राम को प्रोग्रामेटिक रूप से जेनरेट किया है। मेरे मामले में, मैंने ब्राउज़र पर संक्रमण इनपुट तालिका (और टर्नपाइक टेबल) को सूचीबद्ध करने के लिए एक सरल जेएसपी लिखा या एमएस एक्सेल में प्रदर्शित होने के लिए सीएसवी के रूप में डाउनलोड किया।
इन दो तालिकाओं के निर्माण में दो दिशाएं हैं।
डिज़ाइन दिशा, जहां आप टर्नपाइक तालिका को सभी संभावित संक्रमणों का निर्माण करते हैं, गैर-पहुंच योग्य संक्रमणों को दूर करते हैं। फिर प्रत्येक पहुंच योग्य संक्रमण के लिए सभी अपेक्षित इनपुट की इनपुट तालिका को केवल संक्रमण संख्या के रूप में पंक्ति संख्या के साथ संयोजित करें। प्रत्येक संक्रमण आईडी टर्नपाइक संक्रमण मानचित्र के संबंधित सेल पर लिखी जाती है। हालांकि, चूंकि एफएसएम एक स्पैर मैट्रिक्स है, इसलिए सभी संक्रमण आईडी का उपयोग टर्नपाइक संक्रमण मानचित्र की कोशिकाओं में नहीं किया जाएगा। इसके अलावा, एक संक्रमण आईडी कई बार इस्तेमाल किया जा सकता है क्योंकि एक ही संक्रमण की स्थिति राज्य परिवर्तन की एक से अधिक जोड़ी पर लागू हो सकती है।
परीक्षण दिशा विपरीत है, जहां आप इनपुट तालिका बनाते हैं। आपको संपूर्ण संक्रमण परीक्षण के लिए एक सामान्य दिनचर्या लिखनी है।
दिनचर्या पहले टेस्ट चक्र शुरू करने के लिए राज्य-मशीन को एंट्रीपॉइंट स्थिति में लाने के लिए एक संक्रमण अनुक्रम तालिका पढ़ेगी। प्रत्येक वर्तमान स्थिति में, यह सभी 4320 संक्रमण आईडी के माध्यम से चलाने के लिए तैयार है। टर्नपाइक संक्रमण मानचित्र में वर्तमान राज्यों की प्रत्येक पंक्ति पर, सीमित संख्या में कॉलम मान्य संख्याएं होंगी।
आप आदानों कि यह इनपुट मेज से पढ़ता है, यह सुनिश्चित करने के अप्रयुक्त संक्रमण आईडी एक वर्तमान स्थिति पर कोई प्रभाव नहीं के सभी 4320 पंक्तियों अपरोक्ष चक्र को नियमित करना चाहेंगे। आप परीक्षण करना चाहते हैं कि सभी प्रभावशाली संक्रमण आईडी मान्य संक्रमण हैं।
लेकिन आप नहीं कर सकते - क्योंकि एक बार एक प्रभावी संक्रमण पंप हो जाता है, यह मशीन की स्थिति को एक पूर्व राज्य में बदल देगा और आपको पिछले पिछले राज्य में शेष संक्रमण आईडी के परीक्षण को पूरा करने से रोक देगा। एक बार जब मशीन राज्य बदल जाती है, तो आपको फिर से संक्रमण आईडी 0 से परीक्षण शुरू करना होगा।
संक्रमण पथ चक्रीय या अपरिवर्तनीय या पथ के साथ चक्रीय और अपरिवर्तनीय वर्गों का संयोजन हो सकता है।
अपने परीक्षण दिनचर्या के भीतर, आपको प्रत्येक राज्य के लिए उस राज्य में पंप की गई अंतिम संक्रमण आईडी को याद रखने के लिए एक रजिस्टर की आवश्यकता है। हर बार परीक्षण एक प्रभावी संक्रमण आईडी तक पहुंचता है, कि उस रजिस्टर में संक्रमण आईडी छोड़ी जाती है। ताकि जब आप एक चक्र पूरा कर लें और पहले से ही ट्रैवर्स किए गए राज्य पर वापस आएं, तो आप रजिस्टर में संग्रहीत एक से अधिक संक्रमण आईडी पर फिर से शुरू करना शुरू कर देते हैं।
आपकी दिनचर्या को एक संक्रमण पथ के अपरिवर्तनीय वर्गों का ख्याल रखना होगा, एक मशीन को अंतिम स्थिति में लाया जाता है, यह प्रवेश बिंदु स्थिति से परीक्षण को पुनरारंभ करता है, अगले संक्रमण आईडी से 4320 इनपुट को दोहराता है एक राज्य के लिए संग्रहीत की तुलना में। इस तरह, आप मशीन के सभी संभावित संक्रमण पथों को पूरी तरह से खोज सकेंगे।
सौभाग्य से, एफएसएम प्रभावी संक्रमणों के स्पैर मैट्रिस हैं क्योंकि संपूर्ण परीक्षण संभावित राज्यों के संक्रमण आईडी आईडी संख्या के पूर्ण संयोजन का उपभोग नहीं करेगा। हालांकि, कठिनाई होती है यदि आप विरासत एफएसएम से निपट रहे हैं जहां दृश्य या तापमान राज्यों को परीक्षण प्रणाली में वापस नहीं खिलाया जा सकता है, जहां आपको प्रत्येक राज्य को नजरअंदाज करना है। वह बदसूरत होगा, लेकिन फिर भी हमने दो हफ्तों तक अतिरिक्त रूप से प्रभावशाली संक्रमणों के माध्यम से दृष्टि से उपकरणों का परीक्षण किया।
आपको एक संक्रमण अनुक्रम तालिका की आवश्यकता नहीं हो सकती है (मशीन को वांछित प्रविष्टि बिंदु पर लाने के लिए परीक्षण दिनचर्या के लिए प्रत्येक प्रविष्टि बिंदु स्थिति के लिए) यदि आपका एफएसएम आपको एक साधारण रीसेट के साथ प्रवेश बिंदु तक पहुंचने और संक्रमण लागू करने की अनुमति देता है आईडी बस एक एंट्रीपॉइंट स्थिति के लिए होगा। लेकिन एक संक्रमण अनुक्रम तालिका पढ़ने में आपकी रूटीन उपयोगी है क्योंकि अक्सर, आपको राज्य नेटवर्क के बीच में जाना होगा और वहां से अपना परीक्षण शुरू करना होगा।
आपको संक्रमण और राज्य मानचित्रों के उपयोग से परिचित होना चाहिए क्योंकि मशीन और साक्षात्कार उपयोगकर्ताओं के सभी संभावित और अनियंत्रित राज्यों का पता लगाना बहुत उपयोगी है यदि वे वास्तव में उन्हें भूरे रंग के बाहर करना चाहते थे (संक्रमण अप्रभावी बनाते हैं और राज्य पहुंच योग्य नहीं होते हैं)।
मेरा लाभ यह था कि यह उपकरण का एक नया टुकड़ा था और मेरे पास राज्य-मशीन नियंत्रक को एक्सएमएल फाइलों को पढ़ने के लिए डिजाइन करने का विकल्प था जिसका मतलब है कि मैं राज्य मशीन के व्यवहार को वैसे भी बदल सकता हूं, वैसे भी मैं वैसे भी चाहता हूं ग्राहक चाहता था और मैं यह आश्वस्त करने में सक्षम था कि अप्रयुक्त संक्रमण आईडी वास्तव में अप्रभावी थीं।
परिमित राज्य मशीन नियंत्रक की जावा सूची के लिए http://code.google.com/p/synthfuljava/source/browse/#svn/trunk/xml/org/synthful। टेस्ट दिनचर्या शामिल नहीं है।
क्या आपने किसी भी मौके पर अभी तक सभी जोड़े की कोशिश की? क्या आपको एक और तरीका मिला है जो आपको चाहिए? –
दुर्भाग्यवश मेरे काम का समय इस समय काफी तंग है - मुझे इस सप्ताह के दौरान इसमें देखने के लिए कुछ और समय मिलना चाहिए। वर्तमान में राज्य मानचित्र सबसे अच्छा समाधान (h2g2java) जैसा दिखता है, हालांकि मैंने अभी तक उन सभी में पूरी तरह से ध्यान नहीं दिया है। – Pondidum
मुझे यकीन नहीं है कि मैं पूरी तरह से * राज्य मैप्स * की अवधारणा को समझता हूं (वास्तव में मैं * मुझे यकीन है कि मुझे समझ में नहीं आता है) –