MODBUS

از ویکی لاله زار آنلاین
نسخهٔ تاریخ ۸ مهٔ ۲۰۲۶، ساعت ۰۲:۵۶ توسط Lalehzaronline (بحث | مشارکت‌ها) (صفحه‌ای تازه حاوی «{{مطلب آموزشی |عنوان=مدباس (Modbus) - بررسی جامع و تخصصی |خلاصه=پروتکل ارتباطی لایه کاربرد (Application Layer) بر مبنای معماری کلاینت/سرور که به عنوان استاندارد دوفاکتو در اتوماسیون صنعتی و ابزار دقیق شناخته می‌شود. |موضوعات=شبکه‌های صنعتی، سیستم‌های کنت...» ایجاد کرد)
(تفاوت) → نسخهٔ قدیمی‌تر | نمایش نسخهٔ فعلی (تفاوت) | نسخهٔ جدیدتر ← (تفاوت)

🟦 مطلب آموزشی

مدباس (Modbus) - بررسی جامع و تخصصی

خلاصه: پروتکل ارتباطی لایه کاربرد (Application Layer) بر مبنای معماری کلاینت/سرور که به عنوان استاندارد دوفاکتو در اتوماسیون صنعتی و ابزار دقیق شناخته می‌شود.

موضوعات مرتبط: شبکه‌های صنعتی، سیستم‌های کنترل توزیع‌شده (DCS)، کنترل‌کننده‌های منطقی برنامه‌پذیر (PLC)، اسکادا (SCADA)

سطح مطلب: تخصصی

نویسنده: تیم تحریریه لاله زار آنلاین


مدباس (Modbus) یک پروتکل ارتباطی صنعتی در لایه هفتم مدل مرجع OSI (لایه کاربرد یا Application Layer) است که در سال ۱۹۷۹ توسط Modicon ابداع گردید. این پروتکل، ارتباط پیام‌محور کلاینت/سرور (Client/Server) یا ارباب/برده (Master/Slave) را بین تجهیزات متصل به انواع مختلف باس‌ها و شبکه‌ها فراهم می‌کند. در مهندسی ابزار دقیق و اتوماسیون، مدباس به دلیل شفافیت در ساختار فریم اطلاعاتی، سادگی پیاده‌سازی و عدم وابستگی به سخت‌افزار (Hardware-agnostic)، به رایج‌ترین زبان مشترک برای تجمیع داده‌های سنسورها، درایوها (VFD)، سیستم‌های توزیع توان و کنترلرها تبدیل شده است.

معماری و ساختار فریم (ADU و PDU)

در استاندارد مدباس، واحد داده‌های پروتکل (PDU) مستقل از لایه‌های ارتباطی زیرین تعریف می‌شود. با این حال، فرمت کلی پیام با توجه به بستر فیزیکی گسترش می‌یابد تا واحد داده‌های کاربرد (ADU) را تشکیل دهد.

  • PDU (Protocol Data Unit): شامل کد عملیاتی (Function Code) و داده‌ها (Data) است.
  • ADU (Application Data Unit): شامل اطلاعات آدرس‌دهی، PDU و خطایابی است.

رابطه کلی به این صورت است: ADU = Address + PDU + Error Check

لایه فیزیکی و توپولوژی شبکه

اگرچه مدباس پروتکلی در لایه کاربرد است، اما پیاده‌سازی سریال آن غالباً بر روی استانداردهای فیزیکی EIA/TIA-485 (معروف به RS-485) و EIA/TIA-232 (معروف به RS-232) انجام می‌شود.

  • توپولوژی: استاندارد RS-485 در مدباس به صورت باس زنجیره‌ای (Daisy-chain) پیاده‌سازی می‌شود. توپولوژی‌های ستاره‌ای (Star) در بستر سریال مجاز نیستند و موجب انعکاس سیگنال (Signal Reflection) می‌شوند.
  • مقاومت‌های پایان‌خط (Termination Resistors): در شبکه‌های طولانی یا باود ریت (Baud Rate) بالا، دو انتهای فیزیکی باس باید با مقاومت‌های تطبیق امپدانس (معمولاً R = 120 \Omega) بسته شوند تا از اعوجاج سیگنال جلوگیری گردد.
  • طول و سرعت شبکه: در شبکه‌های RS-485 دونیمه‌دوطرفه (2-Wire Half-Duplex)، حداکثر طول کابل بدون تکرارکننده (Repeater) برابر با 1200 متر در سرعت 9600 bps یا 19200 bps است. سرعت باس می‌تواند از 1200 bps تا 115200 bps و حتی بالاتر متغیر باشد.

استانداردهای انتقال (Transmission Modes)

Modbus RTU (Remote Terminal Unit)

در پیاده‌سازی RTU، از کدگذاری باینری (Binary) فشرده استفاده می‌شود.

  • فریم‌بندی پیام: پیام‌ها با یک سکوت (Idle time) به اندازه حداقل زمان ارسال 3.5 کاراکتر (t_{3.5}) در شبکه از یکدیگر تفکیک می‌شوند.
  • خطایابی: از الگوریتم بررسی افزونگی چرخه‌ای ۱۶ بیتی (CRC-16) استفاده می‌کند.

Modbus ASCII

هر بایت از پیام به عنوان دو کاراکتر اَسکی هگزادسیمال ارسال می‌شود.

  • فریم‌بندی پیام: فریم‌ها با کاراکتر دونقطه (:) آغاز شده و با کاراکترهای (CR LF) خاتمه می‌یابند.
  • خطایابی: از روش بررسی افزونگی طولی (LRC) استفاده می‌کند.

Modbus TCP/IP

مدباس TCP روی پورت استاندارد 502 عمل می‌کند. در این روش، بایت خطایابی (CRC/LRC) و آدرس Slave از ADU سریال حذف شده و به جای آن یک هدر اختصاصی به نام MBAP (Modbus Application Protocol) به طول 7 بایت در ابتدای پیام قرار می‌گیرد.

سیستم آدرس‌دهی و مدیریت حافظه (Data Model)

مدباس دارای یک مدل داده‌ای چهارگانه با آدرس‌دهی مبتنی بر Offset است. اختلاف بین آدرس فیزیکی (Base-0) و آدرس منطقی (Base-1) یکی از نکات حیاتی در برنامه‌نویسی HMI و PLC است.

  • Coils (0xxxx): متغیرهای گسسته خواندنی/نوشتنی. آدرس منطقی 00001 تا 09999.
  • Discrete Inputs (1xxxx): متغیرهای گسسته فقط خواندنی (وضعیت سخت‌افزار). آدرس منطقی 10001 تا 19999.
  • Input Registers (3xxxx): رجیسترهای ۱۶ بیتی آنالوگ فقط خواندنی. آدرس منطقی 30001 تا 39999.
  • Holding Registers (4xxxx): رجیسترهای ۱۶ بیتی خواندنی/نوشتنی. آدرس منطقی 40001 تا 49999.

چالش ترتیب بایت‌ها (Endianness): استاندارد مدباس از روش Big-Endian برای ارسال مقادیر ۱۶ بیتی استفاده می‌کند (بایت با ارزش بالاتر ابتدا ارسال می‌شود). با این حال، هنگام خواندن مقادیر ۳۲ بیتی (مانند Floating Point یا DWord) که نیاز به دو رجیستر دارند، سازندگان مختلف ممکن است از روش‌های Little-Endian یا Byte Swap / Word Swap استفاده کنند که برنامه‌نویس باید در نرم‌افزار مانیتورینگ آن را تصحیح نماید.

کدهای عملیاتی استاندارد (Function Codes)

فانکشن کدها (FC) تعیین‌کننده نوع عملیاتی هستند که Master از Slave درخواست می‌کند. پرکاربردترین این کدها در صنعت عبارتند از:

  • FC 01 (0x01): خواندن وضعیت کویل‌ها (Read Coils)
  • FC 02 (0x02): خواندن ورودی‌های گسسته (Read Discrete Inputs)
  • FC 03 (0x03): خواندن رجیسترهای نگه‌دارنده (Read Holding Registers)
  • FC 04 (0x04): خواندن رجیسترهای ورودی (Read Input Registers)
  • FC 05 (0x05): نوشتن در یک کویل منفرد (Write Single Coil)
  • FC 06 (0x06): نوشتن در یک رجیستر منفرد (Write Single Register)
  • FC 15 (0x0F): نوشتن در چندین کویل به صورت گروهی (Write Multiple Coils)
  • FC 16 (0x10): نوشتن در چندین رجیستر به صورت گروهی (Write Multiple Registers)

کدهای خطا (Exception Responses)

اگر Slave درک درستی از پیام داشته باشد اما نتواند آن را اجرا کند (مثلاً درخواست آدرسی که وجود ندارد)، یک پاسخ استثنا (Exception) تولید می‌کند. در این حالت، Slave کد عملیاتی (FC) دریافتی را با عدد 128 (0x80 در هگزادسیمال) جمع کرده و ارسال می‌کند. کدهای خطای رایج شامل کد 01 (فانکشن کد غیرمجاز) و کد 02 (آدرس داده غیرمجاز) است.