مودباس

بندانگشتی|معماری پروتکل موباس
مودباس (به انگلیسی:Modbus) یک پروتکل ارتباطاتی داده می‌باشد که در سال ۱۹۷۹ توسط شرکت مودیکن   (اشنایدر الکتریک کنونی) برای استفاده در کنترل‌کننده‌های منطقی قابل برنامه‌ریزی  منتشر شد. ساختاری ساده و قوی دارد و از آن زمان تا کنون به یکی از پروتکل‌های استاندارد در صنعت بدل گشته‌است. در حال حاضر یکی از رایج‌ترین پروتکل‌ها در اتصال دستگاه‌های الکترونیک صنعتی است. دلایلی که پروتکل مودباس در محیط‌های صنعتی کاربرد فراوانی دارد عبارتند از:
#  جهت کاربردهای صنعتی توسعه و گسترش یافته‌است
#  به صورت رایگان منتشر شده‌است
#  گسترش پذیری و نگهداری ساده ای دارد
پروتکل مودباس در لایه انتقال از خطوط ارتباطی سریال کاراکتری، اترنت یا مجموعه پروتکل اینترنت استفاده می کند. مودباس جهت ارسال/دریافت داده و همچنین ارتباط چندین دستگاه، از روش اتصال همه تجهیزات به یک کابل پشتیبانی می کند. برای مثال، می‌تواند دستگاهی وجود داشته باشد که دما را اندازه‌گیری کند و دستگاه دیگری که رطوبت را اندازه‌گیری می کند، به یک کابل متصل باشند، و هر دو اندازه‌گیری‌ها را از طریق مودباس به یک کامپیوتر منتقل می‌کنند.

مودباس اغلب جهت ارتباط کامپیوتر/دستگاه ناظر با  واحدهای پایانه دوردست  در سیستم‌های سامانه سرپرستی و گردآوری داده  استفاده می‌شود. توسعه و بروز رسانی مودباس را سازمان مدیریت مودباس انجام می‌دهد. این سازمان از کاربران مستقل و تأمین کنندگان دستگاه‌های سازگار با پروتکل مودباس تشکیل شده‌است.

از آوریل ۲۰۰۴ اشنایدر الکتریک حقوق این پروتکل را به توسعه و به سازمان مدباس منتقل کرد و پس از آن به‌روزرسانی پروتکل‌های مدباس توسط این سازمان مدیریت می شود. سازمان مودباس انجمنی از کاربران و تأمین کنندگان دستگاه‌های سازگار با مودباس است که از استفاده مداوم از این فناوری حمایت می‌کند.  انجمن سازمان مدباس ، یک انجمن تجاری برای ترویج و توسعه پروتکل مودباس است.

## محدودیت‌ها
* از آنجایی که مودباس در اواخر دهه ۱۹۷۰ برای برقراری ارتباط با کنترل‌کننده‌های منطقی قابل برنامه‌ریزی طراحی شد، تعداد انواع داده‌ها محدود به آنهایی شد که PLCها در آن زمان درک می‌کردند. اشیاءدوتایی بزرگ پشتیبانی نمی‌شوند.
* یک گره هیچ روش استانداردی برای یافتن توضیحات مربوط به یک شیء داده (مثلاً قید یا محدوده آن) ندارد، به‌طور مثال، نمی تواند متوجه بشود که مقدار ثبات دما باید مابین ۳۰ تا ۱۷۵ درجه باشد.
* از آنجایی که مودباس یک پروتکل مشتری/سرور (درگذشته ارباب/برده) است، برای یک دستگاه موجود در محل کار  هیچ راهی برای برای دریافت داده‌ها توسط مکانیسم کنترل‌کننده رویداد (به جز از طریق اترنت TCP/IP، با نام open-mbus) وجود ندارد؛ زیرا گره مشتری باید به‌طور مداوم هر دستگاه میدانی را صدا بزند و به دنبال تغییرات در داده‌ها باشد که این امر پهنای باند و زمان شبکه  زیادی مصرف میکند. در برخی کاردبرد ها که پهنای باند گران است، مانند پیوند رادیویی با نرخ-بیت-پایین، استفاده از این پروتکل به صرفه نیست.
* مودباس در لایه پیوند داده‌ای محدود به آدرس دهی تنها ۲۴۷ دستگاه است، که تعداد دستگاه‌های میدانی را که ممکن است به یک ایستگاه اصلی متصل شوند محدود می‌کند (در اینجا نیز اترنت TCP/IP یک استثنا است). 
* پروتکل مودباس به تنهایی هیچ گونه امنیتی را در برابر دستورات غیرمجاز یا رهگیری داده‌ها فراهم نمی‌کند.
## انواع [[شیء (علوم رایانه)|شیء]] مودباس
انواع شیء زیر ممکن است توسط یک سرور مودباس به یک دستگاه مشتری مودباس ارائه شود:

## نسخه‌های پروتکل
نسخه‌هایی از پروتکل مودباس برای پورت‌های سریال و برای اترنت و سایر پروتکل‌هایی که مجموعه پروتکل اینترنت را پشتیبانی می‌کنند وجود دارد. انواع مختلفی از پروتکل‌های مودباس وجود دارد:
* *Modbus RTU* (واحد پایانه راه دور) — در ارتباطات سریال استفاده می‌شود و رایج‌ترین پیاده‌سازی موجود برای مودباس است. *Modbus RTU* از یک نمایش فشرده و باینری از داده‌ها برای ارتباطات پروتکل استفاده می‌کند. فرمت RTU از دستورات/داده‌ها با یک جمع‌بندی بررسی افزونگی چرخه‌ای به عنوان مکانیزم بررسی خطا برای اطمینان از قابلیت اطمینان داده‌ها پیروی می‌کند. یک پیام *Modbus RTU* باید به‌طور مداوم و بدون تردید بین کاراکترها منتقل شود. پیام‌های مدباس با دوره‌های بی‌صدا (سکوت) قاب‌بندی می‌شوند (جدا می‌شوند).
* *Modbus ASCII* — در ارتباطات سریال استفاده می‌شود و از کاراکترهای اسکی  برای ارتباطات پروتکل استفاده می‌کند. قالب اسکی از یک جمع کنترلی افزونگی طولی استفاده می‌کند. قالب پیام‌های *Modbus ASCII* توسط یک کولون (":") پیشرو و نوخط  پسرو بسته بندی می‌شوند.
* *Modbus TCP/IP* یا *Modbus TCP* - یک نوع مودباس که برای ارتباطات روی شبکه‌های TCP/IP استفاده می‌شود و از طریق پورت ۵۰۲ متصل می‌شود. نیازی به محاسبه جمع کنترلی ندارد، زیرا لایه‌های پایین‌تر از قبل محافظت از جمع کنترلی را فراهم می‌کنند.
* *Modbus over UDP* — برخی با استفاده از مودباس روی UDP در شبکه‌های IP آزمایش کرده‌اند که سربار TCP را حذف می‌کند.
* *Modbus Plus* (**', **' یا *MBP*) — این پروتکل یک پروتکل اختصاصی اشنایدر الکتریک است و بر خلاف انواع دیگر، از ارتباطات همتا به همتا بین چندین مشتری پشتیبانی می‌کند. برای کنترل سریع چرخش توکن HDLC مانند به یک پردازنده مشترک اختصاصی نیاز دارد. از جفت پیچ خورده با سرعت ۱ مگابیت بر ثانیه استفاده می‌کند و شامل جداسازی ترانسفورماتور در هر گره است، که باعث می‌شود به جای ولتاژ/سطح راه اندازی، انتقال/لبه راه اندازی شود. برای اتصال *Modbus Plus* به یک کامپیوتر، معمولاً یک کارت ساخته شده برای گذرگاه ISA, PCI یا PCMCIA، به سخت‌افزار خاصی نیاز است.
* *Pemex Modbus* — توسعه ای از مودباس استاندارد با پشتیبانی از داده‌های تاریخی و جریان. این برای شرکت نفت و گاز Pemex برای استفاده در کنترل فرایند طراحی شده‌است و هرگز مورد پذیرش گسترده قرار نگرفت.
* *Enron Modbus* — توسعه دیگری از مودباس استاندارد که توسط انرون  با پشتیبانی از متغیرهای اعداد صحیح و ممیز شناور ۳۲ بیتی و داده‌های تاریخی و جریان توسعه یافته‌است. انواع داده‌ها با استفاده از آدرس‌های استاندارد نگاشت می‌شوند. داده‌های تاریخی برای مطابقت با استانداردهای صنعتی مؤسسه نفت آمریکا (API) برای نحوه ذخیره داده‌ها عمل می‌کنند.

مدل‌های داده و فراخوانی تابع برای سه نوع اول فهرست شده در بالا یکسان هستند. فقط کپسولاسیون متفاوت است. با این حال، انواع مختلف، و همچنین فرمت‌های فریم قابل اجرا نیستند.

## ارتباطات و دستگاه‌ها
به هر دستگاهی که از طریق مودباس ارتباط برقرار می‌کند (یعنی داده انتقال می کند) یک آدرس منحصر به فرد داده می‌شود.

در *Modbus RTU*, *Modbus ASCII* و *Modbus Plus* (که همگی شبکه‌های چند انشعابی و تک کابلی منطبق بر RS-485 هستند)، فقط گره ای که به عنوان مشتری اختصاص داده شده‌است می‌تواند دستوری را آغاز کند. همه دستگاه‌های دیگر سرور هستند و به درخواست‌ها و دستورات پاسخ می‌دهند.

برای پروتکل‌هایی که از اترنت استفاده می‌کنند، مانند *Modbus TCP*، هر دستگاهی می‌تواند یک فرمان مودباس ارسال کند و بنابراین همه آنها می‌توانند به عنوان مشتری عمل کنند، اگرچه معمولاً فقط یک دستگاه این نقش را دارد.

بسیاری از مودم‌ها و دروازه‌ها از مودباس پشتیبانی می‌کنند، زیرا یک پروتکل ساده است. برخی از این ابزارها به طور خاص برای این پروتکل طراحی شده اند. پیاده سازی های مختلف، از ارتباطات سیمی یا بی سیم مانند باند ISM و حتی سرویس پیام کوتاه  یا سرویس رادیویی بسته عمومی  استفاده می کنند. یکی از رایج‌ترین طرح‌های شبکه‌های بی‌سیم، استفاده از شبکه‌های توری است. یکی از رایج‌ترین طرح‌های شبکه‌های بی‌سیم، استفاده از شبکه‌های مش است. مشکلات معمولی که طراحان باید بر آنها غلبه کنند عبارتند از تأخیر زیاد و مسائل مربوط به زمان است.

## دستورات
دستورات مودباس می‌توانند به دستگاه مودباس دستور دهند:
* مقدار یکی از رجیسترهای آن را که به رجیسترهای هسته و نام‌نویسی نوشته شده‌است تغییر دهید
* خواندن یک پورت I/O: خواندن داده‌ها از یک ورودی گسسته یا از یک هسته
* به دستگاه دستور دهید تا یک یا چند مقدار موجود در رجیسترهای هسته و نگهدارنده خود را ارسال کند

یک دستور مودباس حاوی آدرس مودباس دستگاهی است که برای آن در نظر گرفته شده‌است (۱ تا ۲۴۷). فقط دستگاه آدرس‌دهی شده به دستور پاسخ می‌دهد و به آن عمل می‌کند، حتی اگر برای دستگاه‌های دیگر ممکن باشد آن را دریافت کنند (یک استثنا، دستورات قابل پخش خاصی است که به گره ۰ ارسال می‌شود، که بر اساس آنها عمل می‌شود اما تأیید نمی‌شوند).

تمام دستورات مودباس حاوی اطلاعات جمع کنترل هستند تا به گیرنده امکان تشخیص خطاهای انتقال را بدهد.

## فرمت‌های فریم
یک «قاب» مودباس از یک واحد داده برنامه (ADU) تشکیل شده‌است که یک واحد داده پروتکل (PDU) را محصور می‌کند:
* ADU = آدرس + PDU + بررسی خطا
* PDU = کد تابع + داده.

در فریم‌های داده Modbus، مهم‌ترین بایت یک مقدار چند بایتی قبل از بقیه ارسال می‌شود.

همه انواع مودباس از یکی از قالب‌های فریم زیر استفاده می‌کنند.

### قالب قاب RTU مودباس
این قالب عمدتاً در خطوط داده سریال ناهمزمان مانند RS-485 استفاده می‌شود. نام آن به یک ترمینال راه دور اشاره دارد.

### فرمت قاب Modbus ASCII
عمدتاً در خطوط سریال ناهمزمان ۷ بیتی یا ۸ بیتی استفاده می‌شود.

## فرمت درخواست‌ها و پاسخ‌ها
درخواست‌ها و پاسخ‌ها از قالب‌های فریم که در بالا توضیح داده شد پیروی می‌کنند. این بخش جزئیات فرمت‌های داده کدهای تابعی که اغلب استفاده می‌شود را ارائه می‌دهد.

**کدهای تابع ۱ (خواندن سیم پیچ) و ۲ (خواندن ورودی‌های گسسته)**

**درخواست:**
* آدرس اولین سیم پیچ/ورودی گسسته برای خواندن (۱۶ بیت)
* تعداد سیم پیچ/ورودی‌های گسسته برای خواندن (۱۶ بیت)

**پاسخ عادی:**
* تعداد بایت‌های سیم پیچ/مقادیر ورودی گسسته برای دنبال کردن (۸ بیت)
* مقادیر ورودی سیم پیچ/گسسته (۸ سیم پیچ/ورودی گسسته در هر بایت)

مقدار هر سیم پیچ / ورودی گسسته باینری است (۰ برای خاموش، ۱ برای روشن). سیم پیچ/ورودی گسسته درخواستی اول به عنوان کمترین بیت مهم از بایت اول در پاسخ ذخیره می‌شود. اگر تعداد سیم پیچ ها/ورودی‌های گسسته مضرب ۸ نباشد، مهم‌ترین بیت (های) آخرین بایت با صفر پر می‌شود.

