دیروز یکی از دوستان زنگ زده و اعتراض کرده که این چه مسخره بازیه؟ میگم چیه داداش؟ میگه من طبقه دوم بودم با خانوم بچه ها. کلید آسانسور رو زدم، آسانسور از طبقه ی اول اومدش بالا. بعد کلیدش رو زدم که دوباره بره طبقه ی اول به جاش رفته طبقه ی سوم و برگشته طبقه ی اول... کلی وقتم گرفته شده. این رو درستش کن.
عارضم خدمت دوستان که میشه درستش کرد. یعنی میشه یه مدار طراحی کنیم که مثلا اگر از طبقه ی اول آسانسور رفتش به طبقه ی دوم بعدبه جای اینکه بره بالا و برگرده طبقه ی اول صاف برگرده پایین. مثلا این مدار:
الان در مسیر کنتاکتور down و از بعد از کنتاکت باز s2 ، یه شاخه دیگه بازکردیم که کنتاکت بسته ی b3 توشه و سری شده با کنتاکتهای باز upp و b1. حالا اگر کسی وارد اتاقک آسانسور بشه و پوش باتون b1 رو فشار بده و پوش باتون b3 هم فشار داده نشده باشه، آسانسور به جای اینکه بره بالا و باز برگرده پایین یه راس میره طبقه ی اول.
حالا اشکالش چیه؟
اشکالش اینه که فرض کنیم در یه ساختمان 8 طبقه هستیم و اتاقک آسانسور در طبقه ی چهارم هست. شما در طبقه ی سوم دکمه رو میزنید و خیال دارید برید طبقه ی اول. به محض اینکه وارد آسانسور شدید و خواستید پوش باتون طبقه ی اول رو بزنید اگر یکی مثلا از طبقه ی هفتم کلید رو بزنه آسانسور به جای اینکه بره طبقه ی اول میره طبقه ی هفتم. یعنی همه چی شیر تو شیر میشه و دست آخر معلوم نیست که آسانسور کی به طبقه ی اول برسه. البته میشه برای آسانسور مداری تعریف کرد بر اساس اولویت فشار داده شدن کلیدها و اینکه هر کلیدی که فشار داده بشه اول بره اون طبقه ولی کلا مشکلی حل نمیشه و فقط مدار پیچیده میشه. پس بهتره به جای این جنقولک بازیا از همون مدار ساده ی قبلی استفاده کنیم که در قسمت سوم توضیح دادیمش.
الانم داریم میریم سراغ طراحی مدار فرمان آسانسور برای چار طبقه. اگه این سلسله مطالب رو تا به اینجا با دقت دنبال کرده باشید برای طراحی مدار فرمان به مشکلی بر نمی خوریم. یه شاخه دیگه برای فرمان به مسیر هر یک از کنتاکتورهای up و down اضافه میشه با این تفاوت که در مسیر down دیگه این سوئیچ s4 هست ش که جای s3 رو گیره، به صورت زیر:
اتفاقی که افتاده اینه که در مسیر کنتاکتهای باز s2 یا s3 (یعنی دو طبقه ی وسطی) به جای دو کنتاکت باز موازی سه کنتاکت باز موازی داریم که غیر همنام هستند. یعنی هر یک از کلیدهای سه طبقه ی دیگه که زده بشه فرمان می دهند و بسته به وضعیت کنتاکتورهای upp و downn مسیر بعدی اتاقک آسانسور رو تعیین می کنند. در نهایت مثل مثال قبل آسانسور یه دور کامل میره بالا و بعد یه دور کامل برمیگرده پایین و همین سیکل رو تکرار ش می کنه.
حالا اگه حوصله م گرفت میشینم و جدول صحت ورودی ها رو برای چار طبقه به صورت دیجیتال تحلیل می کنم که خوب البته دو متغیر جدید (یعنی پوش باتون b4 و سوئیچ s4) به مدار اضافه شده اند و حالات ممکن از 256 حالت تبدیل شده اند به 1024 حالت.
در قسمت قبلی گفتیم که مدار فرمان نهایی آسانسور برای یه ساختمون سه طبقه می شه به شکل زیر:
به زبون دیجیتال اگه بخواهیم بنویسیم داریم:
up=(s1.(b2+b3))+(s2.upp.(b1+b3))
down=(s3.(b1+b2))+(s2.downn.(b1+b3))
حالا ببینم که اگه همین مدار فرمانو بخواهیم به صورت دیجیتالی و با مدار فرمان طراحی کنیم سر از کجا در میاریم.
تعداد متغیرها رو اول باس بشمریم. سه تا سوئیچ s و سه تا پوش باتون b و دو تا کنتاکتور upp و downn میشه به عبارتی 8 تا متغیر. تعداد حالتهای مختلف 8 متغیر میشه 256 حالت. حتی اگر یه جدول با 256 سطر رو بکشید و تحلیل کنیم ساده کردن اون کار حضرت فیله. برای ساده کردن مسئله میاییم و دو گوله رو به کار می ندازیم. می دونیم که سوئیچهای s همواره و همواره فقط یکی شون وصل هست و دو تای دیگه خاموش هستن. با این شرط منطقی میاییم و تنها وصل بودن یکی رو همراه با اون 5 تا متغیر باقیمونده جدول می کنیم. فقط نکته ای که هست اینه که در طبقات اول و سوم متغیرها از 5 به 3 کاهش داده میشه چون کنتاکتورهای upp یا downn در این طبقات ریست می شن و ارزش اونها صفر هست. اول کار بریم سراغ طبقه ی اول. نمودار متغیرهاش به صورت زیر هستش:
همون طور که دیده میشه ستون down صفر هست و ستون up در مینترمهایی که b2 یا b3( یا هر دو) فشار داده شده باشن برابر با یک هست. خلاصه ی جدول برای خروجی up به صورت زیر در میادش:
که معنی ش میشه:
up=s1.b2+s1.b3=s1.(b2+b3)
حالا فرض کنیم آسانسور در طبقه ی سوم هستش. بازهم تنها متغیرهایی که در نظر می گیریم s3 هست به همراه پوش باتونها. جدول خروجیها به صورت زیر هستش:
ستون خروجی up همه ی مینترماش صفره و ستون downn هر جا که b1 یا b2 (یا هر دو تاش) فشرده شده باشن برابر با یک هستش.جدول خروجی down میشه:
که معنی ش میشه:
down=s3.b1+s3.b2=s3.(b1+b2)
قضیه برای وقتی که آسانسور توی طبقه ی دوم ایستاده پیچیده تره. اگه آسانسور از پایین اومده باشه بالا پس upp فعال هست و باید ارزش منطقی اون رو برابر با 1 بگیریم. از طرف دیگه اگه آسانسور از طبقه ی سوم پایین اومده باشه پس downn فعال هستش و باید ارزش منطقی اون رو برابر با 1 بگیریم. از طرف دیگه می دونیم که upp و downn با همدیگه فعال نمیشن. پس به جای یه جدول بزرگ دو تا جدول کوچیک تشکیل می دیم. یه بار برای وقتی که upp=1 و دفعه ی بعدی برای وقتی که downn=1. بعد نتیجه ی حاصل رو با نتایجی که در بالا به دست آوردیم جمع می کنیم. جدول درستی خروجیها برای وقتی که upp=1 به صورت زیر هستش:
به مینترم های12ام و 14ام توجه کنید. درسته کهb1 فشرده شده اما همون طور که در قسمت دوم گفتیم در این وضعیت اتاقک آسانسور باید به حرکت خودش به سمت بالا ادامه بده و بعد برگرده پایین، پس در نتیجه خروجی upp برابر با 1شده. در نتیجه خروجی up میشه:
up=s2.upp.(b1+b3)
توجه کنید که چون فرض کردیم upp=1 باید upp رو در نتیجه ضرب بکنیم.
حالا میریم سراغ وضعیتی که downn=1 هستش:
بازهم در مینترمهای 9ام و 11ام با اینکه پوش باتون b3 فشرده شده آسانسور میره پایین و علتش رو هم که در قسمت قبلی توضیح دادیم. نتیجه ی خروجی down میشه:
همون طور که می بینید این جدول با جدول خروجی up مو نمیزنه جز اینکه در اون مورد باید upp رو ضرب می کردیم و حالا باید downn رو ضرب کنیم. پس خروجی میشه:
down=s2.downn.(b1+b3)
در نهایت باید خروجی های به دست اومده از این چار تا جدول رو با هم جمع بزنیم. در نتیجه داریم:
up=(s1.(b2+b3))+(s2.upp.(b1+b3))
down=(s3.(b1+b2))+(s2.downn.(b1+b3))
یعنی دقیقا به همون نتیجه ای رسیدیم که از تحلیل مدار به دست آوردیم. اگر هم بخواهیم که این مدار رو به صورت لدر طراحی کنیم حاصل اون همون شکل اول هست. پس نتیجه می گیریم که با استفاده از ساده سازی مدار منطقی میتونیم به همون نتیجه ای برسیم که از طراحی عادی مدار فرمان به دست میادش.
اگه حوصله ای بود این بحث رو با مدار فرمان آسانسور چهار طبقه ادامه میدیم و داستان رو جمع ش می کنیم.
در قسمت قبلی این داستان خوندیم که چطوری میشه مدار فرمان یه آسانسور رو برای یه ساختمون دو طبقه (یعنی ساده ترین حالتی که میشه فرض ش کرد) طراحی کرد. حالا در ادامه میریم سراغ یه ساختممون سه طبقه و طراحی مدار فرمان برای آسانسورش.
فرضهای اساسی مسئله مثل مسئله ی قبلی هست. البته یه چیزهایی به داستان اضافه شده که وسط داستان بهشون میرسیم و اونها رو توضیح می دم. منظور اینه که باید فرضهای دیگری رو هم به این مسئله ی جدید اضافه کنیم تا بتونیم یه مدار بی نقص طراحی بکنیم.
خوب همون طور که گفتیم هر طبقه یه سنسور برای تعیین موقعیت اتاقک آسانسور و یه پوش باتون برای فراخواندن اون داره. حالا خیلی ساده فرض می کنیم که اتاقک آسانسور توی طبقه ی اول قرار گرفته. اگر هر کدوم از کلیدهای b2 یا b3 فشار داده بشن اتاقک آسانسور باید بره بالا ولی فشار دادن کلید b1 نباید فرقی در وضعیت ایجاد بکنه. پس تا اینجای کار مدارمون به صورت زیر هستش:
یعنی اگر سوئیچ s1بسته بود چه b2 و چه b3که فشار داده بشن اتاقک آسانسور میره بالا.
همین وضع درباره ی اتاقک آسانسور در طبقه ی سوم هست. یعنی با فشاردادن b2 یا b1 باید بره پایین. پس مدارمون میشه:
حالا اگه اتاقک آسانسور در طبقه ی دوم باشه چه اتفاقی میفته؟ منطقا اگه پوش باتون b3فشار داده بشه آسانسور باید بره بالا و اگه پوش باتون b1فشار داده بشه آسانسور باید بره طبقه ی پایین یعنی مدارمون میشه به شکل زیر:
ظاهرا کار مون تمومه اما اینجا یه مشکل اساسی داریم که توی ساختمون دو طبقه نداشتیم و اون فرضی رو که اول داستان گفتم اینجا باس وارد کنیم. در حالت عادی برای این مدار اتفاقی نمیفته اگر هر کسی در هر طبقه ای یه پوش باتون رو فشار بده، اما اگر پوش باتون b1 و b3 همزمان فشار داده بشوند و اتاقک آسانسور در طبقه ی دوم باشه چه اتفاقی می افته. به محض اینکه این اتفاق بیفته هر دو کنتاکور بالا و پایین وصل می شن و در نتیجه موتور آسانسور دچار اتصال کوتاه بین دو فاز میشه. برای جلوگیری از این مسئله باید چه کار کرد؟
راه حل اساسی اینه که دو تا کنتاکتور به مدار اضافه بکنیم تا وضعیت بالا یا پایین رفتن آسانسور رو مثه دو عنصر حافظه در خودشون حفظ کنند. یعنی وقتی آسانسور به سمت بالا رفت یکی شون فعال بشه و غیر فعال شدن اون وقتی اتفاق بیفته که آسانسور رسیده باشه به طبقه ی سوم. از طرف دیگه وقتی آسانسور از طبقه ی سوم میادش پایین اون یکی کنتاکتور فعال میشه و همچنان فعال می مونه تا آسانسور برسه به طبقه ی اول. با وجود این دو تا کنتاکتور وقتی که اتاقک آسانسور رسیدش به طبقه ی دوم می تونیم تصمیم بگیریم که حالا باید کجا بره. اسم این دو تا کنتاکتور جدید رو میذاریم upp و downn . حالا داریم:
با کمک این دو تا کنتاتکتور می تونیم تصمیم بگیریم وقتی در طبقه ی دوم هر دو پوش باتون b1 و b3 همزمان فشرده شدن چه باید بکنیم. در این صورت راه حل خیلی ساده س:
وقتی که پوش باتونهای b1 و b3 همزمان فشرده شدن باید نگاه کنید به وضعیت کنتاکتورهای upp و downn (توجه کنید که این هر دو میتونند خاموش باشند ولی همزمان نمی تونند باهم روشن باشن). اگه کنتاکتور upp روشن بودیعنی آسانسور از طبقه ی اول حرکت کرده بوده و رسیده به طبقه ی دوم و حالا باس برسه به طبقه ی سوم. اگه کنتاکور downn روشن بود یعنی آسانسور از طبقه ی سوم داشته میاموده پایین و رسیده به طبقه ی دوم و حالا باس بره به طبقه ی اول. پس نقشه مدار فرمان به صورت زیر اصلاح میشه:
یعنی با سری کردن کنتاکت های باز upp و downn با کنتاکت باز s2 شرطی رو به مدار تحمیل می کنیم که در نتیجه ی اون فشار دادن همزمان b1 و b3 بی اثر میشه و تنها یکی از این دو پوش باتون میتونه تعیین کننده ی جهت حرکت آسانسور باشه.حالا اگر مثلا آسانسور از طبقه ی اول بیاد و در طبقه ی دوم توقف کنه و هر دو پوش باتون b1 و b3 همزمان فشار داده بشوند آسانسور به طرف بالا حرکت می کنه تا به طبقه ی سوم برسه. اونجا که رسیدش کنتاکت بسته ی سوئیچ s3 کنتاکتور upp رو خاموش می کنه. از طرف دیگه کنتاکت باز s3 در مسیر کنتاکتور downn وصل میشه و چون b1 از قبل وصل بوده آسانسور برمیگرده پایین و در طبقه ی اول می ایسته.
اگر هم آسانسور از طبقه ی سوم به دوم اومده باشه و هر دو پوش باتون b1 و b3 همزمان فشار داده بشوند آسانسور به طرف پایین حرکت می کنه تا به طبقه ی اول برسه. در اونجا کنتاکت بسته ی سوئیچ s1 کنتاکتور downn رو خاموش می کنه. از طرف دیگه کنتاکت باز s1 در مسیر کنتاکتور up وصل میشه و چون b3 از قبل وصل بوده آسانسور برمیگرده بالا و در طبقه ی سوم می ایسته.
اما با رفع این مشکل یه اشکال دیگه به مدار وارد شده. فرض کنیم که آسانسور از طبقه ی اول اومده در طبقه ی دوم و حالا کلید پوش باتون s1 فشرده بشه. وضعیت مدار به صورت زیر در میادش:
انتظار داریم که آسانسور بره طبقه ی سوم و برگرده طبقه ی اول اما این اتفاق نمی افته. چرا؟ چون در مسیر کنتاکتور up ما فرمانی از b1 رو پیش بینی نکردیم. پس برای اینکه این اتفاق بیفته باید یه کنتاکت باز b1 رو بعد از کنتاکت upp موازی کنیم با b3. همین وضعیت وجود داره اگر آسانسور از طبقه ی سوم بیادش طبقه ش دوم و پوش باتون s3 فشار داده بشه. باید یه کنتاکت b3 رو هم بعد از کنتاکت باز dowwn موازی کنیم با کنتاکت باز b1. در نتیجه مدار کامل شده میشه به صورت زیر:
بقیه ی مطلب رو فردا پس فردا ادامه می دیم.
عموما کسی که می خواد یه مدار فرمان طراحی کنه اول از پروسه ی مورد نظرش سوال می کنه، بعد که چم و خم کار رو بررسی کردشروع می کنه به طراحی مدار فرمان. بیشتر کار هم به صورت شهودی و بر اساس تجربه صورت می گیره. من در یک سلسله پست (که احتمالا 4 یا 5 قسمت بشه) می خوام طراحی شهودی رو با طراحی دیجیتال مقایسه کنم تا ببینم اگه از اول بر اساس یه مدار منطقی بریم جلو چقدر میتونیم به طراحی یه مدار فرمان خوب نزدیک بشیم.
برای مثال از طراحی آسانسور شروع می کنیم. مدار فرمان آسانسور مدار فرمان نسبتا پیچیده ای هست و به همین دلیل یه قسمتهایی از مدارات رو حذف می کنم تا از هدف اصلی این بحث خیلی دور نیفتم. پس: