مودباس (به انگلیسی:Modbus) یک پروتکل ارتباطاتی داده میباشد که در سال ۱۹۷۹ توسط شرکت مودیکن (به انگلیسی: Modicon) (اشنایدر الکتریک کنونی) برای استفاده در کنترلکنندههای منطقی قابل برنامهریزی (اختصاری PLC) منتشر شد. ساختاری ساده و قوی دارد و از آن زمان تا کنون به یکی از پروتکلهای استاندارد در صنعت بدل گشتهاست. در حال حاضر یکی از رایجترین پروتکلها در اتصال دستگاههای الکترونیک صنعتی است. دلایلی که پروتکل مودباس در محیطهای صنعتی کاربرد فراوانی دارد عبارتند از:
پروتکل مودباس در لایه انتقال از خطوط ارتباطی سریال کاراکتری، اترنت یا مجموعه پروتکل اینترنت استفاده می کند. مودباس جهت ارسال/دریافت داده و همچنین ارتباط چندین دستگاه، از روش اتصال همه تجهیزات به یک کابل پشتیبانی می کند. برای مثال، میتواند دستگاهی وجود داشته باشد که دما را اندازهگیری کند و دستگاه دیگری که رطوبت را اندازهگیری می کند، به یک کابل متصل باشند، و هر دو اندازهگیریها را از طریق مودباس به یک کامپیوتر منتقل میکنند.
مودباس اغلب جهت ارتباط کامپیوتر/دستگاه ناظر با واحدهای پایانه دوردست (اختصاری RTU) در سیستمهای سامانه سرپرستی و گردآوری داده (اختصاری اسکادا) استفاده میشود. توسعه و بروز رسانی مودباس را سازمان مدیریت مودباس انجام میدهد. این سازمان از کاربران مستقل و تأمین کنندگان دستگاههای سازگار با پروتکل مودباس تشکیل شدهاست.
از آوریل ۲۰۰۴ اشنایدر الکتریک حقوق این پروتکل را به توسعه و به سازمان مدباس[۱] منتقل کرد و پس از آن بهروزرسانی پروتکلهای مدباس توسط این سازمان مدیریت می شود.[۲] سازمان مودباس انجمنی از کاربران و تأمین کنندگان دستگاههای سازگار با مودباس است که از استفاده مداوم از این فناوری حمایت میکند.[۳] انجمن سازمان مدباس (به انگلیسی: Modbus Organization, Inc.)، یک انجمن تجاری برای ترویج و توسعه پروتکل مودباس است.[۴]
انواع شیء زیر ممکن است توسط یک سرور مودباس به یک دستگاه مشتری مودباس ارائه شود:[۷]
نوع شی | دسترسی | اندازه | فضای آدرس |
---|---|---|---|
هسته | خواندن-نوشتن | 1 bit | ۰۰۰۰۱ – ۰۹۹۹۹ |
ورودی گسسته | فقط خواندنی | 1 bit | ۱۰۰۰۱ – ۱۹۹۹۹ |
ثبّات ورودی | فقط خواندنی | 16 bits | ۳۰۰۰۱ – ۳۹۹۹۹ |
ثبّات نگهدارنده | خواندن-نوشتن | 16 bits | ۴۰۰۰۱ – ۴۹۹۹۹ |
نسخههایی از پروتکل مودباس برای پورتهای سریال و برای اترنت و سایر پروتکلهایی که مجموعه پروتکل اینترنت را پشتیبانی میکنند وجود دارد. انواع مختلفی از پروتکلهای مودباس وجود دارد:
مدلهای داده و فراخوانی تابع برای سه نوع اول فهرست شده در بالا یکسان هستند. فقط کپسولاسیون متفاوت است. با این حال، انواع مختلف، و همچنین فرمتهای فریم قابل اجرا نیستند.
به هر دستگاهی که از طریق مودباس ارتباط برقرار میکند (یعنی داده انتقال می کند) یک آدرس منحصر به فرد داده میشود.
در Modbus RTU, Modbus ASCII و Modbus Plus (که همگی شبکههای چند انشعابی و تک کابلی منطبق بر RS-485 هستند)، فقط گره ای که به عنوان مشتری اختصاص داده شدهاست میتواند دستوری را آغاز کند. همه دستگاههای دیگر سرور هستند و به درخواستها و دستورات پاسخ میدهند.
برای پروتکلهایی که از اترنت استفاده میکنند، مانند Modbus TCP، هر دستگاهی میتواند یک فرمان مودباس ارسال کند و بنابراین همه آنها میتوانند به عنوان مشتری عمل کنند، اگرچه معمولاً فقط یک دستگاه این نقش را دارد.
بسیاری از مودمها و دروازهها از مودباس پشتیبانی میکنند، زیرا یک پروتکل ساده است. برخی از این ابزارها به طور خاص برای این پروتکل طراحی شده اند. پیاده سازی های مختلف، از ارتباطات سیمی یا بی سیم مانند باند ISM و حتی سرویس پیام کوتاه (اختصاری SMS) یا سرویس رادیویی بسته عمومی (اختصاری GPRS) استفاده می کنند. یکی از رایجترین طرحهای شبکههای بیسیم، استفاده از شبکههای توری است. یکی از رایجترین طرحهای شبکههای بیسیم، استفاده از شبکههای مش است. مشکلات معمولی که طراحان باید بر آنها غلبه کنند عبارتند از تأخیر زیاد و مسائل مربوط به زمان است.
دستورات مودباس میتوانند به دستگاه مودباس دستور دهند:
یک دستور مودباس حاوی آدرس مودباس دستگاهی است که برای آن در نظر گرفته شدهاست (۱ تا ۲۴۷). فقط دستگاه آدرسدهی شده به دستور پاسخ میدهد و به آن عمل میکند، حتی اگر برای دستگاههای دیگر ممکن باشد آن را دریافت کنند (یک استثنا، دستورات قابل پخش خاصی است که به گره ۰ ارسال میشود، که بر اساس آنها عمل میشود اما تأیید نمیشوند).
تمام دستورات مودباس حاوی اطلاعات جمع کنترل هستند تا به گیرنده امکان تشخیص خطاهای انتقال را بدهد.
یک «قاب» مودباس از یک واحد داده برنامه (ADU) تشکیل شدهاست که یک واحد داده پروتکل (PDU) را محصور میکند:[۸]
در فریمهای داده Modbus، مهمترین بایت یک مقدار چند بایتی قبل از بقیه ارسال میشود.
همه انواع مودباس از یکی از قالبهای فریم زیر استفاده میکنند.[۹]
این قالب عمدتاً در خطوط داده سریال ناهمزمان مانند RS-485 استفاده میشود. نام آن به یک ترمینال راه دور اشاره دارد.
نام | طول (بیت) | کارایی |
---|---|---|
شروع | ۳٫۵*۸ | حداقل ۳+۱/۲ بار کاراکتر (۲۸ بیت) سکوت (شرایط علامت گذاری) |
آدرس | ۸ | آدرس ایستگاه |
عملکرد | ۸ | کد عملکرد را نشان میدهد. "هستهها را بخوانید" |
داده | n × ۸ | داده + طول بسته به نوع پیام پر میشود |
CRC | ۱۶ | بررسی افزونگی چرخه ای |
پایان | ۳٫۵*۸ | حداقل 31⁄2 کاراکتر بار (۲۸ بیت) سکوت (شرایط علامت گذاری) بین فریمها |
عمدتاً در خطوط سریال ناهمزمان ۷ بیتی یا ۸ بیتی استفاده میشود.
نام | طول (بیت) | کارایی |
---|---|---|
شروع | ۱ | دو نقطه: (مقدار ASCII 3A16) |
آدرس | ۲ | آدرس ایستگاه |
عملکرد | ۲ | کد عملکرد را نشان میدهد. "کویلها را بخوانید" |
داده | n × ۲ | داده + طول بسته به نوع پیام پر میشود |
LRC | ۲ | Checksum (بررسی افزونگی طولی) |
پایان | ۲ | جفت کالسکه + تغذیه خط (CR/LF) (مقادیر ASCII 0D16 و 0A16) |
درخواستها و پاسخها از قالبهای فریم که در بالا توضیح داده شد پیروی میکنند. این بخش جزئیات فرمتهای داده کدهای تابعی که اغلب استفاده میشود را ارائه میدهد.
کدهای تابع ۱ (خواندن سیم پیچ) و ۲ (خواندن ورودیهای گسسته)
درخواست:
پاسخ عادی:
مقدار هر سیم پیچ / ورودی گسسته باینری است (۰ برای خاموش، ۱ برای روشن). سیم پیچ/ورودی گسسته درخواستی اول به عنوان کمترین بیت مهم از بایت اول در پاسخ ذخیره میشود. اگر تعداد سیم پیچ ها/ورودیهای گسسته مضرب ۸ نباشد، مهمترین بیت (های) آخرین بایت با صفر پر میشود.
برای مثال، اگر یازده سیم پیچ درخواست شود، دو بایت مقدار مورد نیاز است. فرض کنید حالتهای آن سیم پیچهای متوالی روشن، خاموش، روشن، خاموش، خاموش، روشن، روشن، روشن، خاموش، روشن، روشن هستند، سپس پاسخ 02 A7 ۰۳ در هگزادسیمال خواهد بود.
از آنجایی که تعداد بایتهای بازگردانده شده در پیام پاسخ تنها ۸ بیت عرض و سربار پروتکل ۵ بایت است، حداکثر 2008 (251x 8) ورودی یا سیم پیچ مجزا را میتوان بهطور همزمان خواند.
کد تابع ۵ (تک سیم پیچ زور/نوشتن)
درخواست:
پاسخ عادی: همان درخواست.
کد تابع ۱۵ (کویلهای متعدد را نوشتن/اجبار)
درخواست:
مقدار هر سیم پیچ باینری است (۰ برای خاموش، ۱ برای روشن). اولین سیم پیچ درخواستی به عنوان کماهمیتترین بیت از اولین بایت در درخواست ذخیره میشود. اگر تعدادی از سیم پیچها مضرب ۸ نباشد، مهمترین بیت (های) آخرین بایت باید با صفر پر شود. به مثال برای کدهای تابع ۱ و ۲ مراجعه کنید.
پاسخ عادی:
کدهای تابع ۴ (خواندن رجیسترهای ورودی) و ۳ (خواندن رجیسترهای نگهدارنده)
درخواست:
پاسخ عادی:
از آنجایی که حداکثر طول یک PDU Modbus 253 است (که از حداکثر طول Modbus ADU 256 در RS485 استنباط میشود)، هنگام استفاده از فرمت RTU تا ۱۲۵ ثبات را میتوان بهطور همزمان درخواست کرد، و تا ۱۲۳ را از طریق TCP.
کد تابع ۶ (ثبت از پیش تعیین شده/نوشتن تک نگهدارنده)
درخواست:
پاسخ عادی: همان درخواست.
کد تابع ۱۶ (از پیش تنظیم/نوشتن چندین رجیستر نگهدارنده)
درخواست:
از آنجایی که حداکثر طول یک PDU Modbus 253 است (که از حداکثر طول Modbus ADU 256 در RS485 استنباط میشود)، تا ۱۲۳ ثبات را میتوان همزمان نوشت.
پاسخ عادی: