Article
انشعاب در گراف آلترون: ذخیره، میانگین و نمایش همزمان
فرض کنید در آزمایشگاه نمونهای را چند ساعت زیر دوربین دارید. میخواهید روی مانیتور یک تصویر صاف و کمنویز ببینید، کل دادهی خام را برای تحلیل بعدی ذخیره کنید، و جدا از اینها هر چند ثانیه یک عکس برای گزارش بردارید. سه خواسته از یک دوربین. در آلترون این کار با انشعاب در گراف انجام میشود.

انشعاب یعنی چه؟
هر گراف آلترون از نودهایی ساخته شده که با سیم به هم وصلاند: دوربین در سر زنجیره، بعد پردازشها، و در انتها ذخیرهسازها و نمایشگرها. خروجی یک نود لازم نیست فقط به یک نود برود. میتوانید از خروجی یک نود چند سیم بکشید و هر سیم یک شاخهی جدا بسازد.
انشعاب داده را کپی نمیکند، فقط آن را به اشتراک میگذارد. پس اضافه کردن یک شاخهی نمایش یا ذخیره، هزینهی حافظهی اضافه ندارد.
نقطهی انشعاب را کجا بگذاریم؟
این مهمترین تصمیم است. هر شاخه دقیقاً همان دادهای را میگیرد که در نقطهی انشعاب جریان دارد. چند قاعدهی ساده:
- ذخیرهی داده برای تحلیل را بعد از تصحیحهای فیزیکی سنسور، مثل سطح سیاه و تصحیح تاریک و سفید، ولی پیش از تغییرات ظاهری مثل گاما منشعب کنید.
- هموارسازی و تیزکردنهایی را که فقط برای چشم است، در شاخهی نمایش بگذارید تا دادهی ذخیرهشده دست نخورد.
- اگر برنامهی خودتان باید داده را از وسط مسیر بردارد، یک نود Data Holder همانجا وصل کنید. این نود داده را تغییر نمیدهد و فقط نسخهای برای کد بیرونی نگه میدارد.
یک مثال: ذخیره، میانگین و نمایش همزمان
در Tools › Flow Graph Editor این ساختار را بسازید:
- دوربین و بعد تصحیحهای پایه، مثلاً تصحیح تاریک و سفید با نود Correction.
- از خروجی آخرین تصحیح، سیم اول را به یک نود ذخیرهی دادهی خام بکشید. این شاخه همهچیز را کامل ذخیره میکند.
- سیم دوم را به یک نود Smoothing با مرحلهی Continuous Average ببرید و خروجی آن را به یک نمایشگر بدهید. این شاخه تصویر صاف و میانگینگیریشده را نشان میدهد.
- سیم سوم را مستقیم به یک نمایشگر دیگر وصل کنید تا دادهی زندهی بدون میانگین را هم ببینید.
- گراف را ذخیره کنید و در برنامهی اصلی Recreate All را بزنید. تا زنجیره از نو ساخته نشود، تغییر اعمال نمیشود.
شاخهای که فقط هر چند ثانیه ذخیره میکند
برای عکسهای دورهای، یک نود ImagingInterval در ابتدای شاخه بگذارید و ذخیرهساز را بعد از آن وصل کنید. سه حالت دارد:
- Every T seconds: هر T ثانیه یک فریم یا خط عبور میکند. پیشفرض ۵ ثانیه است. برای ضبط تایملپس.
- Every N items: از هر N فریم یا خط یکی عبور میکند. مثلاً در بازرسی، هر ده قطعه یک نمونه.
- Max rate (per second): حداکثر این تعداد در ثانیه، با فاصلهی یکنواخت، عبور میکند. برای سبک کردن پردازش و نمایش.
گزینهی Apply to saving too را حتماً ببینید. اگر تیک بخورد، ذخیرهسازهای بعد از این نود فقط همان نمونههای عبوری را ضبط میکنند و ضبط تایملپس دارید. اگر تیک نخورد، رقیقسازی فقط پردازش و نمایش بعد از نود را سبک میکند. ذخیرهسازها به خروجی آن اعتنا نمیکنند و تا وقتی ذخیرهسازی از همین دوربین در حال ضبط است، نود همهی داده را عبور میدهد تا چیزی از ضبط کم نشود.
در میان گرافهای پیشفرض آلترون، یک نمونهی آماده به نام Default_AreaScan_Color_Usb3+ImagingIntervalForDataSaving هم هست که میتوانید از آن شروع کنید.
اشتباههایی که زیاد پیش میآید
- گذاشتن گاما یا تیزکننده پیش از نقطهی انشعاب ذخیره، و بعد تعجب از اینکه چرا دادهی ذخیرهشده با اندازهگیری جور نیست.
- فراموش کردن Recreate All بعد از تغییر گراف.
- شاخهی نمایش سنگین که کل زنجیره را کند میکند. در تب Performance ببینید کدام نود بیشترین سهم پردازنده را دارد و جلوی آن یک ImagingInterval در حالت Max rate بگذارید.
یک عادت خوب
قبل از یک ضبط طولانی، گراف را چند دقیقه اجرا کنید و در تب Internal Info نرخ دادهی ورودی و خروجی هر نود را مقایسه کنید. اگر خروجی یک نود ناگهان از ورودیاش کمتر است و این کار عمدی شما نیست، همانجا داده در حال افتادن است.
توضیح عمومیتری دربارهی خط لولهی پردازش را در ویکیپدیا (انگلیسی) پیدا میکنید.
سؤالات رایج دربارهی گراف و ضبط را در پرسشهای متداول جمع کردهایم. اگر گراف شما ساختار خاصی لازم دارد، از صفحهی تماس برایمان بنویسید تا با هم طراحیاش کنیم.