فهرست مطالب
Toggleفرض کنید میخواهید در یک پروژه صنعتی، پروسهای را با استفاده از PLC کنترل کنید. برای پیادهسازی برنامه کنترلی از چه زبان برنامهنویسی استفاده میکنید؟
کدامیک از زبانهای برنامهنویسی PLC سادگی و امکانات بهتری را برای کاربر این پروسه فراهم میکند؟ در این مقاله انواع زبانهای برنامهنویسی صنعتی را شرح میدهیم و ویژگیهای هر یک را بررسی خواهیم کرد با ماهر همراه باشید.
برنامهنویسی صنعتی و کاربرد آن
امروزه با گسترش استفاده از تجهیزات کنترلی مانند PLC و HMI، همچنین سیستمهای کنترلی گسترده مانند DCS و SCADA نحوه پیادهسازی نرمافزاری این تجهیزات و سیستمها و آدرسدهی ورودی/خروجیهای کنترلی آنها نیازمند بهکارگیری روشهای برنامهنویسی نیرومند، مطمئن و ساده است.
استفاده از نرمافزارهای اتوماسیون صنعتی امکاناتی مانند قابلیت اطمینان بالا و کاربری ساده را برای کاربران حوزه صنعت فراهم میکند. به همین دلیل، زبان برنامهنویسی گرافیکی برای برنامهنویسی در زمینه کنترل صنعتی بسیار محبوب است.
مهندسان کنترل، همواره پیگیر دستاوردهای جدید در علوم کامپیوتر برای توسعه استفاده از نمادهای گرافیکی برای آدرسدهی و پیکربندی سیستمهای کنترلی هستند.
برنامهنویسی شیءگرا (OOP) چیست؟
برنامهنویسی شیءگرا (Object-Oriented Programming) از سال ۱۹۹۰ وارد علوم کامپیوتر شد؛ اما به دلیل پیچیدگی زیاد و نداشتن محیط گرافیکی، به کندی وارد برنامهنویسی کنترلی شد. خوشبختانه شرکتهای فعال در حوزه کنترل، توانستهاند بر این مشکلات فائق شوند و بسیاری از امتیازات برنامهنویسی شیءگرا را در حوزه کنترل به کار بگیرند. در ادامه، به معرفی برنامهنویسی شیءگرا میپردازیم.
برای تفکیک مباحث برنامهنویسی شیءگرا در علوم کامپیوتر و علوم کنترل، این دو مبحث را به صورت زیر تعریف میکنیم.
۱. علوم کامپیوتر: برنامهنویسی شیءگرا یا OOP
- شامل همه مفاهیم و قابلیتهای برنامهنویسی OOP (مانند کلاس، ارثبری، چندریختی و …) است.
- بر مبنای برنامهنویسی متنی است.
- استفاده از آن به آموزش تخصصی مفصل نیاز دارد.
- برای تکنسینهای پروسههای صنعتی بیش از حد پیچیده است.
- در حوزه کاریِ برنامهنویسان سطح بالاست.
۲. علوم کنترل: برنامهنویسی شیءگرای صنعتی یا OOIP
- بیشتر از تکنیکهای برنامهنویسی خاص (مانند کپسولهکردن، ترکیب و انتزاع) برای ساخت بلوک توابع (Function Block) بهره میبرد.
- بر مبنای نمادهای گرافیکی است.
- برای مهندسان کنترل و تکنسینهای پروسه با آموزش کم، قابل یادگیری است.
- برای پیادهسازی سیستمهای کنترل بسیار مناسب است.
استفاده از برنامهنویسی شیءگرای صنعتی (OOIP) طراحی پروسه و تجهیزات را بسیار آسان میکند. همانطور که پروسه (پلنت) با استفاده از «اشیاء» (موتور، عملگر، سنسور و …) ساخته میشود، برنامه کنترلی پروسه هم بهتر است بر مبنای «شیء» یا «آبجکت» طراحی شود.
مانند یک الکتروموتور که به صورت تکمیلشده در اختیار کاربر است و نیازی به سرهمبندی قطعات آن نیست، برنامه کنترلی الکتروموتور نیز باید به شکل تکمیلشده در اختیار کاربر قرار بگیرد و نیازی به سرهمبندی و بهبود نداشته باشد. به بیان نرمافزاری، این نوع برنامهنویسی «کپسولهسازی» (Encapsulation) یا «درونپوشانی» نامیده میشود.
هر چیزی که برای کنترل یک موتور مورد نیاز است در یک بلوک کنترلی نرمافزاری «کپسوله» یا «پوشانده» میشود. همانطور که یک طراحِ فرایند نیازی ندارد که متخصص الکتروموتور باشد تا بتواند یک فرایند را طراحی کند، یک طراحِ برنامه کنترلی نیز نیازی ندارد که متخصص الکتروموتور باشد تا یک بلوک کنترلی برای آن طراحی کند.
استفاده مجدد از بلوک کنترلی باید به همان سادگی استفاده مجدد از تجهیزات درون پروسه باشد. یعنی به همان سادگی که تجهیزات یک پروسه، انتخاب، خریداری و نصب میشوند، بلوکهای کنترلی نیز باید بتوانند جاگذاری، مرتبط و پیکربندی شوند. با توجه به آنچه گفته شد، بهکارگیری OOIP مزایای زیر را برای کاربر به همراه دارد.
- استفاده مجدد از برنامه بلوک کنترلی را آسان میکند.
- توابع برنامه کنترلی را درون یک شیء (آبجکت) کپسوله میکند.
- نیاز به دانستن دقیق ویژگیهای درون تجهیز (آبجکت) نیست.
- بلوک برنامه کنترلی شیءگرا را بسیار آسانتر میتوان درک کرد، بهبود داد و به کار گرفت.
- OOIP برای کنترل تجهیزات و پروسهها بسیار کارآمد است؛ زیرا این پروسهها و تجهیزات، خودشان از لحاظ ماهیتی شیءگرا (متشکل از اشیاء) هستند.
روند تکامل برنامهنویسی صنعتی
روند برنامهنویسی در صنعت همگام با توسعه و پیشرفت روشهای برنامهنویسی کامپیوتری در حال رشد بوده است. در این بخش، مسیر پیشرفت دانش برنامهنویسی در حوزه کنترل و اتوماسیون صنعتی را شرح میدهیم.
برنامهنویسی مسطح (Flat)
در دوران اولیه اتوماسیون صنعتی، برنامهنویسی صنعتی به صورت مسطح (فلَت) اجرا میشد. ورودیها را میخواندیم، آلارمها را در ورودی ایجاد میکردیم، برنامه کنترلی برای ایجاد خروجیها اجرا میشد و خروجیها روی حافظه نوشته میشد.
بعدها وقتی فانکشنها وارد برنامهنویسی شدند، برخی دستورات به صورت فانکشن نوشته شد. ولی کماکان فرایند برنامهنویسی، فلَت بود. شکل ۱ نمونهای از برنامهنویسی فلت را در قالب کد C و Ladder نشان میدهد.
برنامهنویسی وظیفهگرا (Task-oriented)
پس از توسعه برنامهنویسی مالتیتسک (Multi-task Programming)، برنامهنویسان حوزه صنعت آغاز به استفاده از روش «وظیفهگرا» (Task-oriented) در سیستمهای کنترل کردند.
در این روش، عملیات کنترل به وظیفههای جداگانه تقسیمبندی میشود و سپس هر وظیفه (Task) به وسیله ترتیبی از دستورات متمرکز اجرا میشود. تسک اول ورودیها را میخواند، تسک دوم آنها را اسکیل میکند، تسک سوم ورودیها را فیلتر میکند و کار مطابق شکل ۲ تا پایان ادامه مییابد.
برنامهنویسی وظیفهگرای متمرکز، پیشرفت بزرگی نسبت به برنامهنویسی فلَت به شمار میرفت؛ اما مشکل اینجا بود که با اضافه شدن یک بخش خاص به برنامه، هر تسک باید دوباره اصلاح میشد.
به طور کلی، در برنامهنویسی وظیفهگرا دنبال کردن جریان اطلاعات و بررسی علت و معلول و رابطه میان کدهای برنامه کنترلی دشوار است. این مشکل، طراحی برنامه را سخت و پیچیده میکند.
برنامه نویسی شیءگرای صنعتی (OOIP)
برنامهنویسی شیءگرای صنعتی (OOIP) روش برنامهنویسی وظیفهگرای صنعتی را مطابق آنچه در شکل ۳ میبینید، تغییر داد.
در برنامهنویسی شیءگرای صنعتی به جای این که برنامه کنترلی بین تعداد زیادی تسک پخش شود، این برنامه درون یک آبجکت قرار میگیرد. از آنجا که پلنتهای کنترلی از اشیاء یا آبجکتها (مانند موتور، سنسور و …) تشکیل شدهاند، برنامهنویسی شیءگرا روش مناسبی برای کنترل پلنتهای کنترلی به شمار میرود.
به عبارت دیگر، در برنامهنویسی OOIP هر آبجکت (شیء) در برنامه کنترلی میتواند با یک آبجکت (شیء) در پروسه متناظر شود، به طوری که برنامه کنترلی از لحاظ ظاهری شباهت زیادی به پروسه کنترلشونده داشته باشد. در شکل ۴ میتوانید تشابه یک برنامه کنترلی OOIP را با دیاگرام پروسه کنترلشونده مشاهده کنید.
کپسوله کردن (Encapsulation) در برنامهنویسی صنعتی
کپسوله کردن این امکان را برای آبجکت فراهم میکند که همه اطلاعات و توابع مورد نیاز برای کنترل یک پلنت یا ماشین را در بر بگیرد. با کپسوله کردن آبجکت، نیازی نیست که کاربر همه اطلاعات زیربنایی بلوک کنترلشونده را بداند و تنها کاری که میکند، استفاده از آن آبجکت است.
مثال ملموس برای درک این موضوع، عملکرد موتور یک خودرو است. در موتور خودرو قطعات مختلفی مانند رینگ و پیستون و بسیاری اجزای دیگر با عملکرد پیچیده به کار رفتهاند. راننده نیازی به دانستن نحوه کار موتور خودرو ندارد و تنها باید بداند چگونه با آن کار کند.
بلوک ورودیهای آنالوگ (Analog Inputs) که در پایینترین قسمت سمت چپ شکل ۴ دیده میشود، نمونه خوبی از کپسوله کردن در OOIP است. این بلوک همه پیچیدگیهای مربوط به ورودیهای آنالوگ شامل اسکیل کردن، کلمپ کردن، فیلتر کردن و ایجاد آلارم در یک آبجکت را در بر میگیرد (کپسوله میکند). جزئیات درون بلوک Analog Inputs در شکل ۵ نشان داده شده است.
با وجود پیچیدگی زیاد برنامه کنترلی، طراح برنامه تنها با پیکربندی کلی بلوک (ورودیها و خروجیها) و نحوه کار با آنها سر و کار دارد و نیازی به درگیر شدن با پیچیدگی درون بلوک ندارد.
به جز تکنیک کپسوله کردن، روشهای دیگری مانند ترکیب (Composition)، انتزاع (Abstraction) و کدنویسی تو در تو (Nesting) نیز از راهکارهایی هستند که در برنامهنویسی OOIP برای بهبود و سادهسازی عملکرد آبجکتها به کار گرفته میشوند.
برنامهنویسی صنعتی در سیستمهای اتوماسیون
چنانکه پیشتر گفته شد از برنامهنویسی صنعتی برای طراحی و پیکربندی کنترلرها و سیستمهای مانیتورینگ چه بهصورت محلی (Local) و چه بهصورت گسترده (Distributed) استفاده میشود.
در روشهای مدرن و محبوب پروگرم کردن تجهیزات کنترلی و اتوماسیون، معمولاً از برنامهنویسی شیءگرای صنعتی (OOIP) استفاده میشود. در این بخش، بعضی روشهای برنامهنویسی تجهیزات اتوماسیون صنعتی را بررسی میکنیم.
زبانهای برنامهنویسی PLC
رایجترین نوع برنامهنویسی برای PLC برنامهنویسی نردبانی (Ladder) است. اما به جز این روش، چهار روش دیگر نیز برای این کار وجود دارد. انواع زبانهای برنامهنویسی برای PLC شامل موارد زیر است.
- زبان Ladder
- زبان Function Block Diagram یا FBD
- زبان Sequential Function Chart یا SFC
- زبان Structured Text Logic یا STL
- زبان Instruction List یا IL
این زبانهای برنامهنویسی میتوانند بهصورت گرافیکی یا متنی پیادهسازی شوند. در برنامهنویسی گرافیکی از نمادهای تصویری و در برنامهنویسی متنی از رشتهکدهای کامپیوتری استفاده میشود. در ادامه، شرح کوتاهی در مورد ویژگیهای هر یک از این زبانهای برنامهنویسی داده میشود.
۱. زبان Ladder
زبان برنامهنویسی Ladder یک زبان گرافیکی بر اساس منطق رلهای مدار فرمان است. یک برنامه Ladder از دو نوار عمودی موازی تشکیل شده که مشابه یک نردبان با تعدادی پله به هم وصل شدهاند.
کنتاکتها و شکلهایی روی این پلهها قرار میگیرند که نماد ورودیها (مانند مقدار خوانش سنسور) و خروجیها (مانند فرمان راهاندازی موتور) در پروسه واقعی هستند. زبان Ladder بیشترین محبوبیت را در بین برنامهنویسان PLC دارد. از دلایل محبوبیت این زبان میتوان موارد زیر را برشمرد.
- انعطافپذیری
- قابلیتهای کاربردی متنوع
- سادگی عیبیابی
- یادگیری آسان
تنها مشکل استفاده از زبان Ladder این است که اگر تعداد پلهها از شمار مشخصی بیشتر شود، برنامه بیش از حد وسیع میشود و برای اینکه بتوان با آن کار کرد باید به برنامههای کوچکتر تقسیم شود.
زبان Ladder قابلیت بسیار خوبی برای پیادهسازی مواردی مانند کنترلر PID، معادلات حالت و حل محاسبات جبری پیچیده دارد. شکل ۶ نمای برنامه PLC راهاندازی و توقف الکتروموتور به زبان Ladder را نشان میدهد.
۲. زبان Function Block Diagram یا FBD
زبان FBD یکی دیگر از زبانهای برنامهنویسی محبوب است. این زبان از بلوکهای مختلف گرافیکی تشکیل شده که هر یک دارای ورودی و خروجی هستند. وسایل متصل به PLC، به ورودیهای بلوک، لینک میشوند و متغیرهای کنترلی به خروجیهای بلوک فرستاده میشوند.
علاوه بر آن، بلوکها نیز ممکن است به یکدیگر متصل باشند و خروجی یک بلوک میتواند به بلوکی دیگر وصل شود. عملکرد این بلوکها نحوه کار سیستم کنترل را تعریف میکند. از ویژگیهای زبان FBD میتوان موارد زیرا نام برد.
- کاربری نسبتاً ساده
- مناسب برای طراحی لوپ PID
- امکان کپسوله کردن برنامه
- قابلیت استفاده چندباره از یک برنامه
- قابلیت فیلتر کردن ورودیهای آنالوگ
- قابلیت ذخیره یا مخفی کردن داده (دیتا)
در برنامهنویسی FBD بلوکهای استاندارد مانند شمارنده (کانتر)، تایمر و PID از پیش در اختیار کاربر است. همچنین کاربر میتواند بلوکهای مورد نیاز خود را بسازد. در شکل ۷ یک برنامه PLC با استفاده از زبان FBD را مشاهده میکنید.
۳. زبان Sequential Function Chart یا SFC
برنامهنویسی SFC یک زبان برنامهنویسی گرافیکی است که یک توصیف ترتیبی از سیستم کنترل ارائه میدهد. این زبان از لحاظ ظاهری مشابه فلوچارت الگوریتمهای کامپیوتری است.
SFC از یک سری «پله» (Step)، «اقدام» (Action) و «انتقال» (Transition) تشکیل شده است. پله، عملیاتی است که باید روی داده (دیتا) انجام شود، اقدام، فرایند اجرای آن عملیات است و انتقال، شرایطی است که باید پیش از رفتن به پله بعدی احراز شود. از مزایای زبان SFC میتوان موارد زیر را نام برد.
- قابلیت سادهسازی پروسههای پیچیده به بخشهای کوچکتر
- امکان عیبیابی آسان
- مناسب برای طراحی سیستمهای کنترلی موازی و ترتیبی
زبان برنامهنویسی SFC معایبی هم دارد که در زیر به آنها اشاره میشود.
- ممکن است طول برنامه خیلی زیاد شود.
- در صورت نیاز به استفاده مجدد از یک کد، تغییرات زیادی بهمنظور تحلیل و بهبود برنامه باید انجام شود.
- یادگیری این زبان برای تکنسینها دشوار است.
در شکل ۸ یک نمونه برنامه PLC به زبان SFC را میبینید.
۴. زبان Structured Text Logic یا STL
زبان STL یک زبان برنامهنویسی سطح بالاست. این زبان، مبتنی با متن (کد) است و ماهیت گرافیکی ندارد. از لحاظ روش برنامهنویسی این زبان شبیه C یا ++C است؛ بنابراین کسانی که با این زبانها آشنایی دارند، بهکارگیری زبان STL برای آنها آسانتر خواهد بود. ویژگیهای زبان STL شامل موارد زیر است.
- سرعت اجرا و عملکرد سریع
- عیبیابی دشوار به دلیل مشخص نبودن وضعیت متغیرها در برنامه
- مناسب برای اجرای بارکدخوان، طراحی حلقه کنترلی و محاسبات ریاضی پیچیده
- دشواری یادگیری این زبان برای کاربرانی که با برنامهنویسی متنی آشنا نیستند
شکل ۹ یک نمونه برنامه PLC با زبان STL را نمایش میدهد.
۵. زبان Instruction List یا IL
زبان برنامهنویسی IL نیز یک زبان متنی است. استاندارد IEC این زبان را تأیید نکرده است و بعید است که در برنامهنویسی PLCهای جدید از این زبان استفاده شود. زبان برنامهنویسی IL شامل چند سری دستورات ساده است و از لحاظ ساختار شبیه به زبان Assembly است.
در این زبان هر دستورالعمل در یک خط اجرا میشود و از اپراتورهایی مانند Jump ،Call Function Block و Return بهعلاوه عملگرهای ساده ریاضی مانند Add ،Sub ،Mul و Div استفاده میشود.
تمامی زبانهای برنامهنویسی که برای PLC نام برده شد، قابلیت پیادهسازی برنامههای کنترلی در PLC را دارند. برای انتخاب زبان مناسب باید معیارهای زیر را در نظر گرفت.
- تواناییهای کاربری که با برنامه کار میکند
- اولویتهای مشتری PLC
- مهارتهای پرسنل پروسه کنترلی
برنامهنویسی HMI
برای طراحی HMI بیشتر از نرمافزارهای گرافیکی استفاده میشود که توسط شرکتهای تولیدکننده سیستمها و تجهیزات مانیتورینگ صنعتی توسعه داده میشوند. برای مثل نرمافزار WinCC مربوط به HMIهای شرکت زیمنس و نرمافزار DOP Soft برای طراحی HMIهای دلتا استفاده میشود.
در بعضی مدلهای موجود، بهجز نرمافزارهای گرافیکی برخی زبانهای برنامهنویسی دیگر نیز برای طراحی و پیکربندی HMI استفاده میشود. از جمله این زبانها میتوان به موارد زیر اشاره کرد.
- Visual Basic
- #C
- ++C
- Net
جمعبندی
همگام با توسعه علوم کامپیوتر و روشهای مختلف برنامهنویسی، کنترلرهای صنعتی هم زبانهای برنامهنویسی مدرنتر و کاراتَری را برای طراحی سیستمهای کنترلی به کار گرفتند.
در این مقاله، ضمن بررسی اصول برنامهنویسی صنعتی، تکنیک برنامهنویسی شیءگرای صنعتی (OOIP) را شرح دادیم. در ادامه، انواع زبانهای برنامهنویسی PLC و HMI بررسی شد و به ویژگیهای هر یک از آنها اشاره شد.
برای آشنایی بیشتر با نحوه کار PLC و HMI و انواع زبان برنامه نویسی صنعتی میتوانید دوره جامع آموزش اتوماسیون صنعتی را از وبسایت ماهر تهیه کنید.
برای دانلود آخرین نسخه نرم افزار FvDesigner برنامه نویسی HMI Fatek ، فقط کافیه فرم رو تکمیل کنی
سوالات متداول
زبانهای گرافیکی مانند Ladder و FBD وضعیت متغیرهای پروسه را به سادگی نمایش میدهند و عیبیابی آنها آسانتر از زبانهای متنی است.
برنامههای STL سرعت اجرای زیاد و مصرف حافظه کمتری دارند. همچنین مهندسان آشنا به کدنویسی ممکن است با زبانهای متنی راحتتر کار کنند.
در سیستمهای کنترلی، برای پروگرم کردن میکروکنترلرها مانند آردوینو و PIC و طراحی سیستمها در نرمافزارهایی مانند لبویو و متلب، از برنامهنویسی صنعتی استفاده میشود.
منابع
https://www.automation.com
https://us.store.codesys.com
https://sciencing.com
https://www.ezautomation.net
https://inductiveautomation.com
https://realpars.com