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

CANopen چیست؟
به زبان ساده، CANopen یک پروتکل ارتباطی سطح بالا است که بر پایه شبکه CAN bus ساخته شده. اگر CAN bus را مثل یک سیستم تلفن در نظر بگیریم که به همه اجازه میدهد با هم تماس بگیرند، CANopen زبانی است که همه با آن صحبت میکنند تا حرف یکدیگر را بفهمند.
این پروتکل توسط گروه بینالمللیCAN in Automation توسعه داده شده تا یک استاندارد واحد برای دستگاههای مختلف صنعتی ایجاد کند. به لطف CANopen، دیگر فرقی نمیکند سنسور شما از یک شرکت آلمانی باشد و موتور شما از یک شرکت ژاپنی؛ تا زمانی که هر دو از پروتکل CANopen پشتیبانی کنند، میتوانند به راحتی با هم ارتباط برقرار کرده و داده تبادل کنند.
این ویژگی، یعنی قابلیت همکاری ، بزرگترین مزیت CANopen است و امروزه در صنایع مختلفی از جمله اتوماسیون صنعتی، تجهیزات پزشکی، رباتیک و حتی وسایل نقلیه الکتریکی استفاده میشود.

مفاهیم کلیدی در CANopen
برای اینکه دنیای CANopen را بهتر درک کنیم، باید با چند مفهوم کلیدی آشنا شویم. اینها آجرهای سازنده این پروتکل هستند:
🔹 پروتکلهای ارتباطی: سه مدل اصلی برای حرف زدن دستگاهها وجود دارد: Master/Slave، Client/Server و Producer/Consumer که در ادامه هرکدام را توضیح میدهیم.
🔹 اشیاء ارتباطی: اینها بستههای پیام استاندارد شدهای هستند که برای اهداف خاصی مثل پیکربندی یا ارسال دادههای زنده استفاده میشوند.
🔹 حالتهای دستگاه: هر دستگاه در شبکه میتواند در حالتهای مختلفی مثل راهاندازی، عملیاتی یا متوقف شده باشد که توسط یک دستگاه Master مدیریت میشود.
🔹 دیکشنری اشیاء: این قلب تپنده هر دستگاه CANopen است. یک جدول استاندارد که تمام تنظیمات، دادهها و عملکردهای دستگاه در آن تعریف شده.
🔹 فایل EDS : یک فایل متنی استاندارد که مثل کاتالوگ یا شناسنامه دستگاه عمل میکند و تمام محتویات دیکشنری اشیاء آن را توصیف میکند.
🔹 پروفایلهای دستگاه: استانداردهایی که عملکرد دستگاههای مشابه را یکسان میکنند تا جایگزینی آنها سادهتر شود.
مدل OSI در CANopen
اگر با مدل ۷ لایهای OSI آشنا باشید، درک جایگاه CANopen بسیار ساده است.
🔰 لایههای ۱ و ۲: این لایهها توسط CAN bus پوشش داده میشوند. یعنی وظیفه ارسال و دریافت بیتها روی سیم و ساختار اولیه فریمها بر عهده CAN bus است.
🔰 لایههای ۳ تا ۷: CANopen در این لایههای بالایی، بهخصوص لایه کاربرد، قرار میگیرد.
به عبارت دیگر، CAN bus زیرساخت فیزیکی و قوانین پایه را فراهم میکند، و CANopen به عنوان مغز متفکر، روی این زیرساخت سوار میشود تا مشخص کند که دادهها چطور تفسیر شوند، دستگاهها چطور پیکربندی شوند و شبکه چگونه مدیریت شود.

ساختار فریم CANopen و COB-ID
هر پیامی که در شبکه CANopen ارسال میشود، درون یک فریم استاندارد CAN قرار دارد.
مهمترین بخش این فریم، شناسه ۱۱ بیتی آن است که در CANopen به آنCOB-ID میگویند. این شناسه فقط یک عدد ساده نیست، بلکه از دو بخش معنادار تشکیل شده است:
COB-ID = کد عملکرد + شناسه نود
🔹 کد عملکرد: این ۴ بیت نوع پیام را مشخص میکند. مثلاً آیا این پیام از نوع SDO است، PDO است یا یک پیام مدیریتی؟
🔹 شناسه نود: این ۷ بیت آدرس دستگاهی است که پیام را ارسال یا دریافت میکند. با ۷ بیت، میتوان تا ۱۲۷ دستگاه را در یک شبکه آدرسدهی کرد.
🔸 مثال: فرض کنید یک پیام با COB-ID برابر با 0x185 داریم. در مبنای دو، این عدد 00110 000101 میشود.
◾️ ۴ بیت اول کد عملکرد مربوط به TPDO1 است.
◾️ ۷ بیت بعدی معادل عدد ۵ است که شناسه دستگاه است.
پس این پیام، یک داده زنده است که توسط دستگاه شماره ۵ ارسال شده. یکی از سوالات پرتکراری که بچهها تو فرومهای تخصصی میپرسن همینه که چطور COB-ID رو تحلیل کنن. فکر میکنن خیلی پیچیدهست، در حالی که با این فرمول ساده، مثل آب خوردن میشه فهمید هر پیام مال کیه و چه کاری انجام میده.

پروتکلهای ارتباطی در CANopen
دستگاهها در شبکه CANopen با سه مدل اصلی با هم صحبت میکنند:
Master/Slave 1️⃣: در این مدل، یک دستگاه به عنوان Master عمل کرده و وضعیت کلی شبکه را کنترل میکند. سایر دستگاهها Slave هستند و از دستورات Master پیروی میکنند.
🔸 مثال کاربردی: یک کنترلر مرکزی به عنوان Master، به یک بازوی رباتیک دستور میدهد که به حالت عملیاتی برود یا متوقف شود. این مدل بیشتر برای مدیریت شبکه استفاده میشود.
Client/Server 2️⃣: این پروتکل ارتباطی canopen برای ارتباط یک به یک و درخواست اطلاعات خاص استفاده میشود. یک دستگاه Client از یک دستگاه Server درخواستی میکند و Server به آن پاسخ میدهد.
🔸 مثال کاربردی: یک ابزار مانیتورینگ از یک درایو موتور میپرسد: "دمای فعلی تو چقدر است؟" و درایو موتور با مقدار دما پاسخ میدهد. این مدل قلب تپنده ارتباطات SDO است.
Producer/Consumer 3️⃣: این مدل برای پخش اطلاعات به صورت گسترده استفاده میشود. یک دستگاه Producer دادهای را تولید و در شبکه منتشر میکند و هر دستگاهی که به آن داده نیاز داشته باشد، آن را دریافت و مصرف میکند.
🔸 مثال کاربردی: یک سنسور فشار به طور مداوم مقدار فشار را در شبکه پخش میکند و یک نمایشگر و یک کنترلر این داده را برای نمایش و کنترل فرآیند استفاده میکنند. این مدل اساس کار PDO است.
احساس میکنید این پروتکلها برای شبکه شما زیادی پیچیدهان؟ نگران نباشید! کارشناسای ما تو رایانه کمک میتونن ساختار ارتباطی شبکهتون رو تحلیل کنن و بهترین پروتکل رو برای هر دستگاه پیشنهاد بدن تا همه چیز بهینه و بدون نقص کار کنه.

آشنایی با اشیاء ارتباطی
حالا که با مدلهای ارتباطی آشنا شدیم، وقت آن است که ابزارهای این ارتباط را بشناسیم. در CANopen، پیامها در قالب بستههای استانداردی به نام اشیاء ارتباطی تبادل میشوند. هر کدام از این اشیاء یک وظیفه خاص دارند. در ادامه، مهمترین آنها را بررسی میکنیم.
SDO: قلب پیکربندی شبکه ✅
SDO یا شی داده سرویس، ابزار اصلی برای دسترسی به دیکشنری اشیاء یک دستگاه است. از طریق SDO میتوان پارامترهای یک دستگاه را از راه دور خواند یا تنظیمات جدیدی روی آن نوشت. این ارتباط همیشه بین یک Client و یک Server و به صورت یک به یک انجام میشود.
SDO Download ◀️: وقتی Client دادهای را به Server مینویسد.
SDO Upload ◀️: وقتی Client دادهای را از Server میخواند.
برای انتقال دادهها با SDO، سه روش وجود دارد:
Expedited Transfer 1️⃣: برای انتقال دادههای کوچک استفاده میشود. کل فرآیند در دو پیام خلاصه میشود. این روش سریع و ساده است.
🔸 مثال: تغییر یک پارامتر ساده مثل فعال/غیرفعال کردن یک خروجی.
Segmented Transfer 2️⃣: برای دادههای بزرگتر از ۴ بایت استفاده میشود. در این روش، دادهها به قطعات ۷ بایتی تقسیم شده و یکییکی ارسال میشوند. پس از ارسال هر قطعه، گیرنده یک پیام تأیید میفرستد. این روش مطمئن است اما به دلیل پیامهای تأیید متعدد، کمی کند است.
🔸 مثال: آپلود کردن لاگ خطاهای یک دستگاه که حجم نسبتاً زیادی دارد. خیلی از مهندسها موقع کار با SDO، مخصوصاً تو انتقالهای Segmented، با خطاهای تایماوت مواجه میشن. معمولاً مشکل از اینه که دستگاه سرور نمیتونه به موقع پاسخ تأیید رو بفرسته. اینجاست که فهم دقیق این مکانیزم به عیبیابی کمک بزرگی میکنه.
Block Transfer 3️⃣: این روش بهینهترین راه برای انتقال حجم بسیار زیادی از دادههاست. دادهها به بلوکهایی تقسیم میشوند و فرستنده کل بلوک را پشت سر هم ارسال میکند. گیرنده فقط در پایان هر بلوک یک پیام تأیید میفرستد. این کار سربار ارتباطی را به شدت کاهش میدهد.
🔸 مثال: آپدیت کردن Firmware یک دستگاه از طریق شبکه.
PDO: شاهراه انتقال دادههای زنده ✅
اگر SDO برای تنظیمات و کارهای پیکربندی بود، PDO یا شی داده فرآیند برای انتقال دادههای عملیاتی و زنده است. فکر کنید یک سنسور دما باید هر ۱۰ میلیثانیه مقدار جدید را به کنترلر بفرستد. استفاده از SDO برای این کار بسیار کند و ناکارآمد است.
اینجاست که PDO وارد میشود. PDOها سربار پروتکلی بسیار کمی دارند و دادهها را به صورت مستقیم و بدون نیاز به درخواست، در شبکه پخش میکنند.
◀️ تفاوت اصلی با SDO: یک PDO میتواند تا ۸ بایت داده از پارامترهای مختلف دیکشنری اشیاء را در یک فریم جا دهد و آن را به صورت یکطرفه ارسال کند. در حالی که برای خواندن همان دادهها با SDO، به چندین پیام درخواست و پاسخ نیاز بود.
دو نوع اصلی PDO داریم:
TPDO 🔹: دادههایی که یک دستگاه تولید و ارسال میکند.
RPDO 🔹: دادههایی که یک دستگاه دریافت و مصرف میکند.
PDOها معمولاً به دو روش ارسال میشوند:
Event-Driven 1️⃣: هر زمان که مقدار داده تغییر کند، PDO ارسال میشود.
Synchronous 2️⃣: پس از دریافت یک پیام خاص به نام SYNC از طرف Master، تمام دستگاهها PDOهای خود را به صورت همزمان ارسال میکنند. این کار برای گرفتن یک "عکس فوری" از وضعیت کل سیستم عالی است.
سایر اشیاء ارتباطی مهم ✅
علاوه بر SDO و PDO، چند شی ارتباطی مهم دیگر هم وجود دارند که برای مدیریت و نظارت بر شبکه ضروری هستند:
NMT ◀️: پیامهای مدیریتی که توسط Master برای تغییر حالت دستگاهها استفاده میشود. COB-ID این پیام همیشه 0x0 است.
SYNC ◀️: پیامی که توسط Master به صورت دورهای ارسال میشود تا دستگاهها کارهای خود را با آن همگام کنند.
TIME ◀️: پیامی که زمان و تاریخ دقیق را در کل شبکه پخش میکند تا همه دستگاهها یک ساعت مشترک داشته باشند.
EMCY ◀️: اگر در یک دستگاه خطای جدی رخ دهد، آن دستگاه یک پیام اضطراری EMCY ارسال میکند تا بقیه باخبر شوند.
HEARTBEAT ◀️: هر دستگاه به صورت دورهای یک پیام Heartbeat ارسال میکند تا اعلام کند که "من زندهام و درست کار میکنم". اگر Master این پیام را برای مدتی دریافت نکند، متوجه میشود که آن دستگاه دچار مشکل شده است.
مدیریت این همه پیام NMT، SYNC و HEARTBEAT میتونه گیجکننده باشه، مخصوصاً وقتی یه دستگاه ارور EMCY میده و کل خط تولید میخوابه! قبل از اینکه چنین مشکلی براتون پیش بیاد، با یک جلسه مشاوره با متخصصان رایانه کمک، از سلامت و پایداری شبکه CANopen خودتون مطمئن بشید.
دیکشنری اشیاء: شناسنامه دیجیتال دستگاه ✅
دیکشنری اشیاء یا OD، مهمترین بخش هر دستگاه CANopen است. این یک جدول استاندارد و مرتبشده است که تمام اطلاعات مربوط به دستگاه در آن ذخیره میشود؛ از نام و مدل دستگاه گرفته تا تمام پارامترهای پیکربندی، دادههای سنسورها، و دستورات کنترلی.
هر ورودی در این جدول با یک آدرس منحصربهفرد مشخص میشود که از دو بخش تشکیل شده:
🔹 ایندکس: یک عدد ۱۶ بیتی که گروه اصلی پارامتر را مشخص میکند.
🔹 ساب-ایندکس: یک عدد ۸ بیتی که پارامتر خاصی را در آن گروه مشخص میکند.
🔸 مثال: آدرس 1008h:00h همیشه به نام دستگاه اشاره دارد.
دیکشنری اشیاء به بخشهای استانداردی تقسیم شده تا پیدا کردن اطلاعات ساده باشد. مثلاً یک بخش برای پارامترهای ارتباطی، یک بخش برای پارامترهای مخصوص خود دستگاه و یک بخش برای دادههای فرآیندی وجود دارد. تمام ارتباطات SDO و PDO در نهایت برای خواندن یا نوشتن اطلاعات در همین دیکشنری اشیاء انجام میشود.
فایلهای EDS و DCF ✅
حالا که با دیکشنری اشیاء آشنا شدیم، چطور میتوانیم از محتویات آن باخبر شویم؟ از طریق فایلهای متنی استاندارد.
EDS ◀️: این فایل توسط سازنده دستگاه ارائه میشود و مثل یک کاتالوگ یا شناسنامه عمل میکند. فایل EDS تمام ورودیهای موجود در دیکشنری اشیاء دستگاه، مقادیر پیشفرض آنها و گزینههای قابل تنظیم را توصیف میکند. این فایل یک قالب خام است.
DCF ◀️: این فایل در واقع یک فایل EDS است که شما آن را برای شبکه خودتان ویرایش کردهاید. وقتی شما تنظیمات خاصی مثل شناسه نود یا سرعت شبکه را برای یک دستگاه مشخص میکنید و آن را ذخیره میکنید، در واقع یک فایل DCF ساختهاید. این فایل نقشه راه پیکربندیشده دستگاه شما در شبکه است.
یکی از کاربران در یک فروم نوشته بود: "اوایل فکر میکردم EDS و DCF یکی هستن و کلی گیج شده بودم. بعد فهمیدم EDS مثل فرم ثبت نام خامه و DCF همون فرمه که با اطلاعات خودم پرش کردم." این بهترین تشبیهی است که میتوان برای این دو فایل به کار برد.

جمعبندی
در این راهنمای جامع، سفری به دنیای پروتکل CANopen داشتیم. دیدیم که این پروتکل چگونه به عنوان یک زبان مشترک، به دستگاههای صنعتی اجازه میدهد تا به صورت هماهنگ با هم کار کنند. با مفاهیم کلیدی مثل دیکشنری اشیاء، اشیاء ارتباطی قدرتمندی مانند SDO برای پیکربندی و PDO برای انتقال دادههای زنده، و همچنین ابزارهای مدیریتی شبکه آشنا شدیم.
دنیای CANopen پر از جزئیات است و ما در این مقاله سعی کردیم یک نقشه راه کامل و قابل فهم برای شما ترسیم کنیم. حالا شما دید بسیار بهتری نسبت به این تکنولوژی قدرتمند دارید.
اگر آمادهاید که عمیقتر شوید، پروژهای را شروع کنید یا مشکلی را در شبکه خود حل کنید، تیم رایانه کمک اینجاست تا راهنمای شما باشد. با ما تماس بگیرید و از مشاوره تخصصی ما برای پروژههای شبکهتان استفاده کنید تا از همان ابتدا همه چیز اصولی و بدون نقص پیش برود.
قابل توجه شما کاربر گرامی: محتوای این صفحه صرفاً برای اطلاع رسانی است در صورتی که تسلط کافی برای انجام موارد فنی مقاله ندارید حتما از کارشناس فنی کمک بگیرید.