داده‌برداری, نرم افزار

آموزش ۱۰ تابع کاربردی در NI-DAQmx برای مدیریت ۸۰ درصد پروژه‌های داده‌برداری (DAQ)

NI-DAQmx به گونه‌ای طراحی شده است که به کاربران سخت‌افزارهای داده‌برداری شرکت NI کمک کند تا علاوه بر صرفه‌جویی در زمان توسعه، کارایی اپلیکیشن‌های خود را به حداکثر برسانند. در این مقاله، با ۱۰ تابع کلیدی آشنا می‌شوید که یادگیری آن‌ها به تنهایی نیازهای ۸۰ درصد از پروژه‌های شما را پوشش می‌دهد.

چرا NI-DAQmx باعث بهبود سرعت و عملکرد می‌شود؟

یکی از ویژگی‌هایی که زمان توسعه پروژه را به شکل قابل توجهی کاهش می‌دهد، رابط برنامه‌نویسی کاربردی یا همان NI-DAQmx API است. این رابط برای تمامی قابلیت‌ها و خانواده‌های مختلف سخت‌افزاری یکسان است. این یعنی تمامی عملکردهای یک دستگاه چندمنظوره (شامل ورودی/خروجی آنالوگ، ورودی/خروجی دیجیتال و کانترها) با مجموعه ثابتی از توابع برنامه‌نویسی می‌شوند.

علاوه بر این، برنامه‌نویسی یک دستگاه دیجیتال (Digital I/O) با یک دستگاه خروجی آنالوگ هیچ تفاوتی در نوع توابع ندارد. در محیط LabVIEW، این قابلیت به لطف ویژگی «چندریختی» (Polymorphism) امکان‌پذیر شده است؛ به این صورت که یک تابع (VI) می‌تواند انواع مختلفی از داده‌ها را برای ترمینال‌های ورودی و خروجی خود بپذیرد. همچنین، پایداری ساختار NI-DAQmx در تمامی محیط‌های برنامه‌نویسی حفظ شده است، بنابراین شما تنها با یادگیری یک مجموعه از توابع، می‌توانید اکثر سخت‌افزارهای شرکت NI را در محیط‌های مختلف برنامه‌نویسی کنید.

ابزارهای تسهیل‌کننده و همگام‌سازی

ویژگی دیگر NI-DAQmx که تجربه توسعه نرم‌افزار را بهبود می‌بخشد، ابزار DAQ Assistant است. این ابزار به شما کمک می‌کند تا بدون نیاز به کدنویسی و تنها از طریق یک رابط گرافیکی، تسک‌های ساده یا پیچیده جمع‌آوری داده را پیکربندی کنید.

علاوه بر این، فرآیند همگام‌سازی (Synchronization) که معمولاً به دلیل نیاز به مسیریابی دستی سیگنال‌های کلاک و تریگر بسیار دشوار است، در NI-DAQmx به راحتی انجام می‌شود. این درایور به صورت خودکار عملیات مسیریابی سیگنال را بین بخش‌های مختلف یک دستگاه و یا حتی بین چندین دستگاه مجزا انجام می‌دهد.

معماری مبتنی بر عملکرد بالا

اپلیکیشن‌هایی که با NI-DAQmx می‌سازید، از معماری خاصی بهره می‌برند که برای به حداکثر رساندن کارایی طراحی شده است:

  • مدل وضعیت بهینه (Efficient State Model): این مدل با حذف تنظیمات مجدد و غیرضروری، سربار سیستم را کاهش داده و فرآیند پیکربندی و استخراج داده را بهینه می‌کند.

  • سرعت بالا: به لطف استفاده از تکنولوژی Memory-mapped registers، می‌توانید به نرخ نمونه‌برداری تک‌نقطه‌ایِ بیش از 50 kS/s دست یابید.

  • چندریسمانی (Measurement Multithreading): معماری NI-DAQmx از چندریسمانی پشتیبانی می‌کند؛ یعنی چندین عملیات جمع‌آوری داده می‌توانند به طور همزمان اجرا شوند که این موضوع عملکرد برنامه‌های پیچیده را به شدت افزایش و کدنویسی آن‌ها را ساده می‌کند.

شروع کار تنها با ۱۰ تابع

برای بهره‌مندی از این مزایا، نیاز به یادگیری پیچیده‌ای ندارید. در واقع، تنها ۱۰ تابع اصلی در NI-DAQmx وجود دارد که پاسخگوی ۸۰ درصد از نیازهای کاربردی در پروژه‌های جمع‌آوری داده است. این توابع به گونه‌ای طراحی شده‌اند که درک عملکرد و کاربرد آن‌ها بسیار ساده باشد.

یکی از ویژگی‌های برجسته NI-DAQmx، رابط برنامه‌نویسی (API) یکپارچه آن است. این یعنی شما برای تمام دستگاه‌ها و قابلیت‌ها (ورودی آنالوگ، خروجی آنالوگ، ورودی/خروجی دیجیتال و کانترها) از توابع مشابهی استفاده می‌کنید.

مزایای اصلی:

  • کاهش زمان توسعه: با یادگیری یک مجموعه تابع، می‌توانید در محیط‌های مختلف (LabVIEW، C، .NET) برنامه‌نویسی کنید.

  • DAQ Assistant: ابزاری گرافیکی برای پیکربندی سریع تسک‌ها بدون نیاز به کدنویسی پیچیده.

  • مالتی‌تریدینگ (Multithreading): اجرای همزمان چندین عملیات داده‌برداری برای افزایش سرعت.

۱. DAQ Assistant (دستیار داده‌برداری)

درایور DAQ Assistant یک رابط گرافیکی تعاملی برای ایجاد، ویرایش و اجرای کانال‌های مجازی و «تسک‌های» (Tasks) در محیط NI-DAQmx است. برای درک بهتر نحوه عملکرد این ابزار، مفاهیم زیر را مد نظر داشته باشید:

  • کانال مجازی (Virtual Channel): ترکیبی از یک کانال فیزیکی روی سخت‌افزار DAQ و تنظیمات مربوط به آن (مانند محدوده ولتاژ ورودی یا مقیاس‌گذاری‌های سفارشی) است.

  • تسک (Task): مجموعه‌ای از یک یا چند کانال مجازی است که اطلاعات زمان‌بندی (Timing)، تریگرها (Triggering) و سایر ویژگی‌های مربوط به فرآیند جمع‌آوری یا تولید داده را در بر می‌گیرد.

در تصویر زیر، نمونه‌ای از محیط DAQ Assistant را مشاهده می‌کنید که برای انجام یک اندازه‌گیری کرنش محدود (Finite Strain) پیکربندی شده است:

اجزای اصلی در پیکربندی DAQ Assistant

وقتی با این ابزار کار می‌کنید، معمولاً مراحل زیر را طی خواهید کرد:

  1. انتخاب نوع سیگنال: تعیین اینکه قصد اندازه‌گیری (آنالوگ، دیجیتال، کانتر) یا تولید سیگنال را دارید.

  2. تنظیمات فیزیکی: انتخاب ترمینال‌های ورودی و تعیین نوع سنسور (مثلاً پل وتستون برای کرنش‌سنج).

  3. زمان‌بندی (Timing Settings): تعیین نرخ نمونه‌برداری (Samples to Read) و نرخ فرکانسی (Rate در واحد Hz).

  4. تست و اجرا: استفاده از دکمه Run در بالای پنجره برای مشاهده زنده داده‌ها بدون نیاز به نوشتن حتی یک خط کد.

مستندات (Documents) زیر نحوه استفاده از DAQ Assistant را در محیط‌های LabVIEW، LabWindows/CVI و .NET تشریح می‌کنند:

۲. NI-DAQmx Create Virtual Channel (ایجاد کانال مجازی)

تابع NI-DAQmx Create Virtual Channel یک کانال مجازی ایجاد کرده و آن را به یک «تسک» (Task) اضافه می‌کند. این تابع همچنین می‌تواند چندین کانال مجازی را به صورت همزمان ایجاد کرده و همه آن‌ها را در قالب یک تسک دسته‌بندی کند. در صورتی که تسکی از قبل تعریف نشده باشد، این تابع به طور خودکار یک تسک جدید ایجاد می‌نماید.

