مودباس
مودباس (به انگلیسی:Modbus) یک پروتکل ارتباطاتی سریال میباشد که در سال 1979 توسط شرکت مودیکن برای استفاده در کنترل کنندههای منطقی قابل برنامهریزی (PLC) منتشر شد.ساختاری ساده و قوی دارد و از آن زمان تا کنون به یکی از پروتکل های استاندارد در صنعت بدل گشته است.در حال حاضر یکی از رایجترین پروتکلها در اتصال دستگاههای الکترونیک صنعتی است.دلایلی که پروتکل Modbus در محیطهای صنعتی کاربرد فراوانی دارد عبارتند از: 1. جهت کاربردهای صنعتی توسعه و گسترش یافتهاست 2. به صورت رایگان منتشر شدهاست 3. گسترش پذیری و نگهداری ساده ای دارد
Modbus جهت برقراری ارتباط بین بسیاری (حدود 240) دستگاههای متصل به یک شبکه استفاده میشود، به عنوان مثال این پروتکل جهت اتصال وضعیت دما و رطوبت به یک کامپیوتر قابل استفاده است.Modbus اغلب جهت ارتباط کامپیوتر ناظر با RTUها در سیستمهای اسکادا استفاده میشود.توسعه و بروز رسانی Modbus را سازمان مدیریت Modbus انجام میدهد.این سازمان از کاربران مستقل و تأمین کنندگان دستگاههای سازگار با پروتکل Modbus تشکیل شدهاست.
از آوریل 2004، توسعه و به روز رسانی پروتکل های مدباس توسط سازمان مدباس مدیریت شده است[۱]، زمانی که اشنایدر الکتریک حقوق را به آن سازمان منتقل کرد.[۲] سازمان Modbus انجمنی از کاربران و تامین کنندگان دستگاه های سازگار با Modbus است که از استفاده مداوم از این فناوری حمایت می کند.[۳] سازمان مدباس، یک انجمن تجاری برای ترویج و توسعه پروتکل Modbus است.[۴]
محدودیت ها[ویرایش]
- از آنجایی که Modbus در اواخر دهه 1970 برای برقراری ارتباط با کنترل کننده های منطقی قابل برنامه ریزی طراحی شد، تعداد انواع داده ها محدود به آنهایی شد که PLC ها در آن زمان درک می کردند.اشیاءدوتایی بزرگ پشتیبانی نمی شوند.
- هیچ راه استانداردی برای یک گره برای یافتن توضیحات یک شی داده وجود ندارد، به طور مثال، یاد بگیرید که یک مقدار ثبات نشان دهنده دمای بین 30 تا 175 درجه است.
- از آنجایی که Modbus یک پروتکل مشتری/سرور (درگذشته ارباب/برده)[۵] است. هیچ راهی برای یک دستگاه فیلد برای دریافت داده ها توسط مکانیسم کنترل کننده رویداد (به جز از طریق اترنت TCP/IP، به نام open-mbus) وجود ندارد، زیرا گره مشتری باید به طور معمول هر دستگاه فیلد را نظرسنجی کند و به دنبال تغییرات در داده ها باشد.
Modbus به آدرس دهی 247 دستگاه در یک پیوند داده محدود شده است، که تعداد دستگاه های میدانی را که ممکن است به یک ایستگاه والد متصل شوند محدود می کند (باز هم اترنت TCP/IP یک استثنا است). پروتکل Modbus خود هیچ گونه امنیت در برابر دستورات غیرمجاز یا رهگیری داده ها را فراهم نمی کند.[۶]
انواع شی مودباس[ویرایش]
انواع شیء زیر ممکن است توسط یک سرور Modbus به یک دستگاه مشتری Modbus ارائه شود:[۷]
نوع شی | دسترسی | اندازه | فضای آدرس |
---|---|---|---|
هسته | خواندن-نوشتن | 1 bit | 00001 – 09999 |
ورودی گسسته | فقط خواندنی | 1 bit | 10001 – 19999 |
ثبت ورودی | فقط خواندنی | 16 bits | 30001 – 39999 |
برگزاری ثبت نام | خواندن-نوشتن | 16 bits | 40001 – 49999 |
نسخه های پروتکل[ویرایش]
نسخه هایی از پروتکل Modbus برای پورت های سریال و برای اترنت و سایر پروتکل هایی که مجموعه پروتکل اینترنت را پشتیبانی می کنند وجود دارد. انواع مختلفی از پروتکل های Modbus وجود دارد:
- Modbus RTU (واحد پایانه راه دور) - در ارتباطات سریال استفاده می شود و رایج ترین پیاده سازی موجود برای Modbus است. Modbus RTU از یک نمایش فشرده و باینری از داده ها برای ارتباطات پروتکل استفاده می کند. فرمت RTU از دستورات/دادهها با یک جمعبندی بررسی افزونگی چرخهای به عنوان مکانیزم بررسی خطا برای اطمینان از قابلیت اطمینان دادهها پیروی میکند. یک پیام Modbus RTU باید به طور مداوم و بدون تردید بین کاراکترها منتقل شود. پیامهای مدباس با دورههای بیصدا (سکوت) قاببندی میشوند (جدا میشوند).
- Modbus ASCII - در ارتباطات سریال استفاده می شود و از کاراکترهای ASCII برای ارتباطات پروتکل استفاده می کند. قالب ASCII از یک جمع کنترلی افزونگی طولی استفاده می کند. پیامهای Modbus ASCII توسط یک کولون پیشرو (":") و خط جدید انتهایی (CR/LF) قاب میشوند.
- Modbus TCP/IP یا Modbus TCP - یک نوع Modbus که برای ارتباطات روی شبکههای TCP/IP استفاده میشود و از طریق پورت 502 متصل میشود. نیازی به محاسبه جمع کنترلی ندارد، زیرا لایههای پایینتر از قبل محافظت از جمع کنترلی را فراهم میکنند.
- Modbus over UDP - برخی با استفاده از Modbus روی UDP در شبکههای IP آزمایش کردهاند که سربار TCP را حذف میکند.
- Modbus Plus (Modbus+، MB+ یا MBP) - Modbus Plus اختصاصی اشنایدر الکتریک است و بر خلاف انواع دیگر، از ارتباطات همتا به همتا بین چندین مشتری پشتیبانی میکند. برای کنترل سریع چرخش توکن HDLC مانند به یک پردازنده مشترک اختصاصی نیاز دارد. از جفت پیچ خورده با سرعت 1 مگابیت بر ثانیه استفاده می کند و شامل جداسازی ترانسفورماتور در هر گره است، که باعث می شود به جای ولتاژ/سطح راه اندازی، انتقال/لبه راه اندازی شود. برای اتصال Modbus Plus به یک کامپیوتر، معمولاً یک کارت ساخته شده برای گذرگاه ISA، PCI یا PCMCIA، به سخت افزار خاصی نیاز است.
- Pemex Modbus - توسعه ای از Modbus استاندارد با پشتیبانی از داده های تاریخی و جریان. این برای شرکت نفت و گاز Pemex برای استفاده در کنترل فرآیند طراحی شده است و هرگز مورد پذیرش گسترده قرار نگرفت.
- Enron Modbus - توسعه دیگری از Modbus استاندارد که توسط Enron با پشتیبانی از متغیرهای اعداد صحیح و ممیز شناور 32 بیتی و دادههای تاریخی و جریان توسعه یافته است. انواع داده ها با استفاده از آدرس های استاندارد نگاشت می شوند. دادههای تاریخی برای مطابقت با استانداردهای صنعتی موسسه نفت آمریکا (API) برای نحوه ذخیره دادهها عمل میکنند.
مدل های داده و فراخوانی تابع برای سه نوع اول فهرست شده در بالا یکسان هستند. فقط کپسولاسیون متفاوت است. با این حال، انواع مختلف، و همچنین فرمتهای فریم قابل اجرا نیستند.
ارتباطات و دستگاه ها[ویرایش]
به هر دستگاهی که با یک Modbus ارتباط برقرار می کند (یعنی انتقال داده) یک آدرس منحصر به فرد داده می شود.
در Modbus RTU، Modbus ASCII و Modbus Plus (که همگی شبکه های چند قطره تک کابلی RS-485 هستند)، فقط گره ای که به عنوان مشتری اختصاص داده شده است می تواند دستوری را آغاز کند. همه دستگاه های دیگر سرور هستند و به درخواست ها و دستورات پاسخ می دهند.
برای پروتکلهایی که از اترنت استفاده میکنند، مانند Modbus TCP، هر دستگاهی میتواند یک فرمان Modbus ارسال کند و بنابراین همه آنها میتوانند به عنوان مشتری عمل کنند، اگرچه معمولاً فقط یک دستگاه این نقش را دارد. بسیاری از مودم ها و دروازه ها از Modbus پشتیبانی می کنند، زیرا یک پروتکل ساده و اغلب کپی شده است. برخی از آنها به طور خاص برای این پروتکل طراحی شده اند. پیاده سازی های مختلف از ارتباطات سیمی یا بی سیم مانند در باند ISM و حتی سرویس پیام کوتاه (SMS) یا سرویس رادیویی بسته عمومی (GPRS) استفاده می کنند. یکی از رایجترین طرحهای شبکههای بیسیم، استفاده از شبکههای مش است. مشکلات معمولی که طراحان باید بر آنها غلبه کنند عبارتند از تاخیر زیاد و مسائل مربوط به زمان است.
دستورات[ویرایش]
دستورات Modbus می توانند به دستگاه Modbus دستور دهند:
- مقدار یکی از رجیسترهای آن را که به رجیسترهای هسته و نام نویسی نوشته شده است تغییر دهید
- خواندن یک پورت I/O: خواندن داده ها از یک ورودی گسسته یا از یک هسته
- به دستگاه دستور دهید تا یک یا چند مقدار موجود در رجیسترهای هسته و نگهدارنده خود را ارسال کند
یک دستور مودباس حاوی آدرس مودباس دستگاهی است که برای آن در نظر گرفته شده است (1 تا 247). فقط دستگاه آدرسدهی شده به دستور پاسخ میدهد و به آن عمل میکند، حتی اگر برای دستگاههای دیگر ممکن باشد آن را دریافت کنند (یک استثنا، دستورات قابل پخش خاصی است که به گره 0 ارسال میشود، که بر اساس آنها عمل میشود اما تأیید نمیشوند).
تمام دستورات Modbus حاوی اطلاعات جمع کنترل هستند تا به گیرنده امکان تشخیص خطاهای انتقال را بدهد.
فرمت های فریم[ویرایش]
یک "قاب" Modbus از یک واحد داده برنامه (ADU) تشکیل شده است که یک واحد داده پروتکل (PDU) را محصور می کند:[۸]
- ADU = آدرس + PDU + بررسی خطا
- PDU = کد تابع + داده.
در فریم های داده Modbus، مهم ترین بایت یک مقدار چند بایتی قبل از بقیه ارسال می شود.
همه انواع Modbus از یکی از قالب های فریم زیر استفاده می کنند.[۹]
قالب قاب RTU مودباس[ویرایش]
این قالب عمدتاً در خطوط داده سریال ناهمزمان مانند RS-485 استفاده می شود. نام آن به یک ترمینال راه دور اشاره دارد.
نام | طول (بیت) | کارایی |
---|---|---|
شروع | 3.5*8 | حداقل 3+1⁄2 بار کاراکتر (28 بیت) سکوت (شرایط علامت گذاری) |
آدرس | 8 | آدرس ایستگاه |
عملکرد | 8 | کد عملکرد را نشان می دهد. "هسته ها را بخوانید" |
داده | n × 8 | داده + طول بسته به نوع پیام پر می شود |
CRC | 16 | بررسی افزونگی چرخه ای |
پایان | 3.5*8 | حداقل 31⁄2 کاراکتر بار (28 بیت) سکوت (شرایط علامت گذاری) بین فریم ها |
فرمت قاب Modbus ASCII[ویرایش]
عمدتاً در خطوط سریال ناهمزمان 7 بیتی یا 8 بیتی استفاده می شود.
نام | طول (بیت) | کارایی |
---|---|---|
شروع | 1 | دو نقطه: (مقدار ASCII 3A16) |
آدرس | 2 | آدرس ایستگاه |
عملکرد | 2 | کد عملکرد را نشان می دهد. "کویل ها را بخوانید" |
داده | n × 2 | داده + طول بسته به نوع پیام پر می شود |
LRC | 2 | Checksum (بررسی افزونگی طولی) |
پایان | 2 | جفت کالسکه + تغذیه خط (CR/LF) (مقادیر ASCII 0D16 و 0A16) |
فرمت درخواست ها و پاسخ ها[ویرایش]
درخواست ها و پاسخ ها از قالب های فریم که در بالا توضیح داده شد پیروی می کنند. این بخش جزئیات فرمت های داده کدهای تابعی که اغلب استفاده می شود را ارائه می دهد.
کدهای تابع 1 (خواندن سیم پیچ) و 2 (خواندن ورودی های گسسته)
درخواست:
- آدرس اولین سیم پیچ/ورودی گسسته برای خواندن (16 بیت)
- تعداد سیم پیچ/ورودی های گسسته برای خواندن (16 بیت)
پاسخ عادی:
- تعداد بایت های سیم پیچ/مقادیر ورودی گسسته برای دنبال کردن (8 بیت)
- مقادیر ورودی سیم پیچ/گسسته (8 سیم پیچ/ورودی گسسته در هر بایت)
مقدار هر سیم پیچ / ورودی گسسته باینری است (0 برای خاموش، 1 برای روشن). سیم پیچ/ورودی گسسته درخواستی اول به عنوان کمترین بیت مهم از بایت اول در پاسخ ذخیره می شود. اگر تعداد سیم پیچ ها/ورودی های گسسته مضرب 8 نباشد، مهم ترین بیت(های) آخرین بایت با صفر پر می شود.
برای مثال، اگر یازده سیم پیچ درخواست شود، دو بایت مقدار مورد نیاز است. فرض کنید حالت های آن سیم پیچ های متوالی روشن، خاموش، روشن، خاموش، خاموش، روشن، روشن، روشن، خاموش، روشن، روشن هستند، سپس پاسخ 02 A7 03 در هگزادسیمال خواهد بود.
از آنجایی که تعداد بایت های بازگردانده شده در پیام پاسخ تنها 8 بیت عرض و سربار پروتکل 5 بایت است، حداکثر 2008 (251x 8) ورودی یا سیم پیچ مجزا را می توان به طور همزمان خواند.
کد تابع 5 (تک سیم پیچ زور/نوشتن)
درخواست:
- آدرس سیم پیچ (16 بیتی)
- مقدار اجباری/نوشتن: 0 برای خاموش و 65280 (FF00 در هگزادسیمال) برای روشن
پاسخ عادی: همان درخواست.
کد تابع 15 (کویل های متعدد را نوشتن/اجبار)
درخواست:
- آدرس اولین سیم پیچ برای اجبار/نوشتن (16 بیت)
- تعداد سیم پیچ هایی برای اجبار/نوشتن (16 بیت)
- تعداد بایت های مقادیر سیم پیچی که باید دنبال شود (8 بیت)
- مقادیر کویل (8 مقدار سیم پیچ در هر بایت)
مقدار هر سیم پیچ باینری است (0 برای خاموش، 1 برای روشن). اولین سیم پیچ درخواستی به عنوان کم اهمیت ترین بیت از اولین بایت در درخواست ذخیره می شود. اگر تعدادی از سیم پیچ ها مضرب 8 نباشد، مهم ترین بیت(های) آخرین بایت باید با صفر پر شود. به مثال برای کدهای تابع 1 و 2 مراجعه کنید.
پاسخ عادی:
- آدرس سیم پیچ اول (16 بیتی)
- تعداد کویل (16 بیت)
کدهای تابع 4 (خواندن رجیسترهای ورودی) و 3 (خواندن رجیسترهای نگهدارنده)
درخواست:
- آدرس اولین ثبت نام برای خواندن (16 بیتی)
- تعداد رجیستر برای خواندن (16 بیت)
پاسخ عادی:
- تعداد بایتهای مقادیر ثبت شده برای دنبال کردن (8 بیت)
- مقادیر ثبت (16 بیت در هر ثبت)
از آنجایی که حداکثر طول یک PDU Modbus 253 است (که از حداکثر طول Modbus ADU 256 در RS485 استنباط می شود)، هنگام استفاده از فرمت RTU تا 125 ثبات را می توان به طور همزمان درخواست کرد، و تا 123 را از طریق TCP.
کد تابع 6 (ثبت از پیش تعیین شده/نوشتن تک نگهدارنده)
درخواست:
- آدرس نگهدارنده رجیستر برای از پیش تنظیم/نوشتن (16 بیت)
- مقدار جدید ثبت نام (16 بیت)
پاسخ عادی: همان درخواست.
کد تابع 16 (از پیش تنظیم/نوشتن چندین رجیستر نگهدارنده)
درخواست:
- آدرس اولین نگهدارنده ثبت نام برای از پیش تنظیم/نوشتن (16 بیت)
- تعداد رجیسترهای نگهداری شده برای از پیش تنظیم/نوشتن (16 بیت)
- تعداد بایتهای مقادیر ثبت شده برای دنبال کردن (8 بیت)
- مقادیر جدید نگهداری رجیسترها (16 بیت در هر ثبات)
از آنجایی که حداکثر طول یک PDU Modbus 253 است (که از حداکثر طول Modbus ADU 256 در RS485 استنباط می شود)، تا 123 ثبات را می توان همزمان نوشت.
پاسخ عادی:
- نشانی اولین ثبت از پیش تنظیم شده/نوشته شده (16 بیتی)
- تعداد رجیسترهای نگهدارنده از پیش تعیین شده/نوشته شده (16 بیت)
منابع[ویرایش]
- ↑ "Modbus home page". Modbus. Modbus Organization, Inc. Retrieved 2 August 2013.
- ↑ "Modbus FAQ". Modbus. Modbus Organization, Inc. Retrieved 1 November 2012.
- ↑ "About Modbus Organization". Modbus. Modbus Organization, Inc. Retrieved 8 November 2012.
- ↑ "Modbus home page". Modbus. Modbus Organization, Inc. Retrieved 2 August 2013.
- ↑ https://modbus.org/docs/Client-ServerPR-07-2020-final.docx.pdf[bare[پیوند مرده] URL PDF]
- ↑ Palmer; Shenoi, Sujeet, eds. (23–25 March 2009). Critical Infrastructure Protection III. Third IFIP WG 11. 10 International Conference. Hanover, New Hampshire: Springer. p. 87. ISBN 978-3-642-04797-8.
- ↑ https://modbus.org/docs/Modbus_Application_Protocol_V1_1b3.pdf
- ↑ http://www.modbus.org/docs/Modbus_Messaging_Implementation_Guide_V1_0b.pdf
- ↑ http://knovel.com/web/portal/browse/display?_EXT_KNOVEL_DISPLAY_bookid=2995&VerticalID=0