برای مثال، اگر یازده سیم پیچ درخواست شود، دو بایت مقدار مورد نیاز است. فرض کنید حالت‌های آن سیم پیچ‌های متوالی روشن، خاموش، روشن، خاموش، خاموش، روشن، روشن، روشن، خاموش، روشن، روشن هستند، سپس پاسخ 02 A7 ۰۳ در هگزادسیمال خواهد بود.

از آنجایی که تعداد بایت‌های بازگردانده شده در پیام پاسخ تنها ۸ بیت عرض و سربار پروتکل ۵ بایت است، حداکثر 2008 (251x 8) ورودی یا سیم پیچ مجزا را می‌توان به‌طور همزمان خواند.

**کد تابع ۵ (تک سیم پیچ زور/نوشتن)**

**درخواست:**
* آدرس سیم پیچ (۱۶ بیتی)
* مقدار اجباری/نوشتن: ۰ برای خاموش و 65280 (FF00 در هگزادسیمال) برای روشن

**پاسخ عادی:** همان درخواست.

**کد تابع ۱۵ (کویل‌های متعدد را نوشتن/اجبار)**

**درخواست:**
* آدرس اولین سیم پیچ برای اجبار/نوشتن (۱۶ بیت)
* تعداد سیم پیچ‌هایی برای اجبار/نوشتن (۱۶ بیت)
* تعداد بایت‌های مقادیر سیم پیچی که باید دنبال شود (۸ بیت)
* مقادیر کویل (۸ مقدار سیم پیچ در هر بایت)

مقدار هر سیم پیچ باینری است (۰ برای خاموش، ۱ برای روشن). اولین سیم پیچ درخواستی به عنوان کم‌اهمیت‌ترین بیت از اولین بایت در درخواست ذخیره می‌شود. اگر تعدادی از سیم پیچ‌ها مضرب ۸ نباشد، مهم‌ترین بیت (های) آخرین بایت باید با صفر پر شود. به مثال برای کدهای تابع ۱ و ۲ مراجعه کنید.

**پاسخ عادی:**
* آدرس سیم پیچ اول (۱۶ بیتی)
* تعداد کویل (۱۶ بیت)

**کدهای تابع ۴ (خواندن رجیسترهای ورودی) و ۳ (خواندن رجیسترهای نگهدارنده)**

**درخواست:**
* آدرس اولین ثبت نام برای خواندن (۱۶ بیتی)
* تعداد رجیستر برای خواندن (۱۶ بیت)

**پاسخ عادی:**
* تعداد بایت‌های مقادیر ثبت شده برای دنبال کردن (۸ بیت)
* مقادیر ثبت (۱۶ بیت در هر ثبت)

از آنجایی که حداکثر طول یک PDU Modbus 253 است (که از حداکثر طول Modbus ADU 256 در RS485 استنباط می‌شود)، هنگام استفاده از فرمت RTU تا ۱۲۵ ثبات را می‌توان به‌طور همزمان درخواست کرد، و تا ۱۲۳ را از طریق TCP.

**کد تابع ۶ (ثبت از پیش تعیین شده/نوشتن تک نگهدارنده)**

**درخواست:**
* آدرس نگهدارنده رجیستر برای از پیش تنظیم/نوشتن (۱۶ بیت)
* مقدار جدید ثبت نام (۱۶ بیت)

**پاسخ عادی:** همان درخواست.

**کد تابع ۱۶ (از پیش تنظیم/نوشتن چندین رجیستر نگهدارنده)**

**درخواست:**
* آدرس اولین نگهدارنده ثبت نام برای از پیش تنظیم/نوشتن (۱۶ بیت)
* تعداد رجیسترهای نگهداری شده برای از پیش تنظیم/نوشتن (۱۶ بیت)
* تعداد بایت‌های مقادیر ثبت شده برای دنبال کردن (۸ بیت)
* مقادیر جدید نگهداری رجیسترها (۱۶ بیت در هر ثبات)

از آنجایی که حداکثر طول یک PDU Modbus 253 است (که از حداکثر طول Modbus ADU 256 در RS485 استنباط می‌شود)، تا ۱۲۳ ثبات را می‌توان همزمان نوشت.

**پاسخ عادی:**
* نشانی اولین ثبت از پیش تنظیم شده/نوشته شده (۱۶ بیتی)
* تعداد رجیسترهای نگهدارنده از پیش تعیین شده/نوشته شده (۱۶ بیت)

## منابع

* متن انگلیسی ویکی‌پدیا

رده:اترنت صنعتی
رده:اتوماسیون
رده:پروتکل‌های شبکه
رده:خودکارسازی ساختمان
رده:محاسبات صنعتی
رده:مهندسی برق