تابع NI-DAQmx Create Virtual Channel دارای نمونه‌های (Instances) متعددی است. هر یک از این نمونه‌ها با نوع خاصی از اندازه‌گیری یا تولید سیگنال که کانال مجازی انجام می‌دهد، مطابقت دارد.

ایجاد کانال در LabVIEW

در تصویر زیر، چهار نمونه مختلف از وی‌آی (VI) NI-DAQmx Create Virtual Channel نمایش داده شده است که هر کدام برای یک کاربرد خاص (مانند ولتاژ آنالوگ، دما با ترموکوپل، ورودی دیجیتال و شمارش پالس) تنظیم شده‌اند:

ویژگی‌های کلیدی این تابع

  • انعطاف‌پذیری بالا: به دلیل ساختار چندریختی (Polymorphic)، می‌توانید با کلیک بر روی منوی کشویی پایین تابع، نوع ورودی یا خروجی مدنظر خود (مثلاً استرین‌گیج، فشار، فرکانس و …) را انتخاب کنید.

  • تنظیمات اختصاصی: هر نمونه از این تابع، ورودی‌های متناسب با آن نوع سیگنال را ظاهر می‌کند؛ برای مثال در حالت ترموکوپل، ورودی‌هایی برای نوع ترموکوپل (Type J, K, T, …) و دمای نقطه مرجع (CJC) فعال می‌شود.

  • مدیریت خودکار تسک: اگر این تابع اولین بخش از کد شما باشد، نیازی به سیم‌کشی ورودی task in نیست و درایور خودش مدیریت ساخت تسک را بر عهده می‌گیرد.

۳. NI-DAQmx Trigger (تریگر یا تحریک‌کننده)

بسیاری از کاربردهای جمع‌آوری داده نیازمند همگام‌سازی (Synchronization) بین بخش‌های عملکردی مختلف یک دستگاه واحد (مثلاً خروجی آنالوگ و شمارنده‌ها) هستند. در موارد دیگر، ممکن است نیاز باشد چندین دستگاه مجزا با یکدیگر همگام شوند.

برای دستیابی به این همگام‌سازی، سیگنال‌های تریگر (Trigger) باید بین بخش‌های مختلف یک دستگاه و یا بین چندین دستگاه مسیریابی شوند. درایور NI-DAQmx این مسیریابی را به صورت خودکار انجام می‌دهد.

هنگام استفاده از تابع NI-DAQmx Trigger، تمامی سیگنال‌های تریگر معتبر به عنوان ورودی «منبع» (Source) در دسترس هستند. برای مثال، در وی‌آی (VI) زیر، سیگنال تریگر شروع (Start Trigger) مربوط به دستگاه شماره ۲ (Device 2) مستقیماً به عنوان منبع تریگر برای دستگاه شماره ۱ (Device 1) قابل انتخاب است، بدون اینکه نیاز باشد شما به صورت دستی مسیریابی پیچیده‌ای انجام دهید.

مزایای کلیدی همگام‌سازی خودکار در NI-DAQmx:

  • حذف سیم‌کشی فیزیکی خارجی: در بسیاری از موارد (به‌ویژه در شاسی‌های PXI یا دستگاه‌هایی که از باس RTSI استفاده می‌کنند)، نیازی به اتصال سیم بین پایانه‌های فیزیکی برای اشتراک‌گذاری تریگر نیست.

  • سادگی در برنامه‌نویسی: شما فقط نام سیگنال منبع را انتخاب می‌کنید و درایور بقیه کارها (رزرو کردن مسیرهای داخلی و سوئیچینگ) را انجام می‌دهد.

  • دقت بالا: همگام‌سازی در سطح سخت‌افزار انجام می‌شود که باعث کاهش تأخیر (Latency) و انحراف زمانی (Jitter) بین عملیات‌های مختلف می‌گردد.

۴. NI-DAQmx Timing (زمان‌بندی)

تابع NI-DAQmx Timing وظیفه پیکربندی زمان‌بندی (Timing) را برای عملیات‌های جمع‌آوری داده که مبتنی بر سخت‌افزار هستند، بر عهده دارد. این تنظیمات شامل موارد زیر است:

  • تعیین نوع عملیات: پیوسته (Continuous) یا محدود (Finite).

  • انتخاب تعداد نمونه‌ها برای جمع‌آوری یا تولید در عملیات‌های محدود.

  • ایجاد یک بافر (Buffer) در صورت نیاز.

برای عملیات‌هایی که به زمان‌بندی نمونه‌برداری نیاز دارند (مانند ورودی/خروجی آنالوگ و شمارنده‌ها)، نمونه Sample Clock از تابع NI-DAQmx Timing، هم منبع کلاک (که می‌تواند داخلی یا خارجی باشد) و هم نرخ (Rate) آن را تنظیم می‌کند. کلاکِ نمونه‌برداری، سرعتی را که در آن نمونه‌ها جمع‌آوری یا تولید می‌شوند، کنترل می‌کند. هر پالس کلاک، فرآیند جمع‌آوری یا تولید یک نمونه را برای هر کانال مجازی موجود در «تسک» آغاز می‌کند.

پیکربندی زمان‌بندی تسک در LabVIEW

نمودار بلوکی (Block Diagram) زیر در LabVIEW، نحوه استفاده از نمونه Sample Clock در وی‌آیِ NI-DAQmx Timing را برای پیکربندی یک خروجی آنالوگ پیوسته با استفاده از یک کلاک نمونه‌برداری خارجی نشان می‌دهد.

بسیاری از عملیات‌های شمارنده (Counter) نیازی به زمان‌بندی نمونه‌برداری (Sample Timing) ندارند، زیرا خودِ سیگنالی که در حال اندازه‌گیری است، زمان‌بندی را فراهم می‌کند. برای این دسته از کاربردها، باید از نمونه Implicit (ضمنی) در تابع NI-DAQmx Timing استفاده شود.

در نمودار بلوکی LabVIEW زیر، از نمونه Implicit در وی‌آیِ NI-DAQmx Timing برای پیکربندی یک عملیات جمع‌آوری «عرض پالس» (Pulse Width) به صورت بافری استفاده شده است. این تنظیمات برای یک حالت محدود (Finite) با تعداد مشخصی از نمونه‌ها پیکربندی شده است.

۵. NI-DAQmx Start Task (شروع تسک)

این تابع Task را به حالت اجرایی می‌برد. اگرچه در بسیاری از موارد (مثل استفاده از تابع Read) تسک به‌طور خودکار استارت می‌خورد، اما استفاده صریح از این تابع برای بهینه‌سازی سرعت در حلقه‌های تکرار ضروری است.

در برنامه‌نویسی با درایور NI-DAQmx، مدیریت منابع و زمان‌بندی (Timing) نقشی حیاتی در کارایی سیستم دارد. یکی از سوالات رایج کاربران این است که چه زمانی استفاده از تابع Start Task اجباری است و چه زمانی می‌توان از آن صرف‌نظر کرد.

طبق مستندات فنی شرکت National Instruments، در شرایطی که شما تنها قصد ارسال یک نمونه واحد (Single Sample) به صورت نرم‌افزاری (Software-Timed) را دارید، نیازی به فراخوانی صریح تابع DAQmx Start Task نیست.

چرا در این حالت به Start Task نیاز نداریم؟

زمانی که شما از تابع NI-DAQmx Write برای ارسال یک مقدار تکی استفاده می‌کنید و هیچ کلاک سخت‌افزاری (Hardware Timing) برای آن تعریف نکرده‌اید، درایور به صورت خودکار مراحل زیر را طی می‌کند:

  1. تسک را رزرو (Reserve) می‌کند.

  2. تسک را تایید (Commit) می‌کند.

  3. تسک را اجرا (Start) می‌کند.

  4. داده را ارسال می‌کند.

  5. تسک را متوقف (Stop) می‌کند.

تحلیل بلوک دیاگرام (Block Diagram) در LabVIEW

