FBD ধারাবাহিক নিয়ন্ত্রণ: স্টেট মেশিন প্রোগ্রামিং টিউটোরিয়াল

একজন প্রশিক্ষণার্থী একবার জিজ্ঞাসা করেছিলেন কেন তার ভর্তি মেশিনের প্রোগ্রাম কখনও কখনও একটি পদক্ষেপ বাদ দেয় এবং বোতলটি অবস্থান দেওয়ার আগে ভর্তি হয়। উত্তরটি ছিল না একটি মিসিং টাইমার — এটি ছিল একটি মিসিং স্টেট। তার প্রোগ্রামটি স্বাধীন শর্তগুলির একটি স্তূপ ছিল; বাস্তব ধারাবাহিক মেশিনগুলি একটি স্টেট মেশিন, এবং পার্থক্য হল একটি প্রোগ্রামের মধ্যে পার্থক্য যা কাগজে কাজ করে এবং একটি প্রোগ্রামের মধ্যে যা সোমবার কাজ করে।

ধারাবাহিক নিয়ন্ত্রণ স্বয়ংক্রিয়তায় সর্বত্র রয়েছে: একটি ভর্তি লাইন, একটি টার্নটেবিল, একটি স্টাম্পিং প্রেস, একটি পেইন্ট বুথ। ক্লাসিক ভুল হল প্রতিটি আউটপুটকে একটি আলগা শর্ত হিসাবে লেখা — "যখন সেন্সর A এবং টাইমার B, ভালভ C খুলুন" — এবং তারপর 2 AM-এ অসম্ভব সংমিশ্রণগুলি ডিবাগ করা। সমাধান হল আউটপুটে চিন্তা করা বন্ধ করা এবং স্টেটে চিন্তা শুরু করা।

একটি স্টেট মেশিন আসলে কী

একটি স্টেট মেশিন হল নামকৃত পদক্ষেপগুলির একটি সেট এবং তাদের মধ্যে চলাচলের নিয়ম। মেশিনটি সর্বদা একটিই পদক্ষেপে থাকে: WAIT, POSITION, FILL, SEAL, EJECT। প্রতিটি পদক্ষেপের প্রবেশ কর্ম, প্রস্থান শর্ত এবং গার্ড থাকে। বোতলটি শুধুমাত্র FILL পদক্ষেপে ভর্তি হয়, এবং FILL পদক্ষেপটি শুধুমাত্র POSITION থেকে পৌঁছানো যায় যখন বোতল সেন্সর অবস্থান নিশ্চিত করে। এটি শাসনব্যবস্থার মতো শোনায়; এটি প্রকৌশলের মতো আচরণ করে।

xLogicSoft-এর FBD-তে, একটি স্টেট মেশিন ক্লাসিক শিফট রেজিস্টার প্যাটার্ন বা স্টেপ বিট হিসাবে ব্যবহৃত F ফ্ল্যাগগুলির উপর পরিষ্কারভাবে মানচিত্র করে। প্যাটার্ন: প্রতি পদক্ষেপে একটি F ফ্ল্যাগ, একটি ট্রানজিশন শর্তের সেট, এবং একটি একক ট্রানজিশন ব্লক যাতে মেশিনটি প্রতিটি ইভেন্টে ঠিক এক পদক্ষেপ এগিয়ে যায়। যেহেতু বর্তমান পদক্ষেপটি সর্বদা দৃশ্যমান — LCD দেখায় কোন F ফ্ল্যাগ সক্রিয় — অপারেটর এবং রক্ষণাবেক্ষণ কর্মী এক নজরে দেখতে পারেন মেশিনটি কোথায় মনে করে। সেই একক বৈশিষ্ট্যটি সমস্যার সমাধানের সময়কে যেকোনো ডায়াগনস্টিক ম্যানুয়ালের চেয়ে বেশি কাটিয়ে দেয়।

এটি তৈরি করা: তিনটি ভর্তি স্টেশন

একটি সহজ তিন-স্টেশন উদাহরণ নিন: একটি বোতল আসে, ভর্তি হয়, ক্যাপ হয়। পদক্ষেপগুলি:

  • ধাপ 0 IDLE: সব আউটপুট বন্ধ। পরিবর্তন: বোতল-উপস্থিত সেন্সর, শুরু পুশবাটন।
  • ধাপ 1 POSITION: কনভেয়র চালু থাকে যতক্ষণ না বোতল ভর্তি মাথায় থামে। পরিবর্তন: অবস্থান সেন্সর।
  • ধাপ 2 FILL: ভর্তি ভালভ একটি নির্দিষ্ট সময়ের জন্য খোলে অথবা যতক্ষণ না স্তর সেন্সর ট্রিপ করে। পরিবর্তন: টাইমার শেষ।
  • ধাপ 3 CAPPING: ক্যাপার নিচে নেমে চাপ দেয়। পরিবর্তন: চাপ নিশ্চিত, টাইমার শেষ।
  • ধাপ 4 EJECT: কনভেয়র বোতলটি বের করার জন্য চলে। পরিবর্তন: প্রস্থান সেন্সর পরিষ্কার।

প্রতিটি ট্রানজিশন একটি On-Delay বা একটি Wiping Relay (একক শট) ব্লক ব্যবহার করে যাতে অগ্রগতি ঠিক একবার ঘটে। প্রতিটি ট্রানজিশনের গার্ড হল পদক্ষেপটি নিজেই — পদক্ষেপ 2 শুরু হতে পারে না যতক্ষণ না মেশিনটি পদক্ষেপ 1-এ থাকে, পিরিয়ড। বোতলটি আগে ভর্তি হতে পারে না কারণ "আগে" একটি শর্ত হিসাবে বিদ্যমান নেই; এটি পদক্ষেপের টেবিলে নেই, এবং বোতলটি POSITION ছাড়ার আগে অবস্থান দেওয়া হয় না।

অপারেটরকে একটি ম্যানুয়াল স্টেপ মোড দিন এর আগে যে আপনি তাদের কিছু অন্য কিছু দেন। একটি সিলেক্টর ইনপুট মেশিনটিকে একবারে একটি পদক্ষেপ অগ্রসর হতে দেয়, যাতে একটি সেটআপ প্রযুক্তিবিদ POSITION, FILL এবং CAPPING আলাদাভাবে দেখার সময় লাইনে জগ করতে পারে। স্টেট মেশিন এটি তুচ্ছ করে তোলে — এক পদক্ষেপ অগ্রসর হওয়া হল পরবর্তী ট্রানজিশনকে জোর করা — এবং এটি কমিশনিংকে একটি রহস্য থেকে একটি চেকলিস্টে পরিণত করে। যে মেশিনগুলি ম্যানুয়ালি পদক্ষেপে অগ্রসর হতে পারে না সেগুলি হল মেশিনগুলি যা স্ক্রু ড্রাইভার দিয়ে ডিবাগ করা হয়।

ব্যর্থতা মোড পরীক্ষা

এটি সেই অনুশীলন যা প্রকাশ করে আপনি একটি স্টেট মেশিন বা একটি শর্তের স্তূপ তৈরি করেছেন কিনা: জরুরী অবস্থাগুলি তালিকাভুক্ত করুন। বোতল ভর্তি মাথার নিচে জ্যাম? মেশিনটি FILL-এ থাকতে হবে, পাম্প বন্ধ করতে হবে, এবং অ্যালার্ম দিতে হবে — EJECT-এ ঘুরে ঘুরে পণ্যটি মেঝেতে ফেলে দিতে হবে না। সেন্সর ব্যর্থ হয় এবং "বোতল উপস্থিত" চিরকাল রিপোর্ট করে? মেশিনটি POSITION পদক্ষেপের সময় শেষ করতে হবে এবং অ্যালার্ম দিতে হবে, রাতভর একই অদৃশ্য বোতল ভর্তি করতে হবে না। সেন্সর অন্য দিকে ব্যর্থ হয়, "কখনও উপস্থিত নয়"? মেশিনটি ধৈর্য সহকারে অপেক্ষা করে — এটি ঠিক, এটি মেশিনগুলির কাজ।

প্রোগ্রামে একটি ওয়াচডগ লিখুন: যদি মেশিনটি কোনও নন-IDLE পদক্ষেপে সর্বাধিক সময়ের চেয়ে বেশি সময় বসে থাকে, FAULT অবস্থায় নেমে আসুন, আউটপুটগুলি কেটে দিন, এবং অ্যালার্ম ফ্ল্যাশ করুন। সর্বাধিক সময় হল একটি সংখ্যা যা আপনি ইতিমধ্যেই সাইকেল সময় থেকে জানেন — আপনি অনুমান করছেন না, আপনি পদার্থবিদ্যা প্রয়োগ করছেন।

একটি ত্রুটি ঘটার আগে কী ঘটে তা নির্ধারণ করুন। সাধারণ পছন্দ: মেশিনটি যেখানে আছে সেখানে থেমে যায়, অপারেটর কারণটি পরিষ্কার করে, রিসেট চাপ দেয়, এবং সিকোয়েন্সটি IDLE-এ ফিরে আসে — অথবা যদি পণ্যটি এখনও নিরাপদ থাকে তবে বিঘ্নিত পদক্ষেপের শুরুতে। IDLE-এ ফিরে আসা ছোট মেশিনগুলির জন্য সহজ এবং নিরাপদ; মধ্য-চক্রে পুনরায় শুরু করা দ্রুত কিন্তু দাবি করে যে প্রতিটি আউটপুট স্টেট জানা এবং প্রমাণিত। একটি ভর্তি মেশিনের জন্য, IDLE হল সৎ উত্তর — অর্ধ-ভর্তি বোতল যেভাবেই স্ক্র্যাপ।

কেন FBD এই জন্য ল্যাডারকে পরাজিত করে

একটি ডিবাগিং অভ্যাস নিজেই অবিলম্বে পরিশোধ করে: বর্তমান পদক্ষেপটি সামনের LCD-তে একটি সাধারণ সংখ্যার মতো দৃশ্যমান করুন। অপারেটরের প্রথম রিপোর্ট হয়ে যায় "এটি পদক্ষেপ 4-এ আটকে আছে," "এটি কিছু অদ্ভুত করে," এবং পদক্ষেপ 4 তার ট্রানজিশন শর্তের দিকে সোজা নির্দেশ করে। xLogicSoft-এ ফ্ল্যাগ বিটগুলি মনিটর উইন্ডোতে সেখানেই রয়েছে, তাই একটি ল্যাপটপ সেশন LCD-তে যে একই ছবি দেখায়। অপারেটরের কথাগুলিকে প্রোগ্রামের অবস্থার সাথে মেলানো প্রতিটি সময় দুই ঘন্টার শিকারের সময়কে কুড়ি মিনিটে কমিয়ে দেয়।

ল্যাডার লজিক একটি স্টেট মেশিন প্রকাশ করতে পারে, কিন্তু এতে একশো রঙ্গ এবং একটি ডায়াগ্রাম লাগে যা কেউ পড়ে না। FBD-তে, পদক্ষেপের কাঠামো আপনার সামনে থাকে: শিফট রেজিস্টার বা ফ্ল্যাগ ব্লক বর্তমান পদক্ষেপটি দেখায়, ট্রানজিশন ব্লকগুলি দৃশ্যমান, এবং সিকোয়েন্সটি উপরে থেকে নীচে পড়ে। xLogicSoft পরিবেশে প্রায় সত্তরটি ফাংশন ব্লক রয়েছে, এবং একটি পাঁচ-পদক্ষেপের মেশিন ইন্টারলক সহ একটি প্রোগ্রাম পৃষ্ঠায় আরামদায়কভাবে ফিট করে। যখন মেশিনটি পরিবর্তিত হয় — নতুন স্টেশন, নতুন সেন্সর — আপনি লজিক পুনঃসংযোগ করার পরিবর্তে একটি পদক্ষেপ এবং দুটি ট্রানজিশন যোগ করেন।

কাগজে পদক্ষেপের টেবিল দিয়ে শুরু করুন, তারপর ফ্ল্যাগগুলি, তারপর ট্রানজিশনগুলি। প্রোগ্রামটি বিরক্তিকরভাবে সঠিক হবে, এবং বিরক্তিকরভাবে সঠিক হল একটি স্বয়ংক্রিয় প্রোগ্রামের জন্য সর্বোচ্চ প্রশংসা। মেশিনগুলির চতুর প্রয়োজন নেই; তাদের পূর্বাভাসযোগ্য প্রয়োজন।