مدباس چیست؟
مدباس (Modbus) یک پروتکل ارتباطی سری است که توسط Modicon طراحی و توسعه پیدا کرده، و سال 1979 میلادی برای استفاده با PLCهای آنها (کنترلرهای منطقی برنامهپذیر) منتشر شده است.
به عبارت سادهتر، روشی است که برای مخابرهی اطلاعات روی خطوط سری بین دستگاههای الکترونیکی استفاده میشود. به دستگاهی که اطلاعات را درخواست میکند، مستر مدباس (Modbus Master) گفته میشود و دستگاههایی که اطلاعات را تامین میکنند، اسلیوهای مدباس (Modbus Slaves) نام دارند.
در یک شبکه مدباس استاندارد، یک مستر و تا سقف 247 اسلیو وجود دارد، هر یک با یک آدرس اسلیو منحصر به فرد از 1 تا 247. مستر همچنین میتوانند اطلاعاتی را در اسلیوها بنویسد.
مشخصات رسمی مدباس را میتوانید در این لینک پیدا کنید: http://www.modbus.org
کاربرد مدباس چیست؟
مدباس یک پروتکل باز است، یعنی تولیدکنندگان میتوانند رایگان، این پروتکل را در تجهیزات خود استفاده کنند، بدون نیاز به پرداخت حق امتیاز. این پروتکل تبدیل به یک پروتکل ارتباطی استاندارد در صنعت شده است و در حال حاضر، رایجترین روش اتصال دستگاههای الکترونیکی صنعتی است.
در بسیاری از صنایع، به شکل گسترده توسط تولیدکنندگان مورد استفاده قرار میگیرد. مدباس عموما برای مخابرهی سیگنالها از تجهیزات تا دستگاههای کنترل و برگشت به کنترلر اصلی یا سیستم جمعآوری دادهها استفاده میشود،
به طور مثال یک سیستم که دما و رطوبت را اندازهگیری میکند و نتایج را به یک کامپیوتر انتقال میدهد.
مدباس اغلب برای اتصال یک کامپیوتر نظارتی به یک واحد ترمینال ریموت (RTU) در سیستمهای کنترل نظارتی و جمعآوری دادهها (SCADA) استفاده میشود.
نسخههایی از پروتکل مدباس برای خطوط سری (Modbus RTU و Modbus ASCII) و اترنت (Modbus TCP) وجود دارد. مبدل مدباس RTU دات اکسل از این نسخه ها استفاده می کند.
مدباس چطور کار میکند؟
مدباس بین دستگاهها روی خطوط سری مخابره میشود. سادهترین چیدمان، یک کابل سری منفرد است که به پورتهای سری روی دو دستگاه متصل است، یک مستر و یک اسلیو.
دادهها به عنوان یک سری یا توالی از صفر و یکها مخابره میشوند که به آنها بیت (bit) گفته میشود. هر بیت به عنوان یک ولتاژ ارسال میشود. صفرها به عنوان ولتاژ مثبت و یک به عنوان ولتاژ منفی. این بیتها بسیار سریع ارسال میشوند. سرعت رایج مخابره، 9600baud (بیت بر ثانیه) است.
ویدیو مدباس چیست و چگونه کار می کند؟
شانزدهشانزدهی یا هگزادسیمال (hexadecimal) چیست؟
موقع عیبیابی مشکلات، ممکن است مفید باشد که ببینیم واقعا دادههای خامی که مخابره میشوند، چه چیزی هستند.
خواندن رشتههای طولانی صفر و یک سخت است، بنابراین بیتها با همدیگر ترکیب شده و به شکل هگزادسیمال نمایش داده میشوند.
هر بلوک چهاربیتی، توسط یکی از کاراکترهای شانزدهی، از 0 تا F نشان داده میشود.
هر بلوک 8 بیتی (که به آن بایت گفته میشود) با یکی از 256 جفت کاراکتر از 00 تا FF نشان داده میشوند.
دادهها در مدباس استاندارد چطور ذخیره میشوند؟
اطلاعات در چهار جدول متفاوت در دستگاه اسلیو نگهداری میشوند. این دو جدول مقادیر گسسته (کویلها) را on/off ذخیره میکنند و دو مقدار عددی (رجیسترها) را نگهداری میکنند.
کویلها و رجیسترها هر یک، یک جدول read-only (فقط قابل خواندن) و یک جدول read-write (قابل نوشتن-خواندن) دارند. هر جدول 9999 مقدار دارد. هر کویل یا کنتاکت، یک بیت (1 bit) است و یک آدرس داده بین 0000 و 270E به آن اختصاص داده میشود. هر رجیستر یک کلمه است، برابر با 16 بیت، برابر با دو بایت (1 word = 16 bit = 2 bytes) و آدرس داده بین 0000 و 270E دارد.
تعداد کویل/رجیستر را میتوان مثل اسامی موقعیت در نظر گرفت، چون در پیامهای اصلی، پدیدار نمیشوند. آدرس دادهها در پیامها استفاده میشوند. به طور مثال، اولین رجسیتر هولدینگ، شماره 40001، آدرس داده 0000 دارد. تفاوت بین این دو مقدار، افست (offset) است. هر جدول یک افست متفاوت دارد، 1, 10001, 30001, 40001.
شناسه اسلیو یا Slave ID چیست؟
به هر اسلیو در یک شبکه، یک آدرس واحد منحصر به فرد از 1 تا 247 اختصاص داده میشود. وقتی که مستر درخواست داده میکند، اولین بایتی که میفرستد، آدرس اسلیو است.
به این شکل هر اسلیو بعد از خواندن اولین بایت، متوجه میشود که باید این پیام را نادیده بگیرد یا نگیرد.
کد کارکرد یا Function Code چیست؟
دومین بایتی که توسط مستر ارسال میشود، Function Code است. این شماره به اسلیو میگوید که که باید به کدام جدول دسترسی پیدا کند و و اینکه از جدول بخواند یا در آن بنویسد.
CRC چیست؟
CRC مخفف کد افزونگی چرخشی (Cyclic Redundancy Check) است. CRC دو بایت است که برای تشخیص خطا، به انتهای هر پیام مدباس افزوده میشود. هر بایت در این پیام برای محاسبهی CRC استفاده میشود.
دستگاه گیرنده همچنین CRC را محاسبه میکند و آن را با CRC دستگاه فرستنده مقایسه میکند. اگر حتی یک بیت در این پیام به شکل نادرست دریافت شود، CRCها متفاوت خواهند بود که به خطا منجر میشود.
فرمتهای دستورات و پاسخهای مدباس چیست؟
انواع دادهها کدام هستند؟
مثال برای FC03 نشان میدهد که رجیستر 40108 شامل AE41 است که به 16 بیت 1010 1110 0100 0001 تبدیل میشود. خیلی عالی! اما معنای آن چیست؟ خب، میتواند چندین معنا داشته باشد. رجیستر 40108 میتواند به عنوان هر یک از این انواع دادههای 16 بیتی تعریف شود:
یک عدد صحیح بیعلامت 16 بیتی (16-bit unsigned integer) (یک عدد صحیح بین 0 و 65535) رجیستر 40108 شامل AE41 = 44,609 میشود (تبدیل هکس به دهدهی).
یک عدد صحیح علامتدار 16 بیتی (16-bit signed integer) (یک عدد صحیح بین -32768 و +32768) که AE41 = -20,927 (تبدیل شش به دهدهی که آن را در هم میپیچد، اگر بالای 32767 باشد، 65536 را تفریق میکند).
یک رشته دو کاراکتر ASCII که AE41 =® A.
یک مقدار on/off گسسته (مشابه با اعداد صحیح 16-بیتی با یک مقدار 0 یا 1 عمل میکند. دادهی هکس 0000 یا 0001 خواهد بود) رجیستر 40108 میتواند همچنین ترکیب شود با:
40109 برای شکل دادن هر یک از این انواع داده 32 بیتی:
یک عدد صحیح بیعلامت 32-بیتی (32-bit unsigned integer) (یک عدد بین 0 و 4,294,267,295)
40108,40109 = AE41 5652 = 2,923,517,522
یک عدد صحیح علامتدار 32 بیتی (32-bit signed integer) (یک عدد بین -2,147,483,648 تا 2,147,483,647)
AE41 5652 = -1,371,449,774
یک عدد اعشاری IEEE 32 بیتی double precision. این یک فرمول ریاضی است که این امکان را فراهم میآورد که هر عدد حقیقی (یک عدد دارای جداکننده اعشار) با 32 بیت با دقتی تا حدود 7 رقم نشان داده شوند.
AE41 5652 = -4.395978 E-11 اینجا یک صفحه گسترده قرار دارد ماشین حساب IEEE float برای ورودیهای 4 بایتی یا 2 کلمهای. برای دانلود آن، رایت کلیک کنید و Save Target As… را بزنید.
یک رشته ASCII چهار کاراکتری، AE41 5652 = ® A V R. رجیسترهای بیشتر را میتوان ترکیب کرد تا رشتههای طولانیتر ASCII تشکیل شود. هر رجیستر برای نگهداری دو کاراکتر ASCII (دو بایت) استفاده میشود.
ترتیب بایت و کلمه چیست؟
مشخصات مدباس دقیقا مشخص نمیکند که دادهها چطور در رجیسترها نگهداری میشوند. در نتیجه، برخی تولیدکنندگان مدباس را در تجهیزات خود برای نگهداری و مخابره به این شکل به کار میبرند که اول بایتهای بالاتر و بعد پایینتر نگهداری و مخابره شوند (AE قبل از 41).
به عنوان روشی جایگزین، باقی ابتدا بایت پایینی را نگهداری و مخابره میکنند (41 پیش از AE). به همین شکل، وقتی رجیسترها با هم ترکیب میشوند تا انواع داده 32-bit را نشان دهند، برخی دستگاهها 16 بیت بالاتر (کلمه بالا) را در رجیستر اول و باقی کلمه پایین را در دومی (AE41 پیش از 5652) نگهداری میکنند، باقی معکوس این را انجام میدهند (5652 پیش از AE41).
مهم نیست که بایتها یا کلمات به چه ترتیبی ارسال میشوند، تا زمانی که دستگاه گیرنده بداند که باید به چه ترتیبی منتظر آنها باشد. به طور مثال، اگر قرار باشد عدد 29,235,175,522 به یک 32-bit unsigned integer ارسال شود،
به چهار روش زیر میتواند چیده شود:
- AE41 5652 بایت بالا اول کلمه بالا اول
- 5652 AE41 بایت بالا اول کلمه پایین اول
- 41AE 5256 بایت پایین اول کلمه بالا اول
- 5256 41AE بایت پایین اول کلمه پایین اول
نقشه مدباس (Modbus Map) چیست؟
یک نقشه مدباس، صرفا یک فهرست یا لیست از یک دستگاه اسلیو منفرد است که تعریف که داده چیست (مثال، فشار یا خوانش دما)
- جایی که داده نگهداری میشود (کدام جداول و آدرسهای داده)
- چطور داده نگهداری میشود (انواع دادهها، ترتیب بایت و کلمه)
برخی دستگاهها با یک نقشه ثابت ساخته میشوند که توسط تولیدکننده تعریف میشود. دستگاههای دیگر به اپراتور این امکان را میدهند که یک نقشه دل به خواه یا سفارشی را بر اساس نیازهای خود، پیکربندی یا برنامهریزی کنند.
تفاوت بین Modbus ASCII و Modbus RTU چیست؟
Modbus RTU و Modbus ASCII پروتکل یکسانی دارند. تنها تفاوت این است که بایتهای مخابرهشده روی سیم، در RTU به عنوان باینری و در Modbus RTU به عنوان ASCII قابل خواندن نمایش داده میشوند.
مهم است که در مورد RTU اشاره کنیم که پیام RTU یک نشانگر Start_of_text (شروع متن) ندارد. سمت دریافتکننده در ارتباطات از یک زمان «سکوت» برای تعیین شروع پیام جدید استفاده میکند. ASCII یک علامت start-of-text (شروع متن) دارد.
پیامهای باینری کوتاهتر از ASCII هستند و در نتیجه از دیدگاه نظری، سریعتر مخابره/دریافت میشوند. شاید شما از دیدن نرخ بروزرسانی حدود 100ms در HMI/SCADA خوشحال شوید و میتوانید هر یک از این ارتباطات را انتخاب کنید.
خلاصه:
- اگر ممکن است از RTU استفاده کنید.
- در حالتی از ASCII استفاده کنید که RTU به شما مشکلات timeout در WinNT میدهد یا هنگامی که از بسترهای ارتباطاتی آهسته حدود 300 bps استفاده میکنید یا مودمهای دایلآپ (dialup). اکثر سرورهای OPC برای مدباس هم از ارتباطات ASCII پشتیبانی میکنند و هم RTU.
آدرسهای رجیستر اکستندد (extended) چیست؟
از آنجایی که بازهی رجیسترهای هولدینگ خروجی آنالوگ 40001 تا 49999 است، به این مساله اشاره میکند که نمیتوان بیش از 9999 رجیستر باشد. اگرچه این معمولا برای اکثر کاربردها کافی است، در برخی موارد تعداد بیشتری رجیستر میتواند مفید باشد.
رجیسترهای 40001 تا 49999 به آدرسهای داده 0000 تا 270E مرتبط هستند. اگر ما از آدرسهای داده باقیمانده 270F تا FFFF استفاده کنیم، بیش از شش بار تعداد رجیستر بیشتری خواهیم داشت، جمعا 65536.
این مرتبط با شماره رجیسترها از 40001 تا 105536 است. تعداد زیادی از درایورهای نرمافزاری مدباس (برای کامپیوترهای مَستر) با محدودیت 40001 تا 49999 نوشته شدهاند و نمیتوانند به رجیسترهای اکستندد در دستگاههای اسلیو دسترسی پیدا کنند. و بسیاری از دستگاههای اسلیو، از نقشههایی که از این رجیسترهای اکستندد استفاده میکنند، پشتیبانی نمیکنند.
اما در طرف دیگر، برخی دستگاههای اسلیو از این رجیسترهای پشتیبانی کرده و برخی نرمافزارهای مستر میتوانند به آنها دسترسی پیدا کنند، به ویژه اگر نرمافزار سفارشی نوشته شده باشد.
آدرسدهی اسلیو دو بایتی (2-byte) چطور کار میکند؟
از آنجایی که یک بایت به شکل معمول برای تعریف آدرس اسلیو استفاده میشود و هر اسلیو در شبکه، نیازمند یک آدرس منحصر به فرد است، تعداد اسلیوها در یک شبکه محدود به 256 است.
این محدودیت در مشخصات مدباس حتی کمتر اعلام شده یعنی 247 عدد. برای عبور از این محدودیت، میتوان یک اصلاحیه به پروتکل اعمال کرد که از دو بایت برای آدرس استفاده شود.
لازم است که مستر و اسلیوها همه از این اصلاحیه پشتیبانی کنند. آدرسدهی دو بایتی، محدودیت تعداد اسلیوها در یک شبکه را به 65535 افزایش میدهد. به صورت پیشفرض، نرمافزار Simply Modbus از آدرسدهی یک بایتی استفاده میکند.
وقتی که آدرسی بزرگتر از 255 وارد شود، نرمافزار به شکل خودکار به آدرسدهی دو بایتی سوییچ میکنند و برای تمامی آدرسها در همین حالت باقی میماند، تا زمانی که آدرسدهی دو بایتی به شکل دستی خاموش شود.
چطور میتوانید دادههای تاریخچه و رویدادها را ارسال کنید؟
Enron Modbus دارای دستوراتی برای جابجایی دادههای رویدادها و تاریخچهایست.
Enron Modbus چیست؟
Enron Modbus یک اصلاحیه بر پروتکل ارتباطی مدباس استاندارد Modicon است که توسط شرکت Enron خلق شده و توسعه پیدا کرده است.
پروتکل Modbus TCP چیست؟
مادباس یا Modbus یک پروتکل ارتباطی سطح بالا است که در فضای صنعتی در اشکال مختلفی حضور دارد. قدیمیترین نوع آن، که در مقاله قبلی به آن پرداخته شد، پروتکل Modbus RTU است، اما نوع دیگری در حال حاضر، محبوب شده است: این پروتکل Modbus TCP است که در سال 1999 توسعه یافته است و بر اساس پروتکل TCP / IP است که امکان ارسال پیام در شبکههای اینترانت و اینترنت را فراهم میسازد.
پروتکل Modbus TCP به شکلی روزافزون به عنوان پروتکلی متنباز (اوپنسورس) استفاده میشود، هزینه توسعه کمی دارد و به حداقل پشتیبانی سخت افزاری نیاز دارد. برای تبادل اطلاعات بین برنامههای کاربردی، دستگاهها و برنامههای نظارتی استفاده میشود و از رمزگذاری باینری دادهها و مکانیزم تشخیص خطای انتقال TCP/IP استفاده میکند. با انواع RTU و ASCII نسخه سریال متفاوت است، پروتکل Modbus TCP اتصالمحور است و آنها را به طور همزمان روی همان Slave و همچنین در دستگاههای مختلف اجرا میکند.
پروتکل Modbus TCP: چهار نوع پیام
پروتکل Modbus TCP از پارادایم master-slave هم استفاده میکند، ولی نسخه کلاینت-سرور آن در میان دستگاههای متصل به شبکه اترنت TCP / IP.
در این نوع ارتباط، این امکان وجود دارد که چهار نوع پیام را از هم تمیز داد:
- درخواست مادباس (Modbus Request)، دستگاه کلاینت، پیامی را از طریق شبکه ارسال میکند و در نتیجه تراکنش را آغاز میکند.
- نشانگر مادباس (Modbus indication)، پیام درخواست توسط دستگاه سرور دریافت شد.
- پاسخ مادباس (Modbus response)، پیام پاسخ به درخواست، ارسالشده توسط دستگاه سرور.
- تایید مادباس (Modbus confirmation)، پیام پاسخ از دستگاه کلاینت دریافت شد.
سرویس تبادل پیام در پروتکل Modbus TCP در حالت بلادرنگ (real-time) بین دو دستگاه کاربردی، بین دستگاههای کاربردی و سایر دستگاهها، بین اپلیکیشنها و دستگاههای SCADA و HMI و بین رایانههای شخصی و دستگاههای کاربردی که خدمات آنلاین ارائه میدهند، انجام میشود. فقط دستگاهی که به عنوان مَستر شناخته میشود، می تواند با ساخت واحد داده اپلیکیشن پیام (ADU) تراکنش را آغاز کند، که کد تابع آن، به سرور میگوید که چه اقدامی باید انجام دهد.
دستگاههای پروتکل Modbus TCP موجود در DATEXEL
DAT8014
DAT8014 یک واحد سرور Modbus TCP است که میتواند تا چهار سیگنال آنالوگ را به فرمت دیجیتال تبدیل کند. سنسورهای RTD یا سنسورهای مقاومتی دو یا سه ردیفه، و همچنین پتانسیومترها، میتوانند متصل شوند. رابط اترنت، امکان خواندن و نوشتن دادهها را به شکل بلادرنگ (real-time) از هر مقدار موجود در رجیسترهای داخلی دستگاه فراهم میکند.
DAT8015
دستگاه DAT8015 میتواند تا هشت سیگنال آنالوگ را به فرمت دیجیتال تبدیل کند. برای هر کانال ورودی، که به صورت گالوانیکی ایزوله شدهاند، یک منبع تغذیه ایزولهشده وجود دارد که امکان تامین سنسورهای منفعل (پَسیو) را فراهم میکند. اتصال به شبکه اترنت از طریق کانکتور RJ-45 انجام میشود.
DAT8017-I
این ماژول یک واحد سرور Modbus TCP است که قادر است تا هشت سیگنال آنالوگ را به فرمت دیجیتال تبدیل کند. امکان اتصال ورودیهای سنسور به خروجی جریان فعال وجود دارد و هر کانال ورودی، به صورت جفت، به صورت گالوانیکی ایزوله میشود.
DAT8019
دستگاه Modbus DAT8019 میتواند تا هشت سیگنال آنالوگ را به فرمت دیجیتال تبدیل کند. امکان اتصال ماژول سنسور به خروجی RTD یا مقاومت دو-سیمی وجود دارد و هر کانال ورودی به صورت جفت، گالوانیکی ایزوله میشود.
DAT8130
DAT8130 یک دستگاه سرور Modbus TCP است که دارای هشت کانال ورودی دیجیتال و 4 کانال خروجی رله SPDT است. برای ورودیهای دیجیتال، چهار کانتر یا شمارندهی 32 بیتی و اندازهگیری فرکانسی تا 300 هرتز موجود هستند.