در اتوماسیون صنعتی جهت برقراری ارتباط بین دستگاه های مختلف که در بسیاری از موارد از کارخانه های سازنده مختلفی وارد سیستم می شوند، باید زبان مشترک و روش مشترکی برای برقراری این ارتباط وجود داشته باشد.
روش های مختلفی برای برقراری ارتباط استفاده می شود که می توان به موارد زیر اشاره کرد:
- ارتباط آنالوگ 4-20mA
- ارتباط پورت سریال
- ارتباط پورت RS485
- ارتباط پورت Ethernet
حال با استفاده از هر کدام از پورتها می توان با استفاده از پروتکلی مشخص و استاندارد ارتباط برقرار کرد.
پروتکل های مختلفی در صنعت استفاده می شوند که از آن دست می توان به موارد زیر اشاره کرد:
- MODBUS
- CAN BUS
- PROFIBUS
- TCP
در این مقاله سعی بر این داریم که به صورت مختصر و کارآمد در خصوص پروتکل مدباس توضیح دهیم.
این پروتکل به دو صورت استفاده می شود:
-ASCII MODBURT
- RTU MODBUS
که روش دوم عمومیت بیشتری دارد. در زیر هر دو روش توضیح داده خواهد شد:
ASCII MODBUS:
در این پروتکل ارتباطی، یک Master و تعدادی Slave داریم که با دو رشته سیم بهم متصل شده اند. رشته تبادل شده بین Master و Slave و بالعکس رشته ای است با پیکره بندی زیر:
END |
LRC CHECK |
DATA |
FUNCTION |
ADDRESS |
START (:) |
2 CHAR (CRLF) |
2 CHAR |
n CHAR |
2 CHAR |
2 CHAR |
1 CHAR (:) |
START: کاراکتر شروع رشته است با کد اسکی 0x3A و همیشه ثابت است.
ADDRESS: همیشه دو کاراکتر است و در رشته های ارسالی از MASTER، آدرس SLAVE مورد نظر و در رشته های ارسالی از SLAVE، آدرس خود همان SLAVE می باشد.
FUNCTION: دو کاراکتر است و فرمان ارسالی بین MASTER و SLAVE را مشخص می کند.
DATA: بنابر نوع دستوری که در حال تبادل است، اطلاعات مورد نیاز همراه دستور از سوی MASTER و یا در پاسخ SLAVE، حاوی اطلاعات پاسخ فرمان می باشد.
LRC: دو کاراکتر است که بررسی درستی ارسال و دریافت را میسر می کند.
END: شامل دو کاراکتر CR LF است که انتهای رشته را مشخص می کند.
روش مقدار دهی به فیلدهای رشته پیام:
فرض کنید آدرس SlAVE مورد نظر 25 باشد. کد اسکی آن می شود 0x19 بنابراین باید کاراکتر 1 و کاراکتر 9 به ترتیب برای فیلد آدرس ارسال شود. بعبارتی کد های اسکی 0x31 و 0x39 به ترتیب برای کاراکترهای ADDRESS ارسال خواهند شد.
برای فیلدهای Function و Data هم به همین ترتیب باید عمل شود.
محاسبه LRC
برای محاسبه مقدار LRC مراحل زیر را باید طی کنید:
1- کلیه مقادیر عددکاراکتر ها (و نه کد اسکی آنها) غیر از کاراکتر استارت و دو کاراکتر انتهایی و دو کاراکتر LRC با هم جمع کنید.
2- نتیجه را از 255 کم کنید.
3- مقدار نتیجه را با یک جمع کنید.
4- کد اسکی کاراکترهای نتیجه را باید در LRC قرار داد.
مثال: رشته زیر را در نظر بگیرید:
END |
LRC[1] |
LRC[0] |
DATA1 |
DATA0 |
FUNCTION |
ADDRESS |
START |
|||||
LF |
CR |
3 |
D |
3 |
E |
F |
1 |
0 |
2 |
9 |
1 |
: |
0x0A |
0x0D |
0x33 |
0x44 |
0x33 |
0x45 |
0x46 |
0x31 |
0x30 |
0x32 |
0x39 |
0x31 |
0x3A |
1- 1+9+2+0+1+F+E+3=0x2D
2- 0xFF-0x2D=0xD2
3- 0xD2+1=0xD3
RTU MODBUS: