معرفی
DNP3 مخفف عبارت Distributed Network Protocol Version 3 به معنای پروتکل شبکههای گسترده نسخه 3 است. که مجموعهای از پروتکلهای ارتباطی استفاده شده بین اجزاء میباشد و در روند سیستمهای اتوماسیون استفاده میشود. استفاده اصلی آن در خدمات رفاهی مانند شرکتهای آب و برق میباشد. به طور خاص DNP3، برای تسهیل ارتباطات بین انواع مختلفی از جمع آوری داده ها و تجهیزات کنترلی توسعه یافته است و نقش مهمی را در سیستم های SCADA ایفا میکنند، که توسط ایستگاههای اصلی SCADA، واحدهای ترمینال از راه دور و دستگاههای هوشمند الکترونیکی استفاده میشود. رابط پروتکل DNP3 پیامهای حامل DNP3 را فقط بر روی بسترهای RS232/422 یا RS485 استاندارد، پشتیبانی میکند.
DNP3 بر اساس استانداردهای بینالمللی کمیسیون الکتروتکنیک، کمیته فنی 57، کارگروه 03، که یک OSI سه لایه (معماری عملکرد پیشرفته) پروتکل استاندارد است، برای برنامههای کاربردی کنترل از راه دور میباشد.
فرمت داده
یک فریم FT3 به عنوان یک بلوک هدر، با طول ثابت، توسط بلوک های دادهی اختیاری تعریف شده است. هر بلوک یک 16 بیتی CRC اضافه شده دارد. ICE مشخص میکند که حوزههای هدر، شامل 2 بایت شروع، 1 بایت طول، 1 بایت کنترل، یک آدرس مقصد و یک فیلد داده کاربر، با طول ثابت اختیاری میباشد. در این پیاده سازی طول دادهی ثابت کاربر، به عنوان آدرس منبع تعریف شده است.
تشریح هدر DNP3:
[SYNC [0X0564: طول فیلد شروع 2 بایت است، بایت اول 05 هگزا دسیمال (0X05) و بایت دوم نیز 64 هگزا دسیمال (0X64) میباشد.
LENGTH: فیلد LENGTH، یک بایت طول دارد و تعداد بایتهای کاربر را در فریم مشخص میکند. اندازه فیلدهای CONTROL, DESTINATION, SOURSE در این شماره گنجانده شده است. حداقل مقدار برای این فیلد 5 و حداکثر مقدار 255 میباشد.
CONTROL: فیلد CONTROL، شامل جهت فریم، نوع فریم و کنترل اطلاعات جریان میباشد و شکل زیر فیلدهای بایت CONTROL را مشخص میکند. ایستگاه A به عنوان ایستگاه اصلی تعیین شده، تعریف شده است، در اینصورت ایستگاه B ایستگاه اصلی نمیباشد. اولین ایستگاه سازنده پیام، منبع پیام میباشد و ایستگاه دوم، ایستگاه مقصد است.
DIR: جهت انتقال فیزیکی
- 1 = ایستگاه A به ایستگاه B
- 0 = ایستگاه B به ایستگاه A
PRM: پیام اولیه
- 1 = فریم از اولیه (ایستگاه شروع)
- 0 = فریم از ثانویه (ایستگاه پاسخ)
FCB: بیت شمارش فریم
FCV: شمارش فریم بیت معتبر
- 1 = بیت شمارش فریم معتبر است
- 0 = نادیده گرفتن بیت شمارش فریم
DFC: بیت کنترل جریان داده
REC: رزرو شده = 0
FUNCTION: کد FUNCTION، نوع فریم را شناسایی میکند. تعریف ارزشهای قرار داده شده در این فیلد، بین ایستگاه های اولیه و ثانویه متفاوت است.
CODE: جداول زیر کدهای اجرا شده و FCV مربوطه را تعریف میکنند.
PRM = 1
FCV Bit | Service Function | Frame Type | Function Code |
---|---|---|---|
0 | RESET of remote link | SEND – CONFIRM expected | 0 |
0 | Reset of user process | SEND – CONFIRM expected | 1 |
1 | TEST function for link | SEND – CONFIRM expected | 2 |
1 | User Data | SEND – CONFIRM expected | 3 |
0 | Unconfirmed User Data | SEND – NO REPLY expected | 4 |
0 | REQUEST LINK STATUS | REQUEST – RESPOND expected | 9 |
Service Function | Frame Type | Function Code |
---|---|---|
ACK – positive acknowledgement | CONFIRM | 0 |
NACK – Message not accepted, Link busy | CONFIRM | 1 |
(Status of Link (DFC = 0 or DFC = 1 | RESPOND | 11 |
مثال
ایستگاه اولیه:
1 | 0564 0BC4 0400 0300 E42B E5C0 0102 0006 985C |
05 64 | – 2 bytes – DNP3 frame start |
0B | – 1 byte – Length field |
C4 | – 1 byte – Control field – primary station transmit |
0400 | – 2 bytes – Destination address – 0004 decimal |
0300 | – 2 bytes – Source address – 0003 decimal |
E42B | – 2 bytes – DNP3 header CRC |
E5C0 0102 0006 | – 8 bytes – DNP3 data payload |
985C | – 2 bytes – CRC of data payload |
ایستگاه ثانویه:
1 2 3 | 18:33:26.058 tx 17 | S01 0564 0A44 0300 0400 7CAE E0C0 8100 00C1 F0 |
05 64 | – 2 bytes – DNP3 frame start |
0A | – 1 byte – Length field |
44 | – 1 byte – Control field – secondary station transmit |
0300 | – 2 bytes – Destination address – 0003 decimal |
0400 | – 2 bytes – Source address – 0004 decimal |
7CAE | – 2 bytes – DNP3 header CRC |
E0C0 8100 00 | – 7 bytes – DNP3 data payload |
C1F0 | – 2 bytes – CRC of data payload |
سلام
این پوتکل برای stm32 پیاده سازی شده؟ لینکی از نمونه پیاده سازی هست؟
تشکر
برای avr هم میشه پیاده کرد ولی خوب باید اول پروتکل رو مطالعه کنید
در تکمیل مطلب تون باید بگم ک در RECLOSERهای شرکت توزیع برق فراوان استفاده میشه و شما فقط بخشی از این پروتکل را گفتین و لایه های کاربرد و شبه انتقال و لایه فیزیکی رو جا گذاشتین
سپاس از توجه شما دوست عزیز. هدف فقط آشنایی با این پروتکل، توضیحات اولیه و اشاره به کاربردها به صورت کلی بود. اگر توجه کرده باشید اوایل مقاله اشاره کردیم که لایه سختافزاری این پروتکل RS232 یا RS485 میباشد. ولی اگر منظورتان این است که این پروتکل منحصرا یک لایه فیزیکی مخصوص خودش را دارد، باید خدمتتان عرض کنیم که اینگونه نیست.