پروتکل Modbus یک پروتکل ارتباطی است که به دستگاهها اجازه میدهد از طریق انواع مختلف رسانهها، مانند خطوط سریال و اترنت، با یکدیگر ارتباط برقرار کنند. این پروتکل در سال ۱۹۷۹ توسط شرکت Modicon، که تولیدکننده کنترلکنندههای منطقی قابل برنامهریزی (PLC) بود، توسعه داده شد تا امکان ارتباط بین این دستگاهها فراهم شود.
Modbus یک ساختار پیامرسانی ارائه میدهد که برای ایجاد ارتباط مستر–اسلیو بین دستگاههای هوشمند طراحی شده است. یک پیام Modbus که از دستگاه A (مستر) ارسال میشود، آغازگر دریافت پاسخ از دستگاه B (اسلیو) خواهد بود. وظیفه این پروتکل، تعریف محتوای ارتباط، نحوه بستهبندی اطلاعات، و ترتیب ارسال و دریافت پیامها است.
پروتکل Modbus ساده و مقاوم است و به همین دلیل به یک انتخاب محبوب در سیستمهای کنترل صنعتی تبدیل شده است. این پروتکل یک استاندارد باز (Open Standard) محسوب میشود، به این معنا که استفاده و تغییر آن برای همه آزاد است، و همین موضوع باعث گسترش و پذیرش گسترده آن در سراسر صنعت شده است.
طیف گستردهای از تجهیزات صنعتی و سیستمهای کنترلی از Modbus پشتیبانی میکنند که این موضوع ادغام آن را در سامانههای موجود آسان میسازد. از PLCها گرفته تا HMIها و سیستمهای SCADA، Modbus یک زبان مشترک فراهم میکند که بسیاری از دستگاهها قادر به استفاده از آن هستند و در نتیجه پیچیدگی شبکههای صنعتی را کاهش میدهد. پشتیبانی گسترده از این پروتکل باعث شده است که تولیدکنندگان اغلب سازگاری با Modbus را بهعنوان یک قابلیت استاندارد در محصولات خود لحاظ کنند و بدینترتیب سهولت یکپارچهسازی در پلتفرمهای مختلف را افزایش دهند.

شبکهای با استفاده از پروتکل Modbus برای اتصال دستگاههای تولیدکنندگان مختلف
پروتکل Modbus در سال ۱۹۷۹ توسط شرکت Modicon توسعه داده شد؛ شرکتی که امروزه تحت مالکیت Schneider Electric قرار دارد. Modicon این پروتکل را برای استفاده در PLCها (کنترلکنندههای منطقی برنامهپذیر) خود ایجاد کرد؛ تجهیزاتی که در صنعت تولید برای اتوماسیون فرایندهای الکترومکانیکی صنعتی به کار میروند.
سازمان Modbus، که گروهی متشکل از کاربران و تأمینکنندگان مستقل است و از بهکارگیری پروتکل Modbus حمایت میکند، در سال ۲۰۰۲ تأسیس شد تا دسترسی عمومی به این پروتکل، مشخصات آن و اطلاعات مرتبط را فراهم کند. این سازمان همچنین تداوم دسترسپذیری، توسعه و کاربرد پروتکل Modbus را در بازارهای اتوماسیون صنعتی تضمین میکند.
از زمان پیدایش، Modbus در طیف گستردهای از تجهیزات و در صنایع مختلف پیادهسازی شده است. این پروتکل به دلیل سادگی، ماهیت باز و سهولت پیادهسازی خود همچنان محبوب باقی مانده است.
پروتکل Modbus کاربرد گستردهای در حوزه اتوماسیون صنعتی دارد. در محیطهای صنعتی، حفظ یک شبکه ارتباطی قابلاعتماد و کارآمد بین تعداد زیادی از دستگاهها و ماشینآلات امری ضروری است.
Modbus امکان برقراری ارتباط آسان و استانداردشده را بین انواع مختلف تجهیزات، مانند کنترلکنندههای منطقی قابل برنامهریزی (PLC)، حسگرها و عملگرها فراهم میکند. این پروتکل اغلب در کارخانههای تولیدی، نیروگاهها، پالایشگاههای نفت و سایر محیطهای صنعتی برای پایش و کنترل تجهیزات و فرایندها به کار میرود.
پروتکل Modbus همچنین در سیستمهای خودرویی، بهویژه در حوزه خودروهای الکتریکی، مورد استفاده قرار میگیرد. این پروتکل در پایش و کنترل پارامترهای مختلفی از جمله سیستمهای مدیریت باتری، سیستمهای شارژ و سیستمهای اینورتر نقش دارد. Modbus یک پروتکل کارآمد و با پیادهسازی ساده ارائه میدهد که عملکرد روان این سیستمها را تضمین میکند.
با گسترش اینترنت اشیا (IoT)، پروتکل Modbus اهمیت قابل توجهی پیدا کرده است. Modbus، بهویژه Modbus TCP/IP، برای برقراری ارتباط میان دستگاههای IoT، حسگرها و کنترلکنندهها از طریق شبکههای اترنت استفاده میشود. سادگی و پشتیبانی گسترده از این پروتکل باعث شده است که Modbus به یک انتخاب رایج برای ارتباطات IoT تبدیل شود.
پروتکل Modbus نقش کلیدی در تسهیل ارتباط میان حسگرها و عملگرها ایفا میکند. این پروتکل یک رابط استاندارد برای انتقال دادهها، مانند مقادیر اندازهگیریشده توسط حسگرها یا سیگنالهای کنترلی برای عملگرها، فراهم میسازد.
این موضوع به یک سیستم کنترل مرکزی یا PLC امکان میدهد تا طیف گستردهای از تجهیزات را بهصورت هماهنگ پایش و کنترل کند. استفاده از پروتکل Modbus در ارتباط بین حسگر و عملگر در حوزههای مختلفی، از ماشینآلات صنعتی گرفته تا سیستمهای پایش محیطی، رایج است.
در ارتباطات Modbus، تنها یک دستگاه میتواند درخواست (Request) ارسال کند. اسلیوها داده را از مستر دریافت کرده و متناسب با آن پاسخ میدهند. اسلیوها دستگاههای جانبیای مانند سنسور دما و رطوبت، کنترلر، آشکارساز دود، سنسور سطح آب یا سایر انواع تجهیزات اندازهگیری هستند. اسلیوها اطلاعات را پردازش کرده و دادههای خود را به مستر بازمیگردانند. اسلیوها ارتباط را با مستر آغاز نمیکنند و فقط میتوانند به پیامهایی که از طرف مستر ارسال میشود پاسخ دهند.
علاوه بر این، در فرآیند ارتباطی هیچ مکانیزم داخلیای برای تشخیص مشغول بودن (Busy) یک دستگاه وجود ندارد. برای مثال، اگر مستر فرمانی را به یک اسلیو ارسال کند اما اسلیو یا آن را دریافت نکرده باشد یا در حال پردازش وظایف دیگری باشد، قادر به پاسخگویی به مستر نخواهد بود. از آنجا که گذرگاه RS485 صرفاً مسئول انتقال داده است و فاقد مکانیزمهای پردازشی اضافی میباشد، لازم است از روشهای مبتنی بر نرمافزار استفاده شود تا مشخص گردد آیا دریافت داده با موفقیت انجام شده است یا خیر.

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

پروتکل ارتباطی مدباس
مدل داده در Modbus بر اساس مجموعهای از رجیسترها بنا شده است. این رجیسترها در واقع مکانهای حافظهای درون دستگاه هستند که میتوانند دادهها را نگهداری کنند و نمایانگر فضای ذخیرهسازی داخلی دستگاه میباشند. دو نوع رجیستر وجود دارد:
در یک سیستم Modbus دو نوع اصلی ورودی وجود دارد:
کویلها نوعی داده در پروتکل Modbus هستند که وضعیتهای باینری مانند روشن/خاموش (ON/OFF) یا درست/نادرست (TRUE/FALSE) را نمایش میدهند. کویلها میتوانند توسط مستر Modbus هم خوانده شوند و هم نوشته شوند.
ورودیهای دیجیتال (Discrete Inputs) از نظر نمایش وضعیتهای باینری مشابه کویلها هستند. با این تفاوت که برخلاف کویلها، فقط قابل خواندن هستند و امکان نوشتن روی آنها وجود ندارد.
در پروتکل Modbus سه حالت اصلی ارتباطی وجود دارد:
پروتکل Modbus دارای چندین نوع مختلف است. مهمترین آنها عبارتاند از:
Modbus RTU (Remote Terminal Unit) یک پیادهسازی دودویی از پروتکل Modbus است. این نوع معمولاً بر بستر ارتباطات سریال استفاده میشود و به دلیل نمایش فشرده دادهها، کارایی و سرعت بالایی دارد. این حالت معمولاً از RS-485 بهعنوان لایه فیزیکی استفاده میکند و بهطور معمول از پورت سریال یک تراشه برای انتقال پیامهای داده بهره میبرد. دادههای پیام در قالب باینری منتقل میشوند.
فریم Modbus ساختار یک پیام Modbus را مشخص میکند. این فریم شامل فریم شروع، کد تابع، داده و فریم پایان است. جدول زیر ساختار فریم را با جزئیات بیشتر در نسخه ASCII پروتکل نشان میدهد (در ادامه بیشتر توضیح داده میشود):
Modbus-RTU یک قالب فشرده است که دادهها را بهصورت هگزادسیمال نمایش میدهد. در قالب RTU، هر فرمان با یک جمعکنترل بررسی افزونگی چرخهای (CRC) دنبال میشود. برای مثال، اگر لازم باشد عدد ۱۰ ارسال شود، در حالت RTU فقط کافی است ۰x0A ارسال شود. انتقال داده روی باس بهصورت زیر نمایش داده میشود:
۰۰۰۰ ۱۰۱۰٫
یک پیام به یک فریم واحد از داده اشاره دارد و یک فریم داده نمایانگر یک پیام واحد است. این مفهوم به یک مجموعه کامل از دادههای دستوری اشاره دارد و در اصل یک توالی از دادهها را نمایش میدهد. یک پیام Modbus به فریم دادهای اشاره دارد که مستر به اسلیو ارسال میکند. این پیام شامل آدرس اسلیو، عملیاتی که مستر قصد انجام آن را دارد، چِکسام، و سایر اطلاعات مرتبط است.
فیلد آدرس (۱ بایت):
آدرس اسلیوی را مشخص میکند که پیام برای آن ارسال شده است. مقدار آدرس میتواند از ۱ تا ۲۴۷ باشد و مقدار ۰ برای پیامهای Broadcast (پخش همگانی) استفاده میشود.
کد تابع (۱ بایت):
نوع عملی را که اسلیو گیرنده باید انجام دهد مشخص میکند. کدهای تابع عملیات مختلفی مانند خواندن و نوشتن رجیسترهای Holding، خواندن ورودیهای دیجیتال (Discrete Inputs)، نوشتن یک کویل تکی و موارد مشابه را تعریف میکنند.
فیلد داده (طول متغیر، تا ۲۵۲ بایت):
حاوی دادههای واقعی در حال انتقال است. طول این فیلد به کد تابع مورد استفاده و نوع درخواست یا پاسخ بستگی دارد.
فیلد بررسی خطا (۲ بایت):
برای تشخیص خطا در فریم استفاده میشود. روش معمول بهکاررفته، CRC (Cyclic Redundancy Check) است که بر اساس محتوای فیلد آدرس، کد تابع و فیلد داده محاسبه میشود.
ساختار پیام یا فریم در Modbus RTU یک بسته باینری است که شامل اطلاعات زیر میباشد:

