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

روش های مختلفی برای برقراری ارتباط استفاده می شود که می توان به موارد زیر اشاره کرد:

-        ارتباط آنالوگ 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: