آشنایی با پروتکل مدباس ( ModBus ) و راه اندازی آن

بازگشت به آموزشگاه

مقدمه

مدباس ( ModBus ) یکی از پروتکل های معروف در زمینه شبکه های صنعتی ( Industrial Network ) می باشد. این پروتکل که معمولا در بستر فیزیکی RS485 پیاده سازی می شود ، کاربردهای زیادی در انواع پروژه های صنعتی و سیستم های ساختمانی دارد. در این مقاله به بررسی این پروتکل و پیاده سازی آن می پردازیم.


معرفی پروتکل مدباس

شبکه ModBus یک پروتکل ارتباطی است و ابتدا در سال 1979 توسط Modicon که امروزه Schneider Electric آن را در بر گرفته عرضه شد. کاربرد اولیه آن برای استفاده در PLC ها بود ولی بتدریج بعنوان یک استاندارد ارتباطی پذیرفته شد و بسیاری از سازندگان تجهیزات اتوماسیون آن را پشتیبانی کردند بدین ترتیب Modbus بصورت یک استاندارد باز در آمد بگونه ای که محصولات سازندگان مختلف به سهولت توسط این پروتکل با یکدیگر ارتباط برقرار کردند. سازندگان وسایل کوچک نیز ترجیح دادند این شبکه ModBus را با ارتباط RS232 و یا RS485 روی وسایل خود بکار ببرند تا استفاده از آنها در پروژه های بزرگ میسر گردد.

دلایلی که پروتکل Modbus در محیط های صنعتی کاربرد فراوانی دارد عبارتند از:

  1. جهت کاربردهای صنعتی توسعه و گسترش یافته است
  2. به صورت رایگان منتشر شده است
  3. گسترش پذیری و نگهداری ساده ای دارد
  4. اجازه انتقال بیت ها و بایت ها را بدون محدودیت خاصی به تولید کننده دستگاه می دهد

Modbus جهت برقراری ارتباط بین تعداد زیادی (تا 247) دستگاه متصل به یک شبکه استفاده می شود، به عنوان مثال دما و رطوبت اندازه گیری شده توسط سنسورها از طریق این پروتکل توسط کنترل کننده Master قرائت می شود. شکل زیر کاربرد این پروتکل در شبکه های صنعتی مبتنی بر PLC را نشان می دهد.


نگارش های پروتکل مدباس

  • Modbus RTU متداول ترین نگارش Modbus است. انتقال داده در این روش به صورت باینری فشرده صورت می گیرد.
  • Modbus ASCII از کاراکترهای ASCII جهت انتقال داده استفاده می کند.
  • Modbus/TCP از استاندارد TCP/IP برای انتقال داده با سرعت بالاتر مورد استفاده قرار می گیرد.
  • ModBus Plus که بصورت Token Pass و با سرعت بالا طراحی شده است و یک باس انحصاری است.


نحوه عملکرد پروتکل مدباس :

این پروتکل بصورت Master/Slave کار می کند. یعنی همواره یک وسیله بعنوانMaster (فرمانده) و بقیه وسیله ها به عنوان Slave (فرمانبر) لحاظ می شوند. بدین صورت که هرگاه Master به یک دستگاه Slave با آدرس مخصوص خودش فرمانی ارسال می کند آن دستگاه جواب را به Master برمیگرداند. این پروتکل داده ها را از سطح فیلد دریافت و ضمن پردازش، آنها را به سطح نظارت ارسال می کند تا دستورالعمل کنترلی مناسب بر اساس داده های دریافتی، آلارم ها و رویدادها اتخاذ گردد MODBUS سریال از سرعت بالایی برخوردار بوده و بدون هر گونه Internal به تبادل اطلاعات می پردازد.

نکته: مد RTU که بعضا به آن ModBus-B بعنوان ModBus Binary گفته می شود مد اصلی است، مد ASCII که بعضا ModBus-A نیز گفته می شود برای برخی پیغام ها به کار می رود که این پیغامها طول شان دو برابر پیغام های RTU می باشد.
پروتکل مدباس از لایه های 2،1 و 7 مدل OSI استفاده می کند و در لایه فیزیکی RS232/RS485 را به کار می برد. شکل زیر این موضوع را نشان می دهد.

 


انواع حالت های عملکرد در پروتکل مدباس

مد Unicast:

در این حالت Master ازSlave خاصی درخواست دیتا می نماید.Slave پس از دریافت Requestپیام Replyرا به Master ارسال می کند. بدیهی است هرSlave باید دارای آدرس خاص و منحصربفردی باشد تا Master بتواند با آن ارتباط برقرار کند.

مد broadcast :

در این حالتMaster پیام خود را به تمامSlave ها میفرستد ولی هیچ پاسخی به Master بر نمیگردد. این مد از جمله برای نوشتن فرامین (Writing Commands) به کار می رود.

 


دیاگرام وضعیت Master :


دیاگرام وضعیت Slave :

 


قالب استاندارد مدباس RTU :

در پروتکل مدباس RTU قالب استاندارد به صورت زیر است :

که در شکل زیر هر یک از این بخش ها را مشاهده می کنید :

آدرس ( Address ) :

هر slaveدارای یک شناسه از 1تا 247 می باشد .زمانی که master درخواست اطلاعات می کند اولین بایت پیغام به عنوان آدرس slave فرستاده می شود. بدین صورت slave متوجه می شود که پیام ارسال شده برای آن است یا نه. در واقع Master در ارتباط Unicast آدرس را در این فیلد قرار می دهد و Slave نیز وقتی پاسخ میدهد آدرس خودش را در این فیلد می گذارد تا Master بفهمد کدام Slave پاسخ داده است.

عملکرد ( Function Code ) :

دومین بایتی که توسط سیستم master ارسال می شود کد مربوط به انتخاب عملکردی است که باید انجام شود مثلا بایستی از Slave خوانده شود و یا در Slave نوشته شود.

دیتا ( Data ) :

این فیلد حاوی اطلاعاتی بیشتر برای slave است تا عمل تعیین شده به وسیله ی function code ها را انجام دهد که بسته به نوع عملکرد انتخابی در مرحله قبل میتوند از 1 تا n بایت متغیر باشد.

بایت های چک ( CRC ) :

CRC دو بایت بوده و برای عیب یابی در انتهای پیغام آورده می شود.هر بایتی در پیغام برای محاسبه CRC استفاده می شود.دستگاه دریافت کننده نیز CRC را چک می نماید و با CRC موجود در پیغام master مقایسه می کند. اگر حتی یک بیت به درستی دریافت نشده باشد CRC ها متفاوت خواهند بود و باعث خطا می شوند.

 


 بررسی مدباس RTU:

در این مد هر 8 بیت از بایت پیام شامل دو کاراکتر 4 بیتی هگزا دسیمال است. این ویژگی چگالی دیتا را افزایش داده و باعث می شود که نسبت به مد ASCII نرخ تبادل دیتا بهتر باشد. فرمت 11 بیت بسته دیتا در مد RTU به صورت زیر است:

فرمت کلی در مد RTU:

 

نکته: بین هر فریم یک فاصله زمانی وجود داردکه حداقل به اندازه 3.5 کاراکتر است و به آن فاصله خاموشی (silent Interval) نیزمیگویند. در نتیجه اگر بین دو کاراکتر متوالی یک فریم تاخیری بیش از 1.5 کاراکتر پیش بیاید نشان دهنده اشکال است. شکل زیر این موضوع را نشان می دهد.


بررسی مدباس ASCII :

در این مد هر 8 بیت از بایت پیام بصورت 2 کاراکتر ASCII ارسال می شود. از این رو بازدهی آن نسبت به RTU کمتر است. این مد در جایی که لینک فیزیکی یا قابلیت های وسیله ، اجازه استفاده از مد RTU را نمی دهد ( به ویژه از نظر مدیریت تایمر ها ) استفاده می شود. بعنوان مثال در این مد بایت 0x5B به صورت دو بایت یعنی 0x35=5 و0x42=B در می آید. در مد ASCII فرمت 10 بیت هر بسته دیتا به شکل زیر است:

همچنین فریم پیام در مد ASCII به صورت شکل زیر است :

همانطور که مشاهده می کنید ، تجهیزات متصل به باس مرتباً باس را برای یافتن کاراکتر اول مانیتور می کنند. وقتی این کاراکتر دریافت شد وسیله کاراکتر بعدی را می گیرد که آدرس را مشخص میکند و اگر آدرس به او مربوط بود سایر کاراکترها را دریافت میکند تا بسته به پایان برسد. کاراکتر پایانی Carriage Return-Line Feedیا CRLF  است. هر بایت دیتا نیاز به 2 کاراکتر برای کد کردن دیتا دارد بنابراین برای اطمینان از سازگاری بین مدهای ASCII و RTU ماکزیمم سایز اختصاص یافته  256×2 کاراکتر است یعنی دو برابرسایز دیتای RTU . بدین ترتیب سایز کل فریم مطابق شکل قبلی 513 کاراکتر خواهد بود.کنترل خطا در این مد توسط LRC انجام می شود.

—فیلد Function Code یک بایت است که می تواند بین 1 تا 255 دسیمال باشد. کدهای 1 تا 127 برای کار نرمال و کدهای 128 تا 255 برای پاسخ های Exception که برای شرایط خطا طراحی شده بکار میرود. فیلد  Data در برخی درخواست های خاص ممکن است خالی باشد ( طول صفر ) این در مواردی است که ارسال Action به تنهایی برای Slave کفایت میکند و اطلاعات اضافی مورد نیاز نیست. —وقتی خطایی وجود نداشته باشد Slave درخواست  Master را انجام داده و در پاسخ خود به همان کد فانکشن اشاره میکندکه اصطلاحاً گفته میشود کد فانکشن اکو شده است. —ولی وقتی اشکالی وجود داشته باشد و Slave نتواند عمل مورد درخواست  Master را انجام دهد در این حالت پاسخی که در آن بجای کدفانکشن کد Exception آمده برگشت داده میشود تا  Master از بروز خطا مطلع شود.


انواع کدهای عملکرد ( Function Code )

1- عمومی ( Public ) :

بصورت استاندارد از قبل تعریف شده هستند و برای مقاصد مشخص بکار میروند و توسط modbus.org تایید شده هستند.

2- خاص ( User Define ) :

توسط کاربر تعریف می شوند و نیازی به تایید موسسه Modbus.org ندارند ولی باید توجه داشت که کد های رزرو شده را برای این فانکشن ها نمیتوان استفاده کرد. کد فانکشن های کاربر میتواند در محدوده 65 تا 72 یا 100 تا 110 باشد.


تشریح برخی از کدهای عملکرد :

فانکشن کد 01 یا Read Coils  :

این فانکشن برای خواندن وضعیت 1 تا 2000 خروجی از روی وسیله متصل به باس شبکه بکار میرود. در بسته PDU علاوه بر کد 01 آدرس اولین خروجی و تعداد آنها داده می شود. آدرس خروجی از صفر شروع می شود یعنی مثلاً خروجی های 1 تا 16 بصورت 0 تا 15 آدرس می گیرند.بنابراین PDU مربوط به درخواست بصورت شکل زیر خواهد بود :

در پاسخ وضعیت خروجی که 1 برای  ON و 0 برای OFF است توسط بیت های دیتا مشخص می گردد. اگر تعداد خروجی ها مضربی از 8 نباشد در اینصورت در بایت آخر سایر بیتهای باقیمانده با صفر پر میشوند ولی از آنجا که تعداد خروجی ها نیز برگردانده می شود  Master متوجه می شود که تا کجا مربوط به خروجی هاست.

اگرERROR پیش بیاید کد ها بصورت زیر خواهند بود:

که کدهای استثنا یا Exception Code ها به صورت زیر می باشند :


محدودیت های شبکه ModBus

Modbus به دلیل استفاده از لینک های سریال RS232-RS485 دارای محدودیت های شد که به برخی از آنها اشاره میگردد:

  • کند بودن خطوط سریال که بین ۹۶۰۰ تا ۱۱۵۰۰۰بیت در ثانیه کار میکنند یعنی در ماکزیمم حالت ۰٫۱۱۵ mbps  که این سرعت در مقایسه با شبکه های ارتباطی امروزی که ۱۰۰Mbps یا حتی چند Gbps سرعت دارند پایین است.
  • از آنجا که توسط RS232 فقط دو وسیله و توسط RS485 بین ۲۰ تا ۳۰ وسیله امکان ارتباط دارند از اینرو برای ارتباط دادن تعداد زیادی وسایل مثلاً ۵۰۰ وسیله نیاز به ارتباطات پیچیده درختی شکل است.
  • ارتباط سریال مدباس بصورت MASTER/SLAVE است بدین معنی که روی باس فقط یک وسیله (MASTER) اجازه صحبت با SLAVE ها را دارد.

با وجود این محدودیت ها شبکه ModBus در عرصه صنعت کاربرد و جایگاه بسیاری دارد. معمولا در تابلو هایی که از تعداد زیادی اینورتر استفاده میشود شبکه مدباس بین plc و اینورتر ها راه اندازی میکنند.


دانلود سورس راه اندازی پروتکل ModBUS به زبان های C# و C++ شامل :

  • سورس ارتباط کامپیوتر با Slave بوسیله مدباس ( به زبان C# )
  • سورس C++ و هدرفایل پروتکل مدباس برای استفاده در انواع میکروکنترلرها

 

لینک خرید آنلاین سورس این پروژه



در صورتی که این مطلب مورد پسندتان واقع شد لایک و اشتراک گذاری فراموش نشود.

11+

دیدگاه (۱)

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

5 × 1 =

بازگشت به آموزشگاه