فریم پیام در پروتکل Modbus RTU
آدرس اسلیو (Slave Address): هر دستگاه اسلیو دارای یک آدرس منحصربهفرد است که یک بایت را اشغال میکند و در بازه ۰ تا ۲۵۵ قرار دارد. بازه معتبر آدرسهای اسلیو ۱ تا ۲۴۷ است، زیرا ۲۵۵ برای آدرس پخشی (Broadcast) رزرو شده است که برای ارسال پیام به همه دستگاههای اسلیو استفاده میشود.
کد تابع (Function Code): کد تابع یک بایت را اشغال میکند و هدف دستور را مشخص مینماید. برای مثال، میتوان از کدهای تابع برای پرسوجوی داده از یک دستگاه اسلیو یا تغییر دادهها روی دستگاه اسلیو استفاده کرد. هر کد تابع به یک قابلیت یا عملکرد مشخص اشاره دارد.
داده (Data): بخش داده بسته به کد تابع متفاوت است. برای نمونه، اگر کد تابع برای پرسوجوی داده از یک دستگاه اسلیو استفاده شود، داده ممکن است شامل آدرسی باشد که باید خوانده شود و تعداد بایتهایی که باید خوانده شوند.
چکسام (Checksum): در هنگام انتقال داده ممکن است خطا رخ دهد. چکسام، مانند CRC، برای بررسی صحت دادههای دریافتشده استفاده میشود.
کد تابع Modbus
پروتکل Modbus چندین تابع را تعریف میکند و برای استفاده آسان از این توابع، به هر تابع یک کد تابع اختصاص داده میشود که بهعنوان یک کد یا شناسه عمل میکند. این پروتکل بیش از بیست کد تابع را مشخص میکند، اما ۸ کد تابع پرکاربرد وجود دارد که برای خواندن و نوشتن در نواحی حافظه استفاده میشوند. جدول زیر این کدهای تابع رایج را نشان میدهد:
کد تابع | شرح تابع
۰۱H | خواندن کویل خروجی
۰۲H | خواندن کویل ورودی
۰۳H | خواندن رجیستر نگهدارنده (Holding Register)
۰۴H | خواندن رجیستر ورودی
۰۵H | نوشتن یک کویل تکی
۰۶H | نوشتن یک رجیستر تکی
۰FH | نوشتن چند کویل
۱۰H | نوشتن چند رجیستر
CRC (بررسی افزونگی چرخهای) یک مکانیزم تشخیص خطا است که در پروتکل Modbus استفاده میشود. فیلد CRC دو بایت را اشغال میکند و شامل یک مقدار باینری ۱۶ بیتی است. مقدار CRC توسط دستگاه فرستنده محاسبه شده و به فریم داده افزوده میشود. دستگاه گیرنده پس از دریافت داده، مقدار CRC را مجدداً محاسبه کرده و آن را با مقدار موجود در فیلد CRC فریم دریافتی مقایسه میکند. اگر این دو مقدار با یکدیگر مطابقت نداشته باشند، خطا رخ داده است.
برای مثال، اگر مستر فریم
۰۱۰۶۰۰۰۱۰۰۱۷۹۸۰۴
را ارسال کند که در آن ۹۸ ۰۴ نمایانگر فیلد CRC است، دستگاه اسلیو باید مقدار CRC را بر اساس بخش داده
۰۱۰۶۰۰۰۱۰۰۱۷
دوباره محاسبه کند. سپس اسلیو مقدار CRC محاسبهشده را با مقدار CRC دریافتشده (۹۸ ۰۴ که توسط مستر محاسبه شده است) مقایسه میکند. اگر این مقادیر یکسان نباشند، نشاندهنده بروز خطا در انتقال داده است و داده معتبر تلقی نمیشود.
مراحل بررسی CRC (Cyclic Redundancy Check) بهصورت خلاصه
Modbus ASCII (American Standard Code for Information Interchange) یک پیادهسازی مبتنی بر کدهای ASCII از پروتکل Modbus است. این نوع نسبت به Modbus RTU کارایی کمتری دارد، اما به دلیل استفاده از کاراکترهای قابل خواندن برای انسان، راهاندازی و عیبیابی آن سادهتر است. هر بایت ۸ بیتی بهصورت دو کاراکتر ASCII ارسال میشود. قالب ASCII از بررسی افزونگی طولی (LRC) بهعنوان چکسام استفاده میکند.
برای مثال، اگر لازم باشد عدد ۱۰ ارسال شود، در حالت ASCII ارقام «۱» و «۰» به نمایش ASCII آنها تبدیل میشوند. بنابراین، بایتهای ۰x31 (کد ASCII برای «۱») و ۰x30 (کد ASCII برای «۰») ارسال میشوند. انتقال داده روی باس بهصورت زیر نمایش داده میشود:
۰۰۱۱ ۰۰۰۱ ۰۰۱۱ ۰۰۰۰
ساختار فریم پیام Modbus-ASCII
بایت شروع (Start Bit): ۱ بایت که نشاندهنده آغاز فریم پیام است.
بیتهای آدرس (Address Bits): ۲ بایت که آدرس دستگاه اسلیو را نمایش میدهند.
بیتهای تابع (Function Bits): ۲ بایت که کد تابع را مشخص میکنند و بیانگر عملیاتی هستند که باید انجام شود.
بیتهای داده (Data Bits): n بیت داده که کمارزشترین بیت (LSB) ابتدا ارسال میشود.
LRC (بررسی افزونگی طولی): برخلاف CRC، حالت Modbus ASCII از LRC برای تشخیص خطا استفاده میکند. مقدار LRC بر اساس نمایش ASCII بایتهای آدرس، تابع و داده محاسبه میشود.
پایاندهنده (Terminator): فریم پیام با کاراکترهای \r (برگشت به ابتدای خط) و \n (رفتن به خط بعد) خاتمه مییابد که نشاندهنده پایان پیام است.

فریم پیام در پروتکل Modbus ASCII
در Modbus-ASCII، کاراکترهای شروع و پایان (CR و LF) وجود دارند که بهعنوان نشانگرهای آغاز و پایان یک فریم داده عمل میکنند. در مقابل، Modbus-RTU چنین نشانگرهایی ندارد و برای تشخیص آغاز و پایان یک فریم به فواصل زمانی متکی است. این پروتکل یک مدتزمان برابر با ۳٫۵ دوره کاراکتر را مشخص میکند. این بدان معناست که پیش از شروع یک فریم، باید یک زمان بیکاری (Idle) بیشتر از ۳٫۵ دوره کاراکتر وجود داشته باشد و پس از پایان یک فریم نیز باید یک زمان بیکاری ۳٫۵ دوره کاراکتر وجود داشته باشد تا از همپوشانی بستهها یا ایجاد وضعیتهای «گلیچ» جلوگیری شود.
نکته: ۳٫۵ دوره کاراکتر نشاندهنده یک مدتزمان مشخص است، اما این مقدار به نرخ بود (Baud Rate) وابسته است. در ارتباط سریال، هر کاراکتر معمولاً شامل ۱ بیت شروع، ۸ بیت داده (در اغلب موارد)، ۱ بیت توازن (Parity) یا بدون آن، و ۱ بیت توقف است. بنابراین، هر کاراکتر شامل ۱۱ بیت میباشد. در نتیجه، ۳٫۵ کاراکتر معادل ۳۸٫۵ بیت است. مفهوم نرخ بود به تعداد بیتهای باینری منتقلشده در هر ثانیه اشاره دارد. بنابراین، برای نرخ بود ۹۶۰۰، مقدار ۳٫۵ کاراکتر برابر است با:
۹۶۰۰ / ۳۸٫۵ = ۰٫۰۰۴۰۱ ثانیه × ۱۰۰۰ = ۴٫۰۱ میلیثانیه.
Modbus TCP/IP نسخهای از پروتکل Modbus است که بر روی شبکههای TCP/IP مورد استفاده قرار میگیرد. این نسخه امکان برقراری ارتباط در فواصل طولانی و میان شبکههای مختلف را فراهم میکند.
Modbus UDP (User Datagram Protocol) نسخهای از پروتکل Modbus است که از پروتکل انتقال UDP استفاده میکند. این روش نسبت به Modbus TCP/IP قابلیت اطمینان کمتری دارد، زیرا تحویل بستهها یا ترتیب صحیح آنها را تضمین نمیکند، اما سریعتر بوده و به پهنای باند کمتری نیاز دارد.
Modbus Plus (MB+ یا Modbus+) یک نوع اختصاصی (مالکیتی) از پروتکل Modbus است که توسط شرکت Schneider Electric معرفی شده است. این پروتکل از نوع ارتباط همتابههمتا (Peer-to-Peer) بوده و در مقایسه با Modbus استاندارد، سرعت بالاتر و انتقال داده با قطعیتپذیری (Deterministic) بیشتری ارائه میدهد.
با وجود مزایای فراوان، پروتکل Modbus دارای برخی محدودیتها نیز هست. یکی از این محدودیتها، نبود قابلیتهای امنیتی داخلی است. از آنجا که این پروتکل پیش از گسترش اینترنت توسعه یافته است، مکانیزمهایی برای ایمنسازی ارتباطات در آن پیشبینی نشده و در نتیجه میتواند در برابر حملات سایبری آسیبپذیر باشد.
محدودیت دیگر، سادگی خود پروتکل است. اگرچه این سادگی باعث میشود استفاده و پیادهسازی آن آسان باشد، اما در عین حال به این معناست که Modbus فاقد برخی قابلیتهای پیشرفتهای است که در پروتکلهای مدرنتر وجود دارد.
با وجود این محدودیتها، پروتکل Modbus به دلیل سادگی، استحکام و سازگاری گسترده، همچنان یک انتخاب محبوب برای بسیاری از کاربردها محسوب میشود.
در پایان، پروتکل Modbus همچنان یکی از مهمترین پروتکلهای ارتباطی در دنیای اتوماسیون صنعتی به شمار میرود. چه از Modbus RTU برای ارتباطات سریال استفاده کنید و چه از Modbus TCP برای شبکههای مبتنی بر اترنت، این پروتکل انعطافپذیر ارتباطی قابلاعتماد و بلادرنگ را میان تجهیزاتی مانند PLCها، حسگرها و کنترلکنندهها تضمین میکند. در شرکت فریان، ما به نقش حیاتی Modbus در صنایعی نظیر تولید، مدیریت انرژی، اتوماسیون صنعتی کاملاً آگاه هستیم.
انتخاب نسخه مناسب Modbus—چه Modbus RTU و چه Modbus TCP—به نیازهای خاص شما مانند فاصله، سرعت و مقیاسپذیری بستگی دارد. با یکپارچهسازی Modbus در سیستمهای خود، میتوانید عملکرد را بهینه کرده، اتصالپذیری را بهبود دهید و از عملیات روان و بدون وقفه اطمینان حاصل کنید.
اگر به دنبال راهکارهای باکیفیت Modbus و راهنمایی تخصصی برای یکپارچهسازی این پروتکل در شبکه صنعتی خود هستید، شرکت فریان خدمات و تجربه لازم برای پشتیبانی از نیازهای شما را در اختیار دارد. برای دریافت اطلاعات بیشتر یا یافتن راهکار مناسب پروژه خود، با ما تماس بگیرید.