در یک سناریوی خروجی آنالوگ تک‌نمونه‌ای، چیدمان کد به صورت زیر است:

  1. Create Channel: ابتدا کانال خروجی آنالوگ (مثلاً ولتاژ) تعریف می‌شود.

  2. Write: مقدار مورد نظر (مثلاً ۵ ولت) به تابع Write داده می‌شود. در تنظیمات این تابع، حالت Analog > Single Channel > Single Sample > DBL انتخاب شده است.

  3. Clear Task: پس از ارسال مقدار، منابع آزاد می‌شوند.

در این زنجیره، نبودِ بلوک Start Task قبل از Write کاملاً مجاز است، زیرا تابع Write متوجه می‌شود که تسک هنوز اجرا نشده و به دلیل “تک‌نمونه‌ای” بودن، خودش دستور شروع و پایان را صادر می‌کند.

چه زمانی استفاده از Start Task الزامی است؟

اگرچه در مثال فوق این تابع اختیاری است، اما در موارد زیر حتماً باید از آن استفاده کنید:

  • داده‌برداری پیوسته (Continuous): برای شروع کلاک سخت‌افزاری.

  • سرعت بالا: اگر بخواهید تابع Write را در یک حلقه (Loop) بسیار سریع اجرا کنید، فراخوانی Start Task خارج از حلقه باعث می‌شود درایور هر بار مجبور به انجام مراحل Reserve و Commit نشود و سرعت اجرای کد به شدت افزایش یابد.

۶. NI-DAQmx Read (خواندن داده‌ها)

این تابع نمونه‌های داده را از تسک مشخص شده می‌خواند. شما می‌توانید نوع داده (آنالوگ، دیجیتال یا کانتر)، تعداد کانال‌ها و تعداد نمونه‌ها را تعیین کنید.

تابع NI-DAQmx Read نمونه‌های (Samples) ضبط شده را از تسکِ جمع‌آوری داده‌ی مشخص‌شده می‌خواند. نمونه‌های مختلف (Instances) این تابع به شما اجازه می‌دهند تا موارد زیر را انتخاب کنید:

  • نوع جمع‌آوری: آنالوگ، دیجیتال یا کانتر.

  • تعداد کانال‌های مجازی: یک کانال یا چندین کانال.

  • تعداد نمونه‌ها: تک‌نمونه (Single Sample) یا چندین نمونه (Multiple Samples).

  • نوع داده: اعشاری (Double)، صحیح، یا شکل موج (Waveform).

فرآیند انتقال داده به این صورت است که پس از انتقال تعداد مشخصی از نمونه‌ها از حافظه FIFO روی کارت DAQ به بافر کامپیوتر (در RAM)، تابع NI-DAQmx Read این داده‌ها را از بافر به حافظه محیط برنامه‌نویسی شما (مانند LabVIEW) منتقل می‌کند.

خواندن داده در LabVIEW

در تصاویر زیر، چهار نمونه متفاوت از وی‌آی (VI) NI-DAQmx Read نمایش داده شده است که هر کدام برای ساختار داده‌ای خاصی تنظیم شده‌اند:

انواع متداول خروجی در تابع Read:

  • Analog Single Channel, Single Sample: برای خواندن یک مقدار ولتاژ لحظه‌ای (مثلاً برای مانیتورینگ ساده).

  • Analog Multiple Channels, Multiple Samples (Waveform): برای خواندن دسته‌ای از داده‌ها از چندین سنسور به صورت همزمان؛ این حالت برای تحلیل‌های فرکانسی و رسم نمودار ایده‌آل است.

  • Digital Port: برای خواندن وضعیت منطقی (۰ یا ۱) یک پورت دیجیتال به صورت کامل.

  • Counter: برای خواندن مقادیر انباشته شده در شمارنده یا فرکانس سیگنال ورودی.

نمونه‌هایی از تابع NI-DAQmx Read که قابلیت خواندن چندین نمونه (Multiple Samples) را دارند، دارای یک ورودی به نام Samples per Channel هستند. این ورودی مشخص می‌کند که در هر بار اجرای تابع، چه تعداد نمونه از هر کانال خوانده شود.

در فرآیندهای جمع‌آوری داده با طول مشخص (Finite Acquisitions)، اگر مقدار این ورودی را برابر با 1- قرار دهید، تابع منتظر می‌ماند تا تمامی نمونه‌های درخواست شده جمع‌آوری شوند و سپس آن‌ها را یک‌جا می‌خواند. اما در فرآیندهای پیوسته (Continuous Acquisitions)، قرار دادن مقدار 1- باعث می‌شود که تابع در هر لحظه از اجرا، تمامی نمونه‌های موجود در بافر را تخلیه کرده و برگرداند.

در نمودار بلوکی LabVIEW زیر، وی‌آیِ NI-DAQmx Read برای خواندن چندین نمونه از چندین کانال مجازی ورودی آنالوگ پیکربندی شده است و داده‌ها را در قالب شکل‌موج (Waveform) برمی‌گرداند. از آنجایی که ورودی Samples per Channel به یک مقدار ثابت ۱۰ متصل شده است، هر بار که این VI اجرا می‌شود، دقیقاً ۱۰ نمونه از هر کانال مجازی را قرائت می‌کند.

تفاوت‌های کلیدی در تنظیم تعداد نمونه‌ها:

  • مقدار مثبت (مثلاً ۱۰): تابع تا زمانی که ۱۰ نمونه در بافر موجود نباشد، منتظر می‌ماند (Wait). این کار باعث ایجاد یک نرخ ثابت در حلقه برنامه‌نویسی شما می‌شود.

  • مقدار ۱- در حالت Finite: کل داده‌های تعریف شده در تنظیمات Task را یک‌جا تحویل می‌دهد.

  • مقدار ۱- در حالت Continuous: هر آنچه تا آن لحظه در بافر ذخیره شده را بدون معطلی تخلیه می‌کند؛ این حالت برای نمایش سریع داده‌ها (Real-time Monitoring) با کمترین تأخیر کاربرد دارد.

۷. NI-DAQmx Write (نوشتن یا ارسال داده‌ها)

تابع NI-DAQmx Write وظیفه نوشتن نمونه‌ها (Samples) در یک تسکِ «تولید سیگنال» (Generation Task) مشخص را بر عهده دارد. نمونه‌های مختلف این تابع به شما اجازه می‌دهند موارد زیر را انتخاب کنید:

  • نوع تولید سیگنال: آنالوگ یا دیجیتال.

  • تعداد کانال‌های مجازی: یک یا چند کانال.

  • تعداد نمونه‌ها: تک‌نمونه یا دسته‌ای از نمونه‌ها.

  • نوع داده: مقادیر عددی، آرایه یا شکل‌موج (Waveform).

فرآیند انتقال داده در این تابع به این صورت است که ابتدا نمونه‌ها از حافظه محیط برنامه‌نویسی (مانند LabVIEW) به بافر کامپیوتر (در RAM) منتقل می‌شوند. سپس این نمونه‌ها از بافر به حافظه FIFO روی کارت DAQ فرستاده می‌شوند تا در نهایت به صورت سیگنال فیزیکی تولید گردند.

قابلیت Start خودکار (Auto Start)

هر نمونه از تابع NI-DAQmx Write دارای یک ورودی به نام Auto Start است. این ورودی تعیین می‌کند که اگر تسک قبلاً به صورت صریح (Explicitly) شروع نشده باشد، آیا این تابع باید خودبه‌خود تسک را استارت بزند یا خیر.

بهینه‌سازی عملکرد با Start Task

همان‌طور که در بخش‌های قبلی اشاره شد، بهتر است برای شروع تسک‌هایی که از زمان‌بندی سخت‌افزاری (Hardware Timing) استفاده می‌کنند، از تابع NI-DAQmx Start Task به صورت مجزا استفاده کنید. همچنین اگر قرار است تابع NI-DAQmx Write چندین بار در یک حلقه (Loop) اجرا شود، برای رسیدن به حداکثر عملکرد و سرعت، حتماً تسک را قبل از ورود به حلقه با تابع Start Task به صورت صریح اجرا کنید.

در تصاویر زیر، چهار نمونه از کاربردهای مختلف وی‌آی (VI) NI-DAQmx Write نمایش داده شده است که نشان‌دهنده تنوع این تابع در تولید سیگنال‌های مختلف است:

در نمودار بلوکی LabVIEW زیر که مربوط به تولید یک سیگنال آنالوگ با طول محدود (Finite) است، یک ثابت بولی با مقدار False به ورودی Auto Start در وی‌آیِ NI-DAQmx Write متصل شده است. دلیل این کار این است که فرآیند تولید سیگنال دارای زمان‌بندی سخت‌افزاری (Hardware-timed) است و مدیریت شروع آن باید دقیق‌تر انجام شود.

در این پیکربندی، وی‌آیِ NI-DAQmx Write به گونه‌ای تنظیم شده است که چندین نمونه داده‌ی خروجی آنالوگ را برای یک کانال، در قالب یک شکل‌موج آنالوگ (Analog Waveform) در «تسک» بنویسد.

۸. NI-DAQmx Wait Until Done (انتظار تا اتمام عملیات)

این تابع منتظر می‌ماند تا عملیات داده‌برداری (در حالت Finite یا محدود) به پایان برسد. این کار از اتمام نابهنگام برنامه قبل از دریافت کامل داده‌ها جلوگیری می‌کند.

تابع Wait Until Done در NI-DAQmx نقش یک «نگهبان» را ایفا می‌کند تا اطمینان حاصل شود که عملیات داده‌برداری یا تولید سیگنال پیش از توقف کامل تسک، به پایان رسیده است. این تابع به‌ویژه در عملیات‌های محدود (Finite) که تعداد مشخصی نمونه ارسال یا دریافت می‌شود، حیاتی است.

عملکرد تابع Wait Until Done در یک نگاه

بدون استفاده از این تابع، اگر بلافاصله بعد از دستور Write یا Read، تابع Clear Task اجرا شود، برنامه بدون توجه به اینکه سخت‌افزار تمام داده‌ها را ارسال کرده یا خیر، ارتباط را قطع می‌کند. این موضوع منجر به از دست رفتن داده‌ها یا خطاهای سیستمی می‌شود.

ویژگی‌های کلیدی:

  • تضمین اتمام عملیات: این تابع تا زمانی که آخرین نمونه از بافر سخت‌افزار خارج (در خروجی) یا وارد (در ورودی) نشود، اجازه عبور جریان برنامه به مرحله بعد را نمی‌دهد.

  • ورودی Timeout (زمان انتظار): شما می‌توانید حداکثر زمانی را که برنامه باید منتظر بماند تعیین کنید. اگر عملیات در این بازه تمام نشود، تابع متوقف شده و یک خطا (Error) صادر می‌کند تا از قفل شدن همیشگی برنامه جلوگیری شود.

  • کاربرد در عملیات Finite: برخلاف عملیات‌های پیوسته (Continuous) که تا ابد ادامه دارند، در عملیات Finite (مثلاً تولید یک پالس دیجیتال با تعداد مشخص)، استفاده از این تابع برای بستن ایمن تسک الزامی است.

۹. NI-DAQmx Clear Task (پاک‌سازی تسک)

برای آزادسازی منابع سیستمی (مانند حافظه رزرو شده و پهنای باند سخت‌افزار)، حتماً باید پس از اتمام کار، تسک را با این تابع پاک کنید.

تابع NI-DAQmx Clear Task وظیفه پاک‌سازی تسک مشخص‌شده را بر عهده دارد. اگر تسک در لحظه فراخوانی این تابع در حال اجرا باشد، تابع ابتدا آن را متوقف (Stop) کرده و سپس تمامی منابع رزرو شده (مانند حافظه بافر و پهنای باند باس) را آزاد می‌کند.

نکته مهم این است که وقتی یک تسک پاک‌سازی شد، دیگر قابل استفاده نیست مگر اینکه دوباره از ابتدا ساخته شود. بنابراین، اگر قصد دارید از یک تسک دوباره در طول برنامه استفاده کنید، باید به جای این تابع، از NI-DAQmx Stop Task استفاده کنید تا تسک فقط متوقف شود اما از حافظه پاک نگردد.

برای عملیات‌های پیوسته (Continuous)، استفاده از تابع NI-DAQmx Clear Task برای توقف نهایی فرآیند جمع‌آوری یا تولید داده ضروری است.

پاک‌سازی تسک در LabVIEW

در نمودار بلوکی LabVIEW زیر، یک قطار پالس پیوسته (Continuous Pulse Train) توسط یک شمارنده (Counter) در حال تولید است. خروجی این پالس‌ها تا زمانی که کاربر از حلقه While خارج نشود ادامه می‌یابد؛ به محض خروج از حلقه، وی‌آیِ NI-DAQmx Clear Task اجرا شده و عملیات را به طور کامل خاتمه می‌دهد.

۱۰. NI-DAQmx Properties (گره ویژگی‌ها)

این بخش به شما اجازه می‌دهد به تنظیمات پیشرفته‌تر دسترسی پیدا کنید؛ مواردی مانند فیلترهای سخت‌افزاری، تنظیمات خاص کوپلینگ (AC/DC) و ویژگی‌های اختصاصی هر کانال.

بخش NI-DAQmx Properties در واقع «جعبه‌ابزار پیشرفته» شما برای کنترل دقیق تمام جزئیات عملیات داده‌برداری است. در حالی که توابع استانداردی مثل Timing یا Trigger تنظیمات اصلی را انجام می‌دهند، گره‌های ویژگی (Property Nodes) به شما اجازه می‌دهند به تنظیماتی دسترسی پیدا کنید که در توابع معمولی وجود ندارند.

دسترسی به جزئیات با Property Nodes

در محیط LabVIEW، این ویژگی‌ها از طریق DAQmx Property Node در دسترس هستند. شما می‌توانید از این گره‌ها برای دو هدف استفاده کنید:

  1. نوشتن (Write): برای تنظیم یک ویژگی خاص (مثلاً فعال کردن فیلتر پایین‌گذر سخت‌افزاری).

  2. خواندن (Read): برای اطلاع از وضعیت فعلی یک پارامتر (مثلاً بررسی اینکه آیا دستگاه در حال حاضر در حال تریگر شدن است یا خیر).

تفاوت توابع استاندارد و Property Nodes

بسیاری از ویژگی‌های پرکاربرد مانند Sample Clock Source (منبع کلاک) یا Active Edge (لبه فعال کلاک) را می‌توان مستقیماً در تابع NI-DAQmx Timing تنظیم کرد. اما ویژگی‌های تخصصی‌تر فقط از طریق Property Nodes قابل تغییر هستند.

مثال‌هایی از ویژگی‌های پیشرفته:

  • AI.Lowpass.Enable: فعال یا غیرفعال کردن فیلتر آنالوگ داخلی برای حذف نویز.

  • AI.Coupling: تغییر حالت کوپلینگ کانال بین AC و DC.

  • AnlgLvl.Type: تعیین نوع دقیق تریگر آنالوگ (مانند Window یا Edge).

استفاده در بلوک دیاگرام LabVIEW

در یک برنامه حرفه‌ای، معمولاً پس از ایجاد کانال و قبل از شروع تسک، از یک Property Node استفاده می‌شود تا تنظیمات دقیق سخت‌افزاری اعمال گردد. به عنوان مثال، در تصویر زیر مشاهده می‌کنید که چگونه برای یک اندازه‌گیری کرنش‌سنج (Strain Gage)، از Property Node برای تنظیم فرکانس قطع فیلتر استفاده شده است:

نکات کلیدی در استفاده از ویژگی‌ها:

  • سلسله‌مراتب: ویژگی‌ها به دسته‌های مختلفی مثل Channel، Task، Timing و Trigger تقسیم می‌شوند تا پیدا کردن آن‌ها راحت‌تر باشد.

  • سازگاری سخت‌افزاری: توجه داشته باشید که برخی ویژگی‌ها (مثل فیلترهای قابل برنامه‌ریزی) فقط در کارت‌های DAQ رده‌بالا موجود هستند و فراخوانی آن‌ها روی سخت‌افزارهای ساده‌تر ممکن است منجر به خطا شود.