معماری پروتکل DNP3
مروری بر تاریخچهی پروتکل DNP3
در این پست قصد داریم به معماری پروتکل DNP3 بپردازیم. شرکت وسترونیک (Westronic) یکی از شرکتهای پیشرو در زمینهی ساخت پایانه راه دور(RTU) برای تلهمتری و اتوماسیون در صنعت برق سالهای دههی ۱۹۸۰ بود. در سال ۱۹۸۵ وسترونیک ساخت پایانه راه دور برای اولین سیستم فیبر نوری نصب شده در کانادا را بر عهده گرفت. پس از آن جایگاه خود را به عنوان یکی از نقشهای کلیدی در صنعت مخابرات راه دور آمریکای شمالی تثبیت کرد. وسترونیک در سال ۱۹۹۲ به گروه تجاری هریس (Harris) پیوست. بعدها شرکتی در کلگری آلبرتا، به نام گروه تجاری Mediation Technology در سال ۲۰۰۰ بخش وسترونیک سابق را از گروه تجاری هریس خرید و با همان نام وسترونیک آغاز به کار کرد.
در زمانی که هنوز استاندارد IEC 60870-5 برای پروتکلهای اسکادا در حال توسعه بود و تبدیل به یک استاندارد همه جانبه برای ارتباط پایانه راه دور با اسکادا نشده بود، نیاز به ایجاد یک پروتکل سازگاری بین محصولات کنترل صنعتی از تولیدکنندگان مختلف در شبکههای برق به شدت احساس میشد. بر این اساس، شرکت هریس یا همان وسترونیک سابق از سال ۱۹۹۰ شروع به طراحی و تولید یک استاندارد برای این سیستمها کرد. این استاندارد براساس نسخههای اولیه و کامل نشدهی استاندارد IEC 60870-5، و با هدف ایجاد یک پروتکل باز و قابل اجرا طراحی شد که مشخصاً نیازمندیهای موجود در تأسیسات صنعت برق آمریکای شمالی را پاسخ میداد. در ۱۹۹۳ مجموعه مستندات مشخصات پروتکلی «DNP 3.0 Basic 4» منتشر شد. مالکیت پروتکل در اکتبر همان سال به «گروه کاربران DNP» داده شد. پس از آن، پروتکل در تمام جهان مقبولیت یافت و گروههای کاربری در چین، آمریکای لاتین و استرالیا تشکیل شدند. در ژانویه ۱۹۹۵ «کمیته فنی گروه کاربران DNP» برای توسعهی این استاندارد تشکیل شد و مستندات ارزشمندی برای پیادهسازی پروتکل در سیستمهای بزرگ و کوچک منتشر کرد.
پروتکل DNP3 مخفف Distributed Network Protocol Version 3 برای ارتباطات قابل اطمینان سیستمهای اتوماسیون در محیط ناسازگار و پر از نویز تأسیسات برقی طراحی شده است. در حال حاضر سیستمهای بسیاری در دنیا از این پروتکل پشتیبانی میکنند. کمیته «جمعآوری داده، مانیتورینگ و کنترل» در جامعهی مهندسی برق IEEE در سال ۱۹۹۴ پس از بررسی ۱۴۰ پروتکل موجود در دنیا و مقایسهی آنها، فهرستی از نیازهای اساسی در پروتکلهای مخابراتی تدوین نمود. نتیجهی این مقایسه، تأیید دو پروتکل DNP3 و IEC 60870-5-101 به عنوان دو پروتکل قابل قبول در سیستمهای اسکادا بود.
ویژگیهای پروتکل DNP3
پروتکل DNP3 یک پروتکل اسکادایی باز، هوشمند، قابل اطمینان، مدرن و بهینه است. از مهمترین قابلیتهای این پروتکل میتوان موارد زیر را نام برد:
- – امکان درج درخواست و پاسخ برای چندین نوع داده مختلف در یک پیغام
- – امکان تقسیمبندی پیغامها به چندین فریم (بخشی از پیغام) برای اطمینان از تشخیص خطا در ارسال یا دریافت
- – پاسخ به درخواستها فقط با دادههای تغییر یافته
- – امکان اطلاق درجه اهمیت به دادهها و درخواست دورهای دادهها براساس درجه اهمیت آنها
- – امکان ارسال پاسخ بدون درخواست (unsolicited)
- – پشتیبانی از همزمانی سیستمها و فرمت زمان استاندارد
- – امکان ارتباط چند سیستم بالادستی (Multiple Master) و عملکرد peer-to-peer
- – و امکان تعریف دادهها توسط کاربر و انتقال فایل.
معماری پروتکل DNP3
پروتکل DNP3 یک پروتکل چند لایه است. این پروتکل علاوه بر این که پایهی معماری خود را از هفت لایهی OSI ارث برده است، براساس یک استاندارد ۳ لایه که توسط IEC یا «کمیسیون فنی بینالمللی فنی برق» معرفی شده طراحی شده است. این استاندارد به نام EPA یا «معماری کارایی افزوده» (enhanced performance application) شناخته میشود. البته در پروتکل DNP3 یک لایهی «شبه انتقال» چهارمی هم برای تقسیمبندی پیغامها اضافه شده است.
لایه فیزیکی (Physical Layer)
لایهی فیزیکی اساساً به مدیای فیزیکی که دادهها از طریق آن انتقال مییابند میپردازد. به عنوان مثال، وضعیت مدیا (درحال کار و بیکار) و همزمانی سیستمها از طریق آن در این لایه کنترل میشود. عموماً پروتکل DNP3 از طریق یک لایهی فیزیکی سادهی سریال مثل RS-232 یا RS-485 با استفاده از مدیاهایی مثل کابل، فیبر، رادیو یا ماهواره ارتباط برقرار میکند. اما امکان پیادهسازی آن روی Ethernet نیز وجود دارد.
لایه پیوند داده (Data Link Layer)
لایه پیوند داده، پیوند منطقی بین فرستنده و گیرندهی اطلاعات را مدیریت میکند. در پروتکل DNP3 این کار به این صورت انجام میپذیرد که هر پیغام حاوی یک فریم لایهی پیوند داده است. این فریم شامل یک سربرگ (Header) است و برای هر ۱۶ بایت از فریم، یک CRC به اندازه ۱۶ بیت در نظر گرفته میشود. حداکثر اندازهی فریم پیوند داده ۲۵۶ بایت است. در هر فریم ۱۶ بیت برای آدرس مبداً (فرستنده) و ۱۶ بیت برای آدرس مقصد (گیرنده) در نظر گرفته شده که میتواند یک آدرس برای برودکست باشد.
در سربرگ فریم، اطلاعات آدرس آمده است. این اطلاعات شامل ۱۶ بیت کد آغاز فریم، طول فریم، و بایت کنترلی پیوند داده، در ۱۰ بایت سربرگ منتقل میشوند. بایت کنترلی هدف فریم، و وضعیت پیوند منطقی را مشخص میکند. مقادیر بایت کنترلی میتواند یکی از موارد زیر باشد:
- – درخواست وضعیت لینک
- – پاسخ وضعیت لینک
- – نیاز به راهاندازی مجدد لینک
- – راهاندازی شدن مجدد لینک
- – درخواست تأیید لینک داده
- – ACK برای پاسخ به یک پیغام درخواست «تأیید لینک» از طرف گیرنده پس از اطمینان از صحت فریم و بررسی CRC است.
- – NACK عدم تأیید و مخالف وضعیت ACK
لایهی شبه انتقال (Pseudo-Transport Layer)
لایهی شبه انتقال، پیغامهای لایهی کاربرد (Application Layer) را به چندین فریم پیوند داده تقسیم میکند. برای هر فریم، یک تک بایت برای کد عملکرد (Function Code) در نظر گرفته میشود که مشخص میکند آیا این فریم پیوند داده، اولین فریم از پیغام است، آخرین فریم از پیغام است، یا هر دو آنها (برای پیغامهای تک فریمی) است. کد عملکرد شامل شمارهی متوالی فریمها نیز هست، که برای هر فریم اضافه میشود. با بررسی این شماره، لایهی شبه انتقال در سمت گیرنده، میتواند فریمهای جا افتاده را تشخیص دهد.
لایهی کاربرد (Application Layer)
لایهی کاربرد اصل محتوای پیغامها را میسازد و تحلیل میکند. هر پیغامی که در این لایه ساخته میشود، به لایهی شبه-انتقال داده میشود تا قسمتبندی شود و به لایهی پیوند داده میرسد تا از طریق لایهی فیزیکی مخابره شود. در صورتی که حجم دادهی ارسالی برای پیغام لایهی کاربرد زیاد باشد، باید چند پیغام در این لایه ساخته شود و پشت سر هم ارسال گردد. اما هر کدام از این پیغامها، یک پیغام مستقل در لایهی کاربرد است، و ارتباط آنها از طریق یک شناسه که در تمام آنها هست به جز آخری، و نشان میدهد آیا پیغامی در پس این پیغام خواهد آمد یا خیر مشخص میشود. به همین خاطر، به هر پیغام لایهی کاربرد یک «قسمت» (Fragment) گفته میشود، و هر پیغام میتواند یک «پیغام تک قسمتی» یا یک «پیغام چند قسمتی» باشد.
قسمتهای لایهی کاربرد که از ایستگاه بالادستی Master DNP3 ارسال میشوند نوعاً «درخواست»هایی هستند برای اجرای عملیاتی روی اشیاء داده (Data Objects)، و قسمتهای لایهی کاربرد که از ایستگاه پایین دستی (Slave) ارسال میشوند نوعاً «پاسخ» به این درخواستها هستند. البته یک ایستگاه پایین دستی DNP3 میتواند پیغامهایی بدون وجود درخواست (Unsolicited Response) ارسال نماید.
هر کدام از قسمتهای لایهی کاربرد با یک سربرگ لایهی کاربرد شروع میشود و یک یا چند ترکیب از سربرگ شیء و شیء داده در ادامهی آن میآید. سربرگ لایهی کابرد شامل یک «کد کنترل کاربرد» (Application Control Code) و یک «کد عملکرد کاربرد» (Application Function Code) است.
کد کنترل کاربرد شامل موارد زیر است:
- – یک شناسه برای تشخیص این که آیا پیغام قسمتی از یک پیغام چند قسمتی است یا خیر
- – یک شناسه برای تشخیص این که آیا درخواست تأیید لایهی کاربرد برای این قسمت وجود دارد یا خیر
- – یک شناسه برای تشخیص این که آیا ارسال این قسمت بدون درخواست بوده یا خیر
- – شمارهی ردیف این قسمت در لایهی کاربرد، برای تشخیص ترتیب قسمتها
کد عملکرد کاربرد هدف یا درخواست پیغام را مشخص میکند. از آنجا که DNP3 اجازه میدهد که فرستنده دادههای مربوط به چند نوع داده را در یک پیغام ارسال کند، باید فقط یک نوع درخواست برای تمام آن دادهها درج شود. انواع کد عملکرد کاربرد شامل موارد زیر است:
- – تأیید
- – خواندن و نوشتن
- – انتخاب سیگنال و اعمال فرمان (برای کنترلهای انتخاب پیش از اعمال SBO)
- -اعمال مستقیم فرمان
- – ثابت کردن یا پاک کردن شمارندهها
- – شروع دوباره
- – فعال و غیر فعال کردن پیغامهای بدون درخواست
- – تخصیص کلاس