CANopen یک پروتکل ارتباطی سطح بالا و مشخصه پروفایل دستگاه است که بر اساس پروتکل CAN (شبکه کنترلر ناحیه) نوشته شده است. این پروتکل برای کاربردهای شبکه تعبیهشده (embedded) طراحی شده است، همچون شبکههای داخلی خودروها. اصطلاح چتری CANopen مشتمل بر یک چارچوب برنامهنویسی شبکه، توضیحات دستگاه، تعاریف رابط و پروفایلهای برنامهها میشود. CANopen پروتکلی را ارائه کرده است که ارتباطاتی استانداردسازیشده را بین دستگاهها و برنامهها از تولیدکنندگان متفاوت فراهم میآورد. در بازهی وسیعی با تمرکز بر کاربردهای اتوماسیون و حرکتی از صنایع استفاده میشود.
از نظر مدل سیستمهای ارتباطات OSI، CAN دو سطح اول را پوشش میدهد: لایه فیزیکی و لایه دیتا لینک (لینک داده). لایه فیزیکی خطوط استفاده شده، ولتاژها، ذات پرسرعت و … را تعریف میکند. لایه دیتا لینک، مشتمل بر این حقیقت است که CAN یک پروتکل فریممحور (پیامها) است.
CANopen پنج لایه بالایی را پوشش میدهد:
- شبکه (آدرسدهی، مسیریابی)،
- انتقال یا ترنسپورت (اتکاپذیری end-to-end)،
- سِشن یا جلسه (همگامسازی)،
- ارائه (دادهها به شکل استاندارد انکود میشوند، ارائهی داده)
- اپلیکیشن
لایه اپلیکیشن، توضیح میدهد که چطور دستگاههای CANopen را پیکربندی، منتقل و همگامسازی کرد. مفاهیم لایه اپلیکیشن، که در مشخصه CiA DS 301 پوشش داده میشود، در این مطلب پوشش داده میشوند. هدف این است که مفاهیم CANopen را به شکل خلاصه مرور کنیم.
مبانی لایه اپلیکیشن CANopen
در این بخش، مبانی ابتدایی و کلی مرتبط با لایه اپلیکیشن پروتکل CANopen را بررسی میکنیم.
دیکشنری شی یا Object Dictionary
یکی از مباحث اصلی CANopen، دیکشنری شی یا OD است، که در واقع یک جدول است که دادههای فرآیند و پیکربندی در آن نگهداری میشود. این یک پیشنیاز برای تمام دستگاههای CANopen است که یک OD را پیادهسازی کنند. استاندارد CANopen یک ایندکس 16 بیتی و یک زیرایندکس 8 بیتی را تعریف میکند.
یعنی تا سقف 65536 ایندکس و تا سقف 256 زیرورودی در هر ایندکس، مجاز است. این استاندارد تعیین میکند که برخی آدرسها و بازههای آدرس مشخص، باید شامل پارامترهای خاصی باشند. به طور مثال، این استاندارد میگوید که ایندکس 1008h، زیرایندکس 00h، باید محتوی اسم دستگاه باشند. به همین شکل، هر مستر CANopen میتواند این ایندکس را از شبکهای از اسیلوهای CANopen بخواند، تا به شکل منحصر به فرد هر اسیلو را با اسم آن شناسایی کند. برخی ایندکسهای OD، همچون نوع دستگاه (1000h) ضروری هستند و برخی دیگر، همچون نسخه نرمافزاری تولیدکننده (100Ah) ضروری نیستند. مجموعهی ایندکسهای ضروری، حداقل OD است که نشان میدهد یک دستگاه با CANopen سازگار است.
دیکشنری شی روشی است که به کمک آن میتوان با یک دستگاه CANopen ارتباط برقرار کرد. به طور مثال، میتوان یک true را در ایندکسی در بخش منحصر به تولیدکننده OD (2000h-5FFFh) نوشت، که ممکن است دستگاه، آن را به عنوان یک سیگنال فعال کردن برای جمعآوری داده از یک ورودی ولتاژ تفسیر کند. در سمت دیگر، همچنین ممکن است که مستر بخواهد اطلاعات را از OD بخواند تا دادههای جمعآوری شده را به دست آورد یا متوجه شود که پیکربندی فعلی دستگاه به چه شکل است. دو مکانیسم ارتباطی برای OD عبارتند از SDOها (Service Data Objects) و PDOها (Process Data Objects) که در ادامه مطلب به آنها خواهیم پرداخت.
انواع دادههای ساده موجود در این OD عبارتند از: boolean و void (جانگهدار)، عدد صحیح بدون علامت (unsigned integer)، عدد صحیح علامتدار (signed integer)، نقطه اعشاری (floating point) و کاراکتر. انواع پیچیدهتر داده همچون رشتهها (strings)، داده و زمان را میتوان از انواع دادههای ساده بازسازی کرد. از این انواع داده میتوان برای تعریف انواع دادههای سفارشی مختص به CANopen استفاده کرد، همچون PDO/SDO Parameter Record و پارامتر نگاشت PDO.
پیشنهاد میشود که کاربر برای اطلاعات بیشتر در مورد اجزای انواع دادههای سفارشی و پیچیده، مشخصات CANopen را مطالعه و مرور کند.
برای تهیه ماژول شبکه CAN OPEN دات اکسل می توانید با ما تماس بگیرید.
فرمت پیام CANopen
قالب یا فرمت پیام برای یک فریم CANopen بر اساس فرمت فریم CAN است. در پروتکل CAN، دادهها در فریمهایی انتقال داده میشوند که متشکل از یک CAN-ID 11 بیتی یا 29 بیتی، بیتهای کنترل همچون بیت انتقال ریموت (RTR)، بیت استارت (شروع) و فیلد طول داده 4 بیتی و 0 تا 8 بایت داده است. COB-ID که معمولا در CANopen به آن گفته میشود، متشکل از CAN-ID و بیتهای کنترلی است. در CANopen، CAN ID 11 بیتی به دو بخش تقسیم میشود: یک کد کارکرد 4 بیتی و یک ID گره CANopen 7 بیتی. محدودیت اندازهی 7 بیتی، مقدار دستگاهها را به شبکه CANopen به 127 گره محدود میکند.
تمام COB-IDها باید منحصر به فرد باشند تا از مغایرت در باس جلوگیری شود. در ارتباطات SDO، همیشه باید فقط یک گره (node) باشد که به ایندکسهای OD منفرد گرههای اسلیو دسترسی پیدا کند.
SDOها
پروتکل CANopen همچنین تعیین میکند که هر گره در شبکه، باید یک سرور را پیادهسازی کند که درخواستهای خواندن/نوشتن در OD خود را مدیریت میکند. این باعث میشود که مستر CANopen بتواند به عنوان یک کلاینت به آن سرور عمل کند. مکانسیم برای دسترسی مستقیم (نوشتن/خواندن) به OD سرور همان SDO (یا Service Data Object) است. آن گره که به OD آن دسترسی پیدا کرده، سرور SDO گفته میشود و به گرهای که دادهها را جمعآوری میکند کلاینت SDO. این انتقال همیشه با کلاینت SDO شروع میشود.
معمولا گره CANopen مستر یک درخواست به شبکه ارسال میکند و گره مورد نظر با دادهی درخواستشده پاسخ میدهد. CANopen از IDهای رزروشدهی پیام برای تسهیل ارتباطات خود استفاده میکند. وقتی که کلاینت SDO میخواهد به اطلاعاتی از سرور دسترسی پیدا کند، یک درخواست SDO با استفاده از CAN-ID 600H + Node ID میفرستد. این سرور سپس با استفاده از CAN-ID 580h + Node ID پاسخ میدهد. Node ID مشخص میکند که پیام از کدام گره اسلیو ارسال شده است.
برای مثالی که بالا تصویر آن نشان داده شده، گره مستر (کلاینت SDO) یک پیامی را با CAN-ID 603h بیرون از شبکه میفرستد. اگرچه تمام گرهها این پیام را میبینند، اما تمام گرهها به جز گره هدف، آن را نادیده میگیرند چون این پیام برای آنها ارسال نشده است. این گره هدف میفهمد که پیام با ID 603h به این معنی است که پیام برای اوست، این یک درخواست SDO است. فیلد داده پیام، ایندکس و زیرایندکس جسمی را تعیین میکند که مستر میخواهد به داده آن دسترسی پیدا کند. سپس گره هدف با پیام ID 583h پاسخ میدهد. فیلد داده پیام پاسخ، حاوی داده درخواستشده است.
علاوه بر یک CAN-ID خاص، بخش داده فریم CANopen همچنان از یک فرمت خاص برای SDO پیروی میکند. بخش داده فریم CAN به سه تکه تقسیم میشود: یک بایت برای تعیینکننده، سه بایت برای ایندکس و زیرایندکس گره و چهار بایت برای دادهی اصلی مخابره شده. بایت تعیینکننده در نمودار زیر تجزیه شده است. به سه بیت از بایت تعیینکننده، تعیینکننده دستور کلاینت (ccs) گفته میشود، که نشان میدهد چه نوع پیامی در حال مخابره شدن است (همچون خواندن، نوشتن و لغو کردن). بیت چهارم رزرو (محفوظ) شده است. بیتهای پنجم و ششم تعداد بایتهایی در بخش داده پیام را نشان میدهد که حاوی داده اصلی نیست. بیت هفتم نشان میدهد که آیا این انتقال، یک انتقال سریع است یا یک انتقال بخش بخش شده. بیت نهایی نشان میدهد که آیا مقدار داده در بیت پنج/شش است یا اینکه در بخش داده پیام وجود دارد.
یک انتقال بخش بخش شده زمانی انتخاب میشود که تمام دادههایی که باید ارسال شوند، در یک پیام منفرد جا نشود و در نتیجه دادهها باید در چندین پیام یا «بخش» (segment) مخابره شوند. برعکس، یک انتقال سریع وقتی انجام میشود که تمام دادهها در یک پیام منفرد ارسال شوند. در فاز ابتدایی (بخش NMT را ببینید)، SDOها میتوانند تا 4 بایت داده را انتقال دهند. همچنین به دلخواه، یک انتقال SDO همچنین میتواند در یک توالی از بلوکها رخ دهد. هر بلوک نهایتا از 127 بخش یا سگمنت تشکیل شده است. برای دیتاستهای بزرگ، انتقال یک بلوک سریعتر از انتقال بخش بخشی است.
PDOها (Process Data Objects)
دادههای فرآیند دادههایی هستند که با گذر زمان تغییر میکنند، همچون ورودیها (سنسورها) و خروجیها (درایوهای موتور) کنترلر گره. دادههای فرآیند همچنین در OD ذخیره میشوند. از طرفی، از آنجایی که ارتباطات SDO تنها امکان دسترسی به یک ایندکس OD را در یک زمان میدهند، برای دسترسی پیوسته به دادههای متغیر، ممکن است اورهد (سربار) زیادی ایجاد شود. به علاوه، پروتکل CANopen این نیازمندی را دارد که یک گره باید بتواند دادههای خود را ارسال کند، بدون نیاز به اینکه توسط مستر CANopen بررسی شود. در نتیجه یک روش دیگر برای انتقال دادههای فرآیند استفاده میشود، با استفاده از یک روش ارتباطی به نام PDO (یا Process Data Objects).
دو نوع PDO وجود دارد: PDOهای انتقال (TPDOها) و PDOها دریافت (RPDOها). یک TPDO دادههایی هستند که از گروه میآیند (تولید میشوند) و یک RPDO دادههایی هستند که به گره میرسند (مصرف میشوند). به علاوه، دو نوع پارامتر برای یک PDO وجود دارد: پارامترهای پیکربندی و پارامترهای نگاشت. بخش رزرو شده OD برای پیکربندی PDO و اطلاعات نگاشت، ایندکسهای 1400h-1BFFh هستند.
پارامترهای پیکربندی، COB-ID، نوع مخابره، زمان مهار (تنها TPDO) و تایمر رویداد را مشخص میکنند، که در این بخش توضیح داده شده است. روشهای مختلفی وجود دارد که یک انتقال PDO میتواند آغاز شود. این روشها عبارتند از فعالشده با رویداد، فعالشده با زمان، سنجش منفرد و سنجش سینک (هماهنگ). نوع مخابره در پارامترهای پیکربندی PDO تعیین میشود. در مخابرهی فعالشده با رویداد، انتقال PDO آغاز میشود، زمانی که دادههای فرآیند در آن تغییر میکنند.
در مخابرهی فعالشده با زمان، انتقال PDO در یک بازهی زمانی ثابت رخ میدهد. در سنجش منفرد، انتقال PDO با استفاده از مکانیسمی به اسم درخواست ریموت شروع میشود، که معمولا استفاده نمیشود. در سنجش سینک، انتقال PDO با استفاده از یک سیگنال SYNC آغاز میشود. سیگنال سینک معمولا به عنوان یک تایمر سراسری استفاده میشود. به طور مثال، اگر مستر CANopen یک پیام SYNC ارسال کند، چندین گره ممکن است پیکربندی شوند تا این SYNC را ببینند و به آن پاسخ دهند. به این شکل، مستر میتواند یک «تصویر لحظهای» (snapshot) به شکل همزمان، از چندین جسم فرآیند بگیرد.
پارامترهای نگاشت مشخص میکنند که کدام مقادیر OD با یک پیام PDO منفرد ارسال میشوند. به عنوان مثال، یک پیام PDO منفرد ممکن است حاوی دادههایی از ایندکس جسم 2001h و 2003h و 2005h باشد.
مروری بر مدیریت شبکه (NMT)
خدمات مدیریت شبکه عبارتند از توانایی تغییر وضعیت یک اسلیو بین آغازین، پیش عملیاتی، عملیاتی و متوقف. پروتکل NMT این امکان را فراهم میکند که شبکه CANopen حالت ارتباطی گرههای منفرد را کنترل کند.
حالت پیش عملیاتی، عموما برای پیکربندی دستگاههای CANopen استفاده میشود. به همین شکلف ارتباطات PDO در حالت پیش عملیاتی مجاز نیستند. ارتباطات PDO در حالت عملیاتی ممکن میشوند.
در وضعیت متوقف شده، یک گره تنها میتواند گاردینگ گره (node guarding) یا هارتبیتس (heartbeats) را انجام دهد و نمیتوانند پیامها را دریافت یا مخابره کند. انواع خاصی از ارتباطات CANopen در حالات مختلف مجاز هستند. به طور مثال، SDOها در وضعیت پیش عملیاتی ممکن هستند،
اما PDOها خیر. به این دلیل که SDOها اغلب برای مقداردهی اولیه پارامترهای OD استفاده میشوند، ولی PDOها اغلب برای مخابره پیوسته دادههای در حال بروزرسانی کاربرد دارند.
گاردینگ و هارتبیتس
مشخصات CANopen نیازمند این است که گرهها باید از یک روش برای بررسی این استفاده کنند که آیا یک گره «زنده» (alive) است یا خیر. دو روش موجود عبارتند از: گاردینگ گره (node guarding) و هارتبیتس (heartbeats) که روش هارتبیتس، ترجیح داده میشود.
در پروتکل هارتبیتس، یک گروه CANopen به شکل دورهای یک پیام هارتبیت (ضربان قلب) ارسال میکند که به مستر CANopen یا مصرفکنندهی هارتبیت میگوید که این گره هنوز زنده است. اگر یک پیام هارتبیت در یک مدت زمان خاصی دریافت نشود، مستر میتواند یک عمل خاصی را انجام دهد.
چنین عملی میتواند ریست کردن گره یا گزارش دادن یک خطا به اپراتور باشد. پیام هارتبیت با CAN-ID 0x700 + Node ID شناسایی میشود که اولین بایت داده برابر با 1110 است.
در پروتکل گاردینگ گره (node guarding)، مستر CANopen از گرههای اسلیو، برای دریافت اطلاعات وضعیت فعلی، سوال میکند. اگر آن گره در بازه زمانی مشخصی جواب ندهد، مستر در نظر میگیرد که آن گره مرده است و دست به کار میشود.
پروتکل هارتبیتس، روش ارجح است چون نسبت به گاردینگ گره، اورهد کمتری (سربار کمتری) دارد.
پیامهای اورژانسی
به هر گره در یک شبکه CANopen، یک پیام منفرد اورژانسی (EMCY) تخصیص داده میشود که وضعیت گره را اعلام میکند. دقت کنید که پروتکلهای هارتبیتس و گاردینگ گره با این هدف وجود دارند که برای بیان خرابیها و ایرادات در ارتباطات استفاده شوند، در حالتی که پیامهای اورژانسی برای بیان خطاها داخل یک گره استفاده میشوند (مثل خرابی سنسور). یک پیام EMCY با COB-ID 80h + Node ID شناسایی میشود. بخش دادهی پیام EMCY حاوی اطلاعاتی در مورد خطایی است که رخ داده است.
اینترفیسها یا رابطهای NI CANopen
شرکت نشنال اینسترومنتز (NI) رابطهای مستر CANopen را برای فرمفاکتورهای CompactRIO و PXI و PCI ارائه میکند. هر رابط توسط درایور Industrial Communications for CANopen پشتیبانی میشود، که ویژگیهای آن از SDOها، PDOها، NMT، هارتبیتس، گاردینگ گره و سینک (synchronization) پشتیبانی میکند.
این درایور همچنین دارای ادیتور دستهای SDO (یا Batch SDO editor) است که این امکان را فراهم میآورد که یک کاربر گرهها را در شبکه CANopen به سادگی پیکربندی کند. ادیتور دستهای SDO همچنین از ادغام فایل EDS و پشتیبانی خدمات LSS برای پیکربندی گره اسیلو، پشتیبانی میکند.
ماژول یک پورتی CANopen برای NI CompactRIO
NI 9881 یک رابط ماژول تک پورت سرعت بالای CANopen سری C برای توسعهی نرمافزارهای CANopen در نرمافزار NI LabVIEW روی سختافزار NI CompactRIO میباشد. NI-9881 به شکل خارجی تامین برق میشود و میتواند به نرخ انتقال تا سقف 1Mbit/s برسد. پورت CANopen از کنترلر CompactRIO Real-Time قابل دسترسی است. ماژول 9881 به کیس NI cRIO-911x و ماژول LabVIEW FPGA نیاز دارد.
رابط یک پورت CANopen برای PCI/PXI
NI PCI-8531 و NI PXI-8531 هر دو به ترتیب رابطهای یک پورت CANopen برای پلتفرمهای PCI و PXI هستند. دارای نرخ انتقال تا سقف 1Mbit/s هستند و از درایور Industrial Communication for CANopen بهره میگیرند.