بریم به مریخ

بیستم جولای 1976 ؛ اولین عکس از سطح مریخ که توسط Viking 1 گرفته شد و به زمین مخابره شد. 

تقریبا تمام بدبختی های ما همین مساله کلید خورد. Viking 1 دارای تکنولوژی هایی بود که الان وجودتون خیلی عادی به نظر می آید ولی نه همیشه ! 

قبل از این بخوام شرح بدم چطور این مریخ نورد کلید بدبختی های چند ماهه اخیرم شده ، بذارید یکم از زوایه مهندسی و این مریخ نورد رو بررسی کنیم.

فاصله مریخ تا زمین در کمترین حالت 56 میلیون کیلومتر و در بیشترین حالت حدود 250 میلیون کیلومتر است که به صورت میانگین فاصله زمین ، مریخ حدود 225 میلیون کیلومتر است ، سرعت نور حدود 300 هزار کیلومتر در تانیه است ، از اونجایی که امواج رادیویی با سرعت نور در فضا منتشر میشن ، پس ارسال و یا دریافت اطلاعات از مریخ نورد در کمترین حالت حدود 3 دقیقه طول میکشه و به طور میانگین 12.5 ، یعنی 12.5 دقیقه باید منتظر باشید که دستور ارسالی شما به مریخ نورد برسه و 12.5 دقیقه هم صبر کنید تا جواب مریخ نورد رو دریافت کنید ! تازه اگر اشتباهی نکرده باشید.

خوب همونطور که میبینید عملیات کنترل و حرکت مریخ نورد خیلی پیچیده میشه ، فرض کنید مریخ نورد داره مستقیم میره یه تصویر دریافت میکنید که وجود یه پرتگاه رو جلوی مریخ نورد شما نشون میده خوب باید بدونید که این تصویر با توجه به فاصله زمین و مریخ مربوط به 3 تا 12.5 دقیقه پیش هست ، که بعد با توجه به ناهمواری های سطح و سرعت مریخ نورد باید موقعیت جاری و موقیعت آینده رو تحمین بزنید چرا که دستور گردش به چپ یا راست شما اگر همین الان صادر بشه در زمانی بین 3 تا 12.5 دقیقه دیگه به دست مریخ نورد خواهد رسید و اگر کوچک ترین اشتباهی انجام بدید مریخ نورد به فنا میره ؛ مریخ نورد تو کوچه بغلی نیست که برید از چاله درش بیارید ، حدود 4 سال زمان لازمه که یک مریخ نورد از زمین به مریخ برسه و سال ها صبر و تلاش آدم های بسیاری رو به فنا خواهید داد.

خوب این تا اینجای کار ، فرض کنید موقع نوشتن برنامه مریخ نورد یک خطای خیلی کوچیک کردید و یه متغییر 16 بیتی رو 8 بیتی تعریف کردید که باعث میشه سرعت عکس العمل مریخ نورد خیلی کند بشه ! هرچند ناسا یک مریخ نورد دوم روی زمین داشت که اول دستورات و برنامه ها روی اون تست میکرد ولی همیشه این راه حل جوابگو نیست و شرایط باید جوری باشه بشه خطا رو دید ، یعنی مریخ نورد واقعا رو مریخ باشه نه زمین ! 

پیدا کردن خطا بدون دسترسی مستقیم به مریخ نورد و فقط با آنالیز داده های ارسالی و بررسی برنامه ممکنه ، اما مساله اصلی برطرف کردن خطا درون برنامه نیست بلکه برنامه ریزی مجدد برنامه اصلاح شده است :|

نمیشه که یکی رو قرستاد رو مریخ که برنامه اصلاح شده رو بریزه روی مریخ نورد و مریخ نورد رو خاموش روشن کنه که برنامه جدید اجرا بشه ، کاری که میشه کرد اجرای تکنیک 

Over-the-air programming است ، یا همون برنامه ریزی رو هوا ، کاری که الان رو زمین هم انجامش میدیم ، اما خوب این کار خیلی ریسکی است چون یک خطای کوچک ، میتونه کل پروژه چند میلیارد دلاری رو به فنا بده ، اصول کار اینطوره که برنامه از دو قسمت تشکیل شده ، قسمت اولیه که بهش میگن بوت لودر و قسمت دوم که برنامه اصلی است ، بوت لودر در واقع یه برنامه خیلی کوچیکه که کارش کپی و نصب برنامه جدید هست ، یعنی برنامه جدید که ممکنه از طریق ارتباط رادیویی یا حافظه خارجی یا هر شکل دیگه ای در دسترس قرار بگیره رو بر روی حافظه و به جای برنامه اصلی نصب میکنه و سیستم رو مجدد راه اندازی میکنه ! 

خوب این تکنیک خیلی هوشمندانه است ، ولی بزرگترین مساله این سیستم اینه که اگر برنامه بوت لودر مشکل داشته باشه هیچ راه فراری نیست .


چرا مریخ نورد ما رو بیچاره کرده ؟

خیلی ساده است ، چون باعث پیدایش این تکنولوژی ها شده و ما مجبور به استفاده از اونها. البته کار برای برنامه نویس های سطح بالا یعنی اشخاصی که برای کامپیوتر و گوشی برنامه می نویسند شاید خیلی ساده باشه ولی فرض کنید شما سیستمی رو طراحی میکنید که حتی سیستم عاملش رو هم خودتون باید بنویسید ، این میشه که باید زبان های طرح بالا مثل سی شارپ و جاوا و ... کنار بذازید  و برید سر وقت C و Asm ! 

خوب برنامه نویسی به شکل سطح پایین خیلی تمرکز میخواد، و گاها خطاهایی رو می بینید که باعث میشه مغزتون کرکره هارو بکشه پایین و بگیره بخوابه :|

خوب برای سیستم های Embedded هم بوت لودر رو اید بنویسیم و هم سیستم عامل و هم برنامه کاربری رو ، خیلی سخت میشه گفت برنامه نوشته شده هرچقدر هم که روی میز تست شده باشه بودن خطا است و قطعا خطاهایی وجود دارند که فقط در شرایط خاصی ظهور می کنند.


 و اما تجربه تکان دهنده :

سیستمی رو طراحی کردیم که قراره به عنوان ناظر بر روی یک سری وسیله نصب بشه و یه سری گزارشاتی رو تهیه کنند، که گزارشات میتونه باعث جریمه و حتی اخراج اپراتور دستگاه بشه! پس میبینید که چقدر سیستم حساس است نه از این نظر که خاصی رو انجام میده بلکه از این نظر که حق و ناحق نکنه ، و از طرفی پیچیده ترین بخش طراحی مربوط به قسمتی است که اپراتور سر دستگاه رو کلاه نذاره (قویترین احتمال موجود). 

قرار بر این شد که برنامه اصلی دستگاه بتونه از طریق شبکه همراه خودشو بروز رسانی و آپدیت کند ، سیستم آماده تحویل شد و تست های اولیه هم همه با با موفقیت پشت سر گذاشته شد. 

تعداد 100 عدد دستگاه به عنوان نمونه نصب و راه اندازی شد ، خطاها و تغییرات برنامه اصلی از طریق OTA (برنامه ریزی رو هوا) برطرف شد. بعد از گرفتن بازخورد های مثبت عملیات نصب شروع شده بعد از نصب پراکنده (در سرار کشور) متوجه شدیم که قابلیت OTA بر روی برخی دستگاه ها کار نمی کند و نمی شود از راه دور آنها رو آپدیت کرد، ابتدا این درصد کم بود بعد با افزایش تعداد نصب ها این آمار به 60 درصد دستگاه های نصب شده رسید.

اولین احتمال مربوط به برنامه بوت لودر بود که ممکنه باگی داشته باشد ؛ مجددا برنامه بوت لودر بازنگری شد و بخش هایی محتمل باز نویسی شدند ، دستگاه هایی که در دسترس بودند آپدیت شدند و مشکلی مشاهده نشد بعد از یک روز دوباره مشکل مشاهده شد !

برای رفع خطا هایی این چنینی لازمه که اول خطا را روی میز کار ببینید بعد احتمال های مختلف رو حذف کنید تا ریشه مشکل پیدا بشه ، اما وقتی که خطا رو نمی تونید روی میز کار ببینید ، باید مغزتون رو صد چندان به کار بندازید و دنیال جواب بگردید و لازمه از تمام جزییات مربوطه آگاه باشید.

بعد از بارها و بارها بررسی خط به خط برنامه بوت لودر و حتی بررسی احتمال های خنده دار مثل سرد کردن و گرم کردن دستگاه و ایجاد شرایط مختلف تست ، وارد جزییات پروتکل های شبکه نظیر TCP شدم که بعد از مدتی بررسی و خواندن جزییات پروتکل و  بررسی شرایط کاشف به عمل آمد که بله شرکت های اپراتور همراه روترهای های خودشو توی شهر های کوچک دست تنظیم ننموده اند و باعث ایجاد این مشکلات شده اند.


چه باید کرد ؟

بعد از کشف خطا که متاسفانه از سیستم های خارجی بود ، باید دنبال راه حل مناسب می گشتیم ، خوب قطعا اپراتور همراه از ما قبول نمی کرد که بره و کانفیگ BTS ها رو عوض کنه ، ما باید مشکل خودمون رو حل میکردیم ، خوب این کارم انجام دادیم ولی مساله اصلی این بود که باید برنامه بوت لودر عوض میشد تا سیستم درست بشه کاری که حتی کسی بهش فکرم نمی کنه ، اما وقتی که تعداد زیادی دستگاه در سرار کشور نصب شدن سر زدن به همه اونها و تغییر برنامشون کار منطقیی نیست.

بعد از روزها فکر کردن ، تکنیکی به ذهنم رسید که با استفاده از آن قادر بودم هم برنامه کاربر و هم برنامه بوت لودر رو آپدیت کنم، ولی واقعا کار پیچیده ایست چرا که لحظه وجود خواهد داشت که سیستم داری هیچ برنامه ای نیست نه بوت لودر و نه کاربری و CPU فقط برنامه های cache شده درون بافر را اجرا خواهد کرد و کوچکترین اشتباهی باعث میشه که سیستم از کار بیفتد و قابل بازیابی هم نباشد. اینجا بود که به قول یکی از همکارا پامون رو از مریخ فراتر گذاشتیم و به مشتری رسیدیم ! 

هماهنگ کردیم و دستگاه ها رو تا مراکز استان ها منتقل کردند و همه رو بروز رسانی کردیم و خدا رو شکر مشکل خاصی نبود.

چاشها اینگونه مرزهای دانشمان را جابجا می‌کند. پس همیشه برای خودتان چالش داشته باشید.


+ زمستان هم کم کم شروع